From 9ca3dc557de8d1556096ea4140316e7f7711a0f3 Mon Sep 17 00:00:00 2001 From: Richard Moore Date: Mon, 11 Apr 2022 17:09:17 -0400 Subject: [PATCH] Initial code drop for v6. --- .gitignore | 27 + LICENSE.md | 21 + README.md | 13 + bootstrap-hoist.js | 79 + output/.keep | 1 + package-lock.json | 1938 ++ package.json | 52 + packages/abi/.npmignore | 3 + packages/abi/LICENSE.md | 21 + packages/abi/package.json | 40 + packages/abi/src.ts/_version.ts | 1 + packages/abi/src.ts/abi-coder.ts | 103 + packages/abi/src.ts/coders/abstract-coder.ts | 322 + packages/abi/src.ts/coders/address.ts | 33 + packages/abi/src.ts/coders/anonymous.ts | 25 + packages/abi/src.ts/coders/array.ts | 208 + packages/abi/src.ts/coders/boolean.ts | 25 + packages/abi/src.ts/coders/bytes.ts | 37 + packages/abi/src.ts/coders/fixed-bytes.ts | 35 + packages/abi/src.ts/coders/null.ts | 25 + packages/abi/src.ts/coders/number.ts | 65 + packages/abi/src.ts/coders/string.ts | 26 + packages/abi/src.ts/coders/tuple.ts | 66 + packages/abi/src.ts/fragments.ts | 1092 ++ packages/abi/src.ts/index.ts | 37 + packages/abi/src.ts/interface.ts | 883 + packages/abi/src.ts/logger.ts | 3 + packages/abi/src.ts/typed.ts | 254 + packages/abi/tsconfig.json | 11 + packages/address/.npmignore | 3 + packages/address/LICENSE.md | 21 + packages/address/package.json | 35 + packages/address/src.ts/_version.ts | 1 + packages/address/src.ts/address.ts | 128 + packages/address/src.ts/checks.ts | 50 + packages/address/src.ts/contract-address.ts | 47 + packages/address/src.ts/index.ts | 6 + packages/address/src.ts/logger.ts | 6 + packages/address/src.ts/tests/test-address.ts | 132 + packages/address/src.ts/tests/types.ts | 27 + packages/address/src.ts/tests/utils.ts | 25 + packages/address/src.ts/types.ts | 8 + packages/address/tsconfig.json | 11 + packages/bytes/.npmignore | 3 + packages/bytes/LICENSE.md | 21 + packages/bytes/package.json | 32 + packages/bytes/src.ts/_version.ts | 1 + packages/bytes/src.ts/array.ts | 80 + packages/bytes/src.ts/base64-browser.ts | 28 + packages/bytes/src.ts/base64.ts | 13 + packages/bytes/src.ts/check.ts | 37 + packages/bytes/src.ts/data.ts | 30 + packages/bytes/src.ts/hex.ts | 24 + packages/bytes/src.ts/index.ts | 9 + packages/bytes/src.ts/logger.ts | 3 + packages/bytes/src.ts/pad.ts | 36 + packages/bytes/src.ts/types.ts | 6 + packages/bytes/tsconfig.json | 11 + packages/contract/.npmignore | 3 + packages/contract/LICENSE.md | 21 + packages/contract/package.json | 39 + packages/contract/src.ts/_version.ts | 1 + packages/contract/src.ts/contract.ts | 724 + packages/contract/src.ts/factory.ts | 98 + packages/contract/src.ts/index.ts | 19 + packages/contract/src.ts/logger.ts | 3 + .../contract/src.ts/tests/test-contract.ts | 94 + packages/contract/src.ts/tests/types.ts | 1 + packages/contract/src.ts/tests/utils.ts | 25 + packages/contract/src.ts/types.ts | 111 + packages/contract/src.ts/wrappers.ts | 99 + packages/contract/tsconfig.json | 11 + packages/crypto/.npmignore | 3 + packages/crypto/LICENSE.md | 21 + packages/crypto/package.json | 34 + packages/crypto/src.ts/_version.ts | 1 + packages/crypto/src.ts/crypto-browser.ts | 70 + packages/crypto/src.ts/hmac.ts | 29 + packages/crypto/src.ts/index.ts | 37 + packages/crypto/src.ts/keccak.ts | 26 + packages/crypto/src.ts/logger.ts | 3 + packages/crypto/src.ts/pbkdf2.ts | 28 + packages/crypto/src.ts/random.ts | 22 + packages/crypto/src.ts/ripemd160.ts | 26 + packages/crypto/src.ts/scrypt.ts | 49 + packages/crypto/src.ts/sha2.ts | 46 + .../crypto/src.ts/tests/test-algo-swap.ts | 116 + packages/crypto/src.ts/tests/test-crypto.ts | 238 + packages/crypto/src.ts/tests/types.ts | 36 + packages/crypto/src.ts/tests/utils.ts | 25 + packages/crypto/tsconfig.json | 11 + packages/ethers/.npmignore | 3 + packages/ethers/LICENSE.md | 21 + packages/ethers/dist/.gitignore | 1 + packages/ethers/dist/ethers-wordlists.min.js | 1 + packages/ethers/dist/ethers.js | 16146 ++++++++++++++++ packages/ethers/dist/ethers.js.map | 1 + packages/ethers/dist/ethers.min.js | 6 + packages/ethers/dist/ethers.min.js.map | 1 + packages/ethers/dist/ethers.umd.min.js | 6 + packages/ethers/dist/ethers.umd.min.js.map | 1 + packages/ethers/package.json | 39 + packages/ethers/src.ts/_version.ts | 1 + packages/ethers/src.ts/ethers.ts | 208 + packages/ethers/src.ts/index.ts | 6 + packages/ethers/tsconfig.json | 11 + packages/hash/LICENSE.md | 21 + packages/hash/package.json | 38 + packages/hash/src.ts/_version.ts | 1 + packages/hash/src.ts/id.ts | 6 + packages/hash/src.ts/index.ts | 6 + packages/hash/src.ts/logger.ts | 3 + packages/hash/src.ts/message.ts | 15 + packages/hash/src.ts/namehash.ts | 68 + packages/hash/src.ts/tests/test-hash.ts | 110 + packages/hash/src.ts/tests/test-typed-data.ts | 20 + packages/hash/src.ts/tests/types.ts | 69 + packages/hash/src.ts/tests/utils.ts | 25 + packages/hash/src.ts/typed-data.ts | 520 + packages/hash/tsconfig.json | 11 + packages/logger/.npmignore | 3 + packages/logger/LICENSE.md | 21 + packages/logger/package.json | 36 + packages/logger/src.ts/_version.ts | 1 + packages/logger/src.ts/errors.ts | 277 + packages/logger/src.ts/index.ts | 41 + packages/logger/src.ts/logger.ts | 400 + packages/logger/src.ts/tests/test-logger.ts | 1 + packages/logger/tsconfig.json | 11 + packages/math/.npmignore | 3 + packages/math/LICENSE.md | 21 + packages/math/package.json | 35 + packages/math/src.ts/_version.ts | 1 + packages/math/src.ts/base58.ts | 47 + packages/math/src.ts/convert.ts | 73 + packages/math/src.ts/fixednumber.ts | 397 + packages/math/src.ts/index.ts | 5 + packages/math/src.ts/logger.ts | 4 + packages/math/src.ts/maths.ts | 42 + packages/math/tsconfig.json | 11 + packages/properties/.npmignore | 3 + packages/properties/LICENSE.md | 21 + packages/properties/package.json | 32 + packages/properties/src.ts/_version.ts | 1 + packages/properties/src.ts/copy.ts | 68 + packages/properties/src.ts/events.ts | 36 + packages/properties/src.ts/freezable.ts | 12 + packages/properties/src.ts/index.ts | 7 + packages/properties/src.ts/promise.ts | 5 + packages/properties/src.ts/properties.ts | 229 + packages/properties/src.ts/storage.ts | 10 + packages/properties/tsconfig.json | 11 + packages/providers/.env | 4 + packages/providers/.npmignore | 3 + packages/providers/LICENSE.md | 21 + packages/providers/package.json | 56 + packages/providers/src.ts/_version.ts | 1 + .../providers/src.ts/abstract-provider.ts | 1240 ++ packages/providers/src.ts/abstract-signer.ts | 198 + packages/providers/src.ts/common-networks.ts | 98 + packages/providers/src.ts/community.ts | 24 + packages/providers/src.ts/default-provider.ts | 89 + packages/providers/src.ts/ens-resolver.ts | 536 + packages/providers/src.ts/formatter.ts | 447 + packages/providers/src.ts/index.ts | 87 + packages/providers/src.ts/logger.ts | 4 + packages/providers/src.ts/network.ts | 230 + packages/providers/src.ts/pagination.ts | 8 + packages/providers/src.ts/plugins-network.ts | 124 + packages/providers/src.ts/provider-alchemy.ts | 82 + packages/providers/src.ts/provider-ankr.ts | 71 + .../providers/src.ts/provider-cloudflare.ts | 17 + .../providers/src.ts/provider-etherscan.ts | 511 + .../providers/src.ts/provider-fallback.ts | 492 + packages/providers/src.ts/provider-infura.ts | 89 + .../src.ts/provider-ipcsocket-browser.ts | 3 + .../providers/src.ts/provider-ipcsocket.ts | 98 + packages/providers/src.ts/provider-jsonrpc.ts | 747 + packages/providers/src.ts/provider-pocket.ts | 97 + packages/providers/src.ts/provider-socket.ts | 247 + .../providers/src.ts/provider-websocket.ts | 45 + packages/providers/src.ts/provider.ts | 1001 + packages/providers/src.ts/shuffle.ts | 9 + packages/providers/src.ts/signer.ts | 22 + .../providers/src.ts/subscriber-connection.ts | 53 + .../providers/src.ts/subscriber-filterid.ts | 133 + .../providers/src.ts/subscriber-hotswap.ts | 41 + .../providers/src.ts/subscriber-polling.ts | 195 + packages/providers/src.ts/subscriber.ts | 56 + .../providers/src.ts/tests/blockchain-data.ts | 306 + .../providers/src.ts/tests/create-provider.ts | 114 + .../providers/src.ts/tests/test-avatar.ts | 30 + .../src.ts/tests/test-blockchain-data.ts | 238 + .../providers/src.ts/tests/test-ccip-read.ts | 177 + .../providers/src.ts/tests/test-events.ts | 59 + .../providers/src.ts/tests/test-wildcard.ts | 20 + packages/providers/src.ts/tests/utils.ts | 114 + packages/providers/src.ts/ws-browser.ts | 17 + packages/providers/tsconfig.json | 11 + packages/rlp/.npmignore | 3 + packages/rlp/LICENSE.md | 21 + packages/rlp/package.json | 34 + packages/rlp/src.ts/_version.ts | 1 + packages/rlp/src.ts/decode.ts | 111 + packages/rlp/src.ts/encode.ts | 61 + packages/rlp/src.ts/index.ts | 4 + packages/rlp/src.ts/logger.ts | 3 + packages/rlp/src.ts/tests/test-rlp.ts | 101 + packages/rlp/src.ts/tests/types.ts | 7 + packages/rlp/src.ts/tests/utils.ts | 25 + packages/rlp/src.ts/types.ts | 1 + packages/rlp/tsconfig.json | 11 + packages/signing-key/.npmignore | 3 + packages/signing-key/LICENSE.md | 21 + packages/signing-key/package.json | 40 + packages/signing-key/src.ts/_version.ts | 1 + packages/signing-key/src.ts/index.ts | 5 + packages/signing-key/src.ts/logger.ts | 3 + packages/signing-key/src.ts/signature.ts | 283 + packages/signing-key/src.ts/signing-key.ts | 124 + packages/signing-key/tsconfig.json | 11 + packages/strings/.npmignore | 3 + packages/strings/package.json | 33 + packages/strings/src.ts/_version.ts | 1 + packages/strings/src.ts/bytes32.ts | 36 + packages/strings/src.ts/idna.ts | 214 + packages/strings/src.ts/index.ts | 14 + packages/strings/src.ts/logger.ts | 3 + packages/strings/src.ts/utf8.ts | 293 + packages/strings/tsconfig.json | 11 + packages/transactions/.npmignore | 3 + packages/transactions/LICENSE.md | 21 + packages/transactions/package.json | 39 + packages/transactions/src.ts/_version.ts | 1 + packages/transactions/src.ts/accesslist.ts | 47 + packages/transactions/src.ts/index.ts | 6 + packages/transactions/src.ts/logger.ts | 3 + .../src.ts/tests/test-transactions.ts | 46 + packages/transactions/src.ts/tests/types.ts | 31 + packages/transactions/src.ts/tests/utils.ts | 25 + packages/transactions/src.ts/transaction.ts | 498 + packages/transactions/tsconfig.json | 11 + packages/wallet/LICENSE.md | 21 + packages/wallet/package.json | 42 + packages/wallet/src.ts/_version.ts | 1 + packages/wallet/src.ts/address.ts | 8 + packages/wallet/src.ts/base-wallet.ts | 87 + packages/wallet/src.ts/hdwallet.ts | 354 + packages/wallet/src.ts/index.ts | 23 + packages/wallet/src.ts/json-crowdsale.ts | 54 + packages/wallet/src.ts/json-keystore.ts | 369 + packages/wallet/src.ts/logger.ts | 3 + packages/wallet/src.ts/mnemonic.ts | 158 + packages/wallet/src.ts/tests/test-hdwallet.ts | 121 + packages/wallet/src.ts/tests/test-json.ts | 58 + packages/wallet/src.ts/tests/test-mnemonic.ts | 149 + packages/wallet/src.ts/tests/test-wallet.ts | 83 + packages/wallet/src.ts/tests/types.ts | 100 + packages/wallet/src.ts/tests/utils.ts | 25 + packages/wallet/src.ts/utils.ts | 148 + packages/wallet/src.ts/wallet.ts | 167 + packages/wallet/tsconfig.json | 11 + packages/web/.npmignore | 3 + packages/web/LICENSE.md | 21 + packages/web/package.json | 35 + packages/web/src.ts/_version.ts | 1 + packages/web/src.ts/fetch-data.ts | 224 + packages/web/src.ts/get-url-browser.ts | 62 + packages/web/src.ts/get-url.ts | 89 + packages/web/src.ts/index.ts | 11 + packages/web/src.ts/logger.ts | 3 + packages/web/src.ts/request.ts | 246 + packages/web/src.ts/response.ts | 143 + packages/web/tsconfig.json | 11 + packages/wordlists/.npmignore | 5 + packages/wordlists/LICENSE.md | 21 + packages/wordlists/input/lang-cz.txt | 2048 ++ packages/wordlists/input/lang-en.txt | 2048 ++ packages/wordlists/input/lang-es.txt | 2048 ++ packages/wordlists/input/lang-fr.txt | 2048 ++ packages/wordlists/input/lang-it.txt | 2048 ++ packages/wordlists/input/lang-ja.txt | 2048 ++ packages/wordlists/input/lang-ko.txt | 2048 ++ packages/wordlists/input/lang-pt.txt | 2048 ++ packages/wordlists/input/lang-zh_cn.txt | 2048 ++ packages/wordlists/input/lang-zh_tw.txt | 2048 ++ packages/wordlists/package.json | 38 + packages/wordlists/src.ts/_version.ts | 1 + packages/wordlists/src.ts/bit-reader.ts | 31 + packages/wordlists/src.ts/decode-owl.ts | 47 + packages/wordlists/src.ts/decode-owla.ts | 27 + .../src.ts/generation/encode-latin.ts | 370 + packages/wordlists/src.ts/index.ts | 7 + packages/wordlists/src.ts/lang-cz.ts | 10 + packages/wordlists/src.ts/lang-en.ts | 10 + packages/wordlists/src.ts/lang-es.ts | 11 + packages/wordlists/src.ts/lang-fr.ts | 11 + packages/wordlists/src.ts/lang-it.ts | 10 + packages/wordlists/src.ts/lang-ja.ts | 159 + packages/wordlists/src.ts/lang-ko.ts | 84 + packages/wordlists/src.ts/lang-pt.ts | 10 + packages/wordlists/src.ts/lang-zh.ts | 84 + packages/wordlists/src.ts/logger.ts | 3 + .../wordlists/src.ts/tests/test-wordlists.ts | 73 + packages/wordlists/src.ts/tests/types.ts | 7 + packages/wordlists/src.ts/tests/utils.ts | 25 + packages/wordlists/src.ts/wordlist-owl.ts | 57 + packages/wordlists/src.ts/wordlist-owla.ts | 18 + packages/wordlists/src.ts/wordlist.ts | 22 + packages/wordlists/src.ts/wordlists-en.ts | 8 + packages/wordlists/src.ts/wordlists-extra.ts | 31 + packages/wordlists/src.ts/wordlists.ts | 16 + packages/wordlists/tsconfig.json | 11 + rollup.config.js | 72 + testcases/accounts.json.gz | Bin 0 -> 26153 bytes testcases/create.json.gz | Bin 0 -> 5810 bytes testcases/create2.json.gz | Bin 0 -> 21247 bytes testcases/hashes.json.gz | Bin 0 -> 68270 bytes testcases/hmac.json.gz | Bin 0 -> 34364 bytes testcases/mnemonics.json.gz | Bin 0 -> 857561 bytes testcases/namehash.json.gz | Bin 0 -> 362 bytes testcases/pbkdf.json.gz | Bin 0 -> 49108 bytes testcases/rlp.json.gz | Bin 0 -> 1763 bytes testcases/transaction.json.gz | Bin 0 -> 346037 bytes testcases/transactions.json.gz | Bin 0 -> 317255 bytes testcases/typed-data.json.gz | Bin 0 -> 40762 bytes testcases/wallets.json.gz | Bin 0 -> 2798 bytes testcases/wordlists.json.gz | Bin 0 -> 62745 bytes tsconfig.common.json | 27 + tsconfig.project.json | 69 + 330 files changed, 62744 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE.md create mode 100644 README.md create mode 100644 bootstrap-hoist.js create mode 100644 output/.keep create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 packages/abi/.npmignore create mode 100644 packages/abi/LICENSE.md create mode 100644 packages/abi/package.json create mode 100644 packages/abi/src.ts/_version.ts create mode 100644 packages/abi/src.ts/abi-coder.ts create mode 100644 packages/abi/src.ts/coders/abstract-coder.ts create mode 100644 packages/abi/src.ts/coders/address.ts create mode 100644 packages/abi/src.ts/coders/anonymous.ts create mode 100644 packages/abi/src.ts/coders/array.ts create mode 100644 packages/abi/src.ts/coders/boolean.ts create mode 100644 packages/abi/src.ts/coders/bytes.ts create mode 100644 packages/abi/src.ts/coders/fixed-bytes.ts create mode 100644 packages/abi/src.ts/coders/null.ts create mode 100644 packages/abi/src.ts/coders/number.ts create mode 100644 packages/abi/src.ts/coders/string.ts create mode 100644 packages/abi/src.ts/coders/tuple.ts create mode 100644 packages/abi/src.ts/fragments.ts create mode 100644 packages/abi/src.ts/index.ts create mode 100644 packages/abi/src.ts/interface.ts create mode 100644 packages/abi/src.ts/logger.ts create mode 100644 packages/abi/src.ts/typed.ts create mode 100644 packages/abi/tsconfig.json create mode 100644 packages/address/.npmignore create mode 100644 packages/address/LICENSE.md create mode 100644 packages/address/package.json create mode 100644 packages/address/src.ts/_version.ts create mode 100644 packages/address/src.ts/address.ts create mode 100644 packages/address/src.ts/checks.ts create mode 100644 packages/address/src.ts/contract-address.ts create mode 100644 packages/address/src.ts/index.ts create mode 100644 packages/address/src.ts/logger.ts create mode 100644 packages/address/src.ts/tests/test-address.ts create mode 100644 packages/address/src.ts/tests/types.ts create mode 100644 packages/address/src.ts/tests/utils.ts create mode 100644 packages/address/src.ts/types.ts create mode 100644 packages/address/tsconfig.json create mode 100644 packages/bytes/.npmignore create mode 100644 packages/bytes/LICENSE.md create mode 100644 packages/bytes/package.json create mode 100644 packages/bytes/src.ts/_version.ts create mode 100644 packages/bytes/src.ts/array.ts create mode 100644 packages/bytes/src.ts/base64-browser.ts create mode 100644 packages/bytes/src.ts/base64.ts create mode 100644 packages/bytes/src.ts/check.ts create mode 100644 packages/bytes/src.ts/data.ts create mode 100644 packages/bytes/src.ts/hex.ts create mode 100644 packages/bytes/src.ts/index.ts create mode 100644 packages/bytes/src.ts/logger.ts create mode 100644 packages/bytes/src.ts/pad.ts create mode 100644 packages/bytes/src.ts/types.ts create mode 100644 packages/bytes/tsconfig.json create mode 100644 packages/contract/.npmignore create mode 100644 packages/contract/LICENSE.md create mode 100644 packages/contract/package.json create mode 100644 packages/contract/src.ts/_version.ts create mode 100644 packages/contract/src.ts/contract.ts create mode 100644 packages/contract/src.ts/factory.ts create mode 100644 packages/contract/src.ts/index.ts create mode 100644 packages/contract/src.ts/logger.ts create mode 100644 packages/contract/src.ts/tests/test-contract.ts create mode 100644 packages/contract/src.ts/tests/types.ts create mode 100644 packages/contract/src.ts/tests/utils.ts create mode 100644 packages/contract/src.ts/types.ts create mode 100644 packages/contract/src.ts/wrappers.ts create mode 100644 packages/contract/tsconfig.json create mode 100644 packages/crypto/.npmignore create mode 100644 packages/crypto/LICENSE.md create mode 100644 packages/crypto/package.json create mode 100644 packages/crypto/src.ts/_version.ts create mode 100644 packages/crypto/src.ts/crypto-browser.ts create mode 100644 packages/crypto/src.ts/hmac.ts create mode 100644 packages/crypto/src.ts/index.ts create mode 100644 packages/crypto/src.ts/keccak.ts create mode 100644 packages/crypto/src.ts/logger.ts create mode 100644 packages/crypto/src.ts/pbkdf2.ts create mode 100644 packages/crypto/src.ts/random.ts create mode 100644 packages/crypto/src.ts/ripemd160.ts create mode 100644 packages/crypto/src.ts/scrypt.ts create mode 100644 packages/crypto/src.ts/sha2.ts create mode 100644 packages/crypto/src.ts/tests/test-algo-swap.ts create mode 100644 packages/crypto/src.ts/tests/test-crypto.ts create mode 100644 packages/crypto/src.ts/tests/types.ts create mode 100644 packages/crypto/src.ts/tests/utils.ts create mode 100644 packages/crypto/tsconfig.json create mode 100644 packages/ethers/.npmignore create mode 100644 packages/ethers/LICENSE.md create mode 100644 packages/ethers/dist/.gitignore create mode 100644 packages/ethers/dist/ethers-wordlists.min.js create mode 100644 packages/ethers/dist/ethers.js create mode 100644 packages/ethers/dist/ethers.js.map create mode 100644 packages/ethers/dist/ethers.min.js create mode 100644 packages/ethers/dist/ethers.min.js.map create mode 100644 packages/ethers/dist/ethers.umd.min.js create mode 100644 packages/ethers/dist/ethers.umd.min.js.map create mode 100644 packages/ethers/package.json create mode 100644 packages/ethers/src.ts/_version.ts create mode 100644 packages/ethers/src.ts/ethers.ts create mode 100644 packages/ethers/src.ts/index.ts create mode 100644 packages/ethers/tsconfig.json create mode 100644 packages/hash/LICENSE.md create mode 100644 packages/hash/package.json create mode 100644 packages/hash/src.ts/_version.ts create mode 100644 packages/hash/src.ts/id.ts create mode 100644 packages/hash/src.ts/index.ts create mode 100644 packages/hash/src.ts/logger.ts create mode 100644 packages/hash/src.ts/message.ts create mode 100644 packages/hash/src.ts/namehash.ts create mode 100644 packages/hash/src.ts/tests/test-hash.ts create mode 100644 packages/hash/src.ts/tests/test-typed-data.ts create mode 100644 packages/hash/src.ts/tests/types.ts create mode 100644 packages/hash/src.ts/tests/utils.ts create mode 100644 packages/hash/src.ts/typed-data.ts create mode 100644 packages/hash/tsconfig.json create mode 100644 packages/logger/.npmignore create mode 100644 packages/logger/LICENSE.md create mode 100644 packages/logger/package.json create mode 100644 packages/logger/src.ts/_version.ts create mode 100644 packages/logger/src.ts/errors.ts create mode 100644 packages/logger/src.ts/index.ts create mode 100644 packages/logger/src.ts/logger.ts create mode 100644 packages/logger/src.ts/tests/test-logger.ts create mode 100644 packages/logger/tsconfig.json create mode 100644 packages/math/.npmignore create mode 100644 packages/math/LICENSE.md create mode 100644 packages/math/package.json create mode 100644 packages/math/src.ts/_version.ts create mode 100644 packages/math/src.ts/base58.ts create mode 100644 packages/math/src.ts/convert.ts create mode 100644 packages/math/src.ts/fixednumber.ts create mode 100644 packages/math/src.ts/index.ts create mode 100644 packages/math/src.ts/logger.ts create mode 100644 packages/math/src.ts/maths.ts create mode 100644 packages/math/tsconfig.json create mode 100644 packages/properties/.npmignore create mode 100644 packages/properties/LICENSE.md create mode 100644 packages/properties/package.json create mode 100644 packages/properties/src.ts/_version.ts create mode 100644 packages/properties/src.ts/copy.ts create mode 100644 packages/properties/src.ts/events.ts create mode 100644 packages/properties/src.ts/freezable.ts create mode 100644 packages/properties/src.ts/index.ts create mode 100644 packages/properties/src.ts/promise.ts create mode 100644 packages/properties/src.ts/properties.ts create mode 100644 packages/properties/src.ts/storage.ts create mode 100644 packages/properties/tsconfig.json create mode 100644 packages/providers/.env create mode 100644 packages/providers/.npmignore create mode 100644 packages/providers/LICENSE.md create mode 100644 packages/providers/package.json create mode 100644 packages/providers/src.ts/_version.ts create mode 100644 packages/providers/src.ts/abstract-provider.ts create mode 100644 packages/providers/src.ts/abstract-signer.ts create mode 100644 packages/providers/src.ts/common-networks.ts create mode 100644 packages/providers/src.ts/community.ts create mode 100644 packages/providers/src.ts/default-provider.ts create mode 100644 packages/providers/src.ts/ens-resolver.ts create mode 100644 packages/providers/src.ts/formatter.ts create mode 100644 packages/providers/src.ts/index.ts create mode 100644 packages/providers/src.ts/logger.ts create mode 100644 packages/providers/src.ts/network.ts create mode 100644 packages/providers/src.ts/pagination.ts create mode 100644 packages/providers/src.ts/plugins-network.ts create mode 100644 packages/providers/src.ts/provider-alchemy.ts create mode 100644 packages/providers/src.ts/provider-ankr.ts create mode 100644 packages/providers/src.ts/provider-cloudflare.ts create mode 100644 packages/providers/src.ts/provider-etherscan.ts create mode 100644 packages/providers/src.ts/provider-fallback.ts create mode 100644 packages/providers/src.ts/provider-infura.ts create mode 100644 packages/providers/src.ts/provider-ipcsocket-browser.ts create mode 100644 packages/providers/src.ts/provider-ipcsocket.ts create mode 100644 packages/providers/src.ts/provider-jsonrpc.ts create mode 100644 packages/providers/src.ts/provider-pocket.ts create mode 100644 packages/providers/src.ts/provider-socket.ts create mode 100644 packages/providers/src.ts/provider-websocket.ts create mode 100644 packages/providers/src.ts/provider.ts create mode 100644 packages/providers/src.ts/shuffle.ts create mode 100644 packages/providers/src.ts/signer.ts create mode 100644 packages/providers/src.ts/subscriber-connection.ts create mode 100644 packages/providers/src.ts/subscriber-filterid.ts create mode 100644 packages/providers/src.ts/subscriber-hotswap.ts create mode 100644 packages/providers/src.ts/subscriber-polling.ts create mode 100644 packages/providers/src.ts/subscriber.ts create mode 100644 packages/providers/src.ts/tests/blockchain-data.ts create mode 100644 packages/providers/src.ts/tests/create-provider.ts create mode 100644 packages/providers/src.ts/tests/test-avatar.ts create mode 100644 packages/providers/src.ts/tests/test-blockchain-data.ts create mode 100644 packages/providers/src.ts/tests/test-ccip-read.ts create mode 100644 packages/providers/src.ts/tests/test-events.ts create mode 100644 packages/providers/src.ts/tests/test-wildcard.ts create mode 100644 packages/providers/src.ts/tests/utils.ts create mode 100644 packages/providers/src.ts/ws-browser.ts create mode 100644 packages/providers/tsconfig.json create mode 100644 packages/rlp/.npmignore create mode 100644 packages/rlp/LICENSE.md create mode 100644 packages/rlp/package.json create mode 100644 packages/rlp/src.ts/_version.ts create mode 100644 packages/rlp/src.ts/decode.ts create mode 100644 packages/rlp/src.ts/encode.ts create mode 100644 packages/rlp/src.ts/index.ts create mode 100644 packages/rlp/src.ts/logger.ts create mode 100644 packages/rlp/src.ts/tests/test-rlp.ts create mode 100644 packages/rlp/src.ts/tests/types.ts create mode 100644 packages/rlp/src.ts/tests/utils.ts create mode 100644 packages/rlp/src.ts/types.ts create mode 100644 packages/rlp/tsconfig.json create mode 100644 packages/signing-key/.npmignore create mode 100644 packages/signing-key/LICENSE.md create mode 100644 packages/signing-key/package.json create mode 100644 packages/signing-key/src.ts/_version.ts create mode 100644 packages/signing-key/src.ts/index.ts create mode 100644 packages/signing-key/src.ts/logger.ts create mode 100644 packages/signing-key/src.ts/signature.ts create mode 100644 packages/signing-key/src.ts/signing-key.ts create mode 100644 packages/signing-key/tsconfig.json create mode 100644 packages/strings/.npmignore create mode 100644 packages/strings/package.json create mode 100644 packages/strings/src.ts/_version.ts create mode 100644 packages/strings/src.ts/bytes32.ts create mode 100644 packages/strings/src.ts/idna.ts create mode 100644 packages/strings/src.ts/index.ts create mode 100644 packages/strings/src.ts/logger.ts create mode 100644 packages/strings/src.ts/utf8.ts create mode 100644 packages/strings/tsconfig.json create mode 100644 packages/transactions/.npmignore create mode 100644 packages/transactions/LICENSE.md create mode 100644 packages/transactions/package.json create mode 100644 packages/transactions/src.ts/_version.ts create mode 100644 packages/transactions/src.ts/accesslist.ts create mode 100644 packages/transactions/src.ts/index.ts create mode 100644 packages/transactions/src.ts/logger.ts create mode 100644 packages/transactions/src.ts/tests/test-transactions.ts create mode 100644 packages/transactions/src.ts/tests/types.ts create mode 100644 packages/transactions/src.ts/tests/utils.ts create mode 100644 packages/transactions/src.ts/transaction.ts create mode 100644 packages/transactions/tsconfig.json create mode 100644 packages/wallet/LICENSE.md create mode 100644 packages/wallet/package.json create mode 100644 packages/wallet/src.ts/_version.ts create mode 100644 packages/wallet/src.ts/address.ts create mode 100644 packages/wallet/src.ts/base-wallet.ts create mode 100644 packages/wallet/src.ts/hdwallet.ts create mode 100644 packages/wallet/src.ts/index.ts create mode 100644 packages/wallet/src.ts/json-crowdsale.ts create mode 100644 packages/wallet/src.ts/json-keystore.ts create mode 100644 packages/wallet/src.ts/logger.ts create mode 100644 packages/wallet/src.ts/mnemonic.ts create mode 100644 packages/wallet/src.ts/tests/test-hdwallet.ts create mode 100644 packages/wallet/src.ts/tests/test-json.ts create mode 100644 packages/wallet/src.ts/tests/test-mnemonic.ts create mode 100644 packages/wallet/src.ts/tests/test-wallet.ts create mode 100644 packages/wallet/src.ts/tests/types.ts create mode 100644 packages/wallet/src.ts/tests/utils.ts create mode 100644 packages/wallet/src.ts/utils.ts create mode 100644 packages/wallet/src.ts/wallet.ts create mode 100644 packages/wallet/tsconfig.json create mode 100644 packages/web/.npmignore create mode 100644 packages/web/LICENSE.md create mode 100644 packages/web/package.json create mode 100644 packages/web/src.ts/_version.ts create mode 100644 packages/web/src.ts/fetch-data.ts create mode 100644 packages/web/src.ts/get-url-browser.ts create mode 100644 packages/web/src.ts/get-url.ts create mode 100644 packages/web/src.ts/index.ts create mode 100644 packages/web/src.ts/logger.ts create mode 100644 packages/web/src.ts/request.ts create mode 100644 packages/web/src.ts/response.ts create mode 100644 packages/web/tsconfig.json create mode 100644 packages/wordlists/.npmignore create mode 100644 packages/wordlists/LICENSE.md create mode 100644 packages/wordlists/input/lang-cz.txt create mode 100644 packages/wordlists/input/lang-en.txt create mode 100644 packages/wordlists/input/lang-es.txt create mode 100644 packages/wordlists/input/lang-fr.txt create mode 100644 packages/wordlists/input/lang-it.txt create mode 100644 packages/wordlists/input/lang-ja.txt create mode 100644 packages/wordlists/input/lang-ko.txt create mode 100644 packages/wordlists/input/lang-pt.txt create mode 100644 packages/wordlists/input/lang-zh_cn.txt create mode 100644 packages/wordlists/input/lang-zh_tw.txt create mode 100644 packages/wordlists/package.json create mode 100644 packages/wordlists/src.ts/_version.ts create mode 100644 packages/wordlists/src.ts/bit-reader.ts create mode 100644 packages/wordlists/src.ts/decode-owl.ts create mode 100644 packages/wordlists/src.ts/decode-owla.ts create mode 100644 packages/wordlists/src.ts/generation/encode-latin.ts create mode 100644 packages/wordlists/src.ts/index.ts create mode 100644 packages/wordlists/src.ts/lang-cz.ts create mode 100644 packages/wordlists/src.ts/lang-en.ts create mode 100644 packages/wordlists/src.ts/lang-es.ts create mode 100644 packages/wordlists/src.ts/lang-fr.ts create mode 100644 packages/wordlists/src.ts/lang-it.ts create mode 100644 packages/wordlists/src.ts/lang-ja.ts create mode 100644 packages/wordlists/src.ts/lang-ko.ts create mode 100644 packages/wordlists/src.ts/lang-pt.ts create mode 100644 packages/wordlists/src.ts/lang-zh.ts create mode 100644 packages/wordlists/src.ts/logger.ts create mode 100644 packages/wordlists/src.ts/tests/test-wordlists.ts create mode 100644 packages/wordlists/src.ts/tests/types.ts create mode 100644 packages/wordlists/src.ts/tests/utils.ts create mode 100644 packages/wordlists/src.ts/wordlist-owl.ts create mode 100644 packages/wordlists/src.ts/wordlist-owla.ts create mode 100644 packages/wordlists/src.ts/wordlist.ts create mode 100644 packages/wordlists/src.ts/wordlists-en.ts create mode 100644 packages/wordlists/src.ts/wordlists-extra.ts create mode 100644 packages/wordlists/src.ts/wordlists.ts create mode 100644 packages/wordlists/tsconfig.json create mode 100644 rollup.config.js create mode 100644 testcases/accounts.json.gz create mode 100644 testcases/create.json.gz create mode 100644 testcases/create2.json.gz create mode 100644 testcases/hashes.json.gz create mode 100644 testcases/hmac.json.gz create mode 100644 testcases/mnemonics.json.gz create mode 100644 testcases/namehash.json.gz create mode 100644 testcases/pbkdf.json.gz create mode 100644 testcases/rlp.json.gz create mode 100644 testcases/transaction.json.gz create mode 100644 testcases/transactions.json.gz create mode 100644 testcases/typed-data.json.gz create mode 100644 testcases/wallets.json.gz create mode 100644 testcases/wordlists.json.gz create mode 100644 tsconfig.common.json create mode 100644 tsconfig.project.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..9fd4c9c53 --- /dev/null +++ b/.gitignore @@ -0,0 +1,27 @@ +# Normal things to ignore; temporary files, libs, monorepo goop +node_modules/ +packages/*/node_modules +.package_node_modules/ +.DS_Store +.tmp/ +**/*.swp +*~ + +# A random stash folder I use for code I'm not quite willing +# to part ways with yet +obsolete/ + +# Intermediate files tsc generates for references (sometimes) +**/src.ts/*.js + +# TypeScript build caches +packages/*/tsconfig.tsbuildinfo + +# Coverage and Testing output +output/** + +# Issue tests +misc/testing/** + +# Temp +#packages/*/lib/ diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 000000000..8591b6925 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +Ethers - v6 beta +================ + +This is VERY beta, but I want to start getting it into the hands +of people to try out. + +This will be updated soon with some examples. + + +License +------- + +MIT Licensed (including all dependencies) diff --git a/bootstrap-hoist.js b/bootstrap-hoist.js new file mode 100644 index 000000000..a13dfee2c --- /dev/null +++ b/bootstrap-hoist.js @@ -0,0 +1,79 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const fs_1 = __importDefault(require("fs")); +const path_1 = require("path"); +const root = path_1.resolve("."); +function loadJson(path) { + return JSON.parse(fs_1.default.readFileSync(path).toString()); +} +function atomicWrite(path, value) { + const tmp = path_1.resolve(root, ".atomic-tmp"); + fs_1.default.writeFileSync(tmp, value); + fs_1.default.renameSync(tmp, path); +} +function saveJson(filename, data, sort) { + let replacer = undefined; + if (sort) { + replacer = (key, value) => { + if (Array.isArray(value)) { + // pass + } + else if (value && typeof (value) === "object") { + const keys = Object.keys(value); + keys.sort(); + return keys.reduce((accum, key) => { + accum[key] = value[key]; + return accum; + }, {}); + } + return value; + }; + } + atomicWrite(filename, JSON.stringify(data, replacer, 2) + "\n"); +} +(function () { + const filename = path_1.resolve(root, "package.json"); + const pkg = loadJson(filename); + const packageFolder = (pkg.reticulate || {}).pacakges || "packages"; + { + // @TODO: Check within root + } + const pkgs = fs_1.default.readdirSync(packageFolder).reduce((accum, folder) => { + const pkg = loadJson(path_1.resolve(root, packageFolder, folder, "package.json")); + if (accum[pkg.name]) { + throw new Error(`duplicate package named ${pkg.name}`); + } + accum[pkg.name] = pkg.dependencies || {}; + return accum; + }, {}); + const result = {}; + Object.keys(pkgs).forEach((name) => { + const versions = pkgs[name]; + for (const dep in versions) { + // This package is managed by this monorepo + if (dep in pkgs) { + continue; + } + // The required dependency version + const ver = versions[dep]; + // This already exists in the result... + const existing = result[dep]; + if (existing) { + // ...but doesn't match + if (existing !== ver) { + throw new Error(`package dependency version mismatch: ${dep}`); + } + } + else { + result[dep] = ver; + } + } + }); + console.log(`Hoisting ${Object.keys(result).length} dependencies from ${packageFolder}/*/package.json...\n`); + pkg.dependencies = result; + saveJson(filename, pkg, true); +})(); +//# sourceMappingURL=bootstrap-hoist.js.map \ No newline at end of file diff --git a/output/.keep b/output/.keep new file mode 100644 index 000000000..129f11b2c --- /dev/null +++ b/output/.keep @@ -0,0 +1 @@ +# Keep this folder diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..60fb48746 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1938 @@ +{ + "name": "ethers-monorepo", + "version": "0.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true + }, + "@babel/highlight": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz", + "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@noble/hashes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.0.0.tgz", + "integrity": "sha512-DZVbtY62kc3kkBtMHqwCOfXrT/hnoORy5BJ4+HU1IR59X0KWAOqsfzQPcUl/lQLlG7qXbe/fZ3r/emxtAl+sqg==" + }, + "@noble/secp256k1": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.5.5.tgz", + "integrity": "sha512-sZ1W6gQzYnu45wPrWx8D3kwI2/U29VYTx9OjbDAd7jwRItJ0cSTMPRL/C8AWZFn9kWFLQGqEXVEE86w4Z8LpIQ==" + }, + "@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "dev": true, + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + }, + "dependencies": { + "lru-cache": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz", + "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==", + "dev": true + }, + "semver": { + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", + "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", + "dev": true, + "requires": { + "lru-cache": "^7.4.0" + } + } + } + }, + "@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "@rollup/plugin-node-resolve": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.2.0.tgz", + "integrity": "sha512-GuUIUyIKq7EjQxB51XSn6zPHYo+cILQQBYOGYvFFNxws2OVOqCBShAoof2hFrV8bAZzZGDBDQ8m2iUt8SLOUkg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + } + }, + "@rollup/plugin-replace": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-4.0.0.tgz", + "integrity": "sha512-+rumQFiaNac9y64OHtkHGmdjm7us9bo1PlbgQfdihQtuNxzjpaB064HbRnewUOggLQxVCCyINfStkgmBeQpv1g==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "@types/mocha": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.0.tgz", + "integrity": "sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg==", + "dev": true + }, + "@types/node": { + "version": "14.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", + "dev": true + }, + "@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/ws": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true + }, + "aes-js": { + "version": "4.0.0-beta.2", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.2.tgz", + "integrity": "sha512-j6ogLm5hqIjFR4E0YMqsFn39PKKdtqMkVZGWKS4TsAXQ2dk4nWhoMjt9BI4W+GwA6n8dFbfgQYIzS1k9kUfwoQ==" + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true + }, + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "dev": true + }, + "c8": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/c8/-/c8-7.11.0.tgz", + "integrity": "sha512-XqPyj1uvlHMr+Y1IeRndC2X5P7iJzJlEJwBpCdBbq2JocXOgJfr+JVfJkyNMGROke5LfKrhSFXGFXnwnRJAUJw==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.2", + "find-up": "^5.0.0", + "foreground-child": "^2.0.0", + "istanbul-lib-coverage": "^3.0.1", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.0.2", + "rimraf": "^3.0.0", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^8.0.0", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.7" + } + }, + "cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, + "requires": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + } + }, + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, + "foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", + "dev": true + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + } + }, + "istanbul-reports": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", + "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "libnpmpublish": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-4.0.2.tgz", + "integrity": "sha512-+AD7A2zbVeGRCFI2aO//oUmapCwy7GHqPXFJh3qpToSRNU+tXKJ2YFUgjt04LPPAf2dlEH95s6EhIHM1J7bmOw==", + "dev": true, + "requires": { + "normalize-package-data": "^3.0.2", + "npm-package-arg": "^8.1.2", + "npm-registry-fetch": "^11.0.0", + "semver": "^7.1.3", + "ssri": "^8.0.1" + }, + "dependencies": { + "lru-cache": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz", + "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==", + "dev": true + }, + "semver": { + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", + "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", + "dev": true, + "requires": { + "lru-cache": "^7.4.0" + } + } + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "dev": true, + "requires": { + "encoding": "^0.1.12", + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "requires": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "mocha": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", + "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", + "dev": true, + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.3", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "4.2.1", + "ms": "2.1.3", + "nanoid": "3.3.1", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.2.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "minimatch": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "nanoid": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "lru-cache": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz", + "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==", + "dev": true + }, + "semver": { + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", + "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", + "dev": true, + "requires": { + "lru-cache": "^7.4.0" + } + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "npm-package-arg": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", + "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz", + "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==", + "dev": true + }, + "semver": { + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", + "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", + "dev": true, + "requires": { + "lru-cache": "^7.4.0" + } + } + } + }, + "npm-profile": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/npm-profile/-/npm-profile-5.0.4.tgz", + "integrity": "sha512-OKtU7yoAEBOnc8zJ+/uo5E4ugPp09sopo+6y1njPp+W99P8DvQon3BJYmpvyK2Bf1+3YV5LN1bvgXRoZ1LUJBA==", + "dev": true, + "requires": { + "npm-registry-fetch": "^11.0.0" + } + }, + "npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, + "requires": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "requires": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "reticulate": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/reticulate/-/reticulate-0.0.9.tgz", + "integrity": "sha512-IS6D6CXv9rL2eRmVGwHp6LzrdTHi1cS6B5YZR+YGR7jUo1BbA4LBcMaMlIx1GdroNjtdwgurkrHrFpM1SZ4S7w==", + "dev": true, + "requires": { + "aes-js": "^3.1.2", + "libnpmpublish": "^4.0.2", + "npm-profile": "^5.0.4", + "scrypt-js": "^3.0.1", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "dependencies": { + "aes-js": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz", + "integrity": "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==", + "dev": true + }, + "lru-cache": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz", + "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==", + "dev": true + }, + "semver": { + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", + "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", + "dev": true, + "requires": { + "lru-cache": "^7.4.0" + } + } + } + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "2.70.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.70.1.tgz", + "integrity": "sha512-CRYsI5EuzLbXdxC6RnYhOuRdtz4bhejPMSWjsFLfVM/7w/85n2szZv6yExqUXsBdz5KT8eoubeyDUDjhLHEslA==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "rollup-plugin-replace": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-replace/-/rollup-plugin-replace-2.2.0.tgz", + "integrity": "sha512-/5bxtUPkDHyBJAKketb4NfaeZjL5yLZdeUihSfbF2PQMz+rSTEb8ARKoOl3UBT4m7/X+QOXJo3sLTcq+yMMYTA==", + "dev": true, + "requires": { + "magic-string": "^0.25.2", + "rollup-pluginutils": "^2.6.0" + } + }, + "rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "dependencies": { + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + } + } + }, + "rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + } + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "optional": true + }, + "scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true + }, + "socks": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", + "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", + "dev": true, + "requires": { + "ip": "^1.1.5", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", + "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.1", + "socks": "^2.6.1" + } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true + }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + } + }, + "terser": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.12.1.tgz", + "integrity": "sha512-NXbs+7nisos5E+yXwAD+y7zrcTkMqb0dEJxIGtSKPdCBzopf7ni4odPul2aechpV7EXNvOudYOX2bb5tln1jbQ==", + "dev": true, + "requires": { + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "typescript": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", + "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", + "dev": true + }, + "uglify-js": { + "version": "3.15.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.4.tgz", + "integrity": "sha512-vMOPGDuvXecPs34V74qDKk4iJ/SN4vL3Ow/23ixafENYvtrNvtbcgUeugTcUGRGsOF/5fU8/NYSL5Hyb3l1OJA==", + "dev": true + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + } + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "dev": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "workerpool": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==" + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 000000000..51d2a43b6 --- /dev/null +++ b/package.json @@ -0,0 +1,52 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@noble/hashes": "1.0.0", + "@noble/secp256k1": "1.5.5", + "aes-js": "4.0.0-beta.2", + "ws": "8.5.0" + }, + "description": "Root monorepo pacakge for ethers core", + "devDependencies": { + "@rollup/plugin-node-resolve": "^13.1.3", + "@rollup/plugin-replace": "^4.0.0", + "@types/mocha": "^9.1.0", + "@types/node": "^14.14.25", + "@types/ws": "^8.5.3", + "c8": "^7.11.0", + "mocha": "^9.2.1", + "reticulate": "^0.0.9", + "rollup": "^2.70.1", + "rollup-plugin-replace": "^2.2.0", + "rollup-plugin-terser": "^7.0.2", + "typescript": "4.6.3", + "uglify-js": "^3.15.3" + }, + "license": "MIT", + "name": "ethers-monorepo", + "private": true, + "reticulate": { + "packages": "packages", + "root": "ethers", + "spelling": { + "dicts": [ + "/usr/share/dict/words", + "./misc/dict" + ] + } + }, + "scripts": { + "__build-dist": "npx rollup -c && uglifyjs ./packages/ethers/dist/ethers.js -o ./packages/ethers/dist/ethers.min.js && uglifyjs ./packages/ethers/dist/ethers-wordlists.js -o ./packages/ethers/dist/ethers-wordlists.min.js && npm run _build-dist-stats", + "_build-dist-stats": "gzip -k9f -S '.gz' packages/ethers/dist/ethers-wordlists.min.js && gzip -k9f -S '.gz' packages/ethers/dist/ethers.min.js && du -hs packages/ethers/dist/*", + "auto-build": "npm run build -- -w", + "build": "tsc --build tsconfig.project.json", + "build-dist": "npx rollup -c && npm run _build-dist-stats", + "clean": "rm -rf packages/*/tsconfig.tsbuildinfo packages/*/lib package-lock.json .package_node_modules/ node_modules/", + "postinstall": "reticulate ratsnest", + "preinstall": "node ./bootstrap-hoist", + "serve-coverage": "python3 -m http.server -d output/lcov-report 8080", + "test": "mocha packages/*/lib/tests/test-*.js", + "test-coverage": "c8 -o output -r lcov -r text mocha packages/*/lib/tests/test-*.js | tee output/summary.txt" + }, + "version": "0.0.0" +} diff --git a/packages/abi/.npmignore b/packages/abi/.npmignore new file mode 100644 index 000000000..03a92044c --- /dev/null +++ b/packages/abi/.npmignore @@ -0,0 +1,3 @@ +/src.ts/tests/** +/lib/tests/** +tsconfig.tsbuildinfo diff --git a/packages/abi/LICENSE.md b/packages/abi/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/abi/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/abi/package.json b/packages/abi/package.json new file mode 100644 index 000000000..9ee4b233e --- /dev/null +++ b/packages/abi/package.json @@ -0,0 +1,40 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/address": "^6.0.0-beta.1", + "@ethersproject/bytes": "^6.0.0-beta.1", + "@ethersproject/crypto": "^6.0.0-beta.1", + "@ethersproject/hash": "^6.0.0-beta.1", + "@ethersproject/logger": "^6.0.0-beta.1", + "@ethersproject/math": "^6.0.0-beta.1", + "@ethersproject/properties": "^6.0.0-beta.1", + "@ethersproject/strings": "^6.0.0-beta.1", + "@ethersproject/rlp": "^6.0.0-beta.1" + }, + "description": "ABI coding for the EVM.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "ethers" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/abi", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/abi", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/abi/src.ts/_version.ts b/packages/abi/src.ts/_version.ts new file mode 100644 index 000000000..3f04a2dbf --- /dev/null +++ b/packages/abi/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/abi@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/abi/src.ts/abi-coder.ts b/packages/abi/src.ts/abi-coder.ts new file mode 100644 index 000000000..a7e699bb9 --- /dev/null +++ b/packages/abi/src.ts/abi-coder.ts @@ -0,0 +1,103 @@ +// See: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI +//import { arrayify } from "@ethersproject/bytes"; +import { defineProperties } from "@ethersproject/properties"; + +import { logger } from "./logger.js"; +import { Coder, Reader, Result, Writer } from "./coders/abstract-coder.js"; +import { AddressCoder } from "./coders/address.js"; +import { ArrayCoder } from "./coders/array.js"; +import { BooleanCoder } from "./coders/boolean.js"; +import { BytesCoder } from "./coders/bytes.js"; +import { FixedBytesCoder } from "./coders/fixed-bytes.js"; +import { NullCoder } from "./coders/null.js"; +import { NumberCoder } from "./coders/number.js"; +import { StringCoder } from "./coders/string.js"; +import { TupleCoder } from "./coders/tuple.js"; +import { ParamType } from "./fragments.js"; + +import type { BytesLike } from "@ethersproject/bytes"; + + +const paramTypeBytes = new RegExp(/^bytes([0-9]*)$/); +const paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/); + +export type CoerceFunc = (type: string, value: any) => any; + +export class AbiCoder { + readonly coerceFunc!: null | CoerceFunc; + + constructor(coerceFunc?: CoerceFunc) { + defineProperties(this, { coerceFunc }, { }, { coerceFunc: null }); + } + + #getCoder(param: ParamType): Coder { + if (param.isArray()) { + return new ArrayCoder(this.#getCoder(param.arrayChildren), param.arrayLength, param.name); + } + + if (param.isTuple()) { + return new TupleCoder(param.components.map((c) => this.#getCoder(c)), param.name); + } + + switch (param.baseType) { + case "address": + return new AddressCoder(param.name); + case "bool": + return new BooleanCoder(param.name); + case "string": + return new StringCoder(param.name); + case "bytes": + return new BytesCoder(param.name); + case "": + return new NullCoder(param.name); + } + + // u?int[0-9]* + let match = param.type.match(paramTypeNumber); + if (match) { + let size = parseInt(match[2] || "256"); + if (size === 0 || size > 256 || (size % 8) !== 0) { + logger.throwArgumentError("invalid " + match[1] + " bit length", "param", param); + } + return new NumberCoder(size / 8, (match[1] === "int"), param.name); + } + + // bytes[0-9]+ + match = param.type.match(paramTypeBytes); + if (match) { + let size = parseInt(match[1]); + if (size === 0 || size > 32) { + logger.throwArgumentError("invalid bytes length", "param", param); + } + return new FixedBytesCoder(size, param.name); + } + + return logger.throwArgumentError("invalid type", "type", param.type); + } + + getDefaultValue(types: ReadonlyArray): Result { + const coders: Array = types.map((type) => this.#getCoder(ParamType.from(type))); + const coder = new TupleCoder(coders, "_"); + return coder.defaultValue(); + } + + encode(types: ReadonlyArray, values: ReadonlyArray): string { + logger.assertArgumentCount(values.length, types.length, "types/values length mismatch"); + + const coders = types.map((type) => this.#getCoder(ParamType.from(type))); + const coder = (new TupleCoder(coders, "_")); + + const writer = new Writer(); + coder.encode(writer, values); + return writer.data; + } + + decode(types: ReadonlyArray, data: BytesLike, loose?: boolean): Result { + const coders: Array = types.map((type) => this.#getCoder(ParamType.from(type))); + const coder = new TupleCoder(coders, "_"); + return coder.decode(new Reader(data, this.coerceFunc, loose)); + } +} + + +export const defaultAbiCoder: AbiCoder = new AbiCoder(); diff --git a/packages/abi/src.ts/coders/abstract-coder.ts b/packages/abi/src.ts/coders/abstract-coder.ts new file mode 100644 index 000000000..00dcc1160 --- /dev/null +++ b/packages/abi/src.ts/coders/abstract-coder.ts @@ -0,0 +1,322 @@ + +import { toArray, toBigInt, toNumber } from "@ethersproject/math"; +import { arrayify, concat, hexlify } from "@ethersproject/bytes"; +import { defineProperties } from "@ethersproject/properties"; + +import { logger } from "../logger.js"; + +import type { BytesLike } from "@ethersproject/bytes"; +import type { BigNumberish } from "@ethersproject/logger"; + +export const WordSize = 32; +const Padding = new Uint8Array(WordSize); + +// Properties used to immediate pass through to the underlying object +// - `then` is used to detect if an object is a Promise for await +const passProperties = [ "then" ]; + +const _guard = { }; + +export class Result extends Array { + #indices: Map>; + + [ K: string | number ]: any + + constructor(guard: any, items: Array, keys?: Array) { + logger.assertPrivate(guard, _guard, "Result"); + super(...items); + + // Name lookup table + this.#indices = new Map(); + + if (keys) { + keys.forEach((key, index) => { + if (key == null) { return; } + if (this.#indices.has(key)) { + (>(this.#indices.get(key))).push(index); + } else { + this.#indices.set(key, [ index ]); + } + }); + } + Object.freeze(this); + + return new Proxy(this, { + get: (target, prop, receiver) => { + if (typeof(prop) === "string") { + if (prop.match(/^[0-9]+$/)) { + const index = logger.getNumber(prop, "%index"); + if (index < 0 || index >= this.length) { + throw new RangeError("out of result range"); + } + + const item = target[index]; + if (item instanceof Error) { + this.#throwError(`index ${ index }`, item); + } + return item; + } + + // Pass important checks (like `then` for Promise) through + if (prop in target || passProperties.indexOf(prop) >= 0) { + return Reflect.get(target, prop, receiver); + } + + // Something that could be a result keyword value + if (!(prop in target)) { + return target.getValue(prop); + } + } + + return Reflect.get(target, prop, receiver); + } + }); + } + + slice(start?: number | undefined, end?: number | undefined): Array { + if (start == null) { start = 0; } + if (end == null) { end = this.length; } + + const result = [ ]; + for (let i = start; i < end; i++) { + let value: any; + try { + value = this[i]; + } catch (error: any) { + value = error.error; + } + result.push(value); + } + return result; + } + + #throwError(name: string, error: Error): never { + const wrapped = new Error(`deferred error during ABI decoding triggered accessing ${ name }`); + (wrapped).error = error; + throw wrapped; + } + + getValue(name: string): any { + const index = this.#indices.get(name); + if (index != null && index.length === 1) { + const item = this[index[0]]; + if (item instanceof Error) { + this.#throwError(`property ${ JSON.stringify(name) }`, item); + } + return item; + } + + throw new Error(`no named parameter: ${ JSON.stringify(name) }`); + } + + static fromItems(items: Array, keys?: Array) { + return new Result(_guard, items, keys); + } +} + +export function checkResultErrors(result: Result): Array<{ path: Array, error: Error }> { + // Find the first error (if any) + const errors: Array<{ path: Array, error: Error }> = [ ]; + + const checkErrors = function(path: Array, object: any): void { + if (!Array.isArray(object)) { return; } + for (let key in object) { + const childPath = path.slice(); + childPath.push(key); + + try { + checkErrors(childPath, object[key]); + } catch (error: any) { + errors.push({ path: childPath, error: error }); + } + } + } + checkErrors([ ], result); + + return errors; + +} + +function getValue(value: BigNumberish): Uint8Array { + let bytes = toArray(value); + + if (bytes.length > WordSize) { + logger.throwError("value out-of-bounds", "BUFFER_OVERRUN", { + buffer: bytes, + length: WordSize, + offset: bytes.length + }); + } + + if (bytes.length % WordSize) { + bytes = arrayify(concat([ Padding.slice(bytes.length % WordSize), bytes ])); + } + + return bytes; +} + + +export type CoerceFunc = (type: string, value: any) => any; + +export abstract class Coder { + + // The coder name: + // - address, uint256, tuple, array, etc. + readonly name!: string; + + // The fully expanded type, including composite types: + // - address, uint256, tuple(address,bytes), uint256[3][4][], etc. + readonly type!: string; + + // The localName bound in the signature, in this example it is "baz": + // - tuple(address foo, uint bar) baz + readonly localName!: string; + + // Whether this type is dynamic: + // - Dynamic: bytes, string, address[], tuple(boolean[]), etc. + // - Not Dynamic: address, uint256, boolean[3], tuple(address, uint8) + readonly dynamic!: boolean; + + constructor(name: string, type: string, localName: string, dynamic: boolean) { + defineProperties(this, { name, type, localName, dynamic }, { + name: "string", type: "string", localName: "string", dynamic: "boolean" + }); + } + + _throwError(message: string, value: any): never { + return logger.throwArgumentError(message, this.localName, value); + } + + abstract encode(writer: Writer, value: any): number; + abstract decode(reader: Reader): any; + + abstract defaultValue(): any; +} + +export class Writer { + // An array of WordSize lengthed objects to concatenation + #data: Array; + #dataLength: number; + + constructor() { + this.#data = [ ]; + this.#dataLength = 0; + } + + get data(): string { + return concat(this.#data); + } + get length(): number { return this.#dataLength; } + + #writeData(data: Uint8Array): number { + this.#data.push(data); + this.#dataLength += data.length; + return data.length; + } + + appendWriter(writer: Writer): number { + return this.#writeData(arrayify(writer.data)); + } + + // Arrayish item; pad on the right to *nearest* WordSize + writeBytes(value: BytesLike): number { + let bytes = arrayify(value); + const paddingOffset = bytes.length % WordSize; + if (paddingOffset) { + bytes = arrayify(concat([ bytes, Padding.slice(paddingOffset) ])) + } + return this.#writeData(bytes); + } + + // Numeric item; pad on the left *to* WordSize + writeValue(value: BigNumberish): number { + return this.#writeData(getValue(value)); + } + + // Inserts a numeric place-holder, returning a callback that can + // be used to asjust the value later + writeUpdatableValue(): (value: BigNumberish) => void { + const offset = this.#data.length; + this.#data.push(Padding); + this.#dataLength += WordSize; + return (value: BigNumberish) => { + this.#data[offset] = getValue(value); + }; + } +} + +export class Reader { + // Allows incomplete unpadded data to be read; otherwise an error + // is raised if attempting to overrun the buffer. This is required + // to deal with an old Solidity bug, in which event data for + // external (not public thoguh) was tightly packed. + readonly allowLoose!: boolean; + + readonly #data: Uint8Array; + #offset: number; + + readonly #coerceFunc: CoerceFunc; + + constructor(data: BytesLike, coerceFunc?: null | CoerceFunc, allowLoose?: boolean) { + defineProperties(this, { allowLoose: !!allowLoose }); + + this.#data = arrayify(data); + this.#coerceFunc = coerceFunc || Reader.coerce; + + this.#offset = 0; + } + + get data(): string { return hexlify(this.#data); } + get dataLength(): number { return this.#data.length; } + get consumed(): number { return this.#offset; } + get bytes(): Uint8Array { return new Uint8Array(this.#data); } + + // The default Coerce function + static coerce(type: string, value: any): any { + let match = type.match("^u?int([0-9]+)$"); + if (match && parseInt(match[1]) <= 48) { value = value.toNumber(); } + return value; + } + + coerce(type: string, value: any): any { + return this.#coerceFunc(type, value); + } + + #peekBytes(offset: number, length: number, loose?: boolean): Uint8Array { + let alignedLength = Math.ceil(length / WordSize) * WordSize; + if (this.#offset + alignedLength > this.#data.length) { + if (this.allowLoose && loose && this.#offset + length <= this.#data.length) { + alignedLength = length; + } else { + logger.throwError("data out-of-bounds", "BUFFER_OVERRUN", { + buffer: arrayify(this.#data), + length: this.#data.length, + offset: this.#offset + alignedLength + }); + } + } + return this.#data.slice(this.#offset, this.#offset + alignedLength) + } + + // Create a sub-reader with the same underlying data, but offset + subReader(offset: number): Reader { + return new Reader(this.#data.slice(this.#offset + offset), this.#coerceFunc, this.allowLoose); + } + + // Read bytes + readBytes(length: number, loose?: boolean): Uint8Array { + let bytes = this.#peekBytes(0, length, !!loose); + this.#offset += bytes.length; + // @TODO: Make sure the length..end bytes are all 0? + return bytes.slice(0, length); + } + + // Read a numeric values + readValue(): bigint { + return toBigInt(this.readBytes(WordSize)); + } + + readIndex(): number { + return toNumber(this.readBytes(WordSize)); + } +} diff --git a/packages/abi/src.ts/coders/address.ts b/packages/abi/src.ts/coders/address.ts new file mode 100644 index 000000000..6a0b7aaf0 --- /dev/null +++ b/packages/abi/src.ts/coders/address.ts @@ -0,0 +1,33 @@ +import { getAddress } from "@ethersproject/address"; +import { toHex } from "@ethersproject/math"; + +import { Typed } from "../typed.js"; +import { Coder } from "./abstract-coder.js"; + +import type { Reader, Writer } from "./abstract-coder.js"; + + +export class AddressCoder extends Coder { + + constructor(localName: string) { + super("address", "address", localName, false); + } + + defaultValue(): string { + return "0x0000000000000000000000000000000000000000"; + } + + encode(writer: Writer, _value: string | Typed): number { + let value = Typed.dereference(_value, "string"); + try { + value = getAddress(value); + } catch (error: any) { + return this._throwError(error.message, _value); + } + return writer.writeValue(value); + } + + decode(reader: Reader): any { + return getAddress(toHex(reader.readValue(), 20)); + } +} diff --git a/packages/abi/src.ts/coders/anonymous.ts b/packages/abi/src.ts/coders/anonymous.ts new file mode 100644 index 000000000..3b06e881f --- /dev/null +++ b/packages/abi/src.ts/coders/anonymous.ts @@ -0,0 +1,25 @@ +import { Coder } from "./abstract-coder.js"; + +import type { Reader, Writer } from "./abstract-coder.js"; + +// Clones the functionality of an existing Coder, but without a localName +export class AnonymousCoder extends Coder { + private coder: Coder; + + constructor(coder: Coder) { + super(coder.name, coder.type, "_", coder.dynamic); + this.coder = coder; + } + + defaultValue(): any { + return this.coder.defaultValue(); + } + + encode(writer: Writer, value: any): number { + return this.coder.encode(writer, value); + } + + decode(reader: Reader): any { + return this.coder.decode(reader); + } +} diff --git a/packages/abi/src.ts/coders/array.ts b/packages/abi/src.ts/coders/array.ts new file mode 100644 index 000000000..54b341088 --- /dev/null +++ b/packages/abi/src.ts/coders/array.ts @@ -0,0 +1,208 @@ +import { defineProperties } from "@ethersproject/properties"; +import { isError } from "@ethersproject/logger"; + +import { logger } from "../logger.js"; +import { Typed } from "../typed.js"; +import { Coder, Result, WordSize, Writer } from "./abstract-coder.js"; +import { AnonymousCoder } from "./anonymous.js"; + +import type { Reader } from "./abstract-coder.js"; + + +export function pack(writer: Writer, coders: ReadonlyArray, values: Array | { [ name: string ]: any }): number { + let arrayValues: Array = [ ]; + + if (Array.isArray(values)) { + arrayValues = values; + + } else if (values && typeof(values) === "object") { + let unique: { [ name: string ]: boolean } = { }; + + arrayValues = coders.map((coder) => { + const name = coder.localName; + if (!name) { + logger.throwError("cannot encode object for signature with missing names", "INVALID_ARGUMENT", { + argument: "values", + info: { coder }, + value: values + }); + } + + if (unique[name]) { + logger.throwError("cannot encode object for signature with duplicate names", "INVALID_ARGUMENT", { + argument: "values", + info: { coder }, + value: values + }); + } + + unique[name] = true; + + return values[name]; + }); + + } else { + logger.throwArgumentError("invalid tuple value", "tuple", values); + } + + if (coders.length !== arrayValues.length) { + logger.throwArgumentError("types/value length mismatch", "tuple", values); + } + + let staticWriter = new Writer(); + let dynamicWriter = new Writer(); + + let updateFuncs: Array<(baseOffset: number) => void> = []; + coders.forEach((coder, index) => { + let value = arrayValues[index]; + + if (coder.dynamic) { + // Get current dynamic offset (for the future pointer) + let dynamicOffset = dynamicWriter.length; + + // Encode the dynamic value into the dynamicWriter + coder.encode(dynamicWriter, value); + + // Prepare to populate the correct offset once we are done + let updateFunc = staticWriter.writeUpdatableValue(); + updateFuncs.push((baseOffset: number) => { + updateFunc(baseOffset + dynamicOffset); + }); + + } else { + coder.encode(staticWriter, value); + } + }); + + // Backfill all the dynamic offsets, now that we know the static length + updateFuncs.forEach((func) => { func(staticWriter.length); }); + + let length = writer.appendWriter(staticWriter); + length += writer.appendWriter(dynamicWriter); + return length; +} + +export function unpack(reader: Reader, coders: ReadonlyArray): Result { + let values: Array = []; + let keys: Array = [ ]; + + // A reader anchored to this base + let baseReader = reader.subReader(0); + + coders.forEach((coder) => { + let value: any = null; + + if (coder.dynamic) { + let offset = reader.readIndex(); + let offsetReader = baseReader.subReader(offset); + try { + value = coder.decode(offsetReader); + } catch (error: any) { + // Cannot recover from this + if (isError(error, "BUFFER_OVERRUN")) { + throw error; + } + + value = error; + value.baseType = coder.name; + value.name = coder.localName; + value.type = coder.type; + } + + } else { + try { + value = coder.decode(reader); + } catch (error: any) { + // Cannot recover from this + if (isError(error, "BUFFER_OVERRUN")) { + throw error; + } + + value = error; + value.baseType = coder.name; + value.name = coder.localName; + value.type = coder.type; + } + } + + if (value == undefined) { + throw new Error("investigate"); + } + + values.push(value); + keys.push(coder.localName || null); + }); + + return Result.fromItems(values, keys); +} + + +export class ArrayCoder extends Coder { + readonly coder!: Coder; + readonly length!: number; + + constructor(coder: Coder, length: number, localName: string) { + const type = (coder.type + "[" + (length >= 0 ? length: "") + "]"); + const dynamic = (length === -1 || coder.dynamic); + super("array", type, localName, dynamic); + defineProperties(this, { coder, length }); + } + + defaultValue(): Array { + // Verifies the child coder is valid (even if the array is dynamic or 0-length) + const defaultChild = this.coder.defaultValue(); + + const result: Array = []; + for (let i = 0; i < this.length; i++) { + result.push(defaultChild); + } + return result; + } + + encode(writer: Writer, _value: Array | Typed): number { + const value = Typed.dereference(_value, "array"); + + if (!Array.isArray(value)) { + this._throwError("expected array value", value); + } + + let count = this.length; + + if (count === -1) { + count = value.length; + writer.writeValue(value.length); + } + + logger.assertArgumentCount(value.length, count, "coder array" + (this.localName? (" "+ this.localName): "")); + + let coders = []; + for (let i = 0; i < value.length; i++) { coders.push(this.coder); } + + return pack(writer, coders, value); + } + + decode(reader: Reader): any { + let count = this.length; + if (count === -1) { + count = reader.readIndex(); + + // Check that there is *roughly* enough data to ensure + // stray random data is not being read as a length. Each + // slot requires at least 32 bytes for their value (or 32 + // bytes as a link to the data). This could use a much + // tighter bound, but we are erroring on the side of safety. + if (count * WordSize > reader.dataLength) { + logger.throwError("insufficient data length", "BUFFER_OVERRUN", { + buffer: reader.bytes, + offset: count * WordSize, + length: reader.dataLength + }); + } + } + let coders = []; + for (let i = 0; i < count; i++) { coders.push(new AnonymousCoder(this.coder)); } + + return reader.coerce(this.name, unpack(reader, coders)); + } +} + diff --git a/packages/abi/src.ts/coders/boolean.ts b/packages/abi/src.ts/coders/boolean.ts new file mode 100644 index 000000000..ff7ab8b88 --- /dev/null +++ b/packages/abi/src.ts/coders/boolean.ts @@ -0,0 +1,25 @@ +import { Typed } from "../typed.js"; +import { Coder } from "./abstract-coder.js"; + +import type { Reader, Writer } from "./abstract-coder.js"; + + +export class BooleanCoder extends Coder { + + constructor(localName: string) { + super("bool", "bool", localName, false); + } + + defaultValue(): boolean { + return false; + } + + encode(writer: Writer, _value: boolean | Typed): number { + const value = Typed.dereference(_value, "bool"); + return writer.writeValue(value ? 1: 0); + } + + decode(reader: Reader): any { + return reader.coerce(this.type, !reader.readValue()); + } +} diff --git a/packages/abi/src.ts/coders/bytes.ts b/packages/abi/src.ts/coders/bytes.ts new file mode 100644 index 000000000..ba83b66b3 --- /dev/null +++ b/packages/abi/src.ts/coders/bytes.ts @@ -0,0 +1,37 @@ +import { arrayify, hexlify } from "@ethersproject/bytes"; + +import { Coder } from "./abstract-coder.js"; + +import type { Reader, Writer } from "./abstract-coder.js"; + + +export class DynamicBytesCoder extends Coder { + constructor(type: string, localName: string) { + super(type, type, localName, true); + } + + defaultValue(): string { + return "0x"; + } + + encode(writer: Writer, value: any): number { + value = arrayify(value); + let length = writer.writeValue(value.length); + length += writer.writeBytes(value); + return length; + } + + decode(reader: Reader): any { + return reader.readBytes(reader.readIndex(), true); + } +} + +export class BytesCoder extends DynamicBytesCoder { + constructor(localName: string) { + super("bytes", localName); + } + + decode(reader: Reader): any { + return reader.coerce(this.name, hexlify(super.decode(reader))); + } +} diff --git a/packages/abi/src.ts/coders/fixed-bytes.ts b/packages/abi/src.ts/coders/fixed-bytes.ts new file mode 100644 index 000000000..27573447e --- /dev/null +++ b/packages/abi/src.ts/coders/fixed-bytes.ts @@ -0,0 +1,35 @@ + +import { arrayify, hexlify } from "@ethersproject/bytes"; +import { defineProperties } from "@ethersproject/properties"; + +import { Typed } from "../typed.js"; +import { Coder } from "./abstract-coder.js"; + +import type { BytesLike } from "@ethersproject/bytes"; + +import type { Reader, Writer } from "./abstract-coder.js"; + + +export class FixedBytesCoder extends Coder { + readonly size!: number; + + constructor(size: number, localName: string) { + let name = "bytes" + String(size); + super(name, name, localName, false); + defineProperties(this, { size }, { size: "number" }); + } + + defaultValue(): string { + return ("0x0000000000000000000000000000000000000000000000000000000000000000").substring(0, 2 + this.size * 2); + } + + encode(writer: Writer, _value: BytesLike | Typed): number { + let data = arrayify(Typed.dereference(_value, this.type)); + if (data.length !== this.size) { this._throwError("incorrect data length", _value); } + return writer.writeBytes(data); + } + + decode(reader: Reader): any { + return reader.coerce(this.name, hexlify(reader.readBytes(this.size))); + } +} diff --git a/packages/abi/src.ts/coders/null.ts b/packages/abi/src.ts/coders/null.ts new file mode 100644 index 000000000..7a2f1702c --- /dev/null +++ b/packages/abi/src.ts/coders/null.ts @@ -0,0 +1,25 @@ +import { Coder } from "./abstract-coder.js"; +import type { Reader, Writer } from "./abstract-coder.js"; + +const Empty = new Uint8Array([ ]); + +export class NullCoder extends Coder { + + constructor(localName: string) { + super("null", "", localName, false); + } + + defaultValue(): null { + return null; + } + + encode(writer: Writer, value: any): number { + if (value != null) { this._throwError("not null", value); } + return writer.writeBytes(Empty); + } + + decode(reader: Reader): any { + reader.readBytes(0); + return reader.coerce(this.name, null); + } +} diff --git a/packages/abi/src.ts/coders/number.ts b/packages/abi/src.ts/coders/number.ts new file mode 100644 index 000000000..d7d1c5017 --- /dev/null +++ b/packages/abi/src.ts/coders/number.ts @@ -0,0 +1,65 @@ +import { fromTwos, mask, toTwos } from "@ethersproject/math"; +import { defineProperties } from "@ethersproject/properties"; + +import { logger } from "../logger.js"; +import { Typed } from "../typed.js"; +import { Coder, WordSize } from "./abstract-coder.js"; + +import type { BigNumberish } from "@ethersproject/logger"; + +import type { Reader, Writer } from "./abstract-coder.js"; + + +const BN_0 = BigInt(0); +const BN_1 = BigInt(1); +const BN_MAX_UINT256 = BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); + +export class NumberCoder extends Coder { + readonly size!: number; + readonly signed!: boolean; + + constructor(size: number, signed: boolean, localName: string) { + const name = ((signed ? "int": "uint") + (size * 8)); + super(name, name, localName, false); + + defineProperties(this, { size, signed }, { size: "number", signed: "boolean" }); + } + + defaultValue(): number { + return 0; + } + + encode(writer: Writer, _value: BigNumberish | Typed): number { + let value = logger.getBigInt(Typed.dereference(_value, this.type)); + + // Check bounds are safe for encoding + let maxUintValue = mask(BN_MAX_UINT256, WordSize * 8); + if (this.signed) { + let bounds = mask(maxUintValue, (this.size * 8) - 1); + if (value > bounds || value < -(bounds + BN_1)) { + this._throwError("value out-of-bounds", _value); + } + } else if (value < BN_0 || value > mask(maxUintValue, this.size * 8)) { + this._throwError("value out-of-bounds", _value); + } + + value = mask(toTwos(value, this.size * 8), this.size * 8); + + if (this.signed) { + value = toTwos(fromTwos(value, this.size * 8), 8 * WordSize); + } + + return writer.writeValue(value); + } + + decode(reader: Reader): any { + let value = mask(reader.readValue(), this.size * 8); + + if (this.signed) { + value = fromTwos(value, this.size * 8); + } + + return reader.coerce(this.name, value); + } +} + diff --git a/packages/abi/src.ts/coders/string.ts b/packages/abi/src.ts/coders/string.ts new file mode 100644 index 000000000..e38ed0d4f --- /dev/null +++ b/packages/abi/src.ts/coders/string.ts @@ -0,0 +1,26 @@ +import { toUtf8Bytes, toUtf8String } from "@ethersproject/strings"; + +import { Typed } from "../typed.js"; +import { DynamicBytesCoder } from "./bytes.js"; + +import type { Reader, Writer } from "./abstract-coder.js"; + + +export class StringCoder extends DynamicBytesCoder { + + constructor(localName: string) { + super("string", localName); + } + + defaultValue(): string { + return ""; + } + + encode(writer: Writer, _value: string | Typed): number { + return super.encode(writer, toUtf8Bytes(Typed.dereference(_value, "string"))); + } + + decode(reader: Reader): any { + return toUtf8String(super.decode(reader)); + } +} diff --git a/packages/abi/src.ts/coders/tuple.ts b/packages/abi/src.ts/coders/tuple.ts new file mode 100644 index 000000000..07b8e1f67 --- /dev/null +++ b/packages/abi/src.ts/coders/tuple.ts @@ -0,0 +1,66 @@ +import { defineProperties } from "@ethersproject/properties"; + +import { Typed } from "../typed.js"; +import { Coder } from "./abstract-coder.js"; + +import { pack, unpack } from "./array.js"; + +import type { Reader, Writer } from "./abstract-coder.js"; + +export class TupleCoder extends Coder { + readonly coders!: ReadonlyArray; + + constructor(coders: Array, localName: string) { + let dynamic = false; + const types: Array = []; + coders.forEach((coder) => { + if (coder.dynamic) { dynamic = true; } + types.push(coder.type); + }); + const type = ("tuple(" + types.join(",") + ")"); + + super("tuple", type, localName, dynamic); + defineProperties(this, { coders: Object.freeze(coders.slice()) }); + } + + defaultValue(): any { + const values: any = [ ]; + this.coders.forEach((coder) => { + values.push(coder.defaultValue()); + }); + + // We only output named properties for uniquely named coders + const uniqueNames = this.coders.reduce((accum, coder) => { + const name = coder.localName; + if (name) { + if (!accum[name]) { accum[name] = 0; } + accum[name]++; + } + return accum; + }, <{ [ name: string ]: number }>{ }); + + // Add named values + this.coders.forEach((coder: Coder, index: number) => { + let name = coder.localName; + if (!name || uniqueNames[name] !== 1) { return; } + + if (name === "length") { name = "_length"; } + + if (values[name] != null) { return; } + + values[name] = values[index]; + }); + + return Object.freeze(values); + } + + encode(writer: Writer, _value: Array | { [ name: string ]: any } | Typed): number { + const value = Typed.dereference(_value, "tuple"); + return pack(writer, this.coders, value); + } + + decode(reader: Reader): any { + return reader.coerce(this.name, unpack(reader, this.coders)); + } +} + diff --git a/packages/abi/src.ts/fragments.ts b/packages/abi/src.ts/fragments.ts new file mode 100644 index 000000000..4fa1285fa --- /dev/null +++ b/packages/abi/src.ts/fragments.ts @@ -0,0 +1,1092 @@ +import { defineProperties } from "@ethersproject/properties"; + +import { logger } from "./logger.js"; + + +export interface JsonFragmentType { + readonly name?: string; + readonly indexed?: boolean; + readonly type?: string; + readonly internalType?: string; + readonly components?: ReadonlyArray; +} + +export interface JsonFragment { + readonly name?: string; + readonly type?: string; + + readonly anonymous?: boolean; + + readonly payable?: boolean; + readonly constant?: boolean; + readonly stateMutability?: string; + + readonly inputs?: ReadonlyArray; + readonly outputs?: ReadonlyArray; + + readonly gas?: string; +}; + +export enum FormatType { + // Bare formatting, as is needed for computing a sighash of an event or function + sighash = "sighash", + + // Human-Readable with Minimal spacing and without names (compact human-readable) + minimal = "minimal", + + // Human-Readable with nice spacing, including all names + full = "full", + + // JSON-format a la Solidity + json = "json" +}; + +// [ "a", "b" ] => { "a": 1, "b": 1 } +function setify(items: Array): ReadonlySet { + const result: Set = new Set(); + items.forEach((k) => result.add(k)); + return Object.freeze(result); +} + +// Visibility Keywords +const _kwVisib = "constant external internal payable private public pure view"; +const KwVisib = setify(_kwVisib.split(" ")); + +const _kwTypes = "constructor error event function struct"; +const KwTypes = setify(_kwTypes.split(" ")); + +const _kwModifiers = "calldata memory storage payable indexed"; +const KwModifiers = setify(_kwModifiers.split(" ")); + +const _kwOther = "tuple returns"; + +// All Keywords +const _keywords = [ _kwTypes, _kwModifiers, _kwOther, _kwVisib ].join(" "); +const Keywords = setify(_keywords.split(" ")); + +// Single character tokens +const SimpleTokens: Record = { + "(": "OPEN_PAREN", ")": "CLOSE_PAREN", + "[": "OPEN_BRACKET", "]": "CLOSE_BRACKET", + ",": "COMMA", "@": "AT" +}; + +// Parser regexes to consume the next token +const regexWhitespace = new RegExp("^(\\s*)"); +const regexNumber = new RegExp("^([0-9]+)"); +const regexIdentifier = new RegExp("^([a-zA-Z$_][a-zA-Z0-9$_]*)"); +const regexType = new RegExp("^(address|bool|bytes(0-9*)|string|u?int([0-9]*))"); + + +export type Token = Readonly<{ + // Type of token (e.g. TYPE, KEYWORD, NUMBER, etc) + type: string; + + // Offset into the original source code + offset: number; + + // Actual text content of the token + text: string; + + // The parenthesis depth + depth: number; + + // If a parenthesis, the offset (in tokens) that balances it + match: number; + + // For parenthesis and commas, the offset (in tokens) to the + // previous/next parenthesis or comma in the list + linkBack: number; + linkNext: number; + + // If a BRACKET, the value inside + value: number; +}>; + +export class TokenString { + #offset: number; + #tokens: ReadonlyArray; + + get offset(): number { return this.#offset; } + get length(): number { return this.#tokens.length - this.#offset; } + + constructor(tokens: ReadonlyArray) { + this.#offset = 0; + this.#tokens = tokens.slice(); + } + + clone(): TokenString { return new TokenString(this.#tokens); } + reset(): void { this.#offset = 0; } + + #subTokenString(from: number = 0, to: number = 0): TokenString { + return new TokenString(this.#tokens.slice(from, to).map((t) => { + return Object.freeze(Object.assign({ }, t, { + match: (t.match - from), + linkBack: (t.linkBack - from), + linkNext: (t.linkNext - from), + })); + return t; + })); + } + + // Pops and returns the value of the next token, if it is a keyword in allowed; throws if out of tokens + popKeyword(allowed: ReadonlySet): string { + const top = this.peek(); + if (top.type !== "KEYWORD" || !allowed.has(top.text)) { throw new Error(`expected keyword ${ top.text }`); } + return this.pop().text; + } + + // Pops and returns the value of the next token if it is `type`; throws if out of tokens + popType(type: string): string { + if (this.peek().type !== type) { throw new Error(`expected ${ type }; got ${ JSON.stringify(this.peek()) }`); } + return this.pop().text; + } + + // Pops and returns a "(" TOKENS ")" + popParen(): TokenString { + const top = this.peek(); + if (top.type !== "OPEN_PAREN") { throw new Error("bad start"); } + const result = this.#subTokenString(this.#offset + 1, top.match + 1); + this.#offset = top.match + 1; + return result; + } + + // Pops and returns the items within "(" ITEM1 "," ITEM2 "," ... ")" + popParams(): Array { + const top = this.peek(); + + if (top.type !== "OPEN_PAREN") { throw new Error("bad start"); } + + const result: Array = [ ]; + + while(this.#offset < top.match - 1) { + const link = this.peek().linkNext; + result.push(this.#subTokenString(this.#offset + 1, link)); + this.#offset = link; + } + + this.#offset = top.match + 1; + + return result; + } + + // Returns the top Token, throwing if out of tokens + peek(): Token { + if (this.#offset >= this.#tokens.length) { + throw new Error("out-of-bounds"); + } + return this.#tokens[this.#offset]; + } + + // Returns the next value, if it is a keyword in `allowed` + peekKeyword(allowed: ReadonlySet): null | string { + const top = this.peekType("KEYWORD"); + return (top != null && allowed.has(top)) ? top: null; + } + + // Returns the value of the next token if it is `type` + peekType(type: string): null | string { + if (this.length === 0) { return null; } + const top = this.peek(); + return (top.type === type) ? top.text: null; + } + + // Returns the next token; throws if out of tokens + pop(): Token { + const result = this.peek(); + this.#offset++; + return result; + } + + toString(): string { + const tokens: Array = [ ]; + for (let i = this.#offset; i < this.#tokens.length; i++) { + const token = this.#tokens[i]; + tokens.push(`${ token.type }:${ token.text }`); + } + return `` + } +} + +type Writeable = { -readonly [P in keyof T]: T[P] }; + +export function lex(text: string): TokenString { + const tokens: Array = [ ]; + + const throwError = (message: string) => { + const token = (offset < text.length) ? JSON.stringify(text[offset]): "$EOI"; + throw new Error(`invalid token ${ token } at ${ offset }: ${ message }`); + }; + + let brackets: Array = [ ]; + let commas: Array = [ ]; + + let offset = 0; + while (offset < text.length) { + + // Strip off any leading whitespace + let cur = text.substring(offset); + let match = cur.match(regexWhitespace); + if (match) { + offset += match[1].length; + cur = text.substring(offset); + } + + const token = { depth: brackets.length, linkBack: -1, linkNext: -1, match: -1, type: "", text: "", offset, value: -1 }; + tokens.push(token); + + let type = (SimpleTokens[cur[0]] || ""); + if (type) { + token.type = type; + token.text = cur[0]; + offset++; + + if (type === "OPEN_PAREN") { + brackets.push(tokens.length - 1); + commas.push(tokens.length - 1); + + } else if (type == "CLOSE_PAREN") { + if (brackets.length === 0) { throwError("no matching open bracket"); } + + token.match = brackets.pop() as number; + (>(tokens[token.match])).match = tokens.length - 1; + token.depth--; + + token.linkBack = commas.pop() as number; + (>(tokens[token.linkBack])).linkNext = tokens.length - 1; + + } else if (type === "COMMA") { + token.linkBack = commas.pop() as number; + (>(tokens[token.linkBack])).linkNext = tokens.length - 1; + commas.push(tokens.length - 1); + + } else if (type === "OPEN_BRACKET") { + token.type = "BRACKET"; + + } else if (type === "CLOSE_BRACKET") { + // Remove the CLOSE_BRACKET + let suffix = (tokens.pop() as Token).text; + if (tokens.length > 0 && tokens[tokens.length - 1].type === "NUMBER") { + const value = (tokens.pop() as Token).text; + suffix = value + suffix; + (>(tokens[tokens.length - 1])).value = logger.getNumber(value); + } + if (tokens.length === 0 || tokens[tokens.length - 1].type !== "BRACKET") { + throw new Error("missing opening bracket"); + } + (>(tokens[tokens.length - 1])).text += suffix; + } + + continue; + } + + match = cur.match(regexIdentifier); + if (match) { + token.text = match[1]; + offset += token.text.length; + + if (Keywords.has(token.text)) { + token.type = "KEYWORD"; + continue; + } + + if (token.text.match(regexType)) { + token.type = "TYPE"; + continue; + } + + token.type = "ID"; + continue; + } + + match = cur.match(regexNumber); + if (match) { + token.text = match[1]; + token.type = "NUMBER"; + offset += token.text.length; + continue; + } + + throw new Error(`unexpected token ${ JSON.stringify(cur[0]) } at position ${ offset }`); + } + + return new TokenString(tokens.map((t) => Object.freeze(t))); +} + +// Check only one of `allowed` is in `set` +function allowSingle(set: ReadonlySet, allowed: ReadonlySet): void { + let included: Array = [ ]; + for (const key in allowed.keys()) { + if (set.has(key)) { included.push(key); } + } + if (included.length > 1) { throw new Error(`conflicting types: ${ included.join(", ") }`); } +} + +// Functions to process a Solidity Signature TokenString from left-to-right for... + +// ...the name with an optional type, returning the name +function consumeName(type: string, tokens: TokenString): string { + if (tokens.peekKeyword(KwTypes)) { + const keyword = tokens.pop().text; + if (keyword !== type) { + throw new Error(`expected ${ type }, got ${ keyword }`); + } + } + + return tokens.popType("ID"); +} + +// ...all keywords matching allowed, returning the keywords +function consumeKeywords(tokens: TokenString, allowed?: ReadonlySet): ReadonlySet { + const keywords: Set = new Set(); + while (true) { + const keyword = tokens.peekType("KEYWORD"); + + if (keyword == null || (allowed && !allowed.has(keyword))) { break; } + tokens.pop(); + + if (keywords.has(keyword)) { throw new Error(`duplicate keywords: ${ JSON.stringify(keyword) }`); } + keywords.add(keyword); + } + + return Object.freeze(keywords); +} + +// ...all visibility keywords, returning the coalesced mutability +function consumeMutability(tokens: TokenString): string { + let modifiers = consumeKeywords(tokens, KwVisib); + + // Detect conflicting modifiers + allowSingle(modifiers, setify("constant payable nonpayable".split(" "))); + allowSingle(modifiers, setify("pure view payable nonpayable".split(" "))); + + // Process mutability states + if (modifiers.has("view")) { return "view"; } + if (modifiers.has("pure")) { return "pure"; } + if (modifiers.has("payable")) { return "payable"; } + if (modifiers.has("nonpayable")) { return "nonpayable"; } + + // Process legacy `constant` last + if (modifiers.has("constant")) { return "view"; } + + return "nonpayable"; +} + +// ...a parameter list, returning the ParamType list +function consumeParams(tokens: TokenString, allowIndexed?: boolean): Array { + return tokens.popParams().map((t) => ParamType.fromTokens(t, allowIndexed)); +} + +// ...a gas limit, returning a BigNumber or null if none +function consumeGas(tokens: TokenString): null | bigint { + if (tokens.peekType("AT")) { + tokens.pop(); + if (tokens.peekType("NUMBER")) { + return logger.getBigInt(tokens.pop().text); + } + throw new Error("invalid gas"); + } + return null; +} + +function consumeEoi(tokens: TokenString): void { + if (tokens.length) { + throw new Error(`unexpected tokens: ${ tokens.toString() }`); + } +} + +const regexArrayType = new RegExp(/^(.*)\[([0-9]*)\]$/); + +function verifyBasicType(type: string): string { + const match = type.match(regexType); + if (!match) { + return logger.throwArgumentError("invalid type", "type", type); + } + if (type === "uint") { return "uint256"; } + if (type === "int") { return "int256"; } + + if (match[2]) { + // bytesXX + const length = parseInt(match[2]); + if (length === 0 || length > 32) { + logger.throwArgumentError("invalid bytes length", "type", type); + } + + } else if (match[3]) { + // intXX or uintXX + const size = parseInt(match[3] as string); + if (size === 0 || size > 256 || size % 8) { + logger.throwArgumentError("invalid numeric width", "type", type); + } + } + + return type; +} + +// Make the Fragment constructors effectively private +const _guard = { }; + +export interface ArrayParamType { //extends ParamType { + readonly arrayLength: number; + readonly arrayChildren: ParamType; +} + +export interface TupleParamType extends ParamType { + readonly components: ReadonlyArray; +} + +export interface IndexableParamType extends ParamType { + readonly indexed: boolean; +} + +export type FragmentWalkFunc = (type: string, value: any) => any; +export type FragmentWalkAsyncFunc = (type: string, value: any) => any | Promise; + +const internal = Symbol.for("_ethers_internal"); +const ParamTypeInternal = "_ParamTypeInternal"; + +export class ParamType { + + // The local name of the parameter (of "" if unbound) + readonly name!: string; + + // The fully qualified type (e.g. "address", "tuple(address)", "uint256[3][]" + readonly type!: string; + + // The base type (e.g. "address", "tuple", "array") + readonly baseType!: string; + + // Indexable Paramters ONLY (otherwise null) + readonly indexed!: null | boolean; + + // Tuples ONLY: (otherwise null) + // - sub-components + readonly components!: null | ReadonlyArray; + + // Arrays ONLY: (otherwise null) + // - length of the array (-1 for dynamic length) + // - child type + readonly arrayLength!: null | number; + readonly arrayChildren!: null | ParamType; + + + constructor(guard: any, name: string, type: string, baseType: string, indexed: null | boolean, components: null | ReadonlyArray, arrayLength: null | number, arrayChildren: null | ParamType) { + logger.assertPrivate(guard, _guard, "ParamType"); + Object.defineProperty(this, internal, { value: ParamTypeInternal }); + + if (components) { components = Object.freeze(components.slice()); } + + if (baseType === "array") { + if (arrayLength == null || arrayChildren == null) { + throw new Error(""); + } + } else if (arrayLength != null || arrayChildren != null) { + throw new Error(""); + } + + if (baseType === "tuple") { + if (components == null) { throw new Error(""); } + } else if (components != null) { + throw new Error(""); + } + + defineProperties(this, { + name, type, baseType, indexed, components, arrayLength, arrayChildren + }); + } + + // Format the parameter fragment + // - sighash: "(uint256,address)" + // - minimal: "tuple(uint256,address) indexed" + // - full: "tuple(uint256 foo, address bar) indexed baz" + format(format: FormatType = FormatType.sighash): string { + if (!FormatType[format]) { + logger.throwArgumentError("invalid format type", "format", format); + } + + if (format === FormatType.json) { + let result: any = { + type: ((this.baseType === "tuple") ? "tuple": this.type), + name: (this.name || undefined) + }; + if (typeof(this.indexed) === "boolean") { result.indexed = this.indexed; } + if (this.isTuple()) { + result.components = this.components.map((c) => JSON.parse(c.format(format))); + } + return JSON.stringify(result); + } + + let result = ""; + + // Array + if (this.isArray()) { + result += this.arrayChildren.format(format); + result += `[${ (this.arrayLength < 0 ? "": String(this.arrayLength)) }]`; + } else { + if (this.isTuple()) { + if (format !== FormatType.sighash) { result += this.type; } + result += "(" + this.components.map( + (comp) => comp.format(format) + ).join((format === FormatType.full) ? ", ": ",") + ")"; + } else { + result += this.type; + } + } + + if (format !== FormatType.sighash) { + if (this.indexed === true) { result += " indexed"; } + if (format === FormatType.full && this.name) { + result += " " + this.name; + } + } + + return result; + } + + static isArray(value: any): value is { arrayChildren: ParamType } { + return value && (value.baseType === "array") + } + + isArray(): this is (ParamType & ArrayParamType) { + return (this.baseType === "array") + } + + isTuple(): this is TupleParamType { + return (this.baseType === "tuple"); + } + + isIndexable(): this is IndexableParamType { + return (this.indexed != null); + } + + walk(value: any, process: FragmentWalkFunc): any { + if (this.isArray()) { + if (!Array.isArray(value)) { throw new Error("invlaid array value"); } + if (this.arrayLength !== -1 && value.length !== this.arrayLength) { + throw new Error("array is wrong length"); + } + return value.map((v) => ((this).arrayChildren.walk(v, process))); + } + + if (this.isTuple()) { + if (!Array.isArray(value)) { throw new Error("invlaid tuple value"); } + if (value.length !== this.components.length) { + throw new Error("array is wrong length"); + } + return value.map((v, i) => ((this).components[i].walk(v, process))); + } + + return process(this.type, value); + } + + #walkAsync(promises: Array>, value: any, process: FragmentWalkAsyncFunc, setValue: (value: any) => void): void { + + if (this.isArray()) { + if (!Array.isArray(value)) { throw new Error("invlaid array value"); } + if (this.arrayLength !== -1 && value.length !== this.arrayLength) { + throw new Error("array is wrong length"); + } + const childType = this.arrayChildren; + + const result = value.slice(); + result.forEach((value, index) => { + childType.#walkAsync(promises, value, process, (value: any) => { + result[index] = value; + }); + }); + setValue(result); + return; + } + + if (this.isTuple()) { + const components = this.components; + + // Convert the object into an array + let result: Array; + if (Array.isArray(value)) { + result = value.slice(); + + } else { + if (value == null || typeof(value) !== "object") { + throw new Error("invlaid tuple value"); + } + + result = components.map((param) => { + if (!param.name) { throw new Error("cannot use object value with unnamed components"); } + if (!(param.name in value)) { + throw new Error(`missing value for component ${ param.name }`); + } + return value[param.name]; + }); + } + if (value.length !== this.components.length) { + throw new Error("array is wrong length"); + } + + result.forEach((value, index) => { + components[index].#walkAsync(promises, value, process, (value: any) => { + result[index] = value; + }); + }); + setValue(result); + return; + } + + const result = process(this.type, value); + if (result.then) { + promises.push((async function() { setValue(await result); })()); + } else { + setValue(result); + } + } + + async walkAsync(value: any, process: (type: string, value: any) => any | Promise): Promise { + const promises: Array> = [ ]; + const result: [ any ] = [ value ]; + this.#walkAsync(promises, value, process, (value: any) => { + result[0] = value; + }); + if (promises.length) { await Promise.all(promises); } + return result[0]; + } + + static from(obj: any, allowIndexed?: boolean): ParamType { + if (ParamType.isParamType(obj)) { return obj; } + if (typeof(obj) === "string") { return ParamType.fromTokens(lex(obj), allowIndexed); } + if (obj instanceof TokenString) { return ParamType.fromTokens(obj, allowIndexed); } + + const name = obj.name; + if (name && (typeof(name) !== "string" || !name.match(regexIdentifier))) { + logger.throwArgumentError("invalid name", "obj.name", name); + } + + let indexed = obj.indexed; + if (indexed != null) { + if (!allowIndexed) { + logger.throwArgumentError("parameter cannot be indexed", "obj.indexed", obj.indexed); + } + indexed = !!indexed; + } + + let type = obj.type; + + let arrayMatch = type.match(regexArrayType); + if (arrayMatch) { + const arrayLength = arrayMatch[2]; + const arrayChildren = ParamType.from({ + type: arrayMatch[1], + components: obj.components + }); + + return new ParamType(_guard, name, type, "array", indexed, null, arrayLength, arrayChildren); + } + + if (type.substring(0, 5) === "tuple(" || type[0] === "(") { + const comps = (obj.components != null) ? obj.components.map((c: any) => ParamType.from(c)): null; + const tuple = new ParamType(_guard, name, type, "tuple", indexed, comps, null, null); + // @TODO: use lexer to validate and normalize type + return tuple; + } + + type = verifyBasicType(obj.type); + + return new ParamType(_guard, name, type, type, indexed, null, null, null); + } + + static fromObject(obj: any, allowIndexed?: boolean): ParamType { + throw new Error("@TODO"); + } + + static fromTokens(tokens: TokenString, allowIndexed?: boolean): ParamType { + let type = "", baseType = ""; + let comps: null | Array = null; + + if (consumeKeywords(tokens, setify([ "tuple" ])).has("tuple") || tokens.peekType("OPEN_PAREN")) { + // Tuple + baseType = "tuple"; + comps = tokens.popParams().map((t) => ParamType.from(t)); + type = `tuple(${ comps.map((c) => c.format()).join(",") })`; + } else { + // Normal + type = verifyBasicType(tokens.popType("TYPE")); + baseType = type; + } + + // Check for Array + let arrayChildren: null | ParamType = null; + let arrayLength: null | number = null; + + while (tokens.length && tokens.peekType("BRACKET")) { + const bracket = tokens.pop(); //arrays[i]; + arrayChildren = new ParamType(_guard, "", type, baseType, null, comps, arrayLength, arrayChildren); + arrayLength = bracket.value; + type += bracket.text; + baseType = "array"; + comps = null; + } + + let indexed = null; + const keywords = consumeKeywords(tokens, KwModifiers); + if (keywords.has("indexed")) { + if (!allowIndexed) { throw new Error(""); } + indexed = true; + } + + const name = (tokens.peekType("ID") ? tokens.pop().text: ""); + + if (tokens.length) { throw new Error("leftover tokens"); } + + return new ParamType(_guard, name, type, baseType, indexed, comps, arrayLength, arrayChildren); + } + + static isParamType(value: any): value is ParamType { + return (value && value[internal] === ParamTypeInternal); + } +} + +export enum FragmentType { + "constructor" = "constructor", + "error" = "error", + "event" = "event", + "function" = "function", + "struct" = "struct", +}; + +export abstract class Fragment { + readonly type!: FragmentType; + readonly inputs!: ReadonlyArray; + + constructor(guard: any, type: FragmentType, inputs: ReadonlyArray) { + logger.assertPrivate(guard, _guard, "Fragment"); + inputs = Object.freeze(inputs.slice()); + defineProperties(this, { type, inputs }); + } + + abstract format(format?: FormatType): string; + + static from(obj: any): Fragment { + if (typeof(obj) === "string") { return this.fromString(obj); } + if (obj instanceof TokenString) { return this.fromTokens(obj); } + if (typeof(obj) === "object") { return this.fromObject(obj); } + throw new Error(`unsupported type: ${ obj }`); + } + + static fromObject(obj: any): Fragment { + switch (obj.type) { + case "constructor": return ConstructorFragment.fromObject(obj); + case "error": return ErrorFragment.fromObject(obj); + case "event": return EventFragment.fromObject(obj); + case "function": return FunctionFragment.fromObject(obj); + case "struct": return StructFragment.fromObject(obj); + } + throw new Error("not implemented yet"); + } + + static fromString(text: string): Fragment { + try { + Fragment.from(JSON.parse(text)); + } catch (e) { } + + return Fragment.fromTokens(lex(text)); + } + + static fromTokens(tokens: TokenString): Fragment { + const type = tokens.popKeyword(KwTypes); + + switch (type) { + case "constructor": return ConstructorFragment.fromTokens(tokens); + case "error": return ErrorFragment.fromTokens(tokens); + case "event": return EventFragment.fromTokens(tokens); + case "function": return FunctionFragment.fromTokens(tokens); + case "struct": return StructFragment.fromTokens(tokens); + } + + throw new Error(`unsupported type: ${ type }`); + } + + /* + static fromTokens(tokens: TokenString): Fragment { + const assertDone = () => { + if (tokens.length) { throw new Error(`unexpected tokens: ${ tokens.toString() }`); } + }); + + const type = (tokens.length && tokens.peek().type === "KEYWORD") ? tokens.peek().text: "unknown"; + + const name = consumeName("error", tokens); + const inputs = consumeParams(tokens, type === "event"); + + switch (type) { + case "event": case "struct": + assertDone(); + } + + } + */ + + static isConstructor(value: any): value is ConstructorFragment { + return (value && value.type === "constructor"); + } + + static isError(value: any): value is ErrorFragment { + return (value && value.type === "error"); + } + + static isEvent(value: any): value is EventFragment { + return (value && value.type === "event"); + } + + static isFunction(value: any): value is FunctionFragment { + return (value && value.type === "function"); + } + + static isStruct(value: any): value is StructFragment { + return (value && value.type === "struct"); + } +} + +export abstract class NamedFragment extends Fragment { + readonly name!: string; + + constructor(guard: any, type: FragmentType, name: string, inputs: ReadonlyArray) { + super(guard, type, inputs); + inputs = Object.freeze(inputs.slice()); + defineProperties(this, { name }); + } +} + +function joinParams(format: FormatType, params: ReadonlyArray): string { + return "(" + params.map((p) => p.format(format)).join((format === FormatType.full) ? ", ": ",") + ")"; +} + +export class ErrorFragment extends NamedFragment { + constructor(guard: any, name: string, inputs: ReadonlyArray) { + super(guard, FragmentType.error, name, inputs); + } + + format(format: FormatType = FormatType.sighash): string { + if (!FormatType[format]) { + logger.throwArgumentError("invalid format type", "format", format); + } + + if (format === FormatType.json) { + return JSON.stringify({ + type: "error", + name: this.name, + inputs: this.inputs.map((input) => JSON.parse(input.format(format))), + }); + } + + const result = [ ]; + if (format !== FormatType.sighash) { result.push("error"); } + result.push(this.name + joinParams(format, this.inputs)); + return result.join(" "); + } + + static fromString(text: string): ErrorFragment { + return ErrorFragment.fromTokens(lex(text)); + } + + static fromTokens(tokens: TokenString): ErrorFragment { + const name = consumeName("error", tokens); + const inputs = consumeParams(tokens); + consumeEoi(tokens); + + return new ErrorFragment(_guard, name, inputs); + } +} + + +export class EventFragment extends NamedFragment { + readonly anonymous!: boolean; + + constructor(guard: any, name: string, inputs: ReadonlyArray, anonymous: boolean) { + super(guard, FragmentType.event, name, inputs); + defineProperties(this, { anonymous }); + } + + format(format: FormatType = FormatType.sighash): string { + if (!FormatType[format]) { + logger.throwArgumentError("invalid format type", "format", format); + } + + if (format === FormatType.json) { + return JSON.stringify({ + type: "event", + anonymous: this.anonymous, + name: this.name, + inputs: this.inputs.map((i) => JSON.parse(i.format(format))) + }); + } + + const result = [ ]; + if (format !== FormatType.sighash) { result.push("event"); } + result.push(this.name + joinParams(format, this.inputs)); + if (format !== FormatType.sighash && this.anonymous) { result.push("anonymous"); } + return result.join(" "); + } + + static fromString(text: string): EventFragment { + return EventFragment.fromTokens(lex(text)); + } + + static fromTokens(tokens: TokenString): EventFragment { + const name = consumeName("event", tokens); + const inputs = consumeParams(tokens, true); + const anonymous = !!consumeKeywords(tokens, setify([ "anonymous" ])).has("anonymous"); + consumeEoi(tokens); + + return new EventFragment(_guard, name, inputs, anonymous); + } +} + + +export class ConstructorFragment extends Fragment { + readonly payable!: boolean; + readonly gas!: null | bigint; + + constructor(guard: any, type: FragmentType, inputs: ReadonlyArray, payable: boolean, gas: null | bigint) { + super(guard, type, inputs); + defineProperties(this, { payable, gas }); + } + + format(format: FormatType = FormatType.sighash): string { + if (!FormatType[format]) { + logger.throwArgumentError("invalid format type", "format", format); + } + + if (format === FormatType.sighash) { + logger.throwError("cannot format a constructor for sighash", "UNSUPPORTED_OPERATION", { + operation: "format(sighash)" + }); + } + + if (format === FormatType.json) { + return JSON.stringify({ + type: "constructor", + stateMutability: (this.payable ? "payable": "undefined"), + payable: this.payable, + gas: ((this.gas != null) ? this.gas: undefined), + inputs: this.inputs.map((i) => JSON.parse(i.format(format))) + }); + } + + const result = [ `constructor${ joinParams(format, this.inputs) }` ]; + result.push((this.payable) ? "payable": "nonpayable"); + if (this.gas != null) { result.push(`@${ this.gas.toString() }`); } + return result.join(" "); + } + + static fromString(text: string): ConstructorFragment { + return ConstructorFragment.fromTokens(lex(text)); + } + + static fromObject(obj: any): ConstructorFragment { + throw new Error("TODO"); + } + + static fromTokens(tokens: TokenString): ConstructorFragment { + consumeKeywords(tokens, setify([ "constructor" ])); + const inputs = consumeParams(tokens); + const payable = !!consumeKeywords(tokens, setify([ "payable" ])).has("payable"); + const gas = consumeGas(tokens); + consumeEoi(tokens); + + return new ConstructorFragment(_guard, FragmentType.constructor, inputs, payable, gas); + } +} + +export class FunctionFragment extends NamedFragment { + readonly constant!: boolean; + readonly outputs!: ReadonlyArray; + readonly stateMutability!: string; + + readonly payable!: boolean; + readonly gas!: null | bigint; + + constructor(guard: any, name: string, stateMutability: string, inputs: ReadonlyArray, outputs: ReadonlyArray, gas: null | bigint) { + super(guard, FragmentType.function, name, inputs); + outputs = Object.freeze(outputs.slice()); + const constant = (stateMutability === "view" || stateMutability === "pure"); + const payable = (stateMutability === "payable"); + defineProperties(this, { constant, gas, outputs, payable, stateMutability }); + } + + format(format: FormatType = FormatType.sighash): string { + if (!FormatType[format]) { + logger.throwArgumentError("invalid format type", "format", format); + } + + if (format === FormatType.json) { + return JSON.stringify({ + type: "function", + name: this.name, + constant: this.constant, + stateMutability: ((this.stateMutability !== "nonpayable") ? this.stateMutability: undefined), + payable: this.payable, + gas: ((this.gas != null) ? this.gas: undefined), + inputs: this.inputs.map((i) => JSON.parse(i.format(format))), + outputs: this.outputs.map((o) => JSON.parse(o.format(format))), + }); + } + + const result = []; + + if (format !== FormatType.sighash) { result.push("function"); } + + result.push(this.name + joinParams(format, this.inputs)); + + if (format !== FormatType.sighash) { + if (this.stateMutability !== "nonpayable") { + result.push(this.stateMutability); + } + + if (this.outputs && this.outputs.length) { + result.push("returns"); + result.push(joinParams(format, this.outputs)); + } + + if (this.gas != null) { result.push(`@${ this.gas.toString() }`); } + } + return result.join(" "); + } + + static fromString(text: string): FunctionFragment { + return FunctionFragment.fromTokens(lex(text)); + } + + static fromTokens(tokens: TokenString): FunctionFragment { + const name = consumeName("function", tokens); + const inputs = consumeParams(tokens); + const mutability = consumeMutability(tokens); + + let outputs: Array = [ ]; + if (consumeKeywords(tokens, setify([ "returns" ])).has("returns")) { + outputs = consumeParams(tokens); + } + + const gas = consumeGas(tokens); + + consumeEoi(tokens); + + return new FunctionFragment(_guard, name, mutability, inputs, outputs, gas); + } +} + +export class StructFragment extends NamedFragment { + format(): string { + throw new Error("@TODO"); + } + + static fromString(text: string): StructFragment { + return StructFragment.fromTokens(lex(text)); + } + + static fromTokens(tokens: TokenString): StructFragment { + const name = consumeName("struct", tokens); + const inputs = consumeParams(tokens); + consumeEoi(tokens); + + return new StructFragment(_guard, FragmentType.struct, name, inputs); + } +} + diff --git a/packages/abi/src.ts/index.ts b/packages/abi/src.ts/index.ts new file mode 100644 index 000000000..df6a76707 --- /dev/null +++ b/packages/abi/src.ts/index.ts @@ -0,0 +1,37 @@ +// @TODO: export from + +import { ConstructorFragment, ErrorFragment, EventFragment, Fragment, FunctionFragment, JsonFragment, JsonFragmentType, ParamType } from "./fragments.js"; +import { AbiCoder, CoerceFunc, defaultAbiCoder } from "./abi-coder.js"; +import { checkResultErrors, Indexed, Interface, InterfaceAbi, LogDescription, Result, TransactionDescription } from "./interface.js"; +export { Typed } from "./typed.js"; + +export { + ConstructorFragment, + ErrorFragment, + EventFragment, + Fragment, + FunctionFragment, + ParamType, + + AbiCoder, + defaultAbiCoder, + + Interface, + Indexed, + +}; + +export type { + CoerceFunc, + JsonFragment, + JsonFragmentType, + + InterfaceAbi, + + Result, + checkResultErrors, + + LogDescription, + TransactionDescription +}; + diff --git a/packages/abi/src.ts/interface.ts b/packages/abi/src.ts/interface.ts new file mode 100644 index 000000000..8bdc6051a --- /dev/null +++ b/packages/abi/src.ts/interface.ts @@ -0,0 +1,883 @@ +import { arrayify, concat, dataSlice, hexlify, zeroPadLeft, isHexString } from "@ethersproject/bytes"; +import { keccak256 } from "@ethersproject/crypto" +import { id } from "@ethersproject/hash" +import { defineProperties } from "@ethersproject/properties"; + +import { AbiCoder, defaultAbiCoder } from "./abi-coder.js"; +import { checkResultErrors, Result } from "./coders/abstract-coder.js"; +import { ConstructorFragment, ErrorFragment, EventFragment, FormatType, Fragment, FunctionFragment, ParamType } from "./fragments.js"; +import { logger } from "./logger.js"; +import { Typed } from "./typed.js"; + +import type { BytesLike } from "@ethersproject/bytes"; +import type { BigNumberish } from "@ethersproject/logger"; + +import type { JsonFragment } from "./fragments.js"; + + +export { checkResultErrors, Result }; + +export class LogDescription { + readonly fragment!: EventFragment; + readonly name!: string; + readonly signature!: string; + readonly topic!: string; + readonly args!: Result + + constructor(fragment: EventFragment, topic: string, args: Result) { + const name = fragment.name, signature = fragment.format(); + defineProperties(this, { + fragment, name, signature, topic, args + }); + } +} + +export class TransactionDescription { + readonly fragment!: FunctionFragment; + readonly name!: string; + readonly args!: Result; + readonly signature!: string; + readonly selector!: string; + readonly value!: bigint; + + constructor(fragment: FunctionFragment, selector: string, args: Result, value: bigint) { + const name = fragment.name, signature = fragment.format(); + defineProperties(this, { + fragment, name, args, signature, selector, value + }); + } +} + +export class ErrorDescription { + readonly fragment!: ErrorFragment; + readonly name!: string; + readonly args!: Result; + readonly signature!: string; + readonly selector!: string; + + constructor(fragment: ErrorFragment, selector: string, args: Result) { + const name = fragment.name, signature = fragment.format(); + defineProperties(this, { + fragment, name, args, signature, selector + }); + } +} + +export class Indexed { + readonly hash!: null | string; + readonly _isIndexed!: boolean; + + static isIndexed(value: any): value is Indexed { + return !!(value && value._isIndexed); + } + + constructor(hash: null | string) { + defineProperties(this, { hash, _isIndexed: true }) + } +} + +type ErrorInfo = { + signature: string, + inputs: Array, + name: string, + reason: (...args: Array) => string; +}; + +// https://docs.soliditylang.org/en/v0.8.13/control-structures.html?highlight=panic#panic-via-assert-and-error-via-require +const PanicReasons: Record = { + "0": "generic panic", + "1": "assert(false)", + "17": "arithmetic overflow", + "18": "division or modulo by zero", + "33": "enum overflow", + "34": "invalid encoded storage byte array accessed", + "49": "out-of-bounds array access; popping on an empty array", + "50": "out-of-bounds access of an array or bytesN", + "65": "out of memory", + "81": "uninitialized function", +} + +const BuiltinErrors: Record = { + "0x08c379a0": { + signature: "Error(string)", + name: "Error", + inputs: [ "string" ], + reason: (message: string) => { + return `reverted with reason string ${ JSON.stringify(message) }`; + } + }, + "0x4e487b71": { + signature: "Panic(uint256)", + name: "Panic", + inputs: [ "uint256" ], + reason: (code: bigint) => { + let reason = "unknown panic code"; + if (code >= 0 && code <= 0xff && PanicReasons[code.toString()]) { + reason = PanicReasons[code.toString()]; + } + return `reverted with panic code 0x${ code.toString(16) } (${ reason })`; + } + } +} + +/* +function wrapAccessError(property: string, error: Error): Error { + const wrap = new Error(`deferred error during ABI decoding triggered accessing ${ property }`); + (wrap).error = error; + return wrap; +} +*/ +/* +function checkNames(fragment: Fragment, type: "input" | "output", params: Array): void { + params.reduce((accum, param) => { + if (param.name) { + if (accum[param.name]) { + logger.throwArgumentError(`duplicate ${ type } parameter ${ JSON.stringify(param.name) } in ${ fragment.format("full") }`, "fragment", fragment); + } + accum[param.name] = true; + } + return accum; + }, <{ [ name: string ]: boolean }>{ }); +} +*/ +//export type AbiCoder = any; +//const defaultAbiCoder: AbiCoder = { }; + +export type InterfaceAbi = string | ReadonlyArray; + +export class Interface { + readonly fragments!: ReadonlyArray; + + readonly deploy!: ConstructorFragment; + + #errors: Map; + #events: Map; + #functions: Map; +// #structs: Map; + + #abiCoder: AbiCoder; + + constructor(fragments: InterfaceAbi) { + let abi: ReadonlyArray = [ ]; + if (typeof(fragments) === "string") { + abi = JSON.parse(fragments); + } else { + abi = fragments; + } + + this.#functions = new Map(); + this.#errors = new Map(); + this.#events = new Map(); +// this.#structs = new Map(); + + defineProperties(this, { + fragments: Object.freeze(abi.map((f) => Fragment.from(f)).filter((f) => (f != null))), + }); + + this.#abiCoder = this.getAbiCoder(); + + // Add all fragments by their signature + this.fragments.forEach((fragment) => { + let bucket: Map; + switch (fragment.type) { + case "constructor": + if (this.deploy) { + logger.warn("duplicate definition - constructor"); + return; + } + //checkNames(fragment, "input", fragment.inputs); + defineProperties(this, { deploy: fragment }); + return; + + case "function": + //checkNames(fragment, "input", fragment.inputs); + //checkNames(fragment, "output", (fragment).outputs); + bucket = this.#functions; + break; + + case "event": + //checkNames(fragment, "input", fragment.inputs); + bucket = this.#events; + break; + + case "error": + bucket = this.#errors; + break; + + default: + return; + } + + const signature = fragment.format(); + if (bucket.has(signature)) { + logger.warn("duplicate definition - " + signature); + return; + } + + bucket.set(signature, fragment); + }); + + // If we do not have a constructor add a default + if (!this.deploy) { + defineProperties(this, { + deploy: ConstructorFragment.fromString("constructor()") + }); + } + } +// @TODO: multi sig? + format(format?: FormatType): string | Array { + if (!format) { format = FormatType.full; } + if (format === FormatType.sighash) { + logger.throwArgumentError("interface does not support formatting sighash", "format", format); + } + + const abi = this.fragments.map((f) => f.format(format)); + + // We need to re-bundle the JSON fragments a bit + if (format === FormatType.json) { + return JSON.stringify(abi.map((j) => JSON.parse(j))); + } + + return abi; + } + + getAbiCoder(): AbiCoder { + return defaultAbiCoder; + } + + //static getAddress(address: string): string { + // return getAddress(address); + //} + + //static getSelector(fragment: ErrorFragment | FunctionFragment): string { + // return dataSlice(id(fragment.format()), 0, 4); + //} + + //static getEventTopic(eventFragment: EventFragment): string { + // return id(eventFragment.format()); + //} + + // Find a function definition by any means necessary (unless it is ambiguous) + #getFunction(key: string, values: null | Array, forceUnique: boolean): FunctionFragment { + + // Selector + if (isHexString(key)) { + const selector = key.toLowerCase(); + for (const fragment of this.#functions.values()) { + if (selector === this.getSelector(fragment)) { return fragment; } + } + logger.throwArgumentError("no matching function", "selector", key); + } + + // It is a bare name, look up the function (will return null if ambiguous) + if (key.indexOf("(") === -1) { + const matching: Array = [ ]; + for (const [ name, fragment ] of this.#functions) { + if (name.split("("/* fix:) */)[0] === key) { matching.push(fragment); } + } + + if (values) { + const lastValue = (values.length > 0) ? values[values.length - 1]: null; + + let valueLength = values.length; + let allowOptions = true; + if (Typed.isTyped(lastValue) && lastValue.type === "overrides") { + allowOptions = false; + valueLength--; + } + + // Remove all matches that don't have a compatible length. The args + // may contain an overrides, so the match may have n or n - 1 parameters + for (let i = matching.length - 1; i >= 0; i--) { + const inputs = matching[i].inputs.length; + if (inputs !== valueLength && (!allowOptions || inputs !== valueLength - 1)) { + matching.splice(i, 1); + } + } + + // Remove all matches that don't match the Typed signature + for (let i = matching.length - 1; i >= 0; i--) { + const inputs = matching[i].inputs; + for (let j = 0; j < values.length; j++) { + // Not a typed value + if (!Typed.isTyped(values[j])) { continue; } + + // We are past the inputs + if (j >= inputs.length) { + if (values[j].type === "overrides") { continue; } + matching.splice(i, 1); + break; + } + + // Make sure the value type matches the input type + if (values[j].type !== inputs[j].baseType) { + matching.splice(i, 1); + break; + } + } + } + } + + // We found a single matching signature with an overrides, but the + // last value is something that cannot possibly be an options + if (matching.length === 1 && values && values.length !== matching[0].inputs.length) { + const lastArg = values[values.length - 1]; + if (lastArg == null || Array.isArray(lastArg) || typeof(lastArg) !== "object") { + matching.splice(0, 1); + } + } + + if (matching.length === 0) { + logger.throwArgumentError("no matching function", "name", key); + + } else if (matching.length > 1 && forceUnique) { + const matchStr = matching.map((m) => JSON.stringify(m.format())).join(", "); + logger.throwArgumentError(`multiple matching functions (i.e. ${ matchStr })`, "name", key); + } + + return matching[0]; + } + + // Normalize the signature and lookup the function + const result = this.#functions.get(FunctionFragment.fromString(key).format()); + if (result) { return result; } + + return logger.throwArgumentError("no matching function", "signature", key); + } + getFunctionName(key: string): string { + return (this.#getFunction(key, null, false)).name; + } + getFunction(key: string, values?: Array): FunctionFragment { + return this.#getFunction(key, values || null, true) + } + + + // Find an event definition by any means necessary (unless it is ambiguous) + #getEvent(key: string, values: null | Array, forceUnique: boolean): EventFragment { + + // EventTopic + if (isHexString(key)) { + const eventTopic = key.toLowerCase(); + for (const fragment of this.#events.values()) { + if (eventTopic === this.getEventTopic(fragment)) { return fragment; } + } + logger.throwArgumentError("no matching event", "eventTopic", key); + } + + // It is a bare name, look up the function (will return null if ambiguous) + if (key.indexOf("(") === -1) { + const matching = [ ]; + for (const [ name, fragment ] of this.#events) { + if (name.split("("/* fix:) */)[0] === key) { matching.push(fragment); } + } + + if (values) { + // Remove all matches that don't have a compatible length. + for (let i = matching.length - 1; i >= 0; i--) { + if (matching[i].inputs.length < values.length) { + matching.splice(i, 1); + } + } + + // Remove all matches that don't match the Typed signature + for (let i = matching.length - 1; i >= 0; i--) { + const inputs = matching[i].inputs; + for (let j = 0; j < values.length; j++) { + // Not a typed value + if (!Typed.isTyped(values[j])) { continue; } + + // Make sure the value type matches the input type + if (values[j].type !== inputs[j].baseType) { + matching.splice(i, 1); + break; + } + } + } + } + + if (matching.length === 0) { + logger.throwArgumentError("no matching event", "name", key); + } else if (matching.length > 1 && forceUnique) { + // @TODO: refine by Typed + logger.throwArgumentError("multiple matching events", "name", key); + } + + return matching[0]; + } + + // Normalize the signature and lookup the function + const result = this.#events.get(EventFragment.fromString(key).format()); + if (result) { return result; } + + return logger.throwArgumentError("no matching event", "signature", key); + } + getEventName(key: string): string { + return (this.#getEvent(key, null, false)).name; + } + getEvent(key: string, values?: Array): EventFragment { + return this.#getEvent(key, values || null, true) + } + + // Find a function definition by any means necessary (unless it is ambiguous) + getError(key: string, values?: Array): ErrorFragment { + if (isHexString(key)) { + const selector = key.toLowerCase(); + for (const fragment of this.#errors.values()) { + if (selector === this.getSelector(fragment)) { return fragment; } + } + logger.throwArgumentError("no matching error", "selector", key); + } + + // It is a bare name, look up the function (will return null if ambiguous) + if (key.indexOf("(") === -1) { + const matching = [ ]; + for (const [ name, fragment ] of this.#errors) { + if (name.split("("/* fix:) */)[0] === key) { matching.push(fragment); } + } + if (matching.length === 0) { + logger.throwArgumentError("no matching error", "name", key); + } else if (matching.length > 1) { + // @TODO: refine by Typed + logger.throwArgumentError("multiple matching errors", "name", key); + } + + return matching[0]; + } + + // Normalize the signature and lookup the function + const result = this.#errors.get(ErrorFragment.fromString(key).format()); + if (result) { return result; } + + return logger.throwArgumentError("no matching error", "signature", key); + } + + // Get the 4-byte selector used by Solidity to identify a function + getSelector(fragment: ErrorFragment | FunctionFragment): string { + /* + if (typeof(fragment) === "string") { + const matches: Array = [ ]; + + try { matches.push(this.getFunction(fragment)); } catch (error) { } + try { matches.push(this.getError(fragment)); } catch (_) { } + + if (matches.length === 0) { + logger.throwArgumentError("unknown fragment", "key", fragment); + } else if (matches.length > 1) { + logger.throwArgumentError("ambiguous fragment matches function and error", "key", fragment); + } + + fragment = matches[0]; + } + */ + + return dataSlice(id(fragment.format()), 0, 4); + } + + // Get the 32-byte topic hash used by Solidity to identify an event + getEventTopic(fragment: EventFragment): string { + //if (typeof(fragment) === "string") { fragment = this.getEvent(eventFragment); } + return id(fragment.format()); + } + + + _decodeParams(params: ReadonlyArray, data: BytesLike): Result { + return this.#abiCoder.decode(params, data) + } + + _encodeParams(params: ReadonlyArray, values: ReadonlyArray): string { + return this.#abiCoder.encode(params, values) + } + + encodeDeploy(values?: ReadonlyArray): string { + return this._encodeParams(this.deploy.inputs, values || [ ]); + } + + decodeErrorResult(fragment: ErrorFragment | string, data: BytesLike): Result { + if (typeof(fragment) === "string") { fragment = this.getError(fragment); } + + if (dataSlice(data, 0, 4) !== this.getSelector(fragment)) { + logger.throwArgumentError(`data signature does not match error ${ fragment.name }.`, "data", data); + } + + return this._decodeParams(fragment.inputs, dataSlice(data, 4)); + } + + encodeErrorResult(fragment: ErrorFragment | string, values?: ReadonlyArray): string { + if (typeof(fragment) === "string") { fragment = this.getError(fragment); } + + return concat([ + this.getSelector(fragment), + this._encodeParams(fragment.inputs, values || [ ]) + ]); + } + + // Decode the data for a function call (e.g. tx.data) + decodeFunctionData(fragment: FunctionFragment | string, data: BytesLike): Result { + if (typeof(fragment) === "string") { fragment = this.getFunction(fragment); } + + if (dataSlice(data, 0, 4) !== this.getSelector(fragment)) { + logger.throwArgumentError(`data signature does not match function ${ fragment.name }.`, "data", data); + } + + return this._decodeParams(fragment.inputs, dataSlice(data, 4)); + } + + // Encode the data for a function call (e.g. tx.data) + encodeFunctionData(fragment: FunctionFragment | string, values?: ReadonlyArray): string { + if (typeof(fragment) === "string") { fragment = this.getFunction(fragment); } + + return concat([ + this.getSelector(fragment), + this._encodeParams(fragment.inputs, values || [ ]) + ]); + } + + // Decode the result from a function call (e.g. from eth_call) + decodeFunctionResult(fragment: FunctionFragment | string, data: BytesLike): Result { + if (typeof(fragment) === "string") { fragment = this.getFunction(fragment); } + + let message = "invalid length for result data"; + + const bytes = arrayify(data); + if ((bytes.length % 32) === 0) { + try { + return this.#abiCoder.decode(fragment.outputs, bytes); + } catch (error) { + message = "could not decode result data"; + } + } + + // Call returned data with no error, but the data is junk + return logger.throwError(message, "BAD_DATA", { + value: hexlify(bytes), + info: { method: fragment.name, signature: fragment.format() } + }); + } + + makeError(fragment: FunctionFragment | string, _data: BytesLike, tx?: { data: string }): Error { + if (typeof(fragment) === "string") { fragment = this.getFunction(fragment); } + + const data = logger.getBytes(_data); + + let args: undefined | Result = undefined; + if (tx) { + try { + args = this.#abiCoder.decode(fragment.inputs, tx.data || "0x"); + } catch (error) { console.log(error); } + } + + let errorArgs: undefined | Result = undefined; + let errorName: undefined | string = undefined; + let errorSignature: undefined | string = undefined; + let reason: string = "unknown reason"; + + if (data.length === 0) { + reason = "missing error reason"; + + } else if ((data.length % 32) === 4) { + const selector = hexlify(data.slice(0, 4)); + const builtin = BuiltinErrors[selector]; + if (builtin) { + try { + errorName = builtin.name; + errorSignature = builtin.signature; + errorArgs = this.#abiCoder.decode(builtin.inputs, data.slice(4)); + reason = builtin.reason(...errorArgs); + } catch (error) { + console.log(error); // @TODO: remove + } + } else { + reason = "unknown custom error"; + try { + const error = this.getError(selector); + errorName = error.name; + errorSignature = error.format(); + reason = `custom error: ${ errorSignature }`; + try { + errorArgs = this.#abiCoder.decode(error.inputs, data.slice(4)); + } catch (error) { + reason = `custom error: ${ errorSignature } (coult not decode error data)` + } + } catch (error) { + console.log(error); // @TODO: remove + } + } + } + + return logger.makeError("call revert exception", "CALL_EXCEPTION", { + data: hexlify(data), transaction: null, + method: fragment.name, signature: fragment.format(), args, + errorArgs, errorName, errorSignature, reason + }); + } + + // Encode the result for a function call (e.g. for eth_call) + encodeFunctionResult(functionFragment: FunctionFragment | string, values?: ReadonlyArray): string { + if (typeof(functionFragment) === "string") { + functionFragment = this.getFunction(functionFragment); + } + + return hexlify(this.#abiCoder.encode(functionFragment.outputs, values || [ ])); + } +/* + spelunk(inputs: Array, values: ReadonlyArray, processfunc: (type: string, value: any) => Promise): Promise> { + const promises: Array> = [ ]; + const process = function(type: ParamType, value: any): any { + if (type.baseType === "array") { + return descend(type.child + } + if (type. === "address") { + } + }; + + const descend = function (inputs: Array, values: ReadonlyArray) { + if (inputs.length !== values.length) { throw new Error("length mismatch"); } + + }; + + const result: Array = [ ]; + values.forEach((value, index) => { + if (value == null) { + topics.push(null); + } else if (param.baseType === "array" || param.baseType === "tuple") { + logger.throwArgumentError("filtering with tuples or arrays not supported", ("contract." + param.name), value); + } else if (Array.isArray(value)) { + topics.push(value.map((value) => encodeTopic(param, value))); + } else { + topics.push(encodeTopic(param, value)); + } + }); + } +*/ + // Create the filter for the event with search criteria (e.g. for eth_filterLog) + encodeFilterTopics(eventFragment: EventFragment, values: ReadonlyArray): Array> { + if (typeof(eventFragment) === "string") { + eventFragment = this.getEvent(eventFragment); + } + + if (values.length > eventFragment.inputs.length) { + logger.throwError("too many arguments for " + eventFragment.format(), "UNEXPECTED_ARGUMENT", { + count: values.length, + expectedCount: eventFragment.inputs.length + }) + } + + const topics: Array> = []; + if (!eventFragment.anonymous) { topics.push(this.getEventTopic(eventFragment)); } + + const encodeTopic = (param: ParamType, value: any): string => { + if (param.type === "string") { + return id(value); + } else if (param.type === "bytes") { + return keccak256(hexlify(value)); + } + + // Check addresses are valid + if (param.type === "address") { this.#abiCoder.encode( [ "address" ], [ value ]); } + return zeroPadLeft(hexlify(value), 32); + //@TOOD should probably be return toHex(value, 32) + }; + + values.forEach((value, index) => { + + const param = eventFragment.inputs[index]; + + if (!param.indexed) { + if (value != null) { + logger.throwArgumentError("cannot filter non-indexed parameters; must be null", ("contract." + param.name), value); + } + return; + } + + if (value == null) { + topics.push(null); + } else if (param.baseType === "array" || param.baseType === "tuple") { + logger.throwArgumentError("filtering with tuples or arrays not supported", ("contract." + param.name), value); + } else if (Array.isArray(value)) { + topics.push(value.map((value) => encodeTopic(param, value))); + } else { + topics.push(encodeTopic(param, value)); + } + }); + + // Trim off trailing nulls + while (topics.length && topics[topics.length - 1] === null) { + topics.pop(); + } + + return topics; + } + + encodeEventLog(eventFragment: EventFragment, values: ReadonlyArray): { data: string, topics: Array } { + if (typeof(eventFragment) === "string") { + eventFragment = this.getEvent(eventFragment); + } + + const topics: Array = [ ]; + + const dataTypes: Array = [ ]; + const dataValues: Array = [ ]; + + if (!eventFragment.anonymous) { + topics.push(this.getEventTopic(eventFragment)); + } + + if (values.length !== eventFragment.inputs.length) { + logger.throwArgumentError("event arguments/values mismatch", "values", values); + } + + eventFragment.inputs.forEach((param, index) => { + const value = values[index]; + if (param.indexed) { + if (param.type === "string") { + topics.push(id(value)) + } else if (param.type === "bytes") { + topics.push(keccak256(value)) + } else if (param.baseType === "tuple" || param.baseType === "array") { + // @TODO + throw new Error("not implemented"); + } else { + topics.push(this.#abiCoder.encode([ param.type] , [ value ])); + } + } else { + dataTypes.push(param); + dataValues.push(value); + } + }); + + return { + data: this.#abiCoder.encode(dataTypes , dataValues), + topics: topics + }; + } + + // Decode a filter for the event and the search criteria + decodeEventLog(eventFragment: EventFragment | string, data: BytesLike, topics?: ReadonlyArray): Result { + if (typeof(eventFragment) === "string") { + eventFragment = this.getEvent(eventFragment); + } + + if (topics != null && !eventFragment.anonymous) { + const eventTopic = this.getEventTopic(eventFragment); + if (!isHexString(topics[0], 32) || topics[0].toLowerCase() !== eventTopic) { + logger.throwArgumentError("fragment/topic mismatch", "topics[0]", topics[0]); + } + topics = topics.slice(1); + } + + const indexed: Array = []; + const nonIndexed: Array = []; + const dynamic: Array = []; + + eventFragment.inputs.forEach((param, index) => { + if (param.indexed) { + if (param.type === "string" || param.type === "bytes" || param.baseType === "tuple" || param.baseType === "array") { + indexed.push(ParamType.fromObject({ type: "bytes32", name: param.name })); + dynamic.push(true); + } else { + indexed.push(param); + dynamic.push(false); + } + } else { + nonIndexed.push(param); + dynamic.push(false); + } + }); + + const resultIndexed = (topics != null) ? this.#abiCoder.decode(indexed, concat(topics)): null; + const resultNonIndexed = this.#abiCoder.decode(nonIndexed, data, true); + + //const result: (Array & { [ key: string ]: any }) = [ ]; + const values: Array = [ ]; + const keys: Array = [ ]; + let nonIndexedIndex = 0, indexedIndex = 0; + eventFragment.inputs.forEach((param, index) => { + let value = null; + if (param.indexed) { + if (resultIndexed == null) { + value = new Indexed(null); + + } else if (dynamic[index]) { + value = new Indexed(resultIndexed[indexedIndex++]); + + } else { + try { + value = resultIndexed[indexedIndex++]; + } catch (error) { + value = error; + } + } + } else { + try { + value = resultNonIndexed[nonIndexedIndex++]; + } catch (error) { + value = error; + } + } + + values.push(value); + keys.push(param.name || null); + }); + + return Result.fromItems(values, keys); + } + + // Given a transaction, find the matching function fragment (if any) and + // determine all its properties and call parameters + parseTransaction(tx: { data: string, value?: BigNumberish }): null | TransactionDescription { + const data = logger.getBytes(tx.data, "tx.data"); + const value = logger.getBigInt((tx.value != null) ? tx.value: 0, "tx.value"); + + const fragment = this.getFunction(hexlify(data.slice(0, 4))); + + if (!fragment) { return null; } + + const args = this.#abiCoder.decode(fragment.inputs, data.slice(4)); + return new TransactionDescription(fragment, this.getSelector(fragment), args, value); + } + + // @TODO + //parseCallResult(data: BytesLike): ?? + + // Given an event log, find the matching event fragment (if any) and + // determine all its properties and values + parseLog(log: { topics: Array, data: string}): null | LogDescription { + const fragment = this.getEvent(log.topics[0]); + + if (!fragment || fragment.anonymous) { return null; } + + // @TODO: If anonymous, and the only method, and the input count matches, should we parse? + // Probably not, because just because it is the only event in the ABI does + // not mean we have the full ABI; maybe just a fragment? + + + return new LogDescription(fragment, this.getEventTopic(fragment), this.decodeEventLog(fragment, log.data, log.topics)); + } + + parseError(data: BytesLike): null | ErrorDescription { + const hexData = hexlify(data); + const fragment = this.getError(dataSlice(hexData, 0, 4)); + + if (!fragment) { return null; } + + const args = this.#abiCoder.decode(fragment.inputs, dataSlice(hexData, 4)); + return new ErrorDescription(fragment, this.getSelector(fragment), args); + } + + + static from(value: ReadonlyArray | string | Interface) { + // Already an Interface, which is immutable + if (value instanceof Interface) { return value; } + + // JSON + if (typeof(value) === "string") { return new Interface(JSON.parse(value)); } + + // Maybe an interface from an older version, or from a symlinked copy + if (typeof((value).format) === "function") { + return new Interface((value).format(FormatType.json)); + } + + // Array of fragments + return new Interface(value); + } +} diff --git a/packages/abi/src.ts/logger.ts b/packages/abi/src.ts/logger.ts new file mode 100644 index 000000000..6fde778de --- /dev/null +++ b/packages/abi/src.ts/logger.ts @@ -0,0 +1,3 @@ +import { Logger } from "@ethersproject/logger"; +import { version } from "./_version.js"; +export const logger = new Logger(version); diff --git a/packages/abi/src.ts/typed.ts b/packages/abi/src.ts/typed.ts new file mode 100644 index 000000000..b34ebcd30 --- /dev/null +++ b/packages/abi/src.ts/typed.ts @@ -0,0 +1,254 @@ +import { defineProperties } from "@ethersproject/properties"; + +import type { Addressable } from "@ethersproject/address"; +import type { BigNumberish, BytesLike } from "@ethersproject/logger"; + +import type { Result } from "./coders/abstract-coder.js"; + +const _gaurd = { }; + +function n(value: BigNumberish, width: number): Typed { + let signed = false; + if (width < 0) { + signed = true; + width *= -1; + } + + // @TODO: Check range is valid for value + return new Typed(_gaurd, `${ signed ? "": "u" }int${ width }`, value, { signed, width }); +} + +function b(value: BytesLike, size?: number): Typed { + // @TODO: Check range is valid for value + return new Typed(_gaurd, `bytes${ (size) ? size: "" }`, value, { size }); +} + +export interface TypedNumber extends Typed { + defaultValue(): number; + minValue(): number; + maxValue(): number; +} + +export interface TypedBigInt extends Typed { + defaultValue(): bigint; + minValue(): bigint; + maxValue(): bigint; +} + +export interface TypedData extends Typed { + defaultValue(): string; +} + +export interface TypedString extends Typed { + defaultValue(): string; +} + +const _typedSymbol = Symbol.for("_ethers_typed"); + +export class Typed { + readonly type!: string; + readonly value!: any; + + readonly #options: any; + + readonly _typedSymbol!: Symbol; + + constructor(gaurd: any, type: string, value: any, options: any = null) { + if (gaurd !== _gaurd) { throw new Error("private constructor"); } + defineProperties(this, { _typedSymbol, type, value }); + this.#options = options; + + // Check the value is valid + this.format(); + } + + format(): string { + if (this.type === "array") { + throw new Error(""); + } else if (this.type === "dynamicArray") { + throw new Error(""); + } else if (this.type === "tuple") { + return `tuple(${ this.value.map((v: Typed) => v.format()).join(",") })` + } + + return this.type; + } + + defaultValue(): string | number | bigint | Result { + return 0; + } + + minValue(): string | number | bigint { + return 0; + } + + maxValue(): string | number | bigint { + return 0; + } + + isBigInt(): this is TypedBigInt { + return !!(this.type.match(/^u?int[0-9]+$/)); + } + + isData(): this is TypedData { + return (this.type.substring(0, 5) === "bytes"); + } + + isString(): this is TypedString { + return (this.type === "string"); + } + + get tupleName(): null | string { + if (this.type !== "tuple") { throw TypeError("not a tuple"); } + return this.#options; + } + + // Returns the length of this type as an array + // - `null` indicates the length is unforced, it could be dynamic + // - `-1` indicates the length is dynamic + // - any other value indicates it is a static array and is its length + get arrayLength(): null | number { + if (this.type !== "array") { throw TypeError("not an array"); } + if (this.#options === true) { return -1; } + if (this.#options === false) { return (>(this.value)).length; } + return null; + } + + static from(type: string, value: any): Typed { + return new Typed(_gaurd, type, value); + } + + static uint8(v: BigNumberish): Typed { return n(v, 8); } + static uint16(v: BigNumberish): Typed { return n(v, 16); } + static uint24(v: BigNumberish): Typed { return n(v, 24); } + static uint32(v: BigNumberish): Typed { return n(v, 32); } + static uint40(v: BigNumberish): Typed { return n(v, 40); } + static uint48(v: BigNumberish): Typed { return n(v, 46); } + static uint56(v: BigNumberish): Typed { return n(v, 56); } + static uint64(v: BigNumberish): Typed { return n(v, 64); } + static uint72(v: BigNumberish): Typed { return n(v, 72); } + static uint80(v: BigNumberish): Typed { return n(v, 80); } + static uint88(v: BigNumberish): Typed { return n(v, 88); } + static uint96(v: BigNumberish): Typed { return n(v, 96); } + static uint104(v: BigNumberish): Typed { return n(v, 104); } + static uint112(v: BigNumberish): Typed { return n(v, 112); } + static uint120(v: BigNumberish): Typed { return n(v, 120); } + static uint128(v: BigNumberish): Typed { return n(v, 128); } + static uint136(v: BigNumberish): Typed { return n(v, 136); } + static uint144(v: BigNumberish): Typed { return n(v, 144); } + static uint152(v: BigNumberish): Typed { return n(v, 152); } + static uint160(v: BigNumberish): Typed { return n(v, 160); } + static uint168(v: BigNumberish): Typed { return n(v, 168); } + static uint176(v: BigNumberish): Typed { return n(v, 176); } + static uint184(v: BigNumberish): Typed { return n(v, 184); } + static uint192(v: BigNumberish): Typed { return n(v, 192); } + static uint200(v: BigNumberish): Typed { return n(v, 200); } + static uint208(v: BigNumberish): Typed { return n(v, 208); } + static uint216(v: BigNumberish): Typed { return n(v, 216); } + static uint224(v: BigNumberish): Typed { return n(v, 224); } + static uint232(v: BigNumberish): Typed { return n(v, 232); } + static uint240(v: BigNumberish): Typed { return n(v, 240); } + static uint248(v: BigNumberish): Typed { return n(v, 248); } + static uint256(v: BigNumberish): Typed { return n(v, 256); } + static uint(v: BigNumberish): Typed { return n(v, 256); } + + static int8(v: BigNumberish): Typed { return n(v, -8); } + static int16(v: BigNumberish): Typed { return n(v, -16); } + static int24(v: BigNumberish): Typed { return n(v, -24); } + static int32(v: BigNumberish): Typed { return n(v, -32); } + static int40(v: BigNumberish): Typed { return n(v, -40); } + static int48(v: BigNumberish): Typed { return n(v, -46); } + static int56(v: BigNumberish): Typed { return n(v, -56); } + static int64(v: BigNumberish): Typed { return n(v, -64); } + static int72(v: BigNumberish): Typed { return n(v, -72); } + static int80(v: BigNumberish): Typed { return n(v, -80); } + static int88(v: BigNumberish): Typed { return n(v, -88); } + static int96(v: BigNumberish): Typed { return n(v, -96); } + static int104(v: BigNumberish): Typed { return n(v, -104); } + static int112(v: BigNumberish): Typed { return n(v, -112); } + static int120(v: BigNumberish): Typed { return n(v, -120); } + static int128(v: BigNumberish): Typed { return n(v, -128); } + static int136(v: BigNumberish): Typed { return n(v, -136); } + static int144(v: BigNumberish): Typed { return n(v, -144); } + static int152(v: BigNumberish): Typed { return n(v, -152); } + static int160(v: BigNumberish): Typed { return n(v, -160); } + static int168(v: BigNumberish): Typed { return n(v, -168); } + static int176(v: BigNumberish): Typed { return n(v, -176); } + static int184(v: BigNumberish): Typed { return n(v, -184); } + static int192(v: BigNumberish): Typed { return n(v, -192); } + static int200(v: BigNumberish): Typed { return n(v, -200); } + static int208(v: BigNumberish): Typed { return n(v, -208); } + static int216(v: BigNumberish): Typed { return n(v, -216); } + static int224(v: BigNumberish): Typed { return n(v, -224); } + static int232(v: BigNumberish): Typed { return n(v, -232); } + static int240(v: BigNumberish): Typed { return n(v, -240); } + static int248(v: BigNumberish): Typed { return n(v, -248); } + static int256(v: BigNumberish): Typed { return n(v, -256); } + static int(v: BigNumberish): Typed { return n(v, -256); } + + static bytes(v: BytesLike): Typed { return b(v); } + static bytes1(v: BytesLike): Typed { return b(v, 1); } + static bytes2(v: BytesLike): Typed { return b(v, 2); } + static bytes3(v: BytesLike): Typed { return b(v, 3); } + static bytes4(v: BytesLike): Typed { return b(v, 4); } + static bytes5(v: BytesLike): Typed { return b(v, 5); } + static bytes6(v: BytesLike): Typed { return b(v, 6); } + static bytes7(v: BytesLike): Typed { return b(v, 7); } + static bytes8(v: BytesLike): Typed { return b(v, 8); } + static bytes9(v: BytesLike): Typed { return b(v, 9); } + static bytes10(v: BytesLike): Typed { return b(v, 10); } + static bytes11(v: BytesLike): Typed { return b(v, 11); } + static bytes12(v: BytesLike): Typed { return b(v, 12); } + static bytes13(v: BytesLike): Typed { return b(v, 13); } + static bytes14(v: BytesLike): Typed { return b(v, 14); } + static bytes15(v: BytesLike): Typed { return b(v, 15); } + static bytes16(v: BytesLike): Typed { return b(v, 16); } + static bytes17(v: BytesLike): Typed { return b(v, 17); } + static bytes18(v: BytesLike): Typed { return b(v, 18); } + static bytes19(v: BytesLike): Typed { return b(v, 19); } + static bytes20(v: BytesLike): Typed { return b(v, 20); } + static bytes21(v: BytesLike): Typed { return b(v, 21); } + static bytes22(v: BytesLike): Typed { return b(v, 22); } + static bytes23(v: BytesLike): Typed { return b(v, 23); } + static bytes24(v: BytesLike): Typed { return b(v, 24); } + static bytes25(v: BytesLike): Typed { return b(v, 25); } + static bytes26(v: BytesLike): Typed { return b(v, 26); } + static bytes27(v: BytesLike): Typed { return b(v, 27); } + static bytes28(v: BytesLike): Typed { return b(v, 28); } + static bytes29(v: BytesLike): Typed { return b(v, 29); } + static bytes30(v: BytesLike): Typed { return b(v, 30); } + static bytes31(v: BytesLike): Typed { return b(v, 31); } + static bytes32(v: BytesLike): Typed { return b(v, 32); } + + static address(v: string | Addressable): Typed { return new Typed(_gaurd, "address", v); } + static bool(v: any): Typed { return new Typed(_gaurd, "bool", !!v); } + static string(v: string): Typed { return new Typed(_gaurd, "string", v); } + + static array(v: Array, dynamic?: null | boolean): Typed { + throw new Error("not implemented yet"); + return new Typed(_gaurd, "array", v, dynamic); + } + + static tuple(v: Array | Record, name?: string): Typed { + throw new Error("not implemented yet"); + return new Typed(_gaurd, "tuple", v, name); + } + + static overrides(v: Record): Typed { + return new Typed(_gaurd, "overrides", Object.assign({ }, v)); + } + + static isTyped(value: any): value is Typed { + return (value && value._typedSymbol === _typedSymbol); + } + + static dereference(value: Typed | T, type: string): T { + if (Typed.isTyped(value)) { + if (value.type !== type) { + throw new Error(`invalid type: expecetd ${ type }, got ${ value.type }`); + } + return value.value; + } + return value; + } +} diff --git a/packages/abi/tsconfig.json b/packages/abi/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/abi/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/address/.npmignore b/packages/address/.npmignore new file mode 100644 index 000000000..03a92044c --- /dev/null +++ b/packages/address/.npmignore @@ -0,0 +1,3 @@ +/src.ts/tests/** +/lib/tests/** +tsconfig.tsbuildinfo diff --git a/packages/address/LICENSE.md b/packages/address/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/address/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/address/package.json b/packages/address/package.json new file mode 100644 index 000000000..e523c6769 --- /dev/null +++ b/packages/address/package.json @@ -0,0 +1,35 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/bytes": "^6.0.0-beta.1", + "@ethersproject/crypto": "^6.0.0-beta.1", + "@ethersproject/logger": "^6.0.0-beta.1", + "@ethersproject/rlp": "^6.0.0-beta.1" + }, + "description": "Utilities for handling Ethereum Addresses for ethers.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "ethers" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/address", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/address", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/address/src.ts/_version.ts b/packages/address/src.ts/_version.ts new file mode 100644 index 000000000..9b3af753d --- /dev/null +++ b/packages/address/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/address@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/address/src.ts/address.ts b/packages/address/src.ts/address.ts new file mode 100644 index 000000000..550e11164 --- /dev/null +++ b/packages/address/src.ts/address.ts @@ -0,0 +1,128 @@ + +import { arrayify } from "@ethersproject/bytes"; +import { keccak256 } from "@ethersproject/crypto"; + +import { logger } from "./logger.js"; + + +const BN_0 = BigInt(0); +const BN_36 = BigInt(36); + +function getChecksumAddress(address: string): string { +// if (!isHexString(address, 20)) { +// logger.throwArgumentError("invalid address", "address", address); +// } + + address = address.toLowerCase(); + + const chars = address.substring(2).split(""); + + const expanded = new Uint8Array(40); + for (let i = 0; i < 40; i++) { + expanded[i] = chars[i].charCodeAt(0); + } + + const hashed = arrayify(keccak256(expanded)); + + for (let i = 0; i < 40; i += 2) { + if ((hashed[i >> 1] >> 4) >= 8) { + chars[i] = chars[i].toUpperCase(); + } + if ((hashed[i >> 1] & 0x0f) >= 8) { + chars[i + 1] = chars[i + 1].toUpperCase(); + } + } + + return "0x" + chars.join(""); +} + +// See: https://en.wikipedia.org/wiki/International_Bank_Account_Number + +// Create lookup table +const ibanLookup: { [character: string]: string } = { }; +for (let i = 0; i < 10; i++) { ibanLookup[String(i)] = String(i); } +for (let i = 0; i < 26; i++) { ibanLookup[String.fromCharCode(65 + i)] = String(10 + i); } + +// How many decimal digits can we process? (for 64-bit float, this is 15) +// i.e. Math.floor(Math.log10(Number.MAX_SAFE_INTEGER)); +const safeDigits = 15; + +function ibanChecksum(address: string): string { + address = address.toUpperCase(); + address = address.substring(4) + address.substring(0, 2) + "00"; + + let expanded = address.split("").map((c) => { return ibanLookup[c]; }).join(""); + + // Javascript can handle integers safely up to 15 (decimal) digits + while (expanded.length >= safeDigits){ + let block = expanded.substring(0, safeDigits); + expanded = parseInt(block, 10) % 97 + expanded.substring(block.length); + } + + let checksum = String(98 - (parseInt(expanded, 10) % 97)); + while (checksum.length < 2) { checksum = "0" + checksum; } + + return checksum; +}; + +const Base36 = (function() {; + const result: Record = { }; + for (let i = 0; i < 36; i++) { + const key = "0123456789abcdefghijklmnopqrstuvwxyz"[i]; + result[key] = BigInt(i); + } + return result; +})(); + +function fromBase36(value: string): bigint { + value = value.toLowerCase(); + + let result = BN_0; + for (let i = 0; i < value.length; i++) { + result = result * BN_36 + Base36[value[i]]; + } + return result; +} + +export function getAddress(address: string): string { + + if (typeof(address) !== "string") { + logger.throwArgumentError("invalid address", "address", address); + } + + if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) { + + // Missing the 0x prefix + if (address.substring(0, 2) !== "0x") { address = "0x" + address; } + + const result = getChecksumAddress(address); + + // It is a checksummed address with a bad checksum + if (address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) && result !== address) { + logger.throwArgumentError("bad address checksum", "address", address); + } + + return result; + } + + // Maybe ICAP? (we only support direct mode) + if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) { + // It is an ICAP address with a bad checksum + if (address.substring(2, 4) !== ibanChecksum(address)) { + logger.throwArgumentError("bad icap checksum", "address", address); + } + + let result = fromBase36(address.substring(4)).toString(16); + while (result.length < 40) { result = "0" + result; } + return getChecksumAddress("0x" + result); + } + + return logger.throwArgumentError("invalid address", "address", address); +} + +export function getIcapAddress(address: string): string { + //let base36 = _base16To36(getAddress(address).substring(2)).toUpperCase(); + let base36 = BigInt(getAddress(address)).toString(36).toUpperCase(); + while (base36.length < 30) { base36 = "0" + base36; } + return "XE" + ibanChecksum("XE00" + base36) + base36; +} diff --git a/packages/address/src.ts/checks.ts b/packages/address/src.ts/checks.ts new file mode 100644 index 000000000..1307cfadb --- /dev/null +++ b/packages/address/src.ts/checks.ts @@ -0,0 +1,50 @@ +import { getAddress } from "./address.js"; +import { logger } from "./logger.js"; + +import type { Addressable, NameResolver } from "./types.js"; + +export function isAddressable(value: any): value is Addressable { + return (value && typeof(value.getAddress) === "function"); +} + +export function isAddress(value: any): boolean { + try { + getAddress(value); + return true; + } catch (error) { } + return false; +} + +// Resolves an Ethereum address, ENS name or Addressable object, +// throwing if the result is null; an explicit null returns null +//export async function resolveAddress(target?: null, resolver?: null | NameResolver): Promise; +//export async function resolveAddress(target: string | Addressable, resolver?: null | NameResolver): Promise; +//export async function resolveAddress(target: null | undefined | string | Addressable, resolver?: null | NameResolver) { +export async function resolveAddress(target: string | Addressable, resolver?: null | NameResolver) { + //if (target == null) { return null; } + + if (typeof(target) === "string") { + if (target.match(/^0x[0-9a-f]{40}$/i)) { return getAddress(target); } + + if (resolver == null) { + return logger.throwError("ENS resolution requires a provider", "UNSUPPORTED_OPERATION", { + operation: "resolveName", + }); + } + + const result = await resolver.resolveName(target); + if (result == null || result === "0x0000000000000000000000000000000000000000") { + return logger.throwError("unconfigured name", "UNCONFIGURED_NAME", { value: target }); + } + return getAddress(result); + + } else if (isAddressable(target)) { + const result = await target.getAddress(); + if (result == null) { + logger.throwArgumentError("addressable resolved to null", "target", target); + } + return getAddress(result); + } + + return logger.throwArgumentError("unsupported addressable value", "target", target); +} diff --git a/packages/address/src.ts/contract-address.ts b/packages/address/src.ts/contract-address.ts new file mode 100644 index 000000000..5fc8c9ff6 --- /dev/null +++ b/packages/address/src.ts/contract-address.ts @@ -0,0 +1,47 @@ + +import { concat, dataSlice } from "@ethersproject/bytes"; +import { keccak256 } from "@ethersproject/crypto"; +import { encodeRlp } from "@ethersproject/rlp"; + +import { getAddress } from "./address.js"; + +import type { BigNumberish, BytesLike } from "@ethersproject/logger"; + + +import { logger } from "./logger.js"; + + +// http://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed +export function getCreateAddress(tx: { from: string, nonce: BigNumberish }): string { + const from = getAddress(tx.from); + const nonce = logger.getBigInt(tx.nonce, "tx.nonce"); + + let nonceHex = nonce.toString(16); + if (nonceHex === "0") { + nonceHex = "0x"; + } else if (nonceHex.length % 2) { + nonceHex = "0x0" + nonceHex; + } else { + nonceHex = "0x" + nonceHex; + } + + return getAddress(dataSlice(keccak256(encodeRlp([ from, nonceHex ])), 12)); +} + +export function getCreate2Address(_from: string, _salt: BytesLike, _initCodeHash: BytesLike): string { + const from = getAddress(_from); + const salt = logger.getBytes(_salt, "salt"); + const initCodeHash = logger.getBytes(_initCodeHash, "initCodeHash"); + + if (salt.length !== 32) { + logger.throwArgumentError("salt must be 32 bytes", "salt", _salt); + } + + if (initCodeHash.length !== 32) { + logger.throwArgumentError("initCodeHash must be 32 bytes", "initCodeHash", _initCodeHash); + } + + return getAddress(dataSlice(keccak256(concat([ "0xff", from, salt, initCodeHash ])), 12)) +} + + diff --git a/packages/address/src.ts/index.ts b/packages/address/src.ts/index.ts new file mode 100644 index 000000000..4f4f2a076 --- /dev/null +++ b/packages/address/src.ts/index.ts @@ -0,0 +1,6 @@ + +export { getAddress, getIcapAddress } from "./address.js"; +export { getCreateAddress, getCreate2Address } from "./contract-address.js"; +export { isAddressable, isAddress, resolveAddress } from "./checks.js"; + +export type { Addressable, NameResolver } from "./types.js" diff --git a/packages/address/src.ts/logger.ts b/packages/address/src.ts/logger.ts new file mode 100644 index 000000000..07ebf6932 --- /dev/null +++ b/packages/address/src.ts/logger.ts @@ -0,0 +1,6 @@ +import { Logger } from "@ethersproject/logger"; + +import { version } from "./_version.js"; + + +export const logger = new Logger(version); diff --git a/packages/address/src.ts/tests/test-address.ts b/packages/address/src.ts/tests/test-address.ts new file mode 100644 index 000000000..633f9aa8d --- /dev/null +++ b/packages/address/src.ts/tests/test-address.ts @@ -0,0 +1,132 @@ +import assert from "assert"; + +import { loadTests } from "./utils.js"; + +import type { + TestCaseAccount, + TestCaseCreate, + TestCaseCreate2 +} from "./types.js"; + +import { + getAddress, getIcapAddress, + getCreateAddress, getCreate2Address +} from "../index.js"; + + +describe("computes checksum address", function() { + const tests = loadTests("accounts"); + for (const test of tests) { + it(`computes the checksum address for ${ test.name }`, function() { + assert.equal(getAddress(test.address), test.address); + assert.equal(getAddress(test.icap), test.address); + assert.equal(getAddress(test.address.substring(2)), test.address); + assert.equal(getAddress(test.address.toLowerCase()), test.address); + assert.equal(getAddress("0x" + test.address.substring(2).toUpperCase()), test.address); + }); + } + + const invalidAddresses: Array<{ name: string, value: any }> = [ + { name: "null", value: null }, + { name: "number", value: 1234 }, + { name: "emtpy bytes", value: "0x" }, + { name: "too short", value: "0x8ba1f109551bd432803012645ac136ddd64dba" }, + { name: "too long", value: "0x8ba1f109551bd432803012645ac136ddd64dba7200" }, + ]; + + invalidAddresses.forEach(({ name, value }) => { + it(`fails on invalid address: ${ name }`, function() { + assert.throws(function() { + getAddress(value); + }, function(error) { + return (error.code === "INVALID_ARGUMENT" && + error.message.match(/^invalid address/) && + error.argument === "address" && + error.value === value); + }); + }); + }); + + it("fails on invalid checksum", function() { + const value = "0x8ba1f109551bD432803012645Ac136ddd64DBa72" + assert.throws(function() { + getAddress(value); + }, function(error) { + return (error.code === "INVALID_ARGUMENT" && + error.message.match(/^bad address checksum/) && + error.argument === "address" && + error.value === value); + }); + }); + + it("fails on invalid IBAN checksum", function() { + const value = "XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK37"; + assert.throws(function() { + getAddress(value); + }, function(error) { + return (error.code === "INVALID_ARGUMENT" && + error.message.match(/^bad icap checksum/) && + error.argument === "address" && + error.value === value); + }); + }); +}); + +describe("computes ICAP address", function() { + const tests = loadTests("accounts"); + for (const test of tests) { + it(`computes the ICAP address for ${ test.name }`, function() { + assert.equal(getIcapAddress(test.address), test.icap); + assert.equal(getAddress(test.address.toLowerCase()), test.address); + assert.equal(getAddress("0x" + test.address.substring(2).toUpperCase()), test.address); + }); + } +}); + +describe("computes create address", function() { + const tests = loadTests("create"); + for (const { sender, creates } of tests) { + for (const { name, nonce, address } of creates) { + it(`computes the create address for ${ name }`, function() { + assert.equal(getCreateAddress({ from: sender, nonce }), address); + }); + } + } +}); + +describe("computes create2 address", function() { + const tests = loadTests("create2"); + for (const { sender, creates } of tests) { + for (const { name, salt, initCodeHash, address } of creates) { + it(`computes the create2 address for ${ name }`, function() { + assert.equal(getCreate2Address(sender, salt, initCodeHash), address); + }); + } + } + + const sender = "0x8ba1f109551bD432803012645Ac136ddd64DBA72"; + const salt = "0x1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36deac8"; + const initCodeHash = "0x8452c9b9140222b08593a26daa782707297be9f7b3e8281d7b4974769f19afd0"; + + it("fails on invalid salt", function() { + const badSalt = "0x1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36dea"; + assert.throws(function() { + getCreate2Address(sender, badSalt, initCodeHash); + }, function(error) { + return (error.code === "INVALID_ARGUMENT" && + error.argument === "salt" && + error.value === badSalt); + }); + }); + + it("fails on invalid initCodeHash", function() { + const badInitCodeHash = "0x8452c9b9140222b08593a26daa782707297be9f7b3e8281d7b4974769f19af"; + assert.throws(function() { + getCreate2Address(sender, salt, badInitCodeHash); + }, function(error) { + return (error.code === "INVALID_ARGUMENT" && + error.argument === "initCodeHash" && + error.value === badInitCodeHash); + }); + }); +}); diff --git a/packages/address/src.ts/tests/types.ts b/packages/address/src.ts/tests/types.ts new file mode 100644 index 000000000..893eb23e3 --- /dev/null +++ b/packages/address/src.ts/tests/types.ts @@ -0,0 +1,27 @@ + +export interface TestCaseAccount { + name: string; + privateKey: string; + address: string; + icap: string; +} + +export type TestCaseCreate = { + sender: string; + creates: Array<{ + name: string, + nonce: number, + address: string + }>; +}; + +export type TestCaseCreate2 = { + sender: string; + creates: Array<{ + name: string, + salt: string; + initCode: string + initCodeHash: string + address: string; + }>; +}; diff --git a/packages/address/src.ts/tests/utils.ts b/packages/address/src.ts/tests/utils.ts new file mode 100644 index 000000000..b40517e1b --- /dev/null +++ b/packages/address/src.ts/tests/utils.ts @@ -0,0 +1,25 @@ + +import fs from "fs" +import path from "path"; +import zlib from 'zlib'; + +// Find the package root (based on the nyc output/ folder) +const root = (function() { + let root = process.cwd(); + + while (true) { + if (fs.existsSync(path.join(root, "output"))) { return root; } + const parent = path.join(root, ".."); + if (parent === root) { break; } + root = parent; + } + + throw new Error("could not find root"); +})(); + +// Load the tests +export function loadTests(tag: string): Array { + const filename = path.resolve(root, "testcases", tag + '.json.gz'); + return JSON.parse(zlib.gunzipSync(fs.readFileSync(filename)).toString()); +} + diff --git a/packages/address/src.ts/types.ts b/packages/address/src.ts/types.ts new file mode 100644 index 000000000..36496fb99 --- /dev/null +++ b/packages/address/src.ts/types.ts @@ -0,0 +1,8 @@ + +export interface Addressable { + getAddress(): Promise; +} + +export interface NameResolver { + resolveName(name: string): Promise; +} diff --git a/packages/address/tsconfig.json b/packages/address/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/address/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/bytes/.npmignore b/packages/bytes/.npmignore new file mode 100644 index 000000000..03a92044c --- /dev/null +++ b/packages/bytes/.npmignore @@ -0,0 +1,3 @@ +/src.ts/tests/** +/lib/tests/** +tsconfig.tsbuildinfo diff --git a/packages/bytes/LICENSE.md b/packages/bytes/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/bytes/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/bytes/package.json b/packages/bytes/package.json new file mode 100644 index 000000000..798967bba --- /dev/null +++ b/packages/bytes/package.json @@ -0,0 +1,32 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/logger": "^6.0.0-beta.1" + }, + "description": "Bytes utility functions for ethers.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "ethers" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/bytes", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/bytes", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/bytes/src.ts/_version.ts b/packages/bytes/src.ts/_version.ts new file mode 100644 index 000000000..f5e1a1e0b --- /dev/null +++ b/packages/bytes/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/bytes@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/bytes/src.ts/array.ts b/packages/bytes/src.ts/array.ts new file mode 100644 index 000000000..482090ada --- /dev/null +++ b/packages/bytes/src.ts/array.ts @@ -0,0 +1,80 @@ +import { isBytesLike } from "./check.js"; +import { logger } from "./logger.js"; + +import type { BytesLike, Hexable } from "./types.js"; + + +let BN_8: bigint | null = null; +let BN_255: bigint | null = null; +try { + BN_8 = BigInt("8"); + BN_255 = BigInt("255"); +} catch (error) { + console.log("Unsupported bigint", error); +} + +function isHexable(value: any): value is Hexable { + return (value && typeof(value.toHexString) === "function"); +} + +export function arrayify(data: BytesLike | Hexable | number | bigint): Uint8Array { + if (data == null) { + logger.throwArgumentError("cannot arrayify nullish", "data", data); + } + + if (typeof(data) === "number") { + logger.assertUint53(data); + + const result = []; + while (data) { + result.unshift(data & 0xff); + data = parseInt(String(data / 256)); + } + if (result.length === 0) { result.push(0); } + return new Uint8Array(result); + } + + if (BN_8 && typeof(data) === "bigint") { + const result = []; + while (data) { + result.unshift(Number(data & BN_255)); + data >>= BN_8; + } + if (result.length === 0) { result.push(0); } + + return new Uint8Array(result); + } + + if (isHexable(data)) { + return arrayify(data.toHexString()); + } + + if (typeof(data) === "string") { + let hex = data; + //if (options.allowMissingPrefix && hex.substring(0, 2) !== "0x") { + // hex = "0x" + hex; + //} + if (!hex.match(/^0x[0-9a-f]*$/i)) { + throw new RangeError(`invalid hex data string (${ JSON.stringify(data) })`); + } + + const result = []; + for (let i = 2; i < hex.length; i += 2) { + result.push(parseInt(hex.substring(i, i + 2), 16)); + } + + return new Uint8Array(result); + } + + if (data instanceof Uint8Array) { return new Uint8Array(data); } + + throw new TypeError(`cannot arrayify ${ JSON.stringify(data) }`); +} + +export function _noCopyArrayify(data: BytesLike | Hexable): Uint8Array { + if (!isBytesLike(data)) { + logger.throwArgumentError("invalid BytesLike value", "data", data); + } // @TODO: ArgumentE> + if (data instanceof Uint8Array) { return data; } + return arrayify(data); +} diff --git a/packages/bytes/src.ts/base64-browser.ts b/packages/bytes/src.ts/base64-browser.ts new file mode 100644 index 000000000..903c07a68 --- /dev/null +++ b/packages/bytes/src.ts/base64-browser.ts @@ -0,0 +1,28 @@ + +declare global { + function atob(ascii: string): string; + function btoa(binary: string): string; +} + + +import type { BytesLike } from "@ethersproject/logger"; + +import { logger } from "./logger.js"; + +export function decodeBase64(textData: string): Uint8Array { + textData = atob(textData); + const data = []; + for (let i = 0; i < textData.length; i++) { + data.push(textData.charCodeAt(i)); + } + return new Uint8Array(data); +} + +export function encodeBase64(_data: BytesLike): string { + const data = logger.getBytes(_data, "data"); + let textData = ""; + for (let i = 0; i < data.length; i++) { + textData += String.fromCharCode(data[i]); + } + return btoa(textData); +} diff --git a/packages/bytes/src.ts/base64.ts b/packages/bytes/src.ts/base64.ts new file mode 100644 index 000000000..d1a5183c1 --- /dev/null +++ b/packages/bytes/src.ts/base64.ts @@ -0,0 +1,13 @@ + +import type { BytesLike } from "@ethersproject/logger"; + +import { logger } from "./logger.js"; + + +export function decodeBase64(textData: string): Uint8Array { + return new Uint8Array(Buffer.from(textData, "base64")); +}; + +export function encodeBase64(data: BytesLike): string { + return Buffer.from(logger.getBytes(data, "data")).toString("base64"); +} diff --git a/packages/bytes/src.ts/check.ts b/packages/bytes/src.ts/check.ts new file mode 100644 index 000000000..7fb55effe --- /dev/null +++ b/packages/bytes/src.ts/check.ts @@ -0,0 +1,37 @@ +import type { BytesLike } from "./types.js"; + +export function isHexString(value: any, length?: number | boolean): value is string { + if (typeof(value) !== "string" || !value.match(/^0x[0-9A-Fa-f]*$/)) { + return false + } + + if (typeof(length) === "number" && value.length !== 2 + 2 * length) { return false; } + if (length === true && (value.length % 2) !== 0) { return false; } + + return true; +} + +/* +function _isByte(value: number): boolean { + return (typeof(value) === "number" && value >= 0 && value < 256 && Math.floor(value) === value); +} +export function isBytes(value: any): value is Bytes { + if (value == null) { return false; } + + if (value instanceof Uint8Array) { return true; } + if (typeof(value) === "string") { return false; } + + if (Array.isArray(value)) { + for (let i = 0; i < value.length; i++) { + if (!_isByte(value[i])) { return false; } + } + return true; + } + + return false; +} +*/ + +export function isBytesLike(value: any): value is BytesLike { + return (isHexString(value, true) || (value instanceof Uint8Array)); +} diff --git a/packages/bytes/src.ts/data.ts b/packages/bytes/src.ts/data.ts new file mode 100644 index 000000000..c8b4944e4 --- /dev/null +++ b/packages/bytes/src.ts/data.ts @@ -0,0 +1,30 @@ +import { _noCopyArrayify } from "./array.js"; +import { isHexString } from "./check.js"; +import { hexlify } from "./hex.js"; +import { logger } from "./logger.js"; + +import type { BytesLike } from "./types.js"; + + +export function concat(datas: ReadonlyArray): string { + return "0x" + datas.map((d) => hexlify(d).substring(2)).join(""); +} + +export function dataLength(data: BytesLike): number { + if (isHexString(data, true)) { return (data.length - 2) / 2; } + return _noCopyArrayify(data).length; +} + +export function dataSlice(data: BytesLike, start?: number, end?: number): string { + const bytes = _noCopyArrayify(data); + if (end != null && end > bytes.length) { logger.throwError("cannot slice beyond data bounds", "BUFFER_OVERRUN", { + buffer: bytes, length: bytes.length, offset: end + }); } + return hexlify(bytes.slice((start == null) ? 0: start, (end == null) ? bytes.length: end)); +} + +export function stripZerosLeft(data: BytesLike): string { + let bytes = hexlify(data).substring(2); + while (bytes.substring(0, 2) == "00") { bytes = bytes.substring(2); } + return "0x" + bytes; +} diff --git a/packages/bytes/src.ts/hex.ts b/packages/bytes/src.ts/hex.ts new file mode 100644 index 000000000..ea10ee75c --- /dev/null +++ b/packages/bytes/src.ts/hex.ts @@ -0,0 +1,24 @@ + +import { arrayify, _noCopyArrayify } from "./array.js"; + +import type { BytesLike, Hexable } from "./types.js"; + + +const HexCharacters: string = "0123456789abcdef"; +export function hexlify(data: BytesLike | Hexable): string { + const bytes = _noCopyArrayify(data); + + let result = "0x"; + for (let i = 0; i < bytes.length; i++) { + const v = bytes[i]; + result += HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f]; + } + return result; +} + +export function quantity(value: BytesLike | Hexable | number | bigint): string { + let result = hexlify(arrayify(value)).substring(2); + while (result.substring(0, 1) === "0") { result = result.substring(1); } + if (result === "") { result = "0"; } + return "0x" + result; +} diff --git a/packages/bytes/src.ts/index.ts b/packages/bytes/src.ts/index.ts new file mode 100644 index 000000000..143e5999b --- /dev/null +++ b/packages/bytes/src.ts/index.ts @@ -0,0 +1,9 @@ + +export { arrayify } from "./array.js"; +export { decodeBase64, encodeBase64 } from "./base64.js"; /*-browser.js*/ +export { isHexString, isBytesLike } from "./check.js"; +export { concat, dataLength, dataSlice, stripZerosLeft } from "./data.js"; +export { hexlify, quantity } from "./hex.js"; +export { zeroPadLeft, zeroPadRight } from "./pad.js"; + +export type { BytesLike, Hexable } from "./types.js"; diff --git a/packages/bytes/src.ts/logger.ts b/packages/bytes/src.ts/logger.ts new file mode 100644 index 000000000..a1bfc739b --- /dev/null +++ b/packages/bytes/src.ts/logger.ts @@ -0,0 +1,3 @@ +import { version } from "./_version.js"; +import { Logger } from "@ethersproject/logger"; +export const logger = new Logger(version); diff --git a/packages/bytes/src.ts/pad.ts b/packages/bytes/src.ts/pad.ts new file mode 100644 index 000000000..3e2ee0859 --- /dev/null +++ b/packages/bytes/src.ts/pad.ts @@ -0,0 +1,36 @@ + +import { _noCopyArrayify } from "./array.js"; +import { hexlify } from "./hex.js"; +import { logger } from "./logger.js"; + +import type { BytesLike } from "./types.js"; + + +function zeroPad(data: BytesLike, length: number, left: boolean): string { + const bytes = _noCopyArrayify(data); + if (length < bytes.length) { + logger.throwError("padding exceeds data length", "BUFFER_OVERRUN", { + buffer: new Uint8Array(bytes), + length: length, + offset: length + 1 + }); + } + + const result = new Uint8Array(length); + result.fill(0); + if (left) { + result.set(bytes, length - bytes.length); + } else { + result.set(bytes, 0); + } + + return hexlify(result); +} + +export function zeroPadLeft(data: BytesLike, length: number): string { + return zeroPad(data, length, true); +} + +export function zeroPadRight(data: BytesLike, length: number): string { + return zeroPad(data, length, false); +} diff --git a/packages/bytes/src.ts/types.ts b/packages/bytes/src.ts/types.ts new file mode 100644 index 000000000..4dff3994e --- /dev/null +++ b/packages/bytes/src.ts/types.ts @@ -0,0 +1,6 @@ + +export type BytesLike = Uint8Array | string; + +export interface Hexable { + toHexString(): string; +} diff --git a/packages/bytes/tsconfig.json b/packages/bytes/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/bytes/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/contract/.npmignore b/packages/contract/.npmignore new file mode 100644 index 000000000..03a92044c --- /dev/null +++ b/packages/contract/.npmignore @@ -0,0 +1,3 @@ +/src.ts/tests/** +/lib/tests/** +tsconfig.tsbuildinfo diff --git a/packages/contract/LICENSE.md b/packages/contract/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/contract/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/contract/package.json b/packages/contract/package.json new file mode 100644 index 000000000..0dcd7ef8f --- /dev/null +++ b/packages/contract/package.json @@ -0,0 +1,39 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/abi": "^6.0.0-beta.1", + "@ethersproject/address": "^6.0.0-beta.1", + "@ethersproject/bytes": "^6.0.0-beta.1", + "@ethersproject/logger": "^6.0.0-beta.1", + "@ethersproject/math": "^6.0.0-beta.1", + "@ethersproject/properties": "^6.0.0-beta.1", + "@ethersproject/providers": "^6.0.0-beta.1", + "@ethersproject/transactions": "^6.0.0-beta.1" + }, + "description": "Contract meta-class for ethers.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "ethers" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/contract", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/contract", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/contract/src.ts/_version.ts b/packages/contract/src.ts/_version.ts new file mode 100644 index 000000000..b22637a3e --- /dev/null +++ b/packages/contract/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/contract@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/contract/src.ts/contract.ts b/packages/contract/src.ts/contract.ts new file mode 100644 index 000000000..bb343e883 --- /dev/null +++ b/packages/contract/src.ts/contract.ts @@ -0,0 +1,724 @@ +import { resolveAddress } from "@ethersproject/address"; +import { Interface, Typed } from "@ethersproject/abi"; +import { isHexString } from "@ethersproject/bytes"; +import { isCallException } from "@ethersproject/logger"; +import { defineProperties, resolveProperties } from "@ethersproject/properties"; +import { copyRequest, Log, TransactionResponse } from "@ethersproject/providers"; + +import { + ContractEventPayload, + ContractTransactionResponse, + EventLog +} from "./wrappers.js"; +import { logger } from "./logger.js"; + +import type { EventFragment, FunctionFragment, InterfaceAbi, ParamType, Result } from "@ethersproject/abi"; +import type { Addressable } from "@ethersproject/address"; +import type { EventEmitterable, Listener } from "@ethersproject/properties"; +import type { + BlockTag, EventFilter, Filter, Provider, TransactionRequest, TopicFilter +} from "@ethersproject/providers"; + +import type { + ContractEventName, + ContractInterface, + ContractMethodArgs, + BaseContractMethod, + ContractMethod, + ContractEventArgs, + ContractEvent, + ContractTransaction, + DeferredTopicFilter, + ContractRunner +} from "./types.js"; + +interface ContractRunnerEstimater extends ContractRunner { + estimateGas: (tx: TransactionRequest) => Promise; +} + +interface ContractRunnerCaller extends ContractRunner { + call: (tx: TransactionRequest) => Promise; +} + +interface ContractRunnerSender extends ContractRunner { + sendTransaction: (tx: TransactionRequest) => Promise; +} + +interface ContractRunnerResolver extends ContractRunner { + resolveName: (name: string | Addressable) => Promise; +} + +interface ContractRunnerQuerier extends ContractRunner { + getLogs: (filter: Filter) => Promise>; +} + +interface ContractRunnerSubscriber extends ContractRunner { + on: (event: EventFilter, listener: Listener) => Promise; + off: (event: EventFilter, listener: Listener) => Promise; +} + +function canEstimate(value: any): value is ContractRunnerEstimater { + return (value && typeof(value.estimateGas) === "function"); +} + +function canCall(value: any): value is ContractRunnerCaller { + return (value && typeof(value.call) === "function"); +} + +function canSend(value: any): value is ContractRunnerSender { + return (value && typeof(value.sendTransaction) === "function"); +} + +function canResolve(value: any): value is ContractRunnerResolver { + return (value && typeof(value.resolveName) === "function"); +} + +function canQuery(value: any): value is ContractRunnerQuerier { + return (value && typeof(value.getLogs) === "function"); +} + +function canSubscribe(value: any): value is ContractRunnerSubscriber { + return (value && typeof(value.on) === "function" && typeof(value.off) === "function"); +} + +function concisify(items: Array): Array { + items = Array.from((new Set(items)).values()) + items.sort(); + return items; +} + +class PreparedTopicFilter implements DeferredTopicFilter { + #filter: Promise; + readonly fragment!: EventFragment; + + constructor(contract: BaseContract, fragment: EventFragment, args: Array) { + defineProperties(this, { fragment }); + if (fragment.inputs.length < args.length) { + throw new Error("too many arguments"); + } + + // Recursively descend into args and resolve any addresses + const runner = getRunner(contract.runner, "resolveName"); + const resolver = canResolve(runner) ? runner: null; + this.#filter = (async function() { + const resolvedArgs = await Promise.all(fragment.inputs.map((param, index) => { + return param.walkAsync(args[index], (type, value) => { + if (type === "address") { return resolveAddress(value, resolver); } + return value; + }); + })); + + return contract.interface.encodeFilterTopics(fragment, resolvedArgs); + })(); + } + + getTopicFilter(): Promise { + return this.#filter; + } +} + + +// A = Arguments passed in as a tuple +// R = The result type of the call (i.e. if only one return type, +// the qualified type, otherwise Result) +// D = The type the default call will return (i.e. R for view/pure, +// TransactionResponse otherwise) +//export interface ContractMethod = Array, R = any, D extends R | ContractTransactionResponse = ContractTransactionResponse> { + +function _WrappedMethodBase(): new () => Function & BaseContractMethod { + return Function as any; +} + +function getRunner(value: any, feature: keyof ContractRunner): null | T { + if (value == null) { return null; } + if (typeof(value[feature]) === "function") { return value; } + if (value.provider && typeof(value.provider[feature]) === "function") { + return value.provider; + } + return null; +} + +export async function copyOverrides(arg: any): Promise> { + + // Create a shallow copy (we'll deep-ify anything needed during normalizing) + const overrides = copyRequest(Typed.dereference(arg, "overrides")); + + // Some sanity checking; these are what these methods adds + //if ((overrides).to) { + if (overrides.to) { + logger.throwArgumentError("cannot override to", "overrides.to", overrides.to); + } else if (overrides.data) { + logger.throwArgumentError("cannot override data", "overrides.data", overrides.data); + } + + // Resolve any from + if (overrides.from) { + overrides.from = await resolveAddress(overrides.from); + } + + return overrides; +} + +export async function resolveArgs(_runner: null | ContractRunner, inputs: ReadonlyArray, args: Array): Promise> { + // Recursively descend into args and resolve any addresses + const runner = getRunner(_runner, "resolveName"); + const resolver = canResolve(runner) ? runner: null; + return await Promise.all(inputs.map((param, index) => { + return param.walkAsync(args[index], (type, value) => { + if (type === "address") { return resolveAddress(value, resolver); } + return value; + }); + })); +} + +class WrappedMethod = Array, R = any, D extends R | ContractTransactionResponse = ContractTransactionResponse> + extends _WrappedMethodBase() implements BaseContractMethod { + + readonly name!: string; + readonly _contract!: BaseContract; + readonly _key!: string; + + constructor (contract: BaseContract, key: string) { + super(); + + defineProperties(this, { + name: contract.interface.getFunctionName(key), + _contract: contract, _key: key + }); + + const proxy = new Proxy(this, { + // Perform the default operation for this fragment type + apply: async (target, thisArg, args: ContractMethodArgs) => { + const fragment = target.getFragment(...args); + if (fragment.constant) { return await target.staticCall(...args); } + return await target.send(...args); + }, + }); + + return proxy; + } + + // Only works on non-ambiguous keys (refined fragment is always non-ambiguous) + get fragment(): FunctionFragment { + return this._contract.interface.getFunction(this._key); + } + + getFragment(...args: ContractMethodArgs): FunctionFragment { + return this._contract.interface.getFunction(this._key, args); + } + + async populateTransaction(...args: ContractMethodArgs): Promise { + const fragment = this.getFragment(...args); + + // If an overrides was passed in, copy it and normalize the values + let overrides: Omit = { }; + if (fragment.inputs.length + 1 === args.length) { + overrides = await copyOverrides(args.pop()); + } + + if (fragment.inputs.length !== args.length) { + throw new Error("internal error: fragment inputs doesn't match arguments; should not happen"); + } + + const resolvedArgs = await resolveArgs(this._contract.runner, fragment.inputs, args); + + return Object.assign({ }, overrides, await resolveProperties({ + to: this._contract.getAddress(), + data: this._contract.interface.encodeFunctionData(fragment, resolvedArgs) + })); + } + + async staticCall(...args: ContractMethodArgs): Promise { + const result = await this.staticCallResult(...args); + if (result.length === 1) { return result[0]; } + return result; + } + + async send(...args: ContractMethodArgs): Promise { + const runner = getRunner(this._contract.runner, "sendTransaction"); + if (!canSend(runner)) { + return logger.throwError("contract runner does not support sending transactions", "UNSUPPORTED_OPERATION", { + operation: "sendTransaction" + }); + } + const tx = await runner.sendTransaction(await this.populateTransaction(...args)); + const provider = getRunner(this._contract.runner, "getLogs"); + return new ContractTransactionResponse(this._contract.interface, provider, tx); + } + + async estimateGas(...args: ContractMethodArgs): Promise { + const runner = getRunner(this._contract.runner, "estimateGas"); + if (!canEstimate(runner)) { + return logger.throwError("contract runner does not support gas estimation", "UNSUPPORTED_OPERATION", { + operation: "estimateGas" + }); + } + return await runner.estimateGas(await this.populateTransaction(...args)); + } + + async staticCallResult(...args: ContractMethodArgs): Promise { + const runner = getRunner(this._contract.runner, "call"); + if (!canCall(runner)) { + return logger.throwError("contract runner does not support calling", "UNSUPPORTED_OPERATION", { + operation: "call" + }); + } + + const fragment = this.getFragment(...args); + const tx = await this.populateTransaction(...args); + + let result = "0x"; + try { + result = await runner.call(tx); + } catch (error: any) { + if (isCallException(error)) { + throw this._contract.interface.makeError(fragment, error.data, tx); + } + throw error; + } + + return this._contract.interface.decodeFunctionResult(fragment, result); + } +} + +function _WrappedEventBase(): new () => Function & ContractEvent { + return Function as any; +} + +class WrappedEvent = Array> extends _WrappedEventBase() implements ContractEvent { + readonly name!: string; + + readonly _contract!: BaseContract; + readonly _key!: string; + + constructor (contract: BaseContract, key: string) { + super(); + + defineProperties(this, { + name: contract.interface.getEventName(key), + _contract: contract, _key: key + }); + + return new Proxy(this, { + // Perform the default operation for this fragment type + apply: async (target, thisArg, args: ContractEventArgs) => { + return new PreparedTopicFilter(contract, target.getFragment(...args), args); + }, + }); + } + + // Only works on non-ambiguous keys + get fragment(): EventFragment { + return this._contract.interface.getEvent(this._key); + } + + getFragment(...args: ContractEventArgs): EventFragment { + return this._contract.interface.getEvent(this._key, args); + } +}; + +type Sub = { + tag: string; + listeners: Array<{ listener: Listener, once: boolean }>, + start: () => void; + stop: () => void; +}; + + +// The combination of TypeScrype, Private Fields and Proxies makes +// the world go boom; so we hide variables with some trickery keeping +// a symbol attached to each BaseContract which its sub-class (even +// via a Proxy) can reach and use to look up its internal values. + +const internal = Symbol.for("_ethersInternal_contract"); +type Internal = { + addrPromise: Promise; + addr: null | string; + + deployTx: null | ContractTransactionResponse; + + subs: Map; +}; + +const internalValues: WeakMap = new WeakMap(); + +function setInternal(contract: BaseContract, values: Internal): void { + internalValues.set(contract[internal], values); +} + +function getInternal(contract: BaseContract): Internal { + return internalValues.get(contract[internal]) as Internal; +} + +function isDeferred(value: any): value is DeferredTopicFilter { + return (value && typeof(value) === "object" && ("getTopicFilter" in value) && + (typeof(value.getTopicFilter) === "function") && value.fragment); +} + +async function getSubTag(contract: BaseContract, event: ContractEventName): Promise<{ tag: string, fragment: EventFragment, topics: TopicFilter }> { + let fragment: EventFragment; + let topics: Array>; + + if (Array.isArray(event)) { + // Topics; e.g. `[ "0x1234...89ab" ]` + fragment = contract.interface.getEvent(event[0] as string); + topics = event; + + } else if (typeof(event) === "string") { + // Event name (name or signature); `"Transfer"` + fragment = contract.interface.getEvent(event); + topics = [ contract.interface.getEventTopic(fragment) ]; + + } else if (isDeferred(event)) { + // Deferred Topic Filter; e.g. `contract.filter.Transfer(from)` + fragment = event.fragment; + topics = await event.getTopicFilter(); + + } else if ("fragment" in event) { + // ContractEvent; e.g. `contract.filter.Transfer` + fragment = event.fragment; + topics = [ contract.interface.getEventTopic(fragment) ]; + + } else { + console.log(event); + throw new Error("TODO"); + } + + // Normalize topics and sort TopicSets + topics = topics.map((t) => { + if (t == null) { return null; } + if (Array.isArray(t)) { + return concisify(t.map((t) => t.toLowerCase())); + } + return t.toLowerCase(); + }); + + const tag = topics.map((t) => { + if (t == null) { return "null"; } + if (Array.isArray(t)) { return t.join("|"); } + return t; + }).join("&"); + + return { fragment, tag, topics } +} + +async function hasSub(contract: BaseContract, event: ContractEventName): Promise { + const { subs } = getInternal(contract); + return subs.get((await getSubTag(contract, event)).tag) || null; +} + +async function getSub(contract: BaseContract, event: ContractEventName): Promise { + // Make sure our runner can actually subscribe to events + const runner = getRunner(contract.runner, "on"); + const runnerOff = getRunner(contract.runner, "off"); + if (!runner || runner !== runnerOff || !canSubscribe(runner)) { + return logger.throwError("contract runner does not support subscribing", "UNSUPPORTED_OPERATION", { + operation: "on" + }); + } + + const { fragment, tag, topics } = await getSubTag(contract, event); + + const { addr, subs } = getInternal(contract); + + let sub = subs.get(tag); + if (!sub) { + const address: string | Addressable = (addr ? addr: contract); + const filter = { address, topics }; + const listener = (log: Log) => { + const payload = new ContractEventPayload(contract, null, event, fragment, log); + emit(contract, event, payload.args, payload); + }; + + let started = false; + const start = () => { + if (started) { return; } + (runner as ContractRunnerSubscriber).on(filter, listener); + started = true; + }; + const stop = () => { + if (!started) { return; } + (runner as ContractRunnerSubscriber).off(filter, listener); + started = false; + }; + sub = { tag, listeners: [ ], start, stop }; + subs.set(tag, sub); + } + return sub; +} + +async function _emit(contract: BaseContract, event: ContractEventName, args: Array, payload: null | ContractEventPayload): Promise { + await lastEmit; + + const sub = await hasSub(contract, event); + if (!sub) { return false; } + + const count = sub.listeners.length; + sub.listeners = sub.listeners.filter(({ listener, once }) => { + const passArgs = args.slice(); + if (payload) { + passArgs.push(new ContractEventPayload(contract, (once ? null: listener), + event, payload.fragment, payload.log)); + } + setTimeout(() => { listener.call(contract, ...passArgs); }, 0); + return !once; + }); + return (count > 0); +} + +// We use this to ensure one emit resolves before firing the next to +// ensure correct ordering (note this cannot throw and just adds the +// notice to the event queu using setTimeout). +let lastEmit: Promise = Promise.resolve(); +async function emit(contract: BaseContract, event: ContractEventName, args: Array, payload: null | ContractEventPayload): Promise { + try { + await lastEmit; + } catch (error) { } + + const resultPromise = _emit(contract, event, args, payload); + lastEmit = resultPromise; + return await resultPromise; +} + +const passProperties = [ "then" ]; +export class BaseContract implements Addressable, EventEmitterable { + readonly target!: string | Addressable; + readonly interface!: Interface; + readonly runner!: null | ContractRunner; + + readonly filters!: Record; + + readonly [internal]: any; + + constructor(target: string | Addressable, abi: Interface | InterfaceAbi, runner: null | ContractRunner = null, _deployTx?: null | TransactionResponse) { + const iface = Interface.from(abi); + defineProperties(this, { target, runner, interface: iface }); + + Object.defineProperty(this, internal, { value: { } }); + + let addrPromise; + let addr = null; + + let deployTx: null | ContractTransactionResponse = null; + if (_deployTx) { + const provider = getRunner(runner, "getLogs"); + deployTx = new ContractTransactionResponse(this.interface, provider, _deployTx); + } + let subs = new Map(); + + // Resolve the target as the address + if (typeof(target) === "string") { + if (isHexString(target)) { + addr = target; + addrPromise = Promise.resolve(target); + + } else { + const resolver = getRunner(runner, "resolveName"); + if (!canResolve(resolver)) { + throw logger.makeError("contract runner does not support name resolution", "UNSUPPORTED_OPERATION", { + operation: "resolveName" + }); + } + + addrPromise = resolver.resolveName(target).then((addr) => { + if (addr == null) { throw new Error("TODO"); } + getInternal(this).addr = addr; + return addr; + }); + } + } else { + addrPromise = target.getAddress().then((addr) => { + if (addr == null) { throw new Error("TODO"); } + getInternal(this).addr = addr; + return addr; + }); + } + + // Set our private values + setInternal(this, { addrPromise, addr, deployTx, subs }); + + // Add the event filters + const filters = new Proxy({ }, { + get: (target, _prop, receiver) => { + // Pass important checks (like `then` for Promise) through + if (passProperties.indexOf(_prop) >= 0) { + return Reflect.get(target, _prop, receiver); + } + + const prop = String(_prop); + + const result = this.getEvent(prop); + if (result) { return result; } + + throw new Error(`unknown contract event: ${ prop }`); + } + }); + defineProperties(this, { filters }); + + // Return a Proxy that will respond to functions + return new Proxy(this, { + get: (target, _prop, receiver) => { + if (_prop in target || passProperties.indexOf(_prop) >= 0) { + return Reflect.get(target, _prop, receiver); + } + + const prop = String(_prop); + + const result = target.getFunction(prop); + if (result) { return result; } + + throw new Error(`unknown contract method: ${ prop }`); + } + }); + } + + async getAddress(): Promise { return await getInternal(this).addrPromise; } + + deploymentTransaction(): null | ContractTransactionResponse { + return getInternal(this).deployTx; + } + + getFunction(key: string | FunctionFragment): T { + if (typeof(key) !== "string") { key = key.format(); } + return (new WrappedMethod(this, key)); + } + + getEvent(key: string | EventFragment): ContractEvent { + if (typeof(key) !== "string") { key = key.format(); } + return (new WrappedEvent(this, key)); + } + + async queryFilter(event: ContractEventName, fromBlock: BlockTag = 0, toBlock: BlockTag = "latest"): Promise> { + const { addr, addrPromise } = getInternal(this); + const address = (addr ? addr: (await addrPromise)); + const { fragment, topics } = await getSubTag(this, event); + const filter = { address, topics, fromBlock, toBlock }; + const runner = getRunner(this.runner, "getLogs"); + + if (!canQuery(runner)) { + return logger.throwError("contract runner does not support querying", "UNSUPPORTED_OPERATION", { + operation: "getLogs" + }); + } + + return (await runner.getLogs(filter)).map((log) => { + return new EventLog(log, this.interface, fragment); + }); + } + + + + async on(event: ContractEventName, listener: Listener): Promise { + const sub = await getSub(this, event); + sub.listeners.push({ listener, once: false }); + sub.start(); + return this; + } + + async once(event: ContractEventName, listener: Listener): Promise { + const sub = await getSub(this, event); + sub.listeners.push({ listener, once: true }); + sub.start(); + return this; + } + + async emit(event: ContractEventName, ...args: Array): Promise { + return await emit(this, event, args, null); + } + + async listenerCount(event?: ContractEventName): Promise { + if (event) { + const sub = await hasSub(this, event); + if (!sub) { return 0; } + return sub.listeners.length; + } + + const { subs } = getInternal(this); + + let total = 0; + for (const { listeners } of subs.values()) { + total += listeners.length; + } + return total; + } + + async listeners(event?: ContractEventName): Promise> { + if (event) { + const sub = await hasSub(this, event); + if (!sub) { return [ ]; } + return sub.listeners.map(({ listener }) => listener); + } + + const { subs } = getInternal(this); + + let result: Array = [ ]; + for (const { listeners } of subs.values()) { + result = result.concat(listeners.map(({ listener }) => listener)); + } + return result; + } + + async off(event: ContractEventName, listener?: Listener): Promise { + const sub = await hasSub(this, event); + if (!sub) { return this; } + + if (listener) { + const index = sub.listeners.map(({ listener }) => listener).indexOf(listener); + if (index >= 0) { sub.listeners.splice(index, 1); } + } + + if (listener == null || sub.listeners.length === 0) { + sub.stop(); + getInternal(this).subs.delete(sub.tag); + } + + return this; + } + + async removeAllListeners(event?: ContractEventName): Promise { + if (event) { + const sub = await hasSub(this, event); + if (!sub) { return this; } + sub.stop(); + getInternal(this).subs.delete(sub.tag); + } else { + const { subs } = getInternal(this); + for (const { tag, stop } of subs.values()) { + stop(); + subs.delete(tag); + } + } + + return this; + } + + // Alias for "on" + async addListener(event: ContractEventName, listener: Listener): Promise { + return await this.on(event, listener); + } + + // Alias for "off" + async removeListener(event: ContractEventName, listener: Listener): Promise { + return await this.off(event, listener); + } + + static buildClass(abi: InterfaceAbi): new (target: string, runner?: null | ContractRunner) => BaseContract & Omit { + class CustomContract extends BaseContract { + constructor(address: string, runner: null | ContractRunner = null) { + super(address, abi, runner); + } + } + return CustomContract as any; + }; + + static from(target: string, abi: InterfaceAbi, runner: null | ContractRunner = null): BaseContract & Omit { + const contract = new this(target, abi, runner); + return contract as any; + } +} + +function _ContractBase(): new (target: string, abi: InterfaceAbi, runner?: null | ContractRunner) => BaseContract & Omit { + return BaseContract as any; +} + +export class Contract extends _ContractBase() { } diff --git a/packages/contract/src.ts/factory.ts b/packages/contract/src.ts/factory.ts new file mode 100644 index 000000000..b35488703 --- /dev/null +++ b/packages/contract/src.ts/factory.ts @@ -0,0 +1,98 @@ + +import { Interface } from "@ethersproject/abi"; +import { getCreateAddress } from "@ethersproject/address"; +import { concat, hexlify } from "@ethersproject/bytes"; +import { defineProperties } from "@ethersproject/properties"; + +import { BaseContract, copyOverrides, resolveArgs } from "./contract.js"; +import { logger } from "./logger.js"; + +import type { InterfaceAbi } from "@ethersproject/abi"; +import type { BytesLike } from "@ethersproject/logger"; + +import type { + ContractInterface, ContractMethodArgs, ContractRunner, ContractDeployTransaction, +} from "./types.js"; +import type { ContractTransactionResponse } from "./wrappers.js"; + + +// A = Arguments to the constructor +// I = Interface of deployed contracts +export class ContractFactory = Array, I = BaseContract> { + readonly interface!: Interface; + readonly bytecode!: string; + readonly runner!: null | ContractRunner; + + constructor(abi: Interface | InterfaceAbi, bytecode: BytesLike | { object: string }, runner?: ContractRunner) { + const iface = Interface.from(abi); + + // Dereference Solidity bytecode objects and allow a missing `0x`-prefix + if (bytecode instanceof Uint8Array) { + bytecode = hexlify(logger.getBytes(bytecode)); + } else { + if (typeof(bytecode) === "object") { bytecode = bytecode.object; } + if (bytecode.substring(0, 2) !== "0x") { bytecode = "0x" + bytecode; } + bytecode = hexlify(logger.getBytes(bytecode)); + } + + defineProperties(this, { + bytecode, interface: iface, runner: (runner || null) + }); + } + + async getDeployTransaction(...args: ContractMethodArgs): Promise { + let overrides: Omit = { }; + + const fragment = this.interface.deploy; + + if (fragment.inputs.length + 1 === args.length) { + overrides = await copyOverrides(args.pop()); + } + + if (fragment.inputs.length !== args.length) { + throw new Error("incorrect number of arguments to constructor"); + } + + const resolvedArgs = await resolveArgs(this.runner, fragment.inputs, args); + + const data = concat([ this.bytecode, this.interface.encodeDeploy(resolvedArgs) ]); + return Object.assign({ }, overrides, { data }); + } + + async deploy(...args: ContractMethodArgs): Promise> { + const tx = await this.getDeployTransaction(...args); + + if (!this.runner || typeof(this.runner.sendTransaction) !== "function") { + return logger.throwError("factory runner does not support sending transactions", "UNSUPPORTED_OPERATION", { + operation: "sendTransaction" + }); + } + + const sentTx = await this.runner.sendTransaction(tx); + const address = getCreateAddress(sentTx); + return new (BaseContract)(address, this.interface, this.runner, sentTx); + } + + connect(runner: ContractRunner): ContractFactory { + return new ContractFactory(this.interface, this.bytecode, runner); + } + + static fromSolidity = Array, I = ContractInterface>(output: any, runner?: ContractRunner): ContractFactory { + if (output == null) { + logger.throwArgumentError("bad compiler output", "output", output); + } + + if (typeof(output) === "string") { output = JSON.parse(output); } + + const abi = output.abi; + + let bytecode = ""; + if (output.bytecode) { + bytecode = output.bytecode; + } else if (output.evm && output.evm.bytecode) { + bytecode = output.evm.bytecode; + } + + return new this(abi, bytecode, runner); + } +} diff --git a/packages/contract/src.ts/index.ts b/packages/contract/src.ts/index.ts new file mode 100644 index 000000000..9292f51a9 --- /dev/null +++ b/packages/contract/src.ts/index.ts @@ -0,0 +1,19 @@ + +export { + BaseContract, Contract +} from "./contract.js"; + +export { + ContractFactory +} from "./factory.js"; + +export { + ContractEventPayload, ContractTransactionReceipt, ContractTransactionResponse, + EventLog +} from "./wrappers.js"; + +export type { + ConstantContractMethod, ContractEvent, ContractEventArgs, ContractEventName, + ContractInterface, ContractMethod, ContractMethodArgs, ContractRunner, + ContractTransaction, DeferredTopicFilter, Overrides +} from "./types.js"; diff --git a/packages/contract/src.ts/logger.ts b/packages/contract/src.ts/logger.ts new file mode 100644 index 000000000..6fde778de --- /dev/null +++ b/packages/contract/src.ts/logger.ts @@ -0,0 +1,3 @@ +import { Logger } from "@ethersproject/logger"; +import { version } from "./_version.js"; +export const logger = new Logger(version); diff --git a/packages/contract/src.ts/tests/test-contract.ts b/packages/contract/src.ts/tests/test-contract.ts new file mode 100644 index 000000000..cb3d5f6ee --- /dev/null +++ b/packages/contract/src.ts/tests/test-contract.ts @@ -0,0 +1,94 @@ +import { Typed } from "@ethersproject/abi"; +import * as providers from "@ethersproject/providers"; + +import { Contract } from "../index.js"; + +//import type { Addressable } from "@ethersproject/address"; +//import type { BigNumberish } from "@ethersproject/logger"; + +/* +import type { + ConstantContractMethod, ContractMethod, ContractEvent +} from "../index.js"; +*/ + +// @TODO +describe("Test Contract Calls", function() { + it("finds typed methods", async function() { + const contract = new Contract("0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72", [ + "function foo(string s) view returns (uint)", + "function foo(uint8) view returns (uint)", + "function foo(uint u, bool b) view returns (uint)", + ]); + const value = Typed.string("42"); + await contract.foo.populateTransaction(value, Typed.overrides({ value: 100 })) + contract["foo(string)"].fragment + }); +}); + +/* +describe("Test Contract Interface", function() { + it("builds contract interfaces", async function() { + this.timeout(60000); + + interface Erc20Interface { + // Constant Methods + balanceOf: ConstantContractMethod<[ address: string | Addressable ], bigint>; + decimals: ConstantContractMethod<[ ], bigint>; + + name: ConstantContractMethod<[ ], string>; + symbol: ConstantContractMethod<[ ], string>; + + // Mutation Methods + transferFrom: ContractMethod<[ address: string | Addressable, + address: string | Addressable, amount: BigNumberish ], boolean>; + + // Events + filters: { + Transfer: ContractEvent<[ from: Addressable | string, to: BigNumberish ]>; + } + } + + const erc20Abi = [ + "function balanceOf(address owner) view returns (uint)", + "function decimals() view returns (uint)", + "function name() view returns (string)", + "function symbol() view returns (string)", + + "function transferFrom(address from, address to, uint amount) returns (boolean)", + + "event Transfer(address indexed from, address indexed to, uint amount)" + ]; + + class Erc20Contract extends BaseContract.buildClass(erc20Abi) { }; + + const provider = new providers.InfuraProvider(); + // ENS + //const addr = "0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72"; + // DAI + const addr = "0x6B175474E89094C44Da98b954EedeAC495271d0F"; + const contract = new Erc20Contract(addr, provider); + console.log("SYMBOL", await contract.symbol()); + console.log("DECIMALS", await contract.decimals()); + console.log(await contract.balanceOf("0x5555763613a12D8F3e73be831DFf8598089d3dCa")); + console.log(await contract.balanceOf("ricmoo.eth")); + + await contract.on(contract.filters.Transfer, (from, to, value, event) => { + console.log("HELLO!", { from, to, value, event }); + event.removeListener(); + }); + const logs = await contract.queryFilter("Transfer", -10); + console.log(logs, logs[0], logs[0].args.from); + }); +}); +*/ + +describe("Test Contract Calls", function() { + it("calls ERC-20 methods", async function() { + const provider = new providers.AnkrProvider(); + const contract = new Contract("0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72", [ + "function balanceOf(address owner) view returns (uint)", + ], provider); + console.log("balance:", await contract.balanceOf("0x5555763613a12D8F3e73be831DFf8598089d3dCa")); + }); +}); diff --git a/packages/contract/src.ts/tests/types.ts b/packages/contract/src.ts/tests/types.ts new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/packages/contract/src.ts/tests/types.ts @@ -0,0 +1 @@ + diff --git a/packages/contract/src.ts/tests/utils.ts b/packages/contract/src.ts/tests/utils.ts new file mode 100644 index 000000000..b40517e1b --- /dev/null +++ b/packages/contract/src.ts/tests/utils.ts @@ -0,0 +1,25 @@ + +import fs from "fs" +import path from "path"; +import zlib from 'zlib'; + +// Find the package root (based on the nyc output/ folder) +const root = (function() { + let root = process.cwd(); + + while (true) { + if (fs.existsSync(path.join(root, "output"))) { return root; } + const parent = path.join(root, ".."); + if (parent === root) { break; } + root = parent; + } + + throw new Error("could not find root"); +})(); + +// Load the tests +export function loadTests(tag: string): Array { + const filename = path.resolve(root, "testcases", tag + '.json.gz'); + return JSON.parse(zlib.gunzipSync(fs.readFileSync(filename)).toString()); +} + diff --git a/packages/contract/src.ts/types.ts b/packages/contract/src.ts/types.ts new file mode 100644 index 000000000..4f1ae16cb --- /dev/null +++ b/packages/contract/src.ts/types.ts @@ -0,0 +1,111 @@ +import type { + EventFragment, FunctionFragment, Result, Typed +} from "@ethersproject/abi"; +import type { Addressable } from "@ethersproject/address"; +import type { + CallRequest, EventFilter, Filter, Log, PreparedRequest, Provider, + TopicFilter, TransactionRequest, TransactionResponse +} from "@ethersproject/providers"; +import type { Listener } from "@ethersproject/properties"; + +import type { ContractTransactionResponse } from "./wrappers.js"; + + +// The types of events a Contract can listen for +export type ContractEventName = string | ContractEvent | TopicFilter; + +// The object that will be used to run Contracts. The Signer and Provider +// both adhere to this, but other types of objects may wish to as well. +export interface ContractRunner { + provider?: Provider; + + // Required to estimate gas + estimateGas?: (tx: TransactionRequest) => Promise; + + // Required for pure, view or static calls to contracts + call?: (tx: TransactionRequest) => Promise; + + // Required to support ENS names + resolveName?: (name: string | Addressable) => Promise; + + // Required for mutating calls + sendTransaction?: (tx: TransactionRequest) => Promise; + + // Required for queryFilter + getLogs?: (filter: Filter) => Promise>; + + // Both are required for a contract to support events + on?: (event: EventFilter, listener: Listener) => Promise; + off?: (event: EventFilter, listener: Listener) => Promise; +} + +export interface ContractInterface { + [ name: string ]: BaseContractMethod; +}; + +export interface DeferredTopicFilter { + getTopicFilter(): Promise; + fragment: EventFragment; +} + +export interface ContractTransaction extends PreparedRequest { + // These are populated by contract methods and cannot bu null + to: string; + data: string; +} + +// Deployment Transactions have no `to` +export interface ContractDeployTransaction extends Omit { } + +// Overrides; cannot override `to` or `data` as Contract populates these +export interface Overrides extends Omit { }; + + +// Arguments for methods; with an optional (n+1)th Override +export type PostfixOverrides> = A | [ ...A, Overrides ]; +export type ContractMethodArgs> = PostfixOverrides<{ [ I in keyof A ]-?: A[I] | Typed }>; + +// A = Arguments passed in as a tuple +// R = The result type of the call (i.e. if only one return type, +// the qualified type, otherwise Result) +// D = The type the default call will return (i.e. R for view/pure, +// TransactionResponse otherwise) +export interface BaseContractMethod = Array, R = any, D extends R | ContractTransactionResponse = R | ContractTransactionResponse> { + (...args: ContractMethodArgs): Promise; + + name: string; + + fragment: FunctionFragment; + + getFragment(...args: ContractMethodArgs): FunctionFragment; + + populateTransaction(...args: ContractMethodArgs): Promise; + staticCall(...args: ContractMethodArgs): Promise; + send(...args: ContractMethodArgs): Promise; + estimateGas(...args: ContractMethodArgs): Promise; + staticCallResult(...args: ContractMethodArgs): Promise; +} + +export interface ContractMethod< + A extends Array = Array, + R = any, + D extends R | ContractTransactionResponse = R | ContractTransactionResponse +> extends BaseContractMethod { } + +export interface ConstantContractMethod< + A extends Array, + R = any +> extends ContractMethod { } + + +// Arguments for events; with each element optional and/or nullable +export type ContractEventArgs> = { [ I in keyof A ]?: A[I] | Typed | null }; + +export interface ContractEvent = Array> { + (...args: ContractEventArgs): DeferredTopicFilter; + + name: string; + + fragment: EventFragment; + getFragment(...args: ContractEventArgs): EventFragment; +}; diff --git a/packages/contract/src.ts/wrappers.ts b/packages/contract/src.ts/wrappers.ts new file mode 100644 index 000000000..a57eddd5e --- /dev/null +++ b/packages/contract/src.ts/wrappers.ts @@ -0,0 +1,99 @@ +import { defineProperties, EventPayload } from "@ethersproject/properties"; +import { + Block, Log, TransactionReceipt, TransactionResponse +} from "@ethersproject/providers"; + +import type { EventFragment, Interface, Result } from "@ethersproject/abi"; +import type { Listener } from "@ethersproject/properties"; +import type { + Provider +} from "@ethersproject/providers"; + +import type { BaseContract } from "./contract.js"; +import type { ContractEventName } from "./types.js"; + + +export class EventLog extends Log { + readonly interface!: Interface; + readonly fragment!: EventFragment; + readonly args!: Result; + + constructor(log: Log, iface: Interface, fragment: EventFragment) { + super(log, log.provider); + const args = iface.decodeEventLog(fragment, log.data, log.topics); + defineProperties(this, { args, fragment, interface: iface }); + } + + get eventName(): string { return this.fragment.name; } + get eventSignature(): string { return this.fragment.format(); } +} + +export class ContractTransactionReceipt extends TransactionReceipt { + readonly #interface: Interface; + + constructor(iface: Interface, provider: null | Provider, tx: TransactionReceipt) { + super(tx, provider); + this.#interface = iface; + } + + get logs(): Array { + return super.logs.map((log) => { + const fragment = log.topics.length ? this.#interface.getEvent(log.topics[0]): null; + if (fragment) { + return new EventLog(log, this.#interface, fragment) + } else { + return log; + } + }); + } + +} + +export class ContractTransactionResponse extends TransactionResponse { + readonly #interface: Interface; + + constructor(iface: Interface, provider: null | Provider, tx: TransactionResponse) { + super(tx, provider); + this.#interface = iface; + } + + async wait(confirms?: number): Promise { + const receipt = await super.wait(); + if (receipt == null) { return null; } + return new ContractTransactionReceipt(this.#interface, this.provider, receipt); + } +} + +export class ContractEventPayload extends EventPayload { + + readonly fragment!: EventFragment; + readonly log!: EventLog; + readonly args!: Result; + + constructor(contract: BaseContract, listener: null | Listener, filter: ContractEventName, fragment: EventFragment, _log: Log) { + super(contract, listener, filter); + const log = new EventLog(_log, contract.interface, fragment); + const args = contract.interface.decodeEventLog(fragment, log.data, log.topics); + defineProperties(this, { args, fragment, log }); + } + + get eventName(): string { + return this.fragment.name; + } + + get eventSignature(): string { + return this.fragment.format(); + } + + async getBlock(): Promise> { + return await this.log.getBlock(); + } + + async getTransaction(): Promise { + return await this.log.getTransaction(); + } + + async getTransactionReceipt(): Promise { + return await this.log.getTransactionReceipt(); + } +} diff --git a/packages/contract/tsconfig.json b/packages/contract/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/contract/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/crypto/.npmignore b/packages/crypto/.npmignore new file mode 100644 index 000000000..03a92044c --- /dev/null +++ b/packages/crypto/.npmignore @@ -0,0 +1,3 @@ +/src.ts/tests/** +/lib/tests/** +tsconfig.tsbuildinfo diff --git a/packages/crypto/LICENSE.md b/packages/crypto/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/crypto/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/crypto/package.json b/packages/crypto/package.json new file mode 100644 index 000000000..d19c97675 --- /dev/null +++ b/packages/crypto/package.json @@ -0,0 +1,34 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/bytes": "^6.0.0-beta.1", + "@ethersproject/logger": "^6.0.0-beta.1", + "@noble/hashes": "1.0.0" + }, + "description": "Basic crypto algorithms used for Ethereum.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "ethers" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/crypto", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/crypto", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/crypto/src.ts/_version.ts b/packages/crypto/src.ts/_version.ts new file mode 100644 index 000000000..b5dd13baa --- /dev/null +++ b/packages/crypto/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/crypto@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/crypto/src.ts/crypto-browser.ts b/packages/crypto/src.ts/crypto-browser.ts new file mode 100644 index 000000000..b6ea875e6 --- /dev/null +++ b/packages/crypto/src.ts/crypto-browser.ts @@ -0,0 +1,70 @@ +/* Browser Crypto Shims */ + +declare global { + interface Window { } + const window: Window; + const self: Window; +} + +import { hmac } from "@noble/hashes/hmac"; +import { pbkdf2 } from "@noble/hashes/pbkdf2"; +import { sha256 } from "@noble/hashes/sha256"; +import { sha512 } from "@noble/hashes/sha512"; + +import { logger } from "./logger.js"; + +function getGlobal(): any { + if (typeof self !== 'undefined') { return self; } + if (typeof window !== 'undefined') { return window; } + if (typeof global !== 'undefined') { return global; } + throw new Error('unable to locate global object'); +}; + +const anyGlobal = getGlobal(); +let crypto: any = anyGlobal.crypto || anyGlobal.msCrypto; + + +export interface CryptoHasher { + update(data: Uint8Array): CryptoHasher; + digest(): Uint8Array; +} + +export function createHash(algo: string): CryptoHasher { + switch (algo) { + case "sha256": return sha256.create(); + case "sha512": return sha512.create(); + } + return logger.throwArgumentError("invalid hashing algorithm name", "algorithm", algo); +} + +export function createHmac(_algo: string, key: Uint8Array): CryptoHasher { + const algo = ({ sha256, sha512 }[_algo]); + if (algo == null) { + return logger.throwArgumentError("invalid hmac algorithm", "algorithm", _algo); + } + return hmac.create(algo, key); +} + +export function pbkdf2Sync(password: Uint8Array, salt: Uint8Array, iterations: number, keylen: number, _algo: "sha256" | "sha512"): Uint8Array { + const algo = ({ sha256, sha512 }[_algo]); + if (algo == null) { + return logger.throwArgumentError("invalid pbkdf2 algorithm", "algorithm", _algo); + } + return pbkdf2(algo, password, salt, { c: iterations, dkLen: keylen }); +} + +export function randomBytes(length: number): Uint8Array { + if (crypto == null) { + return logger.throwError("platform does not support secure random numbers", "UNSUPPORTED_OPERATION", { + operation: "randomBytes" + }); + } + + if (length <= 0 || length > 1024 || (length % 1) || length != length) { + logger.throwArgumentError("invalid length", "length", length); + } + + const result = new Uint8Array(length); + crypto.getRandomValues(result); + return result; +} diff --git a/packages/crypto/src.ts/hmac.ts b/packages/crypto/src.ts/hmac.ts new file mode 100644 index 000000000..edba792ec --- /dev/null +++ b/packages/crypto/src.ts/hmac.ts @@ -0,0 +1,29 @@ +import { createHmac } from "crypto"; /*-browser*/ + +import { hexlify } from "@ethersproject/bytes"; + +import { logger } from "./logger.js"; + +import type { BytesLike } from "@ethersproject/logger"; + + +let locked = false; + +const _computeHmac = function(algorithm: "sha256" | "sha512", key: Uint8Array, data: Uint8Array): BytesLike { + return "0x" + createHmac(algorithm, key).update(data).digest("hex"); +} + +let __computeHmac = _computeHmac; + +export function computeHmac(algorithm: "sha256" | "sha512", _key: BytesLike, _data: BytesLike): string { + const key = logger.getBytes(_key, "key"); + const data = logger.getBytes(_data, "data"); + return hexlify(__computeHmac(algorithm, key, data)); +} +computeHmac._ = _computeHmac; +computeHmac.lock = function() { locked = true; } +computeHmac.register = function(func: (algorithm: "sha256" | "sha512", key: Uint8Array, data: Uint8Array) => BytesLike) { + if (locked) { throw new Error("computeHmac is locked"); } + __computeHmac = func; +} +Object.freeze(computeHmac); diff --git a/packages/crypto/src.ts/index.ts b/packages/crypto/src.ts/index.ts new file mode 100644 index 000000000..44d048c78 --- /dev/null +++ b/packages/crypto/src.ts/index.ts @@ -0,0 +1,37 @@ +// We import all these so we can export lock() +import { computeHmac } from "./hmac.js"; +import { keccak256 } from "./keccak.js"; +import { ripemd160 } from "./ripemd160.js"; +import { pbkdf2 } from "./pbkdf2.js"; +import { randomBytes } from "./random.js"; +import { scrypt, scryptSync } from "./scrypt.js"; +import { sha256, sha512 } from "./sha2.js"; + +export { + computeHmac, + + randomBytes, + + keccak256, + ripemd160, + sha256, sha512, + + pbkdf2, + scrypt, scryptSync +}; + + +export function lock(): void { + computeHmac.lock(); + keccak256.lock(); + pbkdf2.lock(); + randomBytes.lock(); + ripemd160.lock(); + scrypt.lock(); + scryptSync.lock(); + sha256.lock(); + sha512.lock(); +} + + +export type { ProgressCallback } from "./scrypt.js"; diff --git a/packages/crypto/src.ts/keccak.ts b/packages/crypto/src.ts/keccak.ts new file mode 100644 index 000000000..a72ec1fa8 --- /dev/null +++ b/packages/crypto/src.ts/keccak.ts @@ -0,0 +1,26 @@ +import { keccak_256 } from "@noble/hashes/sha3"; + +import { hexlify } from "@ethersproject/bytes"; +import { logger } from "./logger.js"; + +import type { BytesLike } from "@ethersproject/logger"; + +let locked = false; + +const _keccak256 = function(data: Uint8Array): Uint8Array { + return keccak_256(data); +} + +let __keccak256: (data: Uint8Array) => BytesLike = _keccak256; + +export function keccak256(_data: BytesLike): string { + const data = logger.getBytes(_data, "data"); + return hexlify(__keccak256(data)); +} +keccak256._ = _keccak256; +keccak256.lock = function(): void { locked = true; } +keccak256.register = function(func: (data: Uint8Array) => BytesLike) { + if (locked) { throw new TypeError("keccak256 is locked"); } + __keccak256 = func; +} +Object.freeze(keccak256); diff --git a/packages/crypto/src.ts/logger.ts b/packages/crypto/src.ts/logger.ts new file mode 100644 index 000000000..6fde778de --- /dev/null +++ b/packages/crypto/src.ts/logger.ts @@ -0,0 +1,3 @@ +import { Logger } from "@ethersproject/logger"; +import { version } from "./_version.js"; +export const logger = new Logger(version); diff --git a/packages/crypto/src.ts/pbkdf2.ts b/packages/crypto/src.ts/pbkdf2.ts new file mode 100644 index 000000000..80171da1f --- /dev/null +++ b/packages/crypto/src.ts/pbkdf2.ts @@ -0,0 +1,28 @@ +import { pbkdf2Sync } from "crypto"; /*-browser*/ + +import { hexlify } from "@ethersproject/bytes"; + +import { logger } from "./logger.js"; + +import type { BytesLike } from "@ethersproject/logger"; + +let locked = false; + +const _pbkdf2 = function(password: Uint8Array, salt: Uint8Array, iterations: number, keylen: number, algo: "sha256" | "sha512"): BytesLike { + return pbkdf2Sync(password, salt, iterations, keylen, algo); +} + +let __pbkdf2 = _pbkdf2; + +export function pbkdf2(_password: BytesLike, _salt: BytesLike, iterations: number, keylen: number, algo: "sha256" | "sha512"): string { + const password = logger.getBytes(_password, "password"); + const salt = logger.getBytes(_salt, "salt"); + return hexlify(__pbkdf2(password, salt, iterations, keylen, algo)); +} +pbkdf2._ = _pbkdf2; +pbkdf2.lock = function(): void { locked = true; } +pbkdf2.register = function(func: (password: Uint8Array, salt: Uint8Array, iterations: number, keylen: number, algo: "sha256" | "sha512") => BytesLike) { + if (locked) { throw new Error("pbkdf2 is locked"); } + __pbkdf2 = func; +} +Object.freeze(pbkdf2); diff --git a/packages/crypto/src.ts/random.ts b/packages/crypto/src.ts/random.ts new file mode 100644 index 000000000..e85e5504d --- /dev/null +++ b/packages/crypto/src.ts/random.ts @@ -0,0 +1,22 @@ + +import { randomBytes as crypto_random } from "crypto"; /*-browser*/ + +let locked = false; + +const _randomBytes = function(length: number): Uint8Array { + return new Uint8Array(crypto_random(length)); +} + +let __randomBytes = _randomBytes; + +export function randomBytes(length: number): Uint8Array { + return __randomBytes(length); +} + +randomBytes._ = _randomBytes; +randomBytes.lock = function(): void { locked = true; } +randomBytes.register = function(func: (length: number) => Uint8Array) { + if (locked) { throw new Error("random is locked"); } + __randomBytes = func; +} +Object.freeze(randomBytes); diff --git a/packages/crypto/src.ts/ripemd160.ts b/packages/crypto/src.ts/ripemd160.ts new file mode 100644 index 000000000..095311b7d --- /dev/null +++ b/packages/crypto/src.ts/ripemd160.ts @@ -0,0 +1,26 @@ +import { ripemd160 as noble_ripemd160 } from "@noble/hashes/ripemd160"; + +import { hexlify } from "@ethersproject/bytes"; +import { logger } from "./logger.js"; + +import type { BytesLike } from "@ethersproject/logger"; + +let locked = false; + +const _ripemd160 = function(data: Uint8Array): Uint8Array { + return noble_ripemd160(data); +} + +let __ripemd160: (data: Uint8Array) => BytesLike = _ripemd160; + +export function ripemd160(_data: BytesLike): string { + const data = logger.getBytes(_data, "data"); + return hexlify(__ripemd160(data)); +} +ripemd160._ = _ripemd160; +ripemd160.lock = function(): void { locked = true; } +ripemd160.register = function(func: (data: Uint8Array) => BytesLike) { + if (locked) { throw new TypeError("ripemd160 is locked"); } + __ripemd160 = func; +} +Object.freeze(ripemd160); diff --git a/packages/crypto/src.ts/scrypt.ts b/packages/crypto/src.ts/scrypt.ts new file mode 100644 index 000000000..1a69506cf --- /dev/null +++ b/packages/crypto/src.ts/scrypt.ts @@ -0,0 +1,49 @@ +import { scrypt as _nobleSync, scryptAsync as _nobleAsync } from "@noble/hashes/scrypt"; + +import { hexlify as H} from "@ethersproject/bytes"; +import { logger } from "./logger.js"; + +import type { BytesLike } from "@ethersproject/logger"; + + +export type ProgressCallback = (percent: number) => void; + + +let lockedSync = false, lockedAsync = false; + +const _scryptAsync = async function(passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number, onProgress?: ProgressCallback) { + return await _nobleAsync(passwd, salt, { N, r, p, dkLen, onProgress }); +} +const _scryptSync = function(passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number) { + return _nobleSync(passwd, salt, { N, r, p, dkLen }); +} + +let __scryptAsync: (passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number, onProgress?: ProgressCallback) => Promise = _scryptAsync; +let __scryptSync: (passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number) => BytesLike = _scryptSync + + +export async function scrypt(_passwd: BytesLike, _salt: BytesLike, N: number, r: number, p: number, dkLen: number, progress?: ProgressCallback): Promise { + const passwd = logger.getBytes(_passwd, "passwd"); + const salt = logger.getBytes(_salt, "salt"); + return H(await __scryptAsync(passwd, salt, N, r, p, dkLen, progress)); +} +scrypt._ = _scryptAsync; +scrypt.lock = function(): void { lockedAsync = true; } +scrypt.register = function(func: (passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number, progress?: ProgressCallback) => Promise) { + if (lockedAsync) { throw new Error("scrypt is locked"); } + __scryptAsync = func; +} +Object.freeze(scrypt); + +export function scryptSync(_passwd: BytesLike, _salt: BytesLike, N: number, r: number, p: number, dkLen: number): string { + const passwd = logger.getBytes(_passwd, "passwd"); + const salt = logger.getBytes(_salt, "salt"); + return H(__scryptSync(passwd, salt, N, r, p, dkLen)); +} +scryptSync._ = _scryptSync; +scryptSync.lock = function(): void { lockedSync = true; } +scryptSync.register = function(func: (passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number) => BytesLike) { + if (lockedSync) { throw new Error("scryptSync is locked"); } + __scryptSync = func; +} +Object.freeze(scryptSync); diff --git a/packages/crypto/src.ts/sha2.ts b/packages/crypto/src.ts/sha2.ts new file mode 100644 index 000000000..2eaf26828 --- /dev/null +++ b/packages/crypto/src.ts/sha2.ts @@ -0,0 +1,46 @@ +import { createHash } from "crypto"; /*-browser*/ + +import { hexlify } from "@ethersproject/bytes"; + +import { logger } from "./logger.js"; + +import type { BytesLike } from "@ethersproject/logger"; + + +const _sha256 = function(data: Uint8Array): Uint8Array { + return createHash("sha256").update(data).digest(); +} + +const _sha512 = function(data: Uint8Array): Uint8Array { + return createHash("sha512").update(data).digest(); +} + +let __sha256: (data: Uint8Array) => BytesLike = _sha256; +let __sha512: (data: Uint8Array) => BytesLike = _sha512; + +let locked256 = false, locked512 = false; + + +export function sha256(_data: BytesLike): string { + const data = logger.getBytes(_data, "data"); + return hexlify(__sha256(data)); +} +sha256._ = _sha256; +sha256.lock = function(): void { locked256 = true; } +sha256.register = function(func: (data: Uint8Array) => BytesLike): void { + if (locked256) { throw new Error("sha256 is locked"); } + __sha256 = func; +} +Object.freeze(sha256); + +export function sha512(_data: BytesLike): string { + const data = logger.getBytes(_data, "data"); + return hexlify(__sha512(data)); +} +sha512._ = _sha512; +sha512.lock = function(): void { locked512 = true; } +sha512.register = function(func: (data: Uint8Array) => BytesLike): void { + if (locked512) { throw new Error("sha512 is locked"); } + __sha512 = func; +} +Object.freeze(sha256); diff --git a/packages/crypto/src.ts/tests/test-algo-swap.ts b/packages/crypto/src.ts/tests/test-algo-swap.ts new file mode 100644 index 000000000..4045f1f5d --- /dev/null +++ b/packages/crypto/src.ts/tests/test-algo-swap.ts @@ -0,0 +1,116 @@ +import assert from "assert"; + +import { + lock, + + computeHmac, + + keccak256, ripemd160, sha256, sha512, + + pbkdf2, scrypt, scryptSync +} from "../index.js"; + +interface Algorithm { + (...args: Array): string | Promise; + + register: (func: any) => void; + lock: () => void; + _: (...args: Array) => any; +} + +interface TestCase { + name: string; + params: Array; + algorithm: Algorithm; + hijackTag: string; +} + + +describe("test registration", function() { + + let hijack = ""; + function getHijack(algo: string) { + return function(...args: Array) { + hijack = `hijacked ${ algo }: ${ JSON.stringify(args) }`; + return "0x42"; + } + } + + const tests: Array = [ + { + name: "keccak256", + params: [ "0x" ], + hijackTag: 'hijacked keccak256: [{}]', + algorithm: keccak256 + }, + { + name: "sha256", + params: [ "0x" ], + hijackTag: 'hijacked sha256: [{}]', + algorithm: sha256 + }, + { + name: "sha512", + params: [ "0x" ], + hijackTag: 'hijacked sha512: [{}]', + algorithm: sha512 + }, + { + name: "ripemd160", + params: [ "0x" ], + hijackTag: 'hijacked ripemd160: [{}]', + algorithm: ripemd160 + }, + { + name: "pbkdf2", + params: [ "0x", "0x", 1024, 32, "sha256" ], + hijackTag: 'hijacked pbkdf2: [{},{},1024,32,"sha256"]', + algorithm: pbkdf2 + }, + { + name: "scryptSync", + params: [ "0x", "0x", 1024, 8, 1, 32 ], + hijackTag: 'hijacked scryptSync: [{},{},1024,8,1,32]', + algorithm: scryptSync + }, + { + name: "scrypt", + params: [ "0x", "0x", 1024, 8, 1, 32 ], + hijackTag: 'hijacked scrypt: [{},{},1024,8,1,32,null]', + algorithm: scrypt + }, + { + name: "computeHmac", + params: [ "sha256", "0x", "0x" ], + hijackTag: 'hijacked computeHmac: ["sha256",{},{}]', + algorithm: computeHmac + }, + ]; + + tests.forEach(({ name, params, hijackTag, algorithm }) => { + it(`swaps in hijacked callback: ${ name }`, async function() { + const initial = await algorithm(...params); + + algorithm.register(getHijack(name)); + + assert.equal(await algorithm(...params), "0x42"); + assert.equal(hijack, hijackTag); + + algorithm.register(algorithm._); + assert.equal(await algorithm(...params), initial); + }); + }); + + it("prevents swapping after locked", function() { + lock(); + + tests.forEach(({ name, params, hijackTag, algorithm }) => { + assert.throws(function() { + algorithm.register(getHijack("test")); + }, function(error) { + return (error.message === `${ name } is locked`); + }); + }); + }); + +}); diff --git a/packages/crypto/src.ts/tests/test-crypto.ts b/packages/crypto/src.ts/tests/test-crypto.ts new file mode 100644 index 000000000..b8b1b17aa --- /dev/null +++ b/packages/crypto/src.ts/tests/test-crypto.ts @@ -0,0 +1,238 @@ +import assert from "assert"; + +import { loadTests } from "./utils.js"; + +import type { TestCaseHash, TestCaseHmac, TestCasePbkdf } from "./types.js"; + +import { + computeHmac, + keccak256, ripemd160, sha256, sha512, + pbkdf2, scrypt, scryptSync +} from "../index.js"; + + +describe("test hashing", function() { + const tests = loadTests("hashes"); + + tests.forEach((test) => { + it(`computes sha2-256: ${ test.name }`, function() { + assert.equal(sha256(test.data), test.sha256); + }); + }); + + tests.forEach((test) => { + it(`computes sha2-512: ${ test.name }`, function() { + assert.equal(sha512(test.data), test.sha512); + }); + }); + + tests.forEach((test) => { + it(`computes ripemd160: ${ test.name }`, function() { + assert.equal(ripemd160(test.data), test.ripemd160); + }); + }); + + tests.forEach((test) => { + it(`computes keccak256: ${ test.name }`, function() { + assert.equal(keccak256(test.data), test.keccak256); + }); + }); +}); + +describe("test password-based key derivation", function() { + const tests = loadTests("pbkdf"); + + tests.forEach((test) => { + it(`computes pbkdf2: ${ test.name}`, function() { + const password = Buffer.from(test.password.substring(2), "hex"); + const salt = Buffer.from(test.salt.substring(2), "hex"); + const { iterations, algorithm, key } = test.pbkdf2; + const result = pbkdf2(password, salt, iterations, test.dkLen, algorithm); + assert.equal(result, key); + }); + }); + + tests.forEach((test) => { + it(`computes scrypt (sync): ${ test.name}`, function() { + this.timeout(1000); + + const password = Buffer.from(test.password.substring(2), "hex"); + const salt = Buffer.from(test.salt.substring(2), "hex"); + const { N, r, p, key } = test.scrypt; + const result = scryptSync(password, salt, N, r, p, test.dkLen); + assert.equal(result, key); + }); + }); + + tests.forEach((test) => { + it(`computes scrypt (async): ${ test.name}`, async function() { + this.timeout(1000); + + const password = Buffer.from(test.password.substring(2), "hex"); + const salt = Buffer.from(test.salt.substring(2), "hex"); + const { N, r, p, key } = test.scrypt; + + let progressCount = 0, progressOk = true, lastProgress = -1; + + const result = await scrypt(password, salt, N, r, p, test.dkLen, (progress) => { + if (progress < lastProgress) { progressOk = false; } + lastProgress = progress; + progressCount++; + }); + + assert.ok(progressOk, "progress was not monotonically increasing"); + assert.ok(progressCount > 100, "progress callback was called at leat 100 times"); + assert.equal(result, key); + }); + }); + +}); + +describe("test hmac", function() { + const tests = loadTests("hmac"); + + tests.forEach((test) => { + it(`computes hmac: ${ test.name}`, async function() { + const { algorithm, key, data } = test; + assert.equal(computeHmac(algorithm, key, data), test.hmac); + }); + }); +}); + +/* +describe("test registration", function() { + let hijack = ""; + function getHijack(algo: string) { + return function(...args: Array) { + hijack = `hijacked ${ algo }: ${ JSON.stringify(args) }`; + return "0x42"; + } + } + + it("hijacks keccak256", function() { + const initial = keccak256("0x"); + + keccak256.register(getHijack("kecak256")); + assert.equal(keccak256("0x"), "0x42"); + assert.equal(hijack, 'hijacked kecak256: [{}]'); + + keccak256.register(keccak256._); + assert.equal(keccak256("0x"), initial); + + keccak256.lock(); + + assert.throws(function() { + keccak256.register(getHijack("test")); + }, function(error) { + return (error.message === "keccak256 is locked"); + }); + }); + + it("hijacks sha256", function() { + const initial = sha256("0x"); + + sha256.register(getHijack("sha256")); + assert.equal(sha256("0x"), "0x42"); + assert.equal(hijack, 'hijacked sha256: [{}]'); + + sha256.register(sha256._); + assert.equal(sha256("0x"), initial); + + sha256.lock(); + + assert.throws(function() { + sha256.register(getHijack("test")); + }, function(error) { + return (error.message === "sha256 is locked"); + }); + }); + + it("hijacks sha512", function() { + const initial = sha512("0x"); + + sha512.register(getHijack("sha512")); + assert.equal(sha512("0x"), "0x42"); + assert.equal(hijack, 'hijacked sha512: [{}]'); + + sha512.register(sha512._); + assert.equal(sha512("0x"), initial); + + sha512.lock(); + + assert.throws(function() { + sha512.register(getHijack("test")); + }, function(error) { + return (error.message === "sha512 is locked"); + }); + }); + + it("hijacks pbkdf2", function() { + const initial = pbkdf2("0x", "0x", 1024, 32, "sha256"); + + pbkdf2.register(getHijack("pbkdf2")); + assert.equal(pbkdf2("0x", "0x", 1024, 32, "sha256"), "0x42"); + assert.equal(hijack, 'hijacked pbkdf2: [{},{},1024,32,"sha256"]'); + + pbkdf2.register(pbkdf2._); + assert.equal(pbkdf2("0x", "0x", 1024, 32, "sha256"), initial); + + pbkdf2.lock(); + + assert.throws(function() { + pbkdf2.register(getHijack("test")); + }, function(error) { + return (error.message === "pbkdf2 is locked"); + }); + }); + + it("hijacks scryptSync", function() { + + function getHijack(...args: Array) { + hijack = `hijacked scryptSync: ${ JSON.stringify(args) }`; + return new Uint8Array([ 0x42 ]); + } + + const initial = scryptSync("0x", "0x", 1024, 8, 1, 32); + + scryptSync.register(getHijack); + assert.equal(scryptSync("0x", "0x", 1024, 8, 1, 32), "0x42"); + assert.equal(hijack, 'hijacked scryptSync: [{},{},1024,8,1,32]'); + + scryptSync.register(scryptSync._); + assert.equal(scryptSync("0x", "0x", 1024, 8, 1, 32), initial); + + scryptSync.lock(); + + assert.throws(function() { + scryptSync.register(getHijack); + }, function(error) { + return (error.message === "scryptSync is locked"); + }); + }); + + it("hijacks scrypt", async function() { + function getHijack(...args: Array) { + hijack = `hijacked scrypt: ${ JSON.stringify(args) }`; + return Promise.resolve(new Uint8Array([ 0x42 ])); + } + + const initial = await scrypt("0x", "0x", 1024, 8, 1, 32); + + scrypt.register(getHijack); + assert.equal(await scrypt("0x", "0x", 1024, 8, 1, 32), "0x42"); + assert.equal(hijack, 'hijacked scrypt: [{},{},1024,8,1,32,null]'); + + scrypt.register(scrypt._); + assert.equal(await scrypt("0x", "0x", 1024, 8, 1, 32), initial); + + scrypt.lock(); + + assert.throws(function() { + scrypt.register(getHijack); + }, function(error) { + return (error.message === "scrypt is locked"); + }); + }); + +}); +*/ diff --git a/packages/crypto/src.ts/tests/types.ts b/packages/crypto/src.ts/tests/types.ts new file mode 100644 index 000000000..1ae8b1256 --- /dev/null +++ b/packages/crypto/src.ts/tests/types.ts @@ -0,0 +1,36 @@ + +export interface TestCaseHash { + name: string; + data: string; + sha256: string; + sha512: string; + ripemd160: string; + keccak256: string; +} + +export interface TestCasePbkdf { + name: string; + password: string; + salt: string; + dkLen: number; + pbkdf2: { + iterations: number; + algorithm: "sha256" | "sha512"; + key: string; + }, + scrypt: { + N: number; + r: number; + p: number; + key: string; + } +} + +export interface TestCaseHmac { + name: string; + data: string; + key: string; + algorithm: "sha256" | "sha512"; + hmac: string; +} + diff --git a/packages/crypto/src.ts/tests/utils.ts b/packages/crypto/src.ts/tests/utils.ts new file mode 100644 index 000000000..0b1da525d --- /dev/null +++ b/packages/crypto/src.ts/tests/utils.ts @@ -0,0 +1,25 @@ + +import fs from "fs" +import path from "path"; +import zlib from 'zlib'; + +// Find the package root (based on the nyc output/ folder) +const root = (function() { + let root = process.cwd(); + + while (true) { + if (fs.existsSync(path.join(root, "output"))) { return root; } + const parent = path.join(root, ".."); + if (parent === root) { break; } + root = parent; + } + + throw new Error("could not find root"); +})(); + +// Load the tests +export function loadTests(tag: string): Array { + const filename = path.resolve(root, "testcases", tag + ".json.gz"); + return JSON.parse(zlib.gunzipSync(fs.readFileSync(filename)).toString()); +} + diff --git a/packages/crypto/tsconfig.json b/packages/crypto/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/crypto/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/ethers/.npmignore b/packages/ethers/.npmignore new file mode 100644 index 000000000..03a92044c --- /dev/null +++ b/packages/ethers/.npmignore @@ -0,0 +1,3 @@ +/src.ts/tests/** +/lib/tests/** +tsconfig.tsbuildinfo diff --git a/packages/ethers/LICENSE.md b/packages/ethers/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/ethers/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/ethers/dist/.gitignore b/packages/ethers/dist/.gitignore new file mode 100644 index 000000000..de7d15690 --- /dev/null +++ b/packages/ethers/dist/.gitignore @@ -0,0 +1 @@ +**.gz diff --git a/packages/ethers/dist/ethers-wordlists.min.js b/packages/ethers/dist/ethers-wordlists.min.js new file mode 100644 index 000000000..564591018 --- /dev/null +++ b/packages/ethers/dist/ethers-wordlists.min.js @@ -0,0 +1 @@ +import{id as o}from"@ethersproject/hash";import{Logger as a}from"@ethersproject/logger";import{defineProperties as r}from"@ethersproject/properties";import{hexlify as e}from"@ethersproject/bytes";import{toUtf8String as n,toUtf8Bytes as i}from"@ethersproject/strings";const T=" !#$%&'()*+,-./<=>?@[]^_`{|}~",L=/^[a-z]*$/i;function J(o,a){let r=97;return o.reduce(((o,e)=>(e===a?r++:e.match(L)?o.push(String.fromCharCode(r)+e):(r=97,o.push(e)),o)),[])}function A(o){if("0"!==o[0])throw TypeError("unsupported auwl data");return function(o,a){for(let r=T.length-1;r>=0;r--)o=o.split(T[r]).join(a.substring(2*r,2*r+2));const r=[],e=o.replace(/(:|([0-9])|([A-Z][a-z]*))/g,((o,a,e,n)=>{if(e)for(let o=parseInt(e);o>=0;o--)r.push(";");else r.push(a.toLowerCase());return""}));if(e)throw new Error(`leftovers: ${JSON.stringify(e)}`);return J(J(r,";"),":")}(o.substring(1+2*T.length),o.substring(1,1+2*T.length))}const l=new a("@ethersproject/wordlists@6.0.0-beta.1");class R{constructor(o){r(this,{locale:o})}split(o){return o.toLowerCase().split(/ +/g)}join(o){return o.join(" ")}}var g,t,S,u,M,F=window&&window.__classPrivateFieldSet||function(o,a,r,e,n){if("m"===e)throw new TypeError("Private method is not writable");if("a"===e&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof a?o!==a||!n:!a.has(o))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===e?n.call(o,r):n?n.value=r:a.set(o,r),r},s=window&&window.__classPrivateFieldGet||function(o,a,r,e){if("a"===r&&!e)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof a?o!==a||!e:!a.has(o))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?e:"a"===r?e.call(o):e?e.value:a.get(o)};class N extends R{constructor(o,a,r){super(o),g.add(this),t.set(this,void 0),S.set(this,void 0),u.set(this,void 0),F(this,t,a,"f"),F(this,S,r,"f"),F(this,u,null,"f")}get _data(){return s(this,t,"f")}_decodeWords(){return A(s(this,t,"f"))}getWord(o){const a=s(this,g,"m",M).call(this);return(o<0||o>=a.length)&&l.throwArgumentError(`invalid word index: ${o}`,"index",o),a[o]}getWordIndex(o){return s(this,g,"m",M).call(this).indexOf(o)}}t=new WeakMap,S=new WeakMap,u=new WeakMap,g=new WeakSet,M=function(){if(null==s(this,u,"f")){const a=this._decodeWords();if(o(a.join("\n")+"\n")!==s(this,S,"f"))throw new Error(`BIP39 Wordlist for ${this.locale} FAILED`);F(this,u,a,"f")}return s(this,u,"f")};const X=new class extends N{constructor(){super("cz","0itatkastcenaovo$taouleraeki&chor*teci%enbalodaeladet'!Chn=0Di#%E%^1Resa2Rese3CeT'#0EjKohol0Pu)%0A&sDul#Ekdo)Ke)Ti#Ul|3}aOgan%0FaltI$@tPi,%TmaTronom0LasL{i#Ol0Tobus4Yl:B#}R'?TaUb_U/!U^U+Ur!Xer2A^v#Ambo,An#AtrEp)Ike)KoLohOnzOskevUn{#Usin#Z^Zy2Bl.Bn|})D _D#D'aF{Jar(Kv?LdokLvaN^NkrRzaTikVolZola3D+tL.T'#0Ukot:PartRev&3DrDu+J/JnLaLerLkemLn?N.Nn(N'#NtrumNzZ(2O&2KolivUv!4It_N(0Dn(Ke)KrPot0Ak~AlIkRkot2Kli$a:L-oRe[T_Tum1E,1B!a}'#Cib_Fic Fla%KlKr{Mokr!PreseRbyS#T-tiv3Kob,zKt|O^P]mSkSp+jV`]Vo/2AhaOuhoUhopis1Es0BroByt-C@t}ut DnesH+dHo^H,JemJn?Kl`KolaKtAzeDolObn(OgerieOzdSn(T Z(2B@}'noD-HaH'#S SnoT(0Oj?Or>2Nam :9O]gOnomie0EktronIpsa0AilIseO%P!ie2Izo^O/aOpejOs2EjEn%K<)Kymo0Ike)0FR&S]Zky3StOhOup(T!Ub.U/o)0AtO)Yz0IsOjivoOut0Bl.Boj}DinyDl!Dno)D|Jn(KejLin#L#LubMo+N [No,%RalR^RizontRkoRliv>RmonRn.RoskopR$voSpo^St.T'(U[UfUp!Us#V<2Ad[An?Av(Az^Bo+kD.D]D(N-Ob#Oma^OtOu^Oz@St#Ub(Yz!2B@(B~D[KotMrS aSto)0Ozd2Bn(D,ntGie&M&Sterik:2Yl#3Ned2O&0Uze0Un a0F-%Fla%KasoOva%Sp-%Tern{Vali^Ve$N)rRmarkRoSanSnoT#VD+Dn!_HlanKotL@L oMn(NomP?S{erV Zd>Zero3NakNdyNo/Sk,Sto)Trn?Zva3En|1Gurt5R):Bar{B_Bin{}&D{Did]HanJakJu)KaoKtusLam aLhotyLibrLn(Me,MkolivM&Ni[lNoeNtB#BlihaBylaC*rH=J@>KosKtejlLapsLe^LizeLoMandoMe)MikMn!aMo,MpasMun aN!N%ptNd?N>NfeseNgresN.NkursN)ktNzervaPan>PieP~Pr'#Rb_R-tSt#T_T+)T*lUk!Up_&Us-Uz]VbojZaZMe+cMivoOcanOkOni#Op OupaOv#T-Uh`]Up?Ut(Vin#Y/+Yp)Y$alYt2Dlan#FrJn(KlaLaj^Li/L#Lom{Ltu,NaPodivuRtRzV`]:B,d<})nDn(IkKom>M_aMpaN'#S?SoStu,Tin#V.3B#CkdyD@Dn?D'#Dv.G@^GieG,%H%Hk(H~KtvarNo/odNtil#P@#Pid]T`]T>TmoTokruhVhartV a%Vobok3B,}ot#DojedDsk(H'.Jav>L-M{#NieN#No+umStop`T.T|5Bi$aDivodGi#GopedKal aK{Mc|P!aPu/RdSosTrU^lUhU#Usk!V>3Tiv(1Cer&CiferMpSkSt,%0I%2RaRi#S.:DamD]Gi$rHagonJ{-J _J< aKakK'?Kr_aL[L.L|Lv?Min#Nd+NkoRn(SakrSkotSopu$T?Tri#Tur aZan>ZivoZl Zur#2Lo[0}anikD a%D'.LasaL*nNtol#TlaTo^TrZe,3G,%H~Hu+K.KrofonL@>Lim{rL(Mi#Nc'&Ni[rNom{Nul(S#StrX|2Ad(HaH'.OkS!Uv 1I/Ohem0BilCn(D_#Dl [HylaKroL-ulaM@t#Nar/aNoklN$rumNt|NzunSazSkytStTiva%T<#Ty#U/aUdr(Zai#Z-Zol2AmKevTvolaZ{Zut(0T _1DrcF]nL!MieN?S{Ta%ZeumZi#nt3Sliv>0Da:B*r!}yt!Da%Dbyt-DhozDobroDpisHlasHn!Hodi+H,d Iv aJedn*Ji$oJm=K]n Kon>Krm LevoMaz!Mluv Nom{rOkoOpakO$roP`!PevnoPln P~Pos+dPr(oRod RubyRy/]S` S-!S+poSt!TolikV@-Vr/VzdR&Ru[RysSahSluhaS)r!UvVazVin VodVyk+Yv!_Z<0AsElEn Hl` Ho)H,&It~0BojByt}odCiz Ebr!Esl!Evzd!EzvaH`%Hod J{JinudKazK*p LivLu#Ml#Oln(P`PisPl=PLivoLu[Mf+tMls-N@#Ni#N&N|N$voNtof+Pri#Rke)RodieR)Ru#Ry[Se#Siv aSt_#T@tTro&V*kZnehtZ*r-3C#DagogJs-K]LotonNal)Ndr-NzeRiskopRoStr(Tar^T?Tro+jVn.Xeso3Ani$aHaJav?K+KnikL.Ln(Lul#Nze)Pe)S!_Sto+Tev&Vn?V'ar2A%n)Ak!Am@Ane)A$i#At Avid]AzE/Em@oEn)EsEtivoEv_Iv!N NoO/aOd.Om[OutUkYn2Bav Byt}odC Ctiv>D!D%n Deps!Dh+dDiv Dkl`Dman DnikDo[Dpo,D,zD$!aDvodDzimEzieHan#Hnut#H'S*d SpoluS)vaSud-SypTahT#nT+skTom-T,vaTupaTvo,U#zUtoUzdroVahaVidlaVlakVozVr/V$!VykVzde/Zd,vZem-Zn!-ZAp<-AseAv^IncipKnoObud O%ntoOdejOfeseOh,Oj-tO]m Omi+Onik!Op`OrokOs[OtonOut-OvazS#v#St@Udk(UtV-VohOvodTruh0Actvo0Ber)}DlKav>Kl.Kr+LtMpaNcP@SaSin#St.T|Ty#3Rami^SkT_::C-}otDia%Dn?DonFtGbyKe)K'.M@oMp*/NdeRa/R aS'&StrTo+$Zan%Zid]3Ag|Ak%CeptDaktMizd!Mo)N #Rdin#San#T_ Z[Z@?0Or0H|1B,n#CeseD`]Dim@tD]Hn!Jm=Ke,K)Kun^KvojeM@oNoRvisS` Sho,SkokSl!St,SuvSyp!T[T.Tk!T~Trv!VerZ&m2O^R~0FonLn?R#Rot-RupTua%1AfandrAliskoAnz@AutEptikIcaL`[L@?LoLuzO[O#nOroRip)RzUp.V(Vr&0Abi#Adid]An.A$Avn(Ed|Ep>EvaEz.IbI&Izn?OnOup-OvoU/UhaUn%Up#Za0A,gdE)&Il$voL*vaOgR`RkRt#Ut-Ysl0AdAhaOb0Bo)}aD'#KolP#TvaUbojUc Ud%UhlasUl`Um,kUp,vaUsedUtokUvis{0Al'&As _IsLavOd-Oj@>OluOnzOvn!P@StUb1An?Ar(aAti#Av[EhnoEz#OdolaO+kOpaOrnoOup!Ra/ResRh~RomRu&Ud&Upn?VolYk0Bj-tBtropy}arD(KnoNd!N=Rik!aR'.0AhAl$voEtrAt[Az-Is+It-Obo^Odid]Or#Rab2Kav#KotN-N'>P!Pk(R'(S_T(:B+t#Bu+H*nJemnoJfunJgaJ Jn(Kti#Mh+MponNc|N>NkerPe)V@.Z!_3}ni#HdyKut.LefonMno)Nd@%Ni$aNU/l Uhl?UsV!2DyH~H(Nd,Ri$aR&jZemsko0ArohOr[Rd(Rz2GrKev:0Oh(OzeR!R*s-RusYt'&0HoTiv(0Iv 3R` 1Edn!I$ M=0Az!_Lidn Lon Otv Roj 0I%I)Ov 0Yv`]0Av IfR*s 1Al Oln Oz'#3D,v ElEn.L.N!:GonL/aL*nNaN^lNil#RanRhanyR|1ElkuHod0Ova0DroGe)%J%Lbl*dL{rhL _LmocLry[Nk'Ran^RzeS_#SkrzeSn?SpoduS)Ter.Ver#3B,%}rDeoh,D.D+LaN?S{Tal aZeZ #0Ezd0L`Us0Aj#AkAs>EvoHk(IvN'#Oup!1Uc|Uk0DaDiv(Doz&kD$voJ@skyJ&JskoLantL[L LnoSk'#Zid]Z'&0Ravo1Ab>A%tAhA)Ba}o+kH!StvaTu+0Ad T*p Tup0Ip4Bav Br!}|D!D,Fot H+d!H~Hod H,d Hub Jasn J{Jm=K]p Kon!L-!Maz!Mez Miz{Mys+tNe/!Nik!Nut P`!Pl! P,v Pu$ Raz R'n!Rv!Sl' SokoS)v Su~Syp!Tas Tes!Tr! Vi~Vol!Vrh_Zdob Zn!0AduBud }op DJ{Ji$ K+p!K*p Lep Mez Mot!Mys+tNe/!Nik!Pl! Poj Ps!Raz S)v Su~Taj Temn Tk~Ujm=Val Ve+tVin Vol!Vrt!Zvon 0Av RusuUd|Yt-1A+#ArmaAtn(IvoOb RojVihYm`]0L@.ManM.Pt!Z`uZdola2At Lt~Lubo#Ot' Ru[0MaMn?0Emn 0Lam!Oum!R!#Umav#0AtoEh#O[OmO$Ozvyk0Ap|ArAt-IjeIz{Ocn Odr!Rzl.Ut|0AkAl(Am@!Ovu0B,z Tav Ub-Ufa+0Lod Omal RavaR( Rud#Rvu1A^An C`]N (NoOv&Y/l Zav(1I/aR! 0B'.Br0Ed~EnkuEs_aOnR!Uk'odYk","0x25f44555f4af25b51a711136e1c7d6e50ce9f8917d39d6b1f076b2bb4d2fac1a")}};var b,c=window&&window.__classPrivateFieldSet||function(o,a,r,e,n){if("m"===e)throw new TypeError("Private method is not writable");if("a"===e&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof a?o!==a||!n:!a.has(o))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===e?n.call(o,r):n?n.value=r:a.set(o,r),r},B=window&&window.__classPrivateFieldGet||function(o,a,r,e){if("a"===r&&!e)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof a?o!==a||!e:!a.has(o))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?e:"a"===r?e.call(o):e?e.value:a.get(o)};class v extends N{constructor(o,a,r,e){super(o,a,e),b.set(this,void 0),c(this,b,r,"f")}get _accent(){return B(this,b,"f")}_decodeWords(){return function(o,a){let r=A(o).join(",");return a.split(/,/g).forEach((o=>{const a=o.match(/^([a-z]*)([0-9]+)([0-9])(.*)$/);if(!a)throw new Error("internal error parsing accents");let e=0;const n=function(o,a){const r=(1<=o;){const a=n>>i-o;n&=(1<(0==--n[e]&&(a=String.fromCharCode(a.charCodeAt(0),i),e++),a)))})),r.split(",")}(this._data,this._accent)}}b=new WeakMap;const E=new class extends v{constructor(){super("es","0arertoiotadonoaRteirroenaNonaLsolocoiliaralaorrenadaChoN$n0A>Dom,EjaI!#Oga&O'Or#RazoR*Ue=U<0Ab Adem@CeLe%OmoRa!RozUn0DazD$GeLaM,#S,)T^0AlAnceA+EEl]`E`EstruzI.I<2ErU{U'0Af[nArO)Uc Uf_Ul:BaB^|eH@IleJ Lanz/c.LdeMbuN>Nd-oRb(>RnizR+Scu]S#nSu[Tal]T!@T*Tu%UlZ 3BeBid/=S SoSt@3|oEnNgo2An>OqueUsa2ABi`BoCaCi`DaDegaIn//!oLsaMb-{dNi#N}saiRdeRr SqueTeTinVe{Zal2AvoAzoEchaEveIl=In>IsaOcaOmaOnceO)UjaUs>U#2CeoCleE'EyFan{F.HoIt_L#Rbuj(l(+Sc TacaZ.:Bal=BezaBi`B[CaoDav!D,aErFeI{ImanJaJ.LLam Lc$L&Li{dLleLm/^LvoMaMb$Mel=Mi'Mp}c!Nd?Nel-gu+Nic-#N-.ObaOsPazPi%nPo)Pt Puch((b.RcelRe%Rg(i'RneRpe%R+R%SaS>S!oSpaS#rT^ceT_U{lUsaZo3Bol]D!D+Ld/eb_LoAmpuAnc]ApaAr]I>Is)IvoOqueOzaUle%Up 0Cl.EgoE=EnEr#F[G +M->NeN%P_sR>Rue]SneTaU{d2Am^AnA+AseAveI,)ImaInica2B_Cc~|i'Ci`CoDigoDoF_G!He)JinJoL/ch/eg$Lg Lin/l LmoLum`Mba)M!Mi{Mo&Mpr-deNej}g-oc!Nsej}t PaPi(az.Rba%RchoR&nR.(r!S!SmosS%2AneoAt!E Ec!Ei&EmaIaIm,Ip%IsisOmoOnicaOque%U&Uz2Ad+Ar#At+BoBr*| aEl=En#Er{Es%EvaId Lebr/p/#Mb_Mpl*N-e%O%P.Pul( R$Se'Sf[zVaVi'5BleCeL^Ming}N Ra&Rm*RAu%EchaOrO%U*UjoU^2B@CaGa%G.L$Lle#N&Rm(+Rtun(z SaTo2AcaA'AsaAtisAveIe%Il=IpeIsI#OG Gu!aJaMb_Ng}^Nr((mig('St?Yo5E>ElgaEr%ENgl-$Nt Pit!R S#V,?Zg :7Lo5A]:B$C$C[DoD+nG #GrimaGu`I>M!Mi`Mp --ch-gos%NzaPizRgoRvaStimaTaTexT*U_lV Zo3AlCc~|eC#rErG~Gumb_Ja'Ngu-#NaOnOp &S~TalT[VeY,{3B!%dB+C^D!Di EnzoGaG!oMaMi)M.Mp$NceN&Ne-go)N}t!`Qui&SoS%T!aT$T+2AgaAmaAn#AveEg En Ev Or Ov!Uv@2BoC~CoCu[GicaG+MbrizM}jaTe5|aC*G J}-esPaSt+ToZ:Ce%|oD!aD_Du+Est+F@G@GoIzL{dLe%Ll/oMaMboMutN>N&Nej Ng-iquiNj N}Re(f?Rg,Ri&RmolR+nR)sRzoSaSc aSivoT T!@TizTrizXimoY^Z^ca3|aDal]D$Du]J?]J^L,/.M^i-^NsajeN)NuRca&R,gueRi#SS.TaT!To&T+Zc]3E&ElEmb+G/Lag+Lit Ll.M}-!}im}u#OpeR SaS!@S?SmoTadTo5|?aC~DaDe=HoJ LdeL!Li'M,#Mi- c-ed-j-#NoRad(d!Re'R*R+Rs(%lScaStr TivoV!V?Zo5|oD EbleE]Er)Est[G_J!L/e%L%N&Nec(alRoScu=SeoSgoSicaS=:C C~D IpeRanj(izRr SalTalTivoTu[lUseaValVeVi{d3C$Ct G Goc$G+OnRv$ToUt+V V!a3|oDoEb]E#NezNoTi&Vel5Bleza|eMin(i(m()TaTic@Va#Ve]V$5BeCaCleoD?=DoE[EveEzLoM!oTr@:Sis0EC~E[In On!T TicaUes#1Ac~A&rAlBi%CaD,EjaGa'G@Gul=I,)Ig,Il]OQues%Uga0Ad@Cu+Ez'OT[0O'Ro1EjaU=1I&Ige'0En)0O':C#D_El]Gi`GoIsJ oLabr/>Le%Li&Lm/om/p NNalNi>Nt!-ue=PaPelP?]Que)R Rcel(edR*RoRpa&RqueR[foR)S SeoS~SoS%TaT$Tr@UsaU%VoYa<3A#nCa&C!a|oDalD*G IneL L{'Le/ig+LlejoLoLuc--s N.OnOrPi'Que'R(ch(d!Rez(f?Ri>Rl(mizEgun%Em$EnsaE|!oD^Eb=Er%Es#Lg/*Lm.LpoLrNd*N%P #Pet*PoN{PaP!oSaScaSt+T 5BiB^DoE{G*I&In/e%LoMboM^Ptu[TaTi`:Ba&B!B$BleC GazG[&L/&L!oL*Lm.L.Ls/#LudLv Mb-c~Ndi-e Ng_Ni{dN}#PoQueRdin()nSt_TanU`Xof.3Cc~CoC_#C%DGu*IsL=LvaMa`M?l-d-Re'Rg*S#T?:Ba>BiqueB]BuCoC#JoL L>L,#Ll/.Ma'Mb^Ng}quePaPe)P@P.Qu?l(deRe(if(je%RotR+R%TuajeU+ZaZ.3At+|oC]CnicaJa&J!Ji&L/efo'MaM^Mp=NazNd!N!NisNRmi'Rnur(+rSisSo+StigoT!aX#Z3B$Bu+nEmpoEn{Er[EPoR(.TanT!eTu=Za5Al]B?=C Ci'DoG/&M N}#P PeQueRaxR!oRm,%RneoRoRpe&R_RS!Xi>2AbajoAc#rA!Afi>AgoAjeAmoAnceA#AumaAz EbolEguaEin%EnEp EsIbuIgoIpaIs)IunfoOfeoOmpaOn>OpaO)OzoU>Ue'Ufa2B!@BoEr#MbaM^NelNic(bin(ismoR'T^:0Ic 9C!a0B[l0I{dIrIv!Mab#S/-0Ou,Us,1Arm Chim+Er&Geb!G)I_ I?ntLeg Lia.Lou Lum O'd*PagaTesS' TicotT!Tu-0El>O?RiumRo-Ta^T_%fT* Trap 0Ba(eB .Da-Dib#G' Ro!Tom[Tru~e0A]Anc Ari-En*EreNqu>Rb>R`R$R^Rra.Ss(S%$Ta`#Te|T,+Udr>Vard 3Let&L>Lo&Nefi-R-|Rg Rl(eRmudaSa-Sog[Ta`Ur!3B $Cyc#Du#JouL/L(g)LlardNai!Olog+Ops+OtypeScuitS$Sto'iTu?Zar!2AfardAg)An~*Ess/tInd OndOqu Ous$2BardB(eI!I}Li@Nb$Nd*Nhe'Nif>NusRdu!R[T&Uc#Ue{Ug+Ul$Uqu(UrAveEbisE~eEuva.Ico]Iga@Ill/tIo~eI^O~u!Od Onz OusS^Ssu!U}U%$V=>V [Viar3D`#Intu!Les&Llu#Ndr>Ns' Ntr=Rc#Rebr=RiEr~ Ev=I_Iff!Ign$Im eIotLoru!OcolatOis*OI_tIgn ImatIva.O~eOna.Opor&2B=tBraCasFf!Gn Hesi$Iff Inc L eLibriLl(eLma,L$elMbatMed+Mm/@MpactNc tNdui!Nf>N.]Nno,Ns$[NtactNvexePa(P+Ra`Rbe|Rda.Rni~eRpusR!ctR&.Smi^Stu?T$U@Upu!Ura.U&|Uvr*Yo&2AbeA(&Ava&Ay$Eatu!Edi,E?{Eu}Evet&Ib]I Ist=I,eOi!Oqu Ota#Uci=UelYp,2Bi^E`l*Il]eIs(eIv!Lm( L%v Mu]Pi@Ra%fR<'3Anu!C#L(d!Ni^:Ign M>Ng N<'Uph(3Batt!Bi,Bord Brid But/tC= Cemb!Ch* Cid Clar Cor Cri!Cup]Da#Duc%fEsTa~ Tes,To' T!sTa%$U/>Ub#U-'U,Y_2Ag$Ap Es}Ibb]Oitu!2P +P#xeRab#Rc*3Nas%e:0Lou*0Ar,HarpeHel#La* LipUqu 1Fac Fec%fFig+FortFray Fusi$0Ali}Ar 2Ec,1Abor Arg*Ectr$Eg/tEph/tEveIgib#I%s?O.Ucid Ud 0B=]Bell*Bry$Er|@Issi$M_ O%$Ouvo*P e'Ploy Por,PriTo' Trav Um Vah*Viab#Voy Zy?0L+n0Aiss*Arg[At/tAu#Ic +I@m+I Ilog)I[Iso@ItapheO^ReuveRouv Uis/t0U !Uipe0Ig Osi$Re'Up%$0C=>Pad$Pe-P+g#Po*PritQuiv Say S_-S+uSor Ti?TomacTra@0Ag eA]An~eA%^E(d!Endo*Er[lH/olHi^Hn+Ir Off Oi#Onn/tO'd*R/.RoitU@0Phor+0Alu Asi$Enta`I@n-I,Olu%fOqu 1ActAg Auc Cel]Cit/tClusifCuPlor Po}Prim QuisT_sifTrai!Ul,:B#Bu#{Cet&Ci#Ctu!Ibl*Lai3AscoCe]C%fDe#Gu!Latu!Leta.L>eL#ulLm LouLtr N/c N*O#R?Ssu!X 2A* Am?As^At&'E|E~eE'Exi$Oc$O!Uctu Ui@Uvi=2L+Nd +Ngib#Nta(eRc Rg $Rmu]Rtu[Ssi#Ud!Ug eU`]Ulu!Urmi2Agi#AiC]RafeV!2A-AiveIs}ObeOi!Or+{2Lfe'M?Nf]R.R`#Udr$Uff!UlotUp`#Urm/dUt&2Ad)lAffi%A(eAndApp(AtuitAv*EnatIffu!Il]Imp Ogn Ond Ot&OupeUg U% Uy e2EpardErr>I@Im|veIta!Sta%f3Mnas&Rostat:Bitu@Cho*L&Me|NgarN[t$RicotRm$+Rp$Sard3LiumMato?RbeRiss$Rm(eR$Si,U!{3B n BouLar/tStoi!V 5MardMma.Mo.[N['Nor N&{R@Riz$Rlo.Rm$eRrib#U#{Us<5BlotI#{Ma(Mb#Mi@Mo'R]3Dro?lG+[M[Pno<:2Yl#2Nor U/e4Lici&Lusi$0A.Bib I,M_ReelRi,0O]2Oi!Res<:GuarIll*MbeNv>Rd(Ug U[Velot3Tab#T$UdiU[s<9Ind!N~ Ng]Ue'UissifUrn=Vi=Y|Ye{5Bi]Ge?ntNiorP$Ris&S%-Te{V_i#:Yak7M$oOs^:BelBi=Bo' C CtoVaboVo*3Ctu!G=G Gu?SsiveTt!V>Xi^Zard3AseS,ThiumTi.Ttor=V!'5Gi^Inta(Is*MbricT +U UrdUt!UveY=5B+Ci@Cra%fE'Gub!Is/tM>eNai!NdiR$T,X){:Ch(eGas(G_taGi^Ig!Ill$In%_Ir+Is$Jor Lax Lefi-Lhe'Li-L#t&MmouthNda,Niab#Nqu/tN&|N)lRath$Rb!R~/dRdiRi%?R^'Rr$R&]Scot&SsifT +lT>eTra^Udi!Ussa@UveXim=3Ch/tC$nuDa`#Dec(Di,DuUb#3Au]CrobeEt&Gn$Gr L+uLli$Mi^N-N =Nim=Nor Nu&Rac#Roi,Ssi#X&5Bi#D [El#{Ndi=Ni&'Nna+Not$eNst!Ntag[Nu?ntQ)'R-|Rsu!R% Te'TifU~eUf#Ul(Uss$Ut$Uv/t5L%p#Ni%$Ra`#Re[Rmu!Sc#SeumSic+nTa%$T T)l3Ria@R%l#S,eThi^:Ge'PpeRquoisRr Ta%$Ti$Tu!Ufra.U%^Vi!3Bu#{CtarFas&Ga%$Glig Goc>I.Rve{Ttoy Ur$eUtr$Veu3CheCkelTra&Ve|5B#CifCt'[Ir-'IToi!Urr*Uve|Va&'Vemb!Vi-5A.Anc I!Isib#M oP%=Q)Tri%f:0E*Jec%fLig Sc'S v Stac#T_*T' 0Casi$Cup E/Tob!Troy Tup]Ulai!0E'Or/t1F_}Fic>Fr*0Ive1Se|S`l$2Fac%fIv>0Bra.Ett!0Ct){Du]E!{Iri^1A#A^Er Ini$PortunPrim T Ti^1A.{An.Bi&D$n E`#G/eG)`Ifi-Ne?ntQ)T+0C`]MoPo,PyrusRadoxeR-l#ResIss$Iv!Lai!Lic>L#nLyg$eMma@Mp>Nct)lNd NeyR%^Si%$SZz#3Rami@:99AsarE!l#Es%$Ietu@It,O%_t:C(eC$,D+{G$d(I@'Is(L_%rLl$.Mas}Pi@Sa.Tis}Vag V(Y$n 3Ac%fAg*Ali}Anim Cevo*Ci,Clam Col,Cru,Cu]Cyc]Dig Dou,Fai!F#xeForm Fra(Fu.G=+nGi$Gla.Gul>I, Je,Jou La%fLev L+fMar^Me@MiPor,Prie5Che{M/-Mp!N-Nd(Se|S>Ta%fTorTu#U.U`#U#|U%[Y|?5B/BisCheEl#G){In Is<|S S%^3Th?:B]Bo,B!Co~eFariGesRcas?Rd(eT' Ug!nuUm$U,Uva.V/tV$n 1AlpelAnda#E]atEnarioEpt!HemaI_-Ind O!Ru%nUlp,1An-Cab#Ch Cou C!,Da%fDui!Ig['Jo'Lec%fMa(eMb]M_-M(=Na&'Nsib#N&n-Par Q)n-Re(R.ntR+{Rru!RumRvi-Sa?V*Vra.Xtup#3D =Ec#Eg Ff]G#Gn=L_-LiciumMp#Nc eNist!Ph$RopSmi^Tu 1I 3Ci=C#DiumIg[{LdatLe`Litu@Lub#Mb!M?`Mno]N@N.'N[t&No!Rc>R%rS+T%Rfa-Rica&R?n RpriC%#Il]L_tLism/L$n Mbo'Mi}Ngib#PisQu( Rd RifR%[SI$I^Itai!Iv s3AniumBa(Tic/t0A.I[UelU!0I#Op+:Car?Cc(Gab$dG)Ill/tInc!Is<|Lab#LiSe{Ss=S&3C&'Det&Get=Hicu#InardLo-Nd!diN Ng Ni?{Ntoua?1:0})),"0xe3818de38284e3818f"===C(a[442])&&"0xe3818de38283e3818f"===C(a[443])){const o=a[442];a[442]=a[443],a[443]=o}if("0xcb36b09e6baa935787fd762ce65e80b0c6a8dabdfbc3a7f86ac0e2c4fd111600"!==o(a.join("\n")+"\n"))throw new Error("BIP39 Wordlist for ja (Japanese) FAILED");return D=a,a}const G=new class extends R{constructor(){super("ja")}getWord(o){const a=U();return(o<0||o>=a.length)&&l.throwArgumentError(`invalid word index: ${o}`,"index",o),a[o]}getWordIndex(o){return U().indexOf(o)}split(o){return o.split(/(?:\u3000| )+/g)}join(o){return o.join(" ")}},m=["OYAa","ATAZoATBl3ATCTrATCl8ATDloATGg3ATHT8ATJT8ATJl3ATLlvATLn4ATMT8ATMX8ATMboATMgoAToLbAToMTATrHgATvHnAT3AnAT3JbAT3MTAT8DbAT8JTAT8LmAT8MYAT8MbAT#LnAUHT8AUHZvAUJXrAUJX8AULnrAXJnvAXLUoAXLgvAXMn6AXRg3AXrMbAX3JTAX3QbAYLn3AZLgvAZrSUAZvAcAZ8AaAZ8AbAZ8AnAZ8HnAZ8LgAZ8MYAZ8MgAZ8OnAaAboAaDTrAaFTrAaJTrAaJboAaLVoAaMXvAaOl8AaSeoAbAUoAbAg8AbAl4AbGnrAbMT8AbMXrAbMn4AbQb8AbSV8AbvRlAb8AUAb8AnAb8HgAb8JTAb8NTAb8RbAcGboAcLnvAcMT8AcMX8AcSToAcrAaAcrFnAc8AbAc8MgAfGgrAfHboAfJnvAfLV8AfLkoAfMT8AfMnoAfQb8AfScrAfSgrAgAZ8AgFl3AgGX8AgHZvAgHgrAgJXoAgJX8AgJboAgLZoAgLn4AgOX8AgoATAgoAnAgoCUAgoJgAgoLXAgoMYAgoSeAgrDUAgrJTAhrFnAhrLjAhrQgAjAgoAjJnrAkMX8AkOnoAlCTvAlCV8AlClvAlFg4AlFl6AlFn3AloSnAlrAXAlrAfAlrFUAlrFbAlrGgAlrOXAlvKnAlvMTAl3AbAl3MnAnATrAnAcrAnCZ3AnCl8AnDg8AnFboAnFl3AnHX4AnHbrAnHgrAnIl3AnJgvAnLXoAnLX4AnLbrAnLgrAnLhrAnMXoAnMgrAnOn3AnSbrAnSeoAnvLnAn3OnCTGgvCTSlvCTvAUCTvKnCTvNTCT3CZCT3GUCT3MTCT8HnCUCZrCULf8CULnvCU3HnCU3JUCY6NUCbDb8CbFZoCbLnrCboOTCboScCbrFnCbvLnCb8AgCb8HgCb$LnCkLfoClBn3CloDUDTHT8DTLl3DTSU8DTrAaDTrLXDTrLjDTrOYDTrOgDTvFXDTvFnDT3HUDT3LfDUCT9DUDT4DUFVoDUFV8DUFkoDUGgrDUJnrDULl8DUMT8DUMXrDUMX4DUMg8DUOUoDUOgvDUOg8DUSToDUSZ8DbDXoDbDgoDbGT8DbJn3DbLg3DbLn4DbMXrDbMg8DbOToDboJXGTClvGTDT8GTFZrGTLVoGTLlvGTLl3GTMg8GTOTvGTSlrGToCUGTrDgGTrJYGTrScGTtLnGTvAnGTvQgGUCZrGUDTvGUFZoGUHXrGULnvGUMT8GUoMgGXoLnGXrMXGXrMnGXvFnGYLnvGZOnvGZvOnGZ8LaGZ8LmGbAl3GbDYvGbDlrGbHX3GbJl4GbLV8GbLn3GbMn4GboJTGboRfGbvFUGb3GUGb4JnGgDX3GgFl$GgJlrGgLX6GgLZoGgLf8GgOXoGgrAgGgrJXGgrMYGgrScGgvATGgvOYGnAgoGnJgvGnLZoGnLg3GnLnrGnQn8GnSbrGnrMgHTClvHTDToHTFT3HTQT8HToJTHToJgHTrDUHTrMnHTvFYHTvRfHT8MnHT8SUHUAZ8HUBb4HUDTvHUoMYHXFl6HXJX6HXQlrHXrAUHXrMnHXrSbHXvFYHXvKXHX3LjHX3MeHYvQlHZrScHZvDbHbAcrHbFT3HbFl3HbJT8HbLTrHbMT8HbMXrHbMbrHbQb8HbSX3HboDbHboJTHbrFUHbrHgHbrJTHb8JTHb8MnHb8QgHgAlrHgDT3HgGgrHgHgrHgJTrHgJT8HgLX@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!Ln$CTGXMnCToLZ4CTrHT8CT3JTrCT3RZrCT#GTvCU6GgvCU8Db8CU8GZrCU8HT8CboLl3CbrGgrCbrMU8Cb8DT3Cb8GnrCb8LX4Cb8MT8Cb8ObrCgrGgvCgrKX4Cl8FZoDTrAbvDTrDboDTrGT6DTrJgrDTrMX3DTrRZrDTrRg8DTvAVvDTvFZoDT3DT8DT3Ln3DT4HZrDT4MT8DT8AlrDT8MT8DUAkGbDUDbJnDYLnQlDbDUOYDbMTAnDbMXSnDboAT3DboFn4DboLnvDj6JTrGTCgFTGTGgFnGTJTMnGTLnPlGToJT8GTrCT3GTrLVoGTrLnvGTrMX3GTrMboGTvKl3GZClFnGZrDT3GZ8DTrGZ8FZ8GZ8MXvGZ8On8GZ8ST3GbCnQXGbMbFnGboFboGboJg3GboMXoGb3JTvGb3JboGb3Mn6Gb3Qb8GgDXLjGgMnAUGgrDloGgrHX4GgrSToGgvAXrGgvAZvGgvFbrGgvLl3GgvMnvGnDnLXGnrATrGnrMboGnuLl3HTATMnHTAgCnHTCTCTHTrGTvHTrHTvHTrJX8HTrLl8HTrMT8HTrMgoHTrOTrHTuOn3HTvAZrHTvDTvHTvGboHTvJU8HTvLl3HTvMXrHTvQb4HT4GT6HT4JT8HT4Jb#HT8Al3HT8GZrHT8GgrHT8HX4HT8Jb8HT8JnoHT8LTrHT8LgvHT8SToHT8SV8HUoJUoHUoJX8HUoLnrHXrLZoHXvAl3HX3LnrHX4FkvHX4LhrHX4MXoHX4OnoHZrAZ8HZrDb8HZrGZ8HZrJnrHZvGZ8HZvLnvHZ8JnvHZ8LhrHbCXJlHbMTAnHboJl4HbpLl3HbrJX8HbrLnrHbrMnvHbvRYrHgoSTrHgrFV8HgrGZ8HgrJXoHgrRnvHgvBb!HgvGTrHgvHX4HgvHn!HgvLTrHgvSU8HnDnLbHnFbJbHnvDn8Hn6GgvHn!BTvJTCTLnJTQgFnJTrAnvJTrLX4JTrOUoJTvFn3JTvLnrJTvNToJT3AgoJT3Jn4JT3LhvJT3ObrJT8AcrJT8Al3JT8JT8JT8JnoJT8LX4JT8LnrJT8MX3JT8Rg3JT8Sc8JUoBTvJU8AToJU8GZ8JU8GgvJU8JTrJU8JXrJU8JnrJU8LnvJU8ScvJXHnJlJXrGgvJXrJU8JXrLhrJXrMT8JXrMXrJXrQUoJXvCTvJXvGZ8JXvGgrJXvQT8JX8Ab8JX8DT8JX8GZ8JX8HZvJX8LnrJX8MT8JX8MXoJX8MnvJX8ST3JYGnCTJbAkGbJbCTAnJbLTAcJboDT3JboLb6JbrAnvJbrCn3JbrDl8JbrGboJbrIZoJbrJnvJbrMnvJbrQb4Jb8RZrJeAbAnJgJnFbJgScAnJgrATrJgvHZ8JgvMn4JlJlFbJlLiQXJlLjOnJlRbOlJlvNXoJlvRl3Jl4AcrJl8AUoJl8MnrJnFnMlJnHgGbJnoDT8JnoFV8JnoGgvJnoIT8JnoQToJnoRg3JnrCZ3JnrGgrJnrHTvJnrLf8JnrOX8JnvAT3JnvFZoJnvGT8JnvJl4JnvMT8JnvMX8JnvOXrJnvPX6JnvSX3JnvSZrJn3MT8Jn3MX8Jn3RTrLTATKnLTJnLTLTMXKnLTRTQlLToGb8LTrAZ8LTrCZ8LTrDb8LTrHT8LT3PX6LT4FZoLT$CTvLT$GgrLUvHX3LVoATrLVoAgoLVoJboLVoMX3LVoRg3LV8CZ3LV8FZoLV8GTvLXrDXoLXrFbrLXvAgvLXvFlrLXvLl3LXvRn6LX4Mb8LX8GT8LYCXMnLYrMnrLZoSTvLZrAZvLZrAloLZrFToLZrJXvLZrJboLZrJl4LZrLnrLZrMT8LZrOgvLZrRnvLZrST4LZvMX8LZvSlvLZ8AgoLZ8CT3LZ8JT8LZ8LV8LZ8LZoLZ8Lg8LZ8SV8LZ8SbrLZ$HT8LZ$Mn4La6CTvLbFbMnLbRYFTLbSnFZLboJT8LbrAT9LbrGb3LbrQb8LcrJX8LcrMXrLerHTvLerJbrLerNboLgrDb8LgrGZ8LgrHTrLgrMXrLgrSU8LgvJTrLgvLl3Lg6Ll3LhrLnrLhrMT8LhvAl4LiLnQXLkoAgrLkoJT8LkoJn4LlrSU8Ll3FZoLl3HTrLl3JX8Ll3JnoLl3LToLmLeFbLnDUFbLnLVAnLnrATrLnrAZoLnrAb8LnrAlrLnrGgvLnrJU8LnrLZrLnrLhrLnrMb8LnrOXrLnrSZ8LnvAb4LnvDTrLnvDl8LnvHTrLnvHbrLnvJT8LnvJU8LnvJbrLnvLhvLnvMX8LnvMb8LnvNnoLnvSU8Ln3Al3Ln4FZoLn4GT6Ln4JgvLn4LhrLn4MT8Ln4SToMToCZrMToJX8MToLX4MToLf8MToRg3MTrEloMTvGb6MT3BTrMT3Lb6MT8AcrMT8AgrMT8GZrMT8JnoMT8LnrMT8MX3MUOUAnMXAbFnMXoAloMXoJX8MXoLf8MXoLl8MXrAb8MXrDTvMXrGT8MXrGgrMXrHTrMXrLf8MXrMU8MXrOXvMXrQb8MXvGT8MXvHTrMXvLVoMX3AX3MX3Jn3MX3LhrMX3MX3MX4AlrMX4OboMX8GTvMX8GZrMX8GgrMX8JT8MX8JX8MX8LhrMX8MT8MYDUFbMYMgDbMbGnFfMbvLX4MbvLl3Mb8Mb8Mb8ST4MgGXCnMg8ATrMg8AgoMg8CZrMg8DTrMg8DboMg8HTrMg8JgrMg8LT8MloJXoMl8AhrMl8JT8MnLgAUMnoJXrMnoLX4MnoLhrMnoMT8MnrAl4MnrDb8MnrOTvMnrOgvMnrQb8MnrSU8MnvGgrMnvHZ8Mn3MToMn4DTrMn4LTrMn4Mg8NnBXAnOTFTFnOToAToOTrGgvOTrJX8OT3JXoOT6MTrOT8GgrOT8HTpOT8MToOUoHT8OUoJT8OUoLn3OXrAgoOXrDg8OXrMT8OXvSToOX6CTvOX8CZrOX8OgrOb6HgvOb8AToOb8MT8OcvLZ8OgvAlrOgvHTvOgvJTrOgvJnrOgvLZrOgvLn4OgvMT8OgvRTrOg8AZoOg8DbvOnrOXoOnvJn4OnvLhvOnvRTrOn3GgoOn3JnvOn6JbvOn8OTrPTGYFTPbBnFnPbGnDnPgDYQTPlrAnvPlrETvPlrLnvPlrMXvPlvFX4QTMTAnQTrJU8QYCnJlQYJlQlQbGTQbQb8JnrQb8LZoQb8LnvQb8MT8Qb8Ml8Qb8ST4QloAl4QloHZvQloJX8QloMn8QnJZOlRTrAZvRTrDTrRTvJn4RTvLhvRT4Jb8RZrAZrRZ8AkrRZ8JU8RZ8LV8RZ8LnvRbJlQXRg3GboRg3MnvRg8AZ8Rg8JboRg8Jl4RnLTCbRnvFl3RnvQb8SToAl4SToCZrSToFZoSToHXrSToJU8SToJgvSToJl4SToLhrSToMX3STrAlvSTrCT9STrCgrSTrGgrSTrHXrSTrHboSTrJnoSTrNboSTvLnrST4AZoST8Ab8ST8JT8SUoJn3SU6HZ#SU6JTvSU8Db8SU8HboSU8LgrSV8JT8SZrAcrSZrAl3SZrJT8SZrJnvSZrMT8SZvLUoSZ4FZoSZ8JnoSZ8RZrScoLnrScoMT8ScoMX8ScrAT4ScrAZ8ScrLZ8ScrLkvScvDb8ScvLf8ScvNToSgrFZrShvKnrSloHUoSloLnrSlrMXoSl8HgrSmrJUoSn3BX6","ATFlOn3ATLgrDYAT4MTAnAT8LTMnAYJnRTrAbGgJnrAbLV8LnAbvNTAnAeFbLg3AgOYMXoAlQbFboAnDboAfAnJgoJTBToDgAnBUJbAl3BboDUAnCTDlvLnCTFTrSnCYoQTLnDTwAbAnDUDTrSnDUHgHgrDX8LXFnDbJXAcrETvLTLnGTFTQbrGTMnGToGT3DUFbGUJlPX3GbQg8LnGboJbFnGb3GgAYGgAg8ScGgMbAXrGgvAbAnGnJTLnvGnvATFgHTDT6ATHTrDlJnHYLnMn8HZrSbJTHZ8LTFnHbFTJUoHgSeMT8HgrLjAnHgvAbAnHlFUrDlHnDgvAnHnHTFT3HnQTGnrJTAaMXvJTGbCn3JTOgrAnJXvAXMnJbMg8SnJbMnRg3Jb8LTMnJnAl3OnJnGYrQlJnJlQY3LTDlCn3LTJjLg3LTLgvFXLTMg3GTLV8HUOgLXFZLg3LXNXrMnLX8QXFnLX9AlMYLYLXPXrLZAbJU8LZDUJU8LZMXrSnLZ$AgFnLaPXrDULbFYrMnLbMn8LXLboJgJgLeFbLg3LgLZrSnLgOYAgoLhrRnJlLkCTrSnLkOnLhrLnFX%AYLnFZoJXLnHTvJbLnLloAbMTATLf8MTHgJn3MTMXrAXMT3MTFnMUITvFnMXFX%AYMXMXvFbMXrFTDbMYAcMX3MbLf8SnMb8JbFnMgMXrMTMgvAXFnMgvGgCmMnAloSnMnFnJTrOXvMXSnOX8HTMnObJT8ScObLZFl3ObMXCZoPTLgrQXPUFnoQXPU3RXJlPX3RkQXPbrJXQlPlrJbFnQUAhrDbQXGnCXvQYLnHlvQbLfLnvRTOgvJbRXJYrQlRYLnrQlRbLnrQlRlFT8JlRlFnrQXSTClCn3STHTrAnSTLZQlrSTMnGTrSToHgGbSTrGTDnSTvGXCnST3HgFbSU3HXAXSbAnJn3SbFT8LnScLfLnv","AT3JgJX8AT8FZoSnAT8JgFV8AT8LhrDbAZ8JT8DbAb8GgLhrAb8SkLnvAe8MT8SnAlMYJXLVAl3GYDTvAl3LfLnvBUDTvLl3CTOn3HTrCT3DUGgrCU8MT8AbCbFTrJUoCgrDb8MTDTLV8JX8DTLnLXQlDT8LZrSnDUQb8FZ8DUST4JnvDb8ScOUoDj6GbJl4GTLfCYMlGToAXvFnGboAXvLnGgAcrJn3GgvFnSToGnLf8JnvGn#HTDToHTLnFXJlHTvATFToHTvHTDToHTvMTAgoHT3STClvHT4AlFl6HT8HTDToHUoDgJTrHUoScMX3HbRZrMXoHboJg8LTHgDb8JTrHgMToLf8HgvLnLnoHnHn3HT4Hn6MgvAnJTJU8ScvJT3AaQT8JT8HTrAnJXrRg8AnJbAloMXoJbrATFToJbvMnoSnJgDb6GgvJgDb8MXoJgSX3JU8JguATFToJlPYLnQlJlQkDnLbJlQlFYJlJl8Lf8OTJnCTFnLbJnLTHXMnJnLXGXCnJnoFfRg3JnrMYRg3Jn3HgFl3KT8Dg8LnLTRlFnPTLTvPbLbvLVoSbrCZLXMY6HT3LXNU7DlrLXNXDTATLX8DX8LnLZDb8JU8LZMnoLhrLZSToJU8LZrLaLnrLZvJn3SnLZ8LhrSnLaJnoMT8LbFlrHTvLbrFTLnrLbvATLlvLb6OTFn3LcLnJZOlLeAT6Mn4LeJT3ObrLg6LXFlrLhrJg8LnLhvDlPX4LhvLfLnvLj6JTFT3LnFbrMXoLnQluCTvLnrQXCY6LnvLfLnvLnvMgLnvLnvSeLf8MTMbrJn3MT3JgST3MT8AnATrMT8LULnrMUMToCZrMUScvLf8MXoDT8SnMX6ATFToMX8AXMT8MX8FkMT8MX8HTrDUMX8ScoSnMYJT6CTvMgAcrMXoMg8SToAfMlvAXLg3MnFl3AnvOT3AnFl3OUoATHT8OU3RnLXrOXrOXrSnObPbvFn6Og8HgrSnOg8OX8DbPTvAgoJgPU3RYLnrPXrDnJZrPb8CTGgvPlrLTDlvPlvFUJnoQUvFXrQlQeMnoAl3QlrQlrSnRTFTrJUoSTDlLiLXSTFg6HT3STJgoMn4STrFTJTrSTrLZFl3ST4FnMXoSUrDlHUoScvHTvSnSfLkvMXo","AUoAcrMXoAZ8HboAg8AbOg6ATFgAg8AloMXoAl3AT8JTrAl8MX8MXoCT3SToJU8Cl8Db8MXoDT8HgrATrDboOT8MXoGTOTrATMnGT8LhrAZ8GnvFnGnQXHToGgvAcrHTvAXvLl3HbrAZoMXoHgBlFXLg3HgMnFXrSnHgrSb8JUoHn6HT8LgvITvATrJUoJUoLZrRnvJU8HT8Jb8JXvFX8QT8JXvLToJTrJYrQnGnQXJgrJnoATrJnoJU8ScvJnvMnvMXoLTCTLgrJXLTJlRTvQlLbRnJlQYvLbrMb8LnvLbvFn3RnoLdCVSTGZrLeSTvGXCnLg3MnoLn3MToLlrETvMT8SToAl3MbrDU6GTvMb8LX4LhrPlrLXGXCnSToLf8Rg3STrDb8LTrSTvLTHXMnSb3RYLnMnSgOg6ATFg","HUDlGnrQXrJTrHgLnrAcJYMb8DULc8LTvFgGnCk3Mg8JbAnLX4QYvFYHnMXrRUoJnGnvFnRlvFTJlQnoSTrBXHXrLYSUJgLfoMT8Se8DTrHbDb","AbDl8SToJU8An3RbAb8ST8DUSTrGnrAgoLbFU6Db8LTrMg8AaHT8Jb8ObDl8SToJU8Pb3RlvFYoJl"];let H=null;function p(){if(null!=H)return H;const a=[];m.forEach(((o,r)=>{r+=4;for(let i=0;i=40?e=e+168-40:e>=19&&(e=e+97-19),n(new Uint8Array([225,132+(e>>6),128+(63&e)])));a.push(T)}var e})),a.sort();if("0xf9eddeace9c5d3da9c93cf7d3cd38f6a13ed3affb933259ae865714e8a3ae71a"!==o(a.join("\n")+"\n"))throw new Error("BIP39 Wordlist for ko (Korean) FAILED");return H=a,a}const Z=new class extends R{constructor(){super("ko")}getWord(o){const a=p();return(o<0||o>=a.length)&&l.throwArgumentError(`invalid word index: ${o}`,"index",o),a[o]}getWordIndex(o){return p().indexOf(o)}};const P=new class extends N{constructor(){super("it","0torea noica!iosorolotaleratelanena%oiadoencotivomai t ca%a0A]Bagl'Bin#E.Is(Oli!Rasi_Rog#0Cade!C[$Cus#E Roba+U 0Ag'Deb{DomeEgu#Eri!IpeOtt&Ul&1Fabi,Fe|Fis(F-n Oris`O(R~$0AveEn.E_,Ganc'I!It&OnismoR>*Rume Uzzo4AbardaA Bat)Ber#BoBumeCeCol>E|Ertu-OdePari!Pe^ Pogg'P)@Pun Ri,1Ab~AchideAgos+Ald~Anc'Atu-AzzoBit)Chiv'D{Eni,G[ GiSoTef%eZil*0Ciu|Col EpsiEtt>Fal I$O/Pir#P)Sagg'SeSolu Sur@TaT[u T%eT-|0Av>EismoOm>O$TesaTiv&Tor$Tr{Tua,0Sil'Str?Tis+To$moTun$0Anz#E!V[i!Vi(Volge!3IoS(Tos+Ttu U,VaVosa3C]FfaLg'LvaNdaNe_,Nig$Nzi=ReRli=Ta3Bi+CiDoR@S]Tan>T^$Zzo*2Acc'AdipoA`An}Avu-E.l/Eve|EzzaIgl?Il/n.Ind&Oc]*O@Onzi=Ul*U$2BboT+di$UffoVet+Vi,2Ass>In~O)2C]Dar@D%eE!n.G$meLl&Lm#Lo!Lpo(L^v#LzaMaMe+M`n@Mo@Mpu.rMuS+n.Ttu-V#2A.!Avat+E#Ede!Emo(Esci+E+Ice I=,IsiIt>OceO=}Os++Uc?,Us}2Ci!Cu*Gi$Ll#Po/R#!R(!R_Sci$S de:DoI$L`+Meri$Nie/N$(Nz&T#Van^Vve)3Bu|C[n'Ci(Cli$Col*C! D%#Fin{FormeG$Leg&Lfi$Lir'L+M[zaNot#Nt)Pos{Rapa+Riv&RogaScri|Ser Sider'Sume!Tersi_Vo 3Amet)Cemb!Ed)Fe(Ffu(Geri!Gi+,Luv'Nam>N=nziPin P*`Po*Rad&ReRo|RupoSag'Sc! Sf&Sge*Spos S+nzaSu`$ToVa$Vel Vide!Vor#5B*I}MoSaU(0An#B,`Es(I)O^_Oz'U*0Dem>Du)Erg?FasiO.}Tr&Zi`1A^.I*goI(d'O},Pu!0U#!0Ar'BaBo(EdeEmi+Ige!Met>OeOsi_Ran.0Ago$AmeAnimeAudi!CaEmp'Erc{Ib{Ig[.Is.!I OfagoOrt#O(Pan(P!s(S[zaSoTe(Tim&Ton?T)(Ult&0Il>N>Rus]To0ClideoRopa0A(Id[zaIt#Olu Viva:Bbr~Cc[daChi)L]Migl?Na,Nfa-NgoN+s`ReRfal/Ri$(R`]Sc?S (Sul*T%&ToVo*(3Bb!Co/DeG#LpaLt)Mmi=Nde!Nome$Rm[ R)R^,Ssu-S^_T+U@3AbaDuc?FaGur#LoNanzaNest-Ni!O!S},S>Ume2A]Cacc?Co(Der#Gl'La+Lc*!Lgo!Nd[.Net>N?N+=Rb{Rchet+Res+Rm~R='RoR.zzaRz&Sf#S(2A}s(A=Assi$A.l*Eccet+E=+Es]IgoOlli$OndeUga,Ut+2Ci/+Cs?Gg[.LmiT Ud'ZeboZzel/3CoLa^=L(Mel*Mm#NeN{!N='No^poRgo2Epar@Iacc'Isa0Al*LdaNep)Oc&Oiel*Or$OveR#RoAmmoAndeAtt&A_(Az?E}EggeIfoIll'O*RaR>Roge$2IeLude!0Bal*Bevu Boc]Bu MaO.siP~1IdeLandaOn>Rig#Ror&0Ol#O poTer>Titu Tr%e0Al?Er&:::Bb)Birin C}Cer#Cri`Cu=D@veGoMpoNcet+N.r=R@(RgaRingeSt-T[zaTi$TtugaVag=Vo)3Ga,Gge)MboN.zzaNzaOGl?G<.G)Iol~LafedeLg-@Lin.(Lsa$L Lumo!NaNc?N@r/Ngi&Nifes N=)Nov-NsardaN^deNubr'PpaR#=Rci!Ret+RmoRsup'Sche-Ssa?S^$Te-s(Tr>/T Ce=.DesimoDit&GaLassaLisLod?NingeNoN(/Rcur'R[daR*Schi$SeSse!S *Tal*To@T.!3Agol&CaCel'Che,C)boDol*E,Gl'!La$Li.MosaNe-,NiNo!Ri$R^l*Sce/SsivaS Sur&TezzaTig&T-T.n.4Emon>0Del*Dif~Du*Ga$G'LeLos(Nas.)N]Ndi=Ne+r'Ni,No $N(3Cch?NfaTi@5Bi,Ci_DoMeMi=Rd>R`,RvegeseSt-$T&Tiz?Ttur$Vel/5C,oL/Me)O_Tri!Vo/Z?,:Si0Bedi!BligoElis]L'O*So, 0Cas'B-EgaIss'<0Do(E!IceNi_)O!_,Ta1Er#In'IgiDel/D)Ri.RolisiTo2AceboAn&As`A+$E=r'2ChezzaDe)(DismoEs?Ggi&L[+Ligo$Ll%eLmoni.Lpet+L(Lt)=Lve!M%eMo@)N.Po*(Rfi@Ro(Rpo-R!R++SaSi^_Sses(Stul#Tass'Te!2AnzoAssiAt~Eclu(Ed~Efis(Egi#Elie_Eme!E$t&Epar#Es[zaE.s Eval(I`IncipeIv#Ob,`Ocu-Odur!OfumoOge|OlungaOmessaO$meOpos+O)gaO.(OvaUd[.Ug=Ur{0Iche1Bbl>D~Gil#G$LceL{Lsan.Nt&PazzoPil/Ro:99Ad)Al]saAsiE!/O+:C]l D@pp'D~,Dun#Ff~GazzoG'*Dur!Fas&F,s(For`Fug'G&Gett#Ghel*Lass#Lev#MaT)_Un'Bus Cc?CoDagg'De!D{!G{Ll'Mant>Mpe!Nz'Sol&SpoTan.Ton@Tu/Vesc'5BizzoBr~GaLli$Mi:B#Bbi&Bot#Go`Las(Ldatu-Lgem`Liv&LmoEtt)HedaHie=IarpaI[zaInde!IppoI)ppoI_*Ler&Odel/Olp{Ompar Onfor Opri!Or+Os(Mul#Nfon?Ngo*Nist)NoN.siNu(idePar'S`S ,Tu#2It+Ogatu-Ove$0Arr{Emor#En^ E-l@IlzoOnt&Ott#Uss#0Elli!Erv#O@0BbalzoBr'C]r(C?,Da,Ffi|G$Ld#L[M`NdaNe|Nnife)Pi!Ppe(P-Rge!Rpas(Rri(R(R.gg'R_l#Spi)S+T^,0AdaAl/Arge!A /Av[ Azzo/EcieEdi!EgRappoReg#Ridu*Rozz&Ru|Ucc&UfoUp[@0B[t)C](Do!Gger{GoL+$On&PerboPpor Rgel#R)g#Ssur)Tu-0Ag&EdeseEgl'El&Enu Ez?IluppoIs+Izze-Ol+Uot&:Bac]Bul#Cci&Citur$LeLis`$MpoVer=Vo/+Zza3CaCn>Lefo$Me-r'MpoMu N@Pog-foRagg'RoTan'To*Tuban.Z'Zzo<5Cc&L,r&L Mbo/MoNfoNsil/Paz'Po*g?PpaRbaRn&R)L,t+Lo)(Lut&L_/Mpa+Ng&N{(NoN+gg'Nve-Po!Ra$Rc#R?n.S}3Det+DovaDu Ge+,I]*Lc)Li=Llu LoceN#Ndemm?N RaceRba,Rgog=Rif~RoRru}Rt~,Sc~Ssil*S+,Te-$Tri=Tus 3Andan.B-n.C[daChingoCi=nzaDim&Gil?G< Go!LeL/$MiniNc{!O/Pe-Rgo/Ro*goRu,n S](S'5Cche)Fo*LuPpa","0x5c1362d88fd4cf614a96f3234941d29f7d37c08c5292fde03bf62c2db6ff7620")}};const f=new class extends N{constructor(){super("pt","0arad!ototealirertainrasoent hoandoaR#riareha!aroele'oronul0Aca%AixoAl A%rDuz'El]Er$IsmoO$ Rum S-&T(i&TigoVo[=0F&.Il#P' S?S* So&/Sun$Tr&0Ac#Adu+Al/A[f E End(Er_EuIng'Ir?IvoOl{oRac Revi=RizU&Um0Di$rM-.R>o+TismoT|@Tu 0Ali An%Ar@Ent&Es,I?Is Ul,1Ila1Ar E=Ei%Ulejo:B BosaC&]uCh `C@GagemI+c>~/Se#S)n%Ta)Te=rTidaTomTuc Unil]3B(IjoIr^IsebolLd!eLezaLgaLisc Ndi$Ng&aNz(RimbauRl*d>_Sou_XigaZ(_3CoCu=En&Foc&Furc G|naLhe%Mest[Mo$rOlog@OmboOsf(aPol Rr-$Scoi$Sne$SpoSsex$TolaZ _2Ind#OcoOque 2A$BagemC#CejoChec]Ico.L^LetimL]LoMb{oNdeNecoNi)Rb~h>d>e&R+c]V*oXe?2AncoAsaAvezaEuIgaIl/Inc OaOchu+Onze O$Uxo2C]DismoF LeRacoScaS$Z*a:Bimb Rn{oRpe%R['>)zRv&/SacoScaSeb[S%loS~oT a)Tiv UleUs?U%l V&oV(na3BolaDil]G}]Lebr L~ Nou+N,N%ioRc Rr#R%'oRvejaTimV^2Aco)Al{aAm#Ap^ArmeAticeAveEfeEg^E'oEqueIco%If[In`oOc&/Ov(UmboU.Uva0CatrizCl}eD!eD['aEn%Gcui$Rurg@T 2A[zaE_Ic OneUbe2A=Ag'Ba@B($rBr C^El/Ent_E,Gum`oIb'IfaIo%L L{aLh(Lid'Lme@L}oLunaM<=Mb* M-.MitivaMov(MplexoMumNc]N=rNec.Nfu,Ng` Nhec(Njug Nsum'Nt+$Nvi%Op( P{oPi?PoQue%lRagemRdi&Rne)R}h>p|&R[ioR%joRuj>voSs-oS%laT}e%U_UveVilZ*]2A%+AvoEcheE=rEmeErEspoI^Im*&Io~oIseItic Os)UaUz{o2B+m SafioSbo.Sc<,S-/Sfi#Sgas%Sigu&SlizeSmam SovaSpesaS)queSvi T&h T-$rT} Tri$UsaV(Vi=Vot#Z-a3Ag+maAle$Da)Fu,Gi.Lat#Lu-%M*u'Nast@Nh{oOceseRe$Sc[)Sf ceSp oSque%Ssip S)n%T?UrnoV(,Vi,rV~g Z(5Br?L|i=M?M*#NativoNz`>m-%Rs&SagemUr#U$r2EnagemIbleOg @2El EndeE$PloQues><%Vi=,:1Lod'O Olog@0Ific It&Uc#1Ei$Etiv 3E.1Ab| Eg(Ei$rEncoEv?Im* Ogi 0B goBol#Br~/Buti=EndaErg'Is,rPat@P-/P*#Polg P[goPurr Ul?0CaixeC-#Ch-%C}t_Deus Doss Faix Fei%FimGaj#G-/Glob Gom#G+x Gu@Jo La.Qu<$Raiz Rol#Rug SaioSe^S*oSop#T<$Te#Tid!eT|.Tr^T~/V(g Vi#Volv(XameX($Xof[Xu$1Id(me0Uip 0E$Gui=Ra)VaVil]0Bopeu0Acu Ap| AsivoEntu&Id-%Olu'1Ag(oAl Am* A$Aus$Ces,Ci.Clam Ecu.EmploIb'Ig-%On( Pof>p>tu+T@T|V|i)X*aZ-da3Ch#Ijo^I+n%L*oM**oNdaNoR>i#RrugemRv(S%j T&Ud&3ApoB_seC Ch{oGur#L{aL/LmeLtr RmezaSg^Ssu+TaV`aX?Xo2AcidezAm*goAn`aEch^O+Utu Uxo2C&C*/Foc GoGue%IceLg#Lhe$Rj Rmig>noR%ScoSsa2Aga)AldaAngoAscoA%rnoE'aEn%E.IezaI,Itu+On]Ustr U%'a2G'L+faSodu$S$TaTil/Ve)Z`a3L#Le@LoM^M(Mi=N(o,NgivaNi&NomaN_Ologi>?Rm* S,S$r3Nas)Nc*o2Aci&IcoseOb&Orio,2ElaIabaLfeLpe Rdu+Rje)R_S$,T{aV(n 2AcejoAdu&Afi%Al]AmpoAn^Atui$Ave$AxaEgoElh EveIloIs&/I.@Os,O%scoUd#Unhi=U)2AcheA+niAx*imEr[ I Inc/Is#LaLo,Ru:Bi.Rm}@S%V(3C.eRd Res@Si.3A$B(n D+.EnaNoPismoPnosePo%ca5JeLofo%MemNes$Nr#Rm}&Sped 5M|#:Te2E@O,2N|#RejaUdimR_SmimToV&iZida3Jum9An*]Elh^G?I>n&Rr Vem5BaDeuDocaIzLg?L/R#Ris)RoS)::B edaB|&C[C)n%Dril/G )GoaJeMb(M-.M* MpejoNchePid P,R{>gu+S<]St_T(&Ti=VfimRgemR*/Rmi)Ro$RquiseR[coR%loRujoSco%Sm|+SsagemStig Tag&T(noT*&Tu.Xil 3D&]DidaDusaGaf}eIgaLc/Sc~ SeuSic&:Ci}&D?JaMo_R*>r#Sc(TivaTu[zaV&]Veg Vio3Bl*aB~o,GativaGoci Gri$Rvo,TaUr&VascaVo{o3N N/TidezV` 5B[zaI%IvaMe M*&Rdes%R% T Tici TurnoV`oVil/Vo5Bl#DezM(&Pci&Tr'Vem:0Cec#Edec(JetivoRig#Scu_S%t+T(Tur 0Id-%Io,Orr(Ulis)Up#2Eg<%EnsivaEr-daIc*aUsc#0Iva4Ar@Eo,H Iv{a0B_Ele%Is,It'0D~#E_,Tem1Ci}&Er?On-%OrtunoOs$1ArBi.DemD*&Fci&Rd&RedeRtidaSmoSs#S%lTam T-%T* T_noUl^Us 3C~i D& Dest[D@t+D+G^I$r&IxeLeLicplexoRsi<>%nceRucaSc#SquisaS,aTisc 3AdaC#Ed!eGm-$Last+Lh#Lo.M-)Nc`NguimN]No%N.On{oPocaQue%ResRue)Sc S$laTg-$Rje)Tur Ud!eXof}eZ}&3C C~ DaD-$Di#Do,Du$rGm-$G[=Gun=IvaLe$LvagemM<&M-%N?N/rNsu&Nt#P #Rei>*g>+RvoTemb_T|3GiloLhue)Lic}eMetr@Mpat@M~ N&Nc(oNg~ NopseN$ni>-eRiTu#5B(fis)Rp[s>[&Rt'Sp'oS%n$:B`aBle%Bu^C/G `aLh(LoLvezMdioRef>j>+xaTuagemUr*oXativoXis)3Atr&C(Ci=Cl#Dio,IaIm Lef}eLh#Mp(oN-%N,rN.Rm&RnoRr-oSeSou+St#ToXtu+Xugo3A+G`aJoloMbr MidezNgi=N%'oRagemT~ 5Al]C]L( LiceM^Mil/N`Ntu+Pe%R>ci=RneioRqueRr!>$S.UcaUp{aX*a2Ab&/Acej Adu$rAfeg Aje$AmaAnc ApoAs{oAt?Av E*oEm(Epid EvoIagemIboIcicloId-%Ilog@Ind!eIploItur Iunf&Oc Ombe)OvaUnfoUque2B~ CquesaT` T|i&:7V 3Bigo0HaId!eIf|me3Olog@SoTigaUbu0A=InaUfru':C*aDi G o,I=,LaL-%Lid!eLo[sN)gemQu{oRe)Rr(Sc~ Sil]S,u+Z Zio3A=D Ge.Ic~ L{oLhiceLu=Nce=rNdav&N( Nt[Rb&Rd!eRe?Rg}h>m`/RnizRs R%n%SpaSti=T|i&3Adu$AgemAj Atu+Br?D{aDr @ElaGaG-%Gi G| L ejoNcoNhe)NilOle)R!>tudeSi.S$Tr&V{oZ*/5A=rArG&L<%LeibolL)gemLumo,Nt!e5L$Vuz`a::D[zRope3QueRe.Rife3Ng ::Ng#Rp 3BuL?9Mb Olog@5Mbi=","0x2219000926df7b50d8aa0a3d495826b988287df4657fbd100e6fe596c8f737ac")}},$="}aE#4A=Yv&co#4N#6G=cJ&SM#66|/Z#4t&kn~46#4K~4q%b9=IR#7l,mB#7W_X2*dl}Uo~7s}Uf&Iw#9c&cw~6O&H6&wx&IG%v5=IQ~8a&Pv#47$PR&50%Ko&QM&3l#5f,D9#4L|/H&tQ;v0~6n]nN>2),128+Q.indexOf($[3*o+1]),128+Q.indexOf($[3*o+2])];if("zh_tw"===a){for(let o=i%4;o<3;o++)T[o]=Q.indexOf("FAZDC6BALcLZCA+GBARCW8wNCcDDZ8LVFBOqqDUiou+M42TFAyERXFb7EjhP+vmBFpFrUpfDV2F7eB+eCltCHJFWLFCED+pWTojEIHFXc3aFn4F68zqjEuKidS1QBVPDEhE7NA4mhMF7oThD49ot3FgtzHFCK0acW1x8DH1EmLoIlrWFBLE+y5+NA3Cx65wJHTaEZVaK1mWAmPGxgYCdxwOjTDIt/faOEhTl1vqNsKtJCOhJWuio2g07KLZEQsFBUpNtwEByBgxFslFheFbiEPvi61msDvApxCzB6rBCzox7joYA5UdDc+Cb4FSgIabpXFAj3bjkmFAxCZE+mD/SFf/0ELecYCt3nLoxC6WEZf2tKDB4oZvrEmqFkKk7BwILA7gtYBpsTq//D4jD0F0wEB9pyQ1BD5Ba0oYHDI+sbDFhvrHXdDHfgFEIJLi5r8qercNFBgFLC4bo5ERJtamWBDFy73KCEb6M8VpmEt330ygCTK58EIIFkYgF84gtGA9Uyh3m68iVrFbWFbcbqiCYHZ9J1jeRPbL8yswhMiDbhEhdNoSwFbZrLT740ABEqgCkO8J1BLd1VhKKR4sD1yUo0z+FF59Mvg71CFbyEhbHSFBKEIKyoQNgQppq9T0KAqePu0ZFGrXOHdKJqkoTFhYvpDNyuuznrN84thJbsCoO6Cu6Xlvntvy0QYuAExQEYtTUBf3CoCqwgGFZ4u1HJFzDVwEy3cjcpV4QvsPaBC3rCGyCF23o4K3pp2gberGgFEJEHo4nHICtyKH2ZqyxhN05KBBJIQlKh/Oujv/DH32VrlqFdIFC7Fz9Ct4kaqFME0UETLprnN9kfy+kFmtQBB0+5CFu0N9Ij8l/VvJDh2oq3hT6EzjTHKFN7ZjZwoTsAZ4Exsko6Fpa6WC+sduz8jyrLpegTv2h1EBeYpLpm2czQW0KoCcS0bCVXCmuWJDBjN1nQNLdF58SFJ0h7i3pC3oEOKy/FjBklL70XvBEEIWp2yZ04xObzAWDDJG7f+DbqBEA7LyiR95j7MDVdDViz2RE5vWlBMv5e4+VfhP3aXNPhvLSynb9O2x4uFBV+3jqu6d5pCG28/sETByvmu/+IJ0L3wb4rj9DNOLBF6XPIODr4L19U9RRofAG6Nxydi8Bki8BhGJbBAJKzbJxkZSlF9Q2Cu8oKqggB9hBArwLLqEBWEtFowy8XK8bEyw9snT+BeyFk1ZCSrdmgfEwFePTgCjELBEnIbjaDDPJm36rG9pztcEzT8dGk23SBhXBB1H4z+OWze0ooFzz8pDBYFvp9j9tvFByf9y4EFdVnz026CGR5qMr7fxMHN8UUdlyJAzlTBDRC28k+L4FB8078ljyD91tUj1ocnTs8vdEf7znbzm+GIjEZnoZE5rnLL700Xc7yHfz05nWxy03vBB9YGHYOWxgMQGBCR24CVYNE1hpfKxN0zKnfJDmmMgMmBWqNbjfSyFCBWSCGCgR8yFXiHyEj+VtD1FB3FpC1zI0kFbzifiKTLm9yq5zFmur+q8FHqjoOBWsBPiDbnCC2ErunV6cJ6TygXFYHYp7MKN9RUlSIS8/xBAGYLzeqUnBF4QbsTuUkUqGs6CaiDWKWjQK9EJkjpkTmNCPYXL"[e++])+(0==o?228:128)}r.push(n(new Uint8Array(T)))}if(o(r.join("\n")+"\n")!==V[a])throw new Error(`BIP39 Wordlist for ${a} (Chinese) FAILED`);return h[a]=r,r}class Y extends R{constructor(o){super("zh_"+o)}getWord(o){const a=z(this.locale);return(o<0||o>=a.length)&&l.throwArgumentError(`invalid word index: ${o}`,"index",o),a[o]}getWordIndex(o){return z(this.locale).indexOf(o)}split(o){return(o=o.replace(/(?:\u3000| )+/g,"")).split("")}}const k=new Y("cn"),K=new Y("tw");let j=null;function _(o){if(j)throw new Error("already attached");j=o}function w(){if(j)throw new Error("no ethers attached; please use attachEthers");return j}const y=Object.freeze({cz:X,es:E,fr:I,ja:G,ko:Z,it:P,pt:f,zh_cn:k,zh_tw:K});export{_ as attachEthers,w as getEthers,y as wordlists}; diff --git a/packages/ethers/dist/ethers.js b/packages/ethers/dist/ethers.js new file mode 100644 index 000000000..c58785a28 --- /dev/null +++ b/packages/ethers/dist/ethers.js @@ -0,0 +1,16146 @@ +//import type { BigNumber, BigNumberish } from "./big-number"; +//import type { Bytes, BytesLike } from "./bytes"; +//import type { Signature, SignatureLike } from "./signature"; +/* +export type Loose = T extends BigNumber ? BigNumberish: + T extends number ? BigNumberish: + T extends Bytes ? BytesLike: + T extends Signature ? SignatureLike: + T; +export type LooseObject = { [P in keyof T]?: Loose; }; +*/ +//export type Deferrable = T | Promise; +/* +export type DeferrableObject = { + [ P in keyof T ]: Deferrable +}; +*/ +/* +export type Frozen = Readonly<{ + [ P in keyof T ]: T[P] extends Freezable ? Frozen: T[P]; +}>; + +export interface Freezable { + clone(): T; + freeze(): Frozen; + isFrozen(): boolean; +} +*/ +/* +const _data: WeakMap = new WeakMap(); + +export class Data implements Freezable { + #props: { + data: Uint8Array + }; + + [ index: number ]: number; + + constructor(lengthOrData: number | Uint8Array) { + if (typeof(lengthOrData) === "number") { + _data[this] = new Uint8Array(lengthOrData); + } else { + _data[this] = lengthOrData; + } + + return new Proxy(this, { + get: (target, prop, receiver) => { + const index = parseInt(String(prop)); + if (String(index) !== prop) { return Reflect.get(target, prop, receiver); } + + const data = _data[this]; + if (index < 0 || index > data.length || index % 1) { + throw new Error(""); + } + return data[index]; + }, + + set: (target, prop, value, receiver) => { + const index = parseInt(String(prop)); + if (String(index) !== prop) { return false; } + + if (value < 0 || value > 255 || value % 1) { return false; } + + const data = _data[this]; + if (index < 0 || index > data.length || index % 1) { + return false; + } + + data[index] = value; + + return true; + }, + }); + } + + toString(): string { + return this.slice().toString(); + } + + slice(): Uint8Array { + return _data.get(this).slice(); + } + + clone(): Data { + return new Data(this.slice()); + } + + freeze(): Frozen { + //Object.freeze(this.#props); + return this; + } + + isFrozen(): boolean { + return Object.isFrozen(this.#props); + } +} +const d = new Data(4); +console.log(d.toString()); +d[0] = 45; +console.log(d.toString()); +*/ +/* +export type DeferrableObject = { + [ P in keyof T ]: Deferrable +}; +*/ +async function resolveProperties(value) { + const keys = Object.keys(value); + const results = await Promise.all(keys.map((k) => Promise.resolve(value[k]))); + return results.reduce((accum, v, index) => { + accum[keys[index]] = v; + return accum; + }, {}); +} +/* +export type IsCancelled = () => Promise; + +export function createPromise(resolve: (isCancelled: IsCancelled, (result: T) => void) => void, reject: (error: Error) => void, isCancelled: IsCancelled): CancellablePromise { + let cancelled = false; + + const promise = new Promise((resolve, reject) => { + + }); + + (>promise).cancel = function() { + cancelled = true; + }; + + return (>promise); +} +*/ +/* +export class A implements Freezable { + foo: number; + constructor(foo: number) { + this.foo = foo; + } + freeze(): Frozen { + Object.freeze(this); + return this; + } + clone(): A { + return new A(this.foo); + } +} + +export class B implements Freezable { + a: A; + constructor(a: A) { + this.a = a; + } + freeze(): Frozen { + this.a.freeze(); + Object.freeze(this); + return this; + } + clone(): B { + return new B(this.a); + } +} + +export function test() { + const a = new A(123); + const b = new B(a); + b.a = new A(234); + const b2 = b.freeze(); + b2.a.foo = 123; // = a; +} +*/ +function checkType(value, type) { + const types = type.split("|").map(t => t.trim()); + for (let i = 0; i < types.length; i++) { + switch (type) { + case "any": + return; + case "boolean": + case "number": + case "string": + if (typeof (value) === type) { + return; + } + } + } + throw new Error("invalid value for type"); +} +function defineProperties(target, values, types, defaults) { + for (let key in values) { + let value = values[key]; + const fallback = (defaults ? defaults[key] : undefined); + if (fallback !== undefined) { + value = fallback; + } + else { + const type = (types ? types[key] : null); + if (type) { + checkType(value, type); + } + } + Object.defineProperty(target, key, { enumerable: true, value, writable: false }); + } +} + +var __classPrivateFieldSet$x = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$z = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _EventPayload_listener; +class EventPayload { + constructor(emitter, listener, filter) { + _EventPayload_listener.set(this, void 0); + __classPrivateFieldSet$x(this, _EventPayload_listener, listener, "f"); + defineProperties(this, { emitter, filter }); + } + async removeListener() { + if (__classPrivateFieldGet$z(this, _EventPayload_listener, "f") == null) { + return; + } + await this.emitter.off(this.filter, __classPrivateFieldGet$z(this, _EventPayload_listener, "f")); + } +} +_EventPayload_listener = new WeakMap(); + +function getStore(store, key) { + return store[key]; +} +function setStore(store, key, value) { + if (Object.isFrozen(store)) { + throw new Error("frozen object is immuatable; cannot set " + key); + } + store[key] = value; +} + +//export type TransactionReceipt { +//} +/** + * try { + * // code.... + * } catch (e) { + * if (isError(e, errors.CALL_EXCEPTION)) { + * console.log(e.data); + * } + * } + */ +function isError(error, code) { + return (error && error.code === code); +} +function isCallException(error) { + return isError(error, "CALL_EXCEPTION"); +} +/* +export function isContractCallException(error: any): error is ContractCallExceptionError { + return isError(error, "CALL_EXCEPTION") && (error).method; +} +*/ + +const version$g = "@ethersproject/logger@6.0.0-beta.1"; + +var __classPrivateFieldGet$y = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _Logger_instances, _Logger_assertIntRange, _Logger_getBytes, _Logger_log; +var LogLevel; +(function (LogLevel) { + LogLevel["DEBUG"] = "DEBUG"; + LogLevel["INFO"] = "INFO"; + LogLevel["WARNING"] = "WARNING"; + LogLevel["ERROR"] = "ERROR"; + LogLevel["OFF"] = "OFF"; +})(LogLevel || (LogLevel = {})); +const LogLevels = { debug: 1, "default": 2, info: 2, warning: 3, error: 4, off: 5 }; +let _logLevel = LogLevels["default"]; +let _globalLogger = null; +const _normalizeForms = ["NFD", "NFC", "NFKD", "NFKC"].reduce((accum, form) => { + try { + // General test for normalize + /* c8 ignore start */ + if ("test".normalize(form) !== "test") { + throw new Error("bad"); + } + ; + /* c8 ignore stop */ + if (form === "NFD") { + const check = String.fromCharCode(0xe9).normalize("NFD"); + const expected = String.fromCharCode(0x65, 0x0301); + /* c8 ignore start */ + if (check !== expected) { + throw new Error("broken"); + } + /* c8 ignore stop */ + } + accum.push(form); + } + catch (error) { } + return accum; +}, []); +function defineReadOnly(object, name, value) { + Object.defineProperty(object, name, { + enumerable: true, writable: false, value, + }); +} +/* +enum Censor { + OFF = 0, + ON = 1, + PERMANENT = 2 +}; +let _censor = Censor.OFF; +*/ +// IEEE 754 support 53-bits of mantissa +const maxValue$1 = 0x1fffffffffffff; +// The type of error to use for various error codes +const ErrorConstructors = {}; +ErrorConstructors.INVALID_ARGUMENT = TypeError; +ErrorConstructors.NUMERIC_FAULT = RangeError; +ErrorConstructors.BUFFER_OVERRUN = RangeError; +class Logger { + constructor(version) { + _Logger_instances.add(this); + defineReadOnly(this, "version", version || "_"); + } + makeError(message, code, info) { + // Errors are being censored + //if (_censor === Censor.ON || _censor === Censor.PERMANENT) { + // return this.makeError("censored error", code, { }); + //} + { + const details = []; + if (info) { + for (const key in info) { + const value = (info[key]); + try { + details.push(key + "=" + JSON.stringify(value)); + } + catch (error) { + details.push(key + "=[could not serialize object]"); + } + } + } + details.push(`code=${code}`); + details.push(`version=${this.version}`); + if (details.length) { + message += " (" + details.join(", ") + ")"; + } + } + const create = ErrorConstructors[code] || Error; + const error = (new create(message)); + defineReadOnly(error, "code", code); + if (info) { + for (const key in info) { + defineReadOnly(error, key, (info[key])); + } + } + return error; + } + throwError(message, code, info) { + throw this.makeError(message, code, info); + } + throwArgumentError(message, name, value) { + return this.throwError(message, "INVALID_ARGUMENT", { + argument: name, + value: value + }); + } + assert(condition, message, code, info) { + if (!!condition) { + return; + } + this.throwError(message, code || "UNKNOWN_ERROR", info); + } + assertArgument(condition, message, name, value) { + return this.assert(condition, message, "INVALID_ARGUMENT", { + argument: name, + value + }); + } + assertIntegerArgument(name, value, lower, upper) { + let message = null; + if (typeof (value) !== "number") { + message = "expected a number"; + } + else if (!Number.isInteger(value)) { + message = "invalid integer"; + } + else if ((lower != null && value < lower) || (upper != null && value > upper)) { + message = "value is out of range"; + } + if (message) { + this.throwArgumentError(message, name, value); + } + } + assertSafeUint53(value, message) { + this.assertArgument((typeof (value) === "number"), "invalid number", "value", value); + if (message == null) { + message = "value not safe"; + } + const operation = "assertSafeInteger"; + this.assert((value >= 0 && value < 0x1fffffffffffff), message, "NUMERIC_FAULT", { + operation, fault: "out-of-safe-range", value + }); + this.assert((value % 1) === 0, message, "NUMERIC_FAULT", { + operation, fault: "non-integer", value + }); + } + assertNormalize(form) { + if (_normalizeForms.indexOf(form) === -1) { + this.throwError("platform missing String.prototype.normalize", "UNSUPPORTED_OPERATION", { + operation: "String.prototype.normalize", info: { form } + }); + } + } + assertPrivate(givenGuard, guard, className = "") { + if (givenGuard !== guard) { + let method = className, operation = "new"; + if (className) { + method += "."; + operation += " " + className; + } + this.throwError(`private constructor; use ${method}from* methods`, "UNSUPPORTED_OPERATION", { + operation + }); + } + } + assertArgumentCount(count, expectedCount, message = "") { + if (message) { + message = ": " + message; + } + this.assert((count >= expectedCount), "missing arguemnt" + message, "MISSING_ARGUMENT", { + count: count, + expectedCount: expectedCount + }); + this.assert((count >= expectedCount), "too many arguemnts" + message, "UNEXPECTED_ARGUMENT", { + count: count, + expectedCount: expectedCount + }); + } + assertInt53(value, operation) { + __classPrivateFieldGet$y(this, _Logger_instances, "m", _Logger_assertIntRange).call(this, "Int53", value, operation || "unknown", -maxValue$1); + } + assertUint53(value, operation) { + __classPrivateFieldGet$y(this, _Logger_instances, "m", _Logger_assertIntRange).call(this, "Int53", value, operation || "unknown", 0); + } + assertInteger(value, operation = "unknown", min = 0, max = maxValue$1) { + //this.#assertIntRange("Int53", value, operation || "unknown", 0); + } + getBytes(value, name) { + return __classPrivateFieldGet$y(this, _Logger_instances, "m", _Logger_getBytes).call(this, value, name, false); + } + getBytesCopy(value, name) { + return __classPrivateFieldGet$y(this, _Logger_instances, "m", _Logger_getBytes).call(this, value, name, true); + } + getNumber(value, name) { + switch (typeof (value)) { + case "bigint": + if (value < -maxValue$1 || value > maxValue$1) { + this.throwArgumentError("overflow", name || "value", value); + } + return Number(value); + case "number": + if (!Number.isInteger(value)) { + this.throwArgumentError("underflow", name || "value", value); + } + else if (value < -maxValue$1 || value > maxValue$1) { + this.throwArgumentError("overflow", name || "value", value); + } + return value; + case "string": + try { + return this.getNumber(BigInt(value), name); + } + catch (e) { + this.throwArgumentError(`invalid numeric string: ${e.message}`, name || "value", value); + } + } + return this.throwArgumentError("invalid numeric value", name || "value", value); + } + getBigInt(value, name) { + switch (typeof (value)) { + case "bigint": return value; + case "number": + if (!Number.isInteger(value)) { + this.throwArgumentError("underflow", name || "value", value); + } + else if (value < -maxValue$1 || value > maxValue$1) { + this.throwArgumentError("overflow", name || "value", value); + } + return BigInt(value); + case "string": + try { + return BigInt(value); + } + catch (e) { + this.throwArgumentError(`invalid BigNumberish string: ${e.message}`, name || "value", value); + } + } + return this.throwArgumentError("invalid BigNumberish value", name || "value", value); + } + debug(...args) { + __classPrivateFieldGet$y(this, _Logger_instances, "m", _Logger_log).call(this, LogLevel.DEBUG, args); + } + info(...args) { + __classPrivateFieldGet$y(this, _Logger_instances, "m", _Logger_log).call(this, LogLevel.INFO, args); + } + warn(...args) { + __classPrivateFieldGet$y(this, _Logger_instances, "m", _Logger_log).call(this, LogLevel.WARNING, args); + } + static globalLogger() { + if (!_globalLogger) { + _globalLogger = new Logger(version$g); + } + return _globalLogger; + } + static setLogLevel(logLevel) { + const level = LogLevels[logLevel.toLowerCase()]; + if (level == null) { + Logger.globalLogger().warn("invalid log level - " + logLevel); + return; + } + _logLevel = level; + } +} +_Logger_instances = new WeakSet(), _Logger_assertIntRange = function _Logger_assertIntRange(name, value, operation, minValue) { + if (typeof (value) !== "number" || isNaN(value)) { + this.throwArgumentError(`invalid ${name}`, "INVALID_ARGUMENT", { + name: "value", value + }); + } + let message = `invalid ${name} value`; + let fault = null; + if (isNaN(value)) { + fault = "not-a-number"; + } + else if (value < minValue || value > maxValue$1) { + message = `unsafe ${name} value`; + fault = "overflow"; + } + else if (Math.floor(value) !== value) { + fault = "underflow"; + } + if (fault) { + this.throwError(message, "NUMERIC_FAULT", { + operation, fault, value + }); + } +}, _Logger_getBytes = function _Logger_getBytes(value, name, copy) { + if (value instanceof Uint8Array) { + if (copy) { + return new Uint8Array(value); + } + return value; + } + if (typeof (value) === "string" && value.match(/^0x([0-9a-f][0-9a-f])*$/i)) { + const result = new Uint8Array((value.length - 2) / 2); + let offset = 2; + for (let i = 0; i < result.length; i++) { + result[i] = parseInt(value.substring(offset, offset + 2), 16); + offset += 2; + } + return result; + } + return this.throwArgumentError("invalid BytesLike value", name || "value", value); +}, _Logger_log = function _Logger_log(logLevel, args) { + const level = logLevel.toLowerCase(); + if (LogLevels[level] == null) { + this.throwArgumentError("invalid log level name", "logLevel", logLevel); + } + if (_logLevel > LogLevels[level]) { + return; + } + console.log.apply(console, args); +}; +//static readonly Errors = ErrorCode; +Logger.LogLevels = LogLevel; +//const l = new Logger(); +//l.makeError("foo", Logger.Errors.NUMERIC_FAULT, { fault: "foo", operation: "bar", value: 3 }); +//l.makeError("foo", Logger.Errors.UNPREDICTABLE_GAS_LIMIT, { transaction: null }); +//l.makeError("foo", ErrorCode.NUMERIC_FAULT, { fault: "foo", operation: "bar" }); +//l.makeError("foo", ErrorCode.NUMERIC_FAULT, { fault: "foo", operation: "bar", gii: "5" }); +//console.log(LogLevel); + +const version$f = "@ethersproject/abi@6.0.0-beta.1"; + +const logger$e = new Logger(version$f); + +var __classPrivateFieldSet$w = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$x = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _TokenString_instances, _TokenString_offset, _TokenString_tokens, _TokenString_subTokenString, _ParamType_instances, _ParamType_walkAsync; +var FormatType; +(function (FormatType) { + // Bare formatting, as is needed for computing a sighash of an event or function + FormatType["sighash"] = "sighash"; + // Human-Readable with Minimal spacing and without names (compact human-readable) + FormatType["minimal"] = "minimal"; + // Human-Readable with nice spacing, including all names + FormatType["full"] = "full"; + // JSON-format a la Solidity + FormatType["json"] = "json"; +})(FormatType || (FormatType = {})); +// [ "a", "b" ] => { "a": 1, "b": 1 } +function setify(items) { + const result = new Set(); + items.forEach((k) => result.add(k)); + return Object.freeze(result); +} +// Visibility Keywords +const _kwVisib = "constant external internal payable private public pure view"; +const KwVisib = setify(_kwVisib.split(" ")); +const _kwTypes = "constructor error event function struct"; +const KwTypes = setify(_kwTypes.split(" ")); +const _kwModifiers = "calldata memory storage payable indexed"; +const KwModifiers = setify(_kwModifiers.split(" ")); +const _kwOther = "tuple returns"; +// All Keywords +const _keywords = [_kwTypes, _kwModifiers, _kwOther, _kwVisib].join(" "); +const Keywords = setify(_keywords.split(" ")); +// Single character tokens +const SimpleTokens = { + "(": "OPEN_PAREN", ")": "CLOSE_PAREN", + "[": "OPEN_BRACKET", "]": "CLOSE_BRACKET", + ",": "COMMA", "@": "AT" +}; +// Parser regexes to consume the next token +const regexWhitespace = new RegExp("^(\\s*)"); +const regexNumber = new RegExp("^([0-9]+)"); +const regexIdentifier = new RegExp("^([a-zA-Z$_][a-zA-Z0-9$_]*)"); +const regexType = new RegExp("^(address|bool|bytes(0-9*)|string|u?int([0-9]*))"); +class TokenString { + constructor(tokens) { + _TokenString_instances.add(this); + _TokenString_offset.set(this, void 0); + _TokenString_tokens.set(this, void 0); + __classPrivateFieldSet$w(this, _TokenString_offset, 0, "f"); + __classPrivateFieldSet$w(this, _TokenString_tokens, tokens.slice(), "f"); + } + get offset() { return __classPrivateFieldGet$x(this, _TokenString_offset, "f"); } + get length() { return __classPrivateFieldGet$x(this, _TokenString_tokens, "f").length - __classPrivateFieldGet$x(this, _TokenString_offset, "f"); } + clone() { return new TokenString(__classPrivateFieldGet$x(this, _TokenString_tokens, "f")); } + reset() { __classPrivateFieldSet$w(this, _TokenString_offset, 0, "f"); } + // Pops and returns the value of the next token, if it is a keyword in allowed; throws if out of tokens + popKeyword(allowed) { + const top = this.peek(); + if (top.type !== "KEYWORD" || !allowed.has(top.text)) { + throw new Error(`expected keyword ${top.text}`); + } + return this.pop().text; + } + // Pops and returns the value of the next token if it is `type`; throws if out of tokens + popType(type) { + if (this.peek().type !== type) { + throw new Error(`expected ${type}; got ${JSON.stringify(this.peek())}`); + } + return this.pop().text; + } + // Pops and returns a "(" TOKENS ")" + popParen() { + const top = this.peek(); + if (top.type !== "OPEN_PAREN") { + throw new Error("bad start"); + } + const result = __classPrivateFieldGet$x(this, _TokenString_instances, "m", _TokenString_subTokenString).call(this, __classPrivateFieldGet$x(this, _TokenString_offset, "f") + 1, top.match + 1); + __classPrivateFieldSet$w(this, _TokenString_offset, top.match + 1, "f"); + return result; + } + // Pops and returns the items within "(" ITEM1 "," ITEM2 "," ... ")" + popParams() { + const top = this.peek(); + if (top.type !== "OPEN_PAREN") { + throw new Error("bad start"); + } + const result = []; + while (__classPrivateFieldGet$x(this, _TokenString_offset, "f") < top.match - 1) { + const link = this.peek().linkNext; + result.push(__classPrivateFieldGet$x(this, _TokenString_instances, "m", _TokenString_subTokenString).call(this, __classPrivateFieldGet$x(this, _TokenString_offset, "f") + 1, link)); + __classPrivateFieldSet$w(this, _TokenString_offset, link, "f"); + } + __classPrivateFieldSet$w(this, _TokenString_offset, top.match + 1, "f"); + return result; + } + // Returns the top Token, throwing if out of tokens + peek() { + if (__classPrivateFieldGet$x(this, _TokenString_offset, "f") >= __classPrivateFieldGet$x(this, _TokenString_tokens, "f").length) { + throw new Error("out-of-bounds"); + } + return __classPrivateFieldGet$x(this, _TokenString_tokens, "f")[__classPrivateFieldGet$x(this, _TokenString_offset, "f")]; + } + // Returns the next value, if it is a keyword in `allowed` + peekKeyword(allowed) { + const top = this.peekType("KEYWORD"); + return (top != null && allowed.has(top)) ? top : null; + } + // Returns the value of the next token if it is `type` + peekType(type) { + if (this.length === 0) { + return null; + } + const top = this.peek(); + return (top.type === type) ? top.text : null; + } + // Returns the next token; throws if out of tokens + pop() { + var _a; + const result = this.peek(); + __classPrivateFieldSet$w(this, _TokenString_offset, (_a = __classPrivateFieldGet$x(this, _TokenString_offset, "f"), _a++, _a), "f"); + return result; + } + toString() { + const tokens = []; + for (let i = __classPrivateFieldGet$x(this, _TokenString_offset, "f"); i < __classPrivateFieldGet$x(this, _TokenString_tokens, "f").length; i++) { + const token = __classPrivateFieldGet$x(this, _TokenString_tokens, "f")[i]; + tokens.push(`${token.type}:${token.text}`); + } + return ``; + } +} +_TokenString_offset = new WeakMap(), _TokenString_tokens = new WeakMap(), _TokenString_instances = new WeakSet(), _TokenString_subTokenString = function _TokenString_subTokenString(from = 0, to = 0) { + return new TokenString(__classPrivateFieldGet$x(this, _TokenString_tokens, "f").slice(from, to).map((t) => { + return Object.freeze(Object.assign({}, t, { + match: (t.match - from), + linkBack: (t.linkBack - from), + linkNext: (t.linkNext - from), + })); + })); +}; +function lex(text) { + const tokens = []; + const throwError = (message) => { + const token = (offset < text.length) ? JSON.stringify(text[offset]) : "$EOI"; + throw new Error(`invalid token ${token} at ${offset}: ${message}`); + }; + let brackets = []; + let commas = []; + let offset = 0; + while (offset < text.length) { + // Strip off any leading whitespace + let cur = text.substring(offset); + let match = cur.match(regexWhitespace); + if (match) { + offset += match[1].length; + cur = text.substring(offset); + } + const token = { depth: brackets.length, linkBack: -1, linkNext: -1, match: -1, type: "", text: "", offset, value: -1 }; + tokens.push(token); + let type = (SimpleTokens[cur[0]] || ""); + if (type) { + token.type = type; + token.text = cur[0]; + offset++; + if (type === "OPEN_PAREN") { + brackets.push(tokens.length - 1); + commas.push(tokens.length - 1); + } + else if (type == "CLOSE_PAREN") { + if (brackets.length === 0) { + throwError("no matching open bracket"); + } + token.match = brackets.pop(); + (tokens[token.match]).match = tokens.length - 1; + token.depth--; + token.linkBack = commas.pop(); + (tokens[token.linkBack]).linkNext = tokens.length - 1; + } + else if (type === "COMMA") { + token.linkBack = commas.pop(); + (tokens[token.linkBack]).linkNext = tokens.length - 1; + commas.push(tokens.length - 1); + } + else if (type === "OPEN_BRACKET") { + token.type = "BRACKET"; + } + else if (type === "CLOSE_BRACKET") { + // Remove the CLOSE_BRACKET + let suffix = tokens.pop().text; + if (tokens.length > 0 && tokens[tokens.length - 1].type === "NUMBER") { + const value = tokens.pop().text; + suffix = value + suffix; + (tokens[tokens.length - 1]).value = logger$e.getNumber(value); + } + if (tokens.length === 0 || tokens[tokens.length - 1].type !== "BRACKET") { + throw new Error("missing opening bracket"); + } + (tokens[tokens.length - 1]).text += suffix; + } + continue; + } + match = cur.match(regexIdentifier); + if (match) { + token.text = match[1]; + offset += token.text.length; + if (Keywords.has(token.text)) { + token.type = "KEYWORD"; + continue; + } + if (token.text.match(regexType)) { + token.type = "TYPE"; + continue; + } + token.type = "ID"; + continue; + } + match = cur.match(regexNumber); + if (match) { + token.text = match[1]; + token.type = "NUMBER"; + offset += token.text.length; + continue; + } + throw new Error(`unexpected token ${JSON.stringify(cur[0])} at position ${offset}`); + } + return new TokenString(tokens.map((t) => Object.freeze(t))); +} +// Check only one of `allowed` is in `set` +function allowSingle(set, allowed) { + let included = []; + for (const key in allowed.keys()) { + if (set.has(key)) { + included.push(key); + } + } + if (included.length > 1) { + throw new Error(`conflicting types: ${included.join(", ")}`); + } +} +// Functions to process a Solidity Signature TokenString from left-to-right for... +// ...the name with an optional type, returning the name +function consumeName(type, tokens) { + if (tokens.peekKeyword(KwTypes)) { + const keyword = tokens.pop().text; + if (keyword !== type) { + throw new Error(`expected ${type}, got ${keyword}`); + } + } + return tokens.popType("ID"); +} +// ...all keywords matching allowed, returning the keywords +function consumeKeywords(tokens, allowed) { + const keywords = new Set(); + while (true) { + const keyword = tokens.peekType("KEYWORD"); + if (keyword == null || (allowed && !allowed.has(keyword))) { + break; + } + tokens.pop(); + if (keywords.has(keyword)) { + throw new Error(`duplicate keywords: ${JSON.stringify(keyword)}`); + } + keywords.add(keyword); + } + return Object.freeze(keywords); +} +// ...all visibility keywords, returning the coalesced mutability +function consumeMutability(tokens) { + let modifiers = consumeKeywords(tokens, KwVisib); + // Detect conflicting modifiers + allowSingle(modifiers, setify("constant payable nonpayable".split(" "))); + allowSingle(modifiers, setify("pure view payable nonpayable".split(" "))); + // Process mutability states + if (modifiers.has("view")) { + return "view"; + } + if (modifiers.has("pure")) { + return "pure"; + } + if (modifiers.has("payable")) { + return "payable"; + } + if (modifiers.has("nonpayable")) { + return "nonpayable"; + } + // Process legacy `constant` last + if (modifiers.has("constant")) { + return "view"; + } + return "nonpayable"; +} +// ...a parameter list, returning the ParamType list +function consumeParams(tokens, allowIndexed) { + return tokens.popParams().map((t) => ParamType.fromTokens(t, allowIndexed)); +} +// ...a gas limit, returning a BigNumber or null if none +function consumeGas(tokens) { + if (tokens.peekType("AT")) { + tokens.pop(); + if (tokens.peekType("NUMBER")) { + return logger$e.getBigInt(tokens.pop().text); + } + throw new Error("invalid gas"); + } + return null; +} +function consumeEoi(tokens) { + if (tokens.length) { + throw new Error(`unexpected tokens: ${tokens.toString()}`); + } +} +const regexArrayType = new RegExp(/^(.*)\[([0-9]*)\]$/); +function verifyBasicType(type) { + const match = type.match(regexType); + if (!match) { + return logger$e.throwArgumentError("invalid type", "type", type); + } + if (type === "uint") { + return "uint256"; + } + if (type === "int") { + return "int256"; + } + if (match[2]) { + // bytesXX + const length = parseInt(match[2]); + if (length === 0 || length > 32) { + logger$e.throwArgumentError("invalid bytes length", "type", type); + } + } + else if (match[3]) { + // intXX or uintXX + const size = parseInt(match[3]); + if (size === 0 || size > 256 || size % 8) { + logger$e.throwArgumentError("invalid numeric width", "type", type); + } + } + return type; +} +// Make the Fragment constructors effectively private +const _guard$4 = {}; +const internal$1 = Symbol.for("_ethers_internal"); +const ParamTypeInternal = "_ParamTypeInternal"; +class ParamType { + constructor(guard, name, type, baseType, indexed, components, arrayLength, arrayChildren) { + _ParamType_instances.add(this); + logger$e.assertPrivate(guard, _guard$4, "ParamType"); + Object.defineProperty(this, internal$1, { value: ParamTypeInternal }); + if (components) { + components = Object.freeze(components.slice()); + } + if (baseType === "array") { + if (arrayLength == null || arrayChildren == null) { + throw new Error(""); + } + } + else if (arrayLength != null || arrayChildren != null) { + throw new Error(""); + } + if (baseType === "tuple") { + if (components == null) { + throw new Error(""); + } + } + else if (components != null) { + throw new Error(""); + } + defineProperties(this, { + name, type, baseType, indexed, components, arrayLength, arrayChildren + }); + } + // Format the parameter fragment + // - sighash: "(uint256,address)" + // - minimal: "tuple(uint256,address) indexed" + // - full: "tuple(uint256 foo, address bar) indexed baz" + format(format = FormatType.sighash) { + if (!FormatType[format]) { + logger$e.throwArgumentError("invalid format type", "format", format); + } + if (format === FormatType.json) { + let result = { + type: ((this.baseType === "tuple") ? "tuple" : this.type), + name: (this.name || undefined) + }; + if (typeof (this.indexed) === "boolean") { + result.indexed = this.indexed; + } + if (this.isTuple()) { + result.components = this.components.map((c) => JSON.parse(c.format(format))); + } + return JSON.stringify(result); + } + let result = ""; + // Array + if (this.isArray()) { + result += this.arrayChildren.format(format); + result += `[${(this.arrayLength < 0 ? "" : String(this.arrayLength))}]`; + } + else { + if (this.isTuple()) { + if (format !== FormatType.sighash) { + result += this.type; + } + result += "(" + this.components.map((comp) => comp.format(format)).join((format === FormatType.full) ? ", " : ",") + ")"; + } + else { + result += this.type; + } + } + if (format !== FormatType.sighash) { + if (this.indexed === true) { + result += " indexed"; + } + if (format === FormatType.full && this.name) { + result += " " + this.name; + } + } + return result; + } + static isArray(value) { + return value && (value.baseType === "array"); + } + isArray() { + return (this.baseType === "array"); + } + isTuple() { + return (this.baseType === "tuple"); + } + isIndexable() { + return (this.indexed != null); + } + walk(value, process) { + if (this.isArray()) { + if (!Array.isArray(value)) { + throw new Error("invlaid array value"); + } + if (this.arrayLength !== -1 && value.length !== this.arrayLength) { + throw new Error("array is wrong length"); + } + return value.map((v) => (this.arrayChildren.walk(v, process))); + } + if (this.isTuple()) { + if (!Array.isArray(value)) { + throw new Error("invlaid tuple value"); + } + if (value.length !== this.components.length) { + throw new Error("array is wrong length"); + } + return value.map((v, i) => (this.components[i].walk(v, process))); + } + return process(this.type, value); + } + async walkAsync(value, process) { + const promises = []; + const result = [value]; + __classPrivateFieldGet$x(this, _ParamType_instances, "m", _ParamType_walkAsync).call(this, promises, value, process, (value) => { + result[0] = value; + }); + if (promises.length) { + await Promise.all(promises); + } + return result[0]; + } + static from(obj, allowIndexed) { + if (ParamType.isParamType(obj)) { + return obj; + } + if (typeof (obj) === "string") { + return ParamType.fromTokens(lex(obj), allowIndexed); + } + if (obj instanceof TokenString) { + return ParamType.fromTokens(obj, allowIndexed); + } + const name = obj.name; + if (name && (typeof (name) !== "string" || !name.match(regexIdentifier))) { + logger$e.throwArgumentError("invalid name", "obj.name", name); + } + let indexed = obj.indexed; + if (indexed != null) { + if (!allowIndexed) { + logger$e.throwArgumentError("parameter cannot be indexed", "obj.indexed", obj.indexed); + } + indexed = !!indexed; + } + let type = obj.type; + let arrayMatch = type.match(regexArrayType); + if (arrayMatch) { + const arrayLength = arrayMatch[2]; + const arrayChildren = ParamType.from({ + type: arrayMatch[1], + components: obj.components + }); + return new ParamType(_guard$4, name, type, "array", indexed, null, arrayLength, arrayChildren); + } + if (type.substring(0, 5) === "tuple(" || type[0] === "(") { + const comps = (obj.components != null) ? obj.components.map((c) => ParamType.from(c)) : null; + const tuple = new ParamType(_guard$4, name, type, "tuple", indexed, comps, null, null); + // @TODO: use lexer to validate and normalize type + return tuple; + } + type = verifyBasicType(obj.type); + return new ParamType(_guard$4, name, type, type, indexed, null, null, null); + } + static fromObject(obj, allowIndexed) { + throw new Error("@TODO"); + } + static fromTokens(tokens, allowIndexed) { + let type = "", baseType = ""; + let comps = null; + if (consumeKeywords(tokens, setify(["tuple"])).has("tuple") || tokens.peekType("OPEN_PAREN")) { + // Tuple + baseType = "tuple"; + comps = tokens.popParams().map((t) => ParamType.from(t)); + type = `tuple(${comps.map((c) => c.format()).join(",")})`; + } + else { + // Normal + type = verifyBasicType(tokens.popType("TYPE")); + baseType = type; + } + // Check for Array + let arrayChildren = null; + let arrayLength = null; + while (tokens.length && tokens.peekType("BRACKET")) { + const bracket = tokens.pop(); //arrays[i]; + arrayChildren = new ParamType(_guard$4, "", type, baseType, null, comps, arrayLength, arrayChildren); + arrayLength = bracket.value; + type += bracket.text; + baseType = "array"; + comps = null; + } + let indexed = null; + const keywords = consumeKeywords(tokens, KwModifiers); + if (keywords.has("indexed")) { + if (!allowIndexed) { + throw new Error(""); + } + indexed = true; + } + const name = (tokens.peekType("ID") ? tokens.pop().text : ""); + if (tokens.length) { + throw new Error("leftover tokens"); + } + return new ParamType(_guard$4, name, type, baseType, indexed, comps, arrayLength, arrayChildren); + } + static isParamType(value) { + return (value && value[internal$1] === ParamTypeInternal); + } +} +_ParamType_instances = new WeakSet(), _ParamType_walkAsync = function _ParamType_walkAsync(promises, value, process, setValue) { + if (this.isArray()) { + if (!Array.isArray(value)) { + throw new Error("invlaid array value"); + } + if (this.arrayLength !== -1 && value.length !== this.arrayLength) { + throw new Error("array is wrong length"); + } + const childType = this.arrayChildren; + const result = value.slice(); + result.forEach((value, index) => { + __classPrivateFieldGet$x(childType, _ParamType_instances, "m", _ParamType_walkAsync).call(childType, promises, value, process, (value) => { + result[index] = value; + }); + }); + setValue(result); + return; + } + if (this.isTuple()) { + const components = this.components; + // Convert the object into an array + let result; + if (Array.isArray(value)) { + result = value.slice(); + } + else { + if (value == null || typeof (value) !== "object") { + throw new Error("invlaid tuple value"); + } + result = components.map((param) => { + if (!param.name) { + throw new Error("cannot use object value with unnamed components"); + } + if (!(param.name in value)) { + throw new Error(`missing value for component ${param.name}`); + } + return value[param.name]; + }); + } + if (value.length !== this.components.length) { + throw new Error("array is wrong length"); + } + result.forEach((value, index) => { + var _a; + __classPrivateFieldGet$x((_a = components[index]), _ParamType_instances, "m", _ParamType_walkAsync).call(_a, promises, value, process, (value) => { + result[index] = value; + }); + }); + setValue(result); + return; + } + const result = process(this.type, value); + if (result.then) { + promises.push((async function () { setValue(await result); })()); + } + else { + setValue(result); + } +}; +var FragmentType; +(function (FragmentType) { + FragmentType["constructor"] = "constructor"; + FragmentType["error"] = "error"; + FragmentType["event"] = "event"; + FragmentType["function"] = "function"; + FragmentType["struct"] = "struct"; +})(FragmentType || (FragmentType = {})); +class Fragment { + constructor(guard, type, inputs) { + logger$e.assertPrivate(guard, _guard$4, "Fragment"); + inputs = Object.freeze(inputs.slice()); + defineProperties(this, { type, inputs }); + } + static from(obj) { + if (typeof (obj) === "string") { + return this.fromString(obj); + } + if (obj instanceof TokenString) { + return this.fromTokens(obj); + } + if (typeof (obj) === "object") { + return this.fromObject(obj); + } + throw new Error(`unsupported type: ${obj}`); + } + static fromObject(obj) { + switch (obj.type) { + case "constructor": return ConstructorFragment.fromObject(obj); + case "error": return ErrorFragment.fromObject(obj); + case "event": return EventFragment.fromObject(obj); + case "function": return FunctionFragment.fromObject(obj); + case "struct": return StructFragment.fromObject(obj); + } + throw new Error("not implemented yet"); + } + static fromString(text) { + try { + Fragment.from(JSON.parse(text)); + } + catch (e) { } + return Fragment.fromTokens(lex(text)); + } + static fromTokens(tokens) { + const type = tokens.popKeyword(KwTypes); + switch (type) { + case "constructor": return ConstructorFragment.fromTokens(tokens); + case "error": return ErrorFragment.fromTokens(tokens); + case "event": return EventFragment.fromTokens(tokens); + case "function": return FunctionFragment.fromTokens(tokens); + case "struct": return StructFragment.fromTokens(tokens); + } + throw new Error(`unsupported type: ${type}`); + } + /* + static fromTokens(tokens: TokenString): Fragment { + const assertDone = () => { + if (tokens.length) { throw new Error(`unexpected tokens: ${ tokens.toString() }`); } + }); + + const type = (tokens.length && tokens.peek().type === "KEYWORD") ? tokens.peek().text: "unknown"; + + const name = consumeName("error", tokens); + const inputs = consumeParams(tokens, type === "event"); + + switch (type) { + case "event": case "struct": + assertDone(); + } + + } + */ + static isConstructor(value) { + return (value && value.type === "constructor"); + } + static isError(value) { + return (value && value.type === "error"); + } + static isEvent(value) { + return (value && value.type === "event"); + } + static isFunction(value) { + return (value && value.type === "function"); + } + static isStruct(value) { + return (value && value.type === "struct"); + } +} +class NamedFragment extends Fragment { + constructor(guard, type, name, inputs) { + super(guard, type, inputs); + inputs = Object.freeze(inputs.slice()); + defineProperties(this, { name }); + } +} +function joinParams(format, params) { + return "(" + params.map((p) => p.format(format)).join((format === FormatType.full) ? ", " : ",") + ")"; +} +class ErrorFragment extends NamedFragment { + constructor(guard, name, inputs) { + super(guard, FragmentType.error, name, inputs); + } + format(format = FormatType.sighash) { + if (!FormatType[format]) { + logger$e.throwArgumentError("invalid format type", "format", format); + } + if (format === FormatType.json) { + return JSON.stringify({ + type: "error", + name: this.name, + inputs: this.inputs.map((input) => JSON.parse(input.format(format))), + }); + } + const result = []; + if (format !== FormatType.sighash) { + result.push("error"); + } + result.push(this.name + joinParams(format, this.inputs)); + return result.join(" "); + } + static fromString(text) { + return ErrorFragment.fromTokens(lex(text)); + } + static fromTokens(tokens) { + const name = consumeName("error", tokens); + const inputs = consumeParams(tokens); + consumeEoi(tokens); + return new ErrorFragment(_guard$4, name, inputs); + } +} +class EventFragment extends NamedFragment { + constructor(guard, name, inputs, anonymous) { + super(guard, FragmentType.event, name, inputs); + defineProperties(this, { anonymous }); + } + format(format = FormatType.sighash) { + if (!FormatType[format]) { + logger$e.throwArgumentError("invalid format type", "format", format); + } + if (format === FormatType.json) { + return JSON.stringify({ + type: "event", + anonymous: this.anonymous, + name: this.name, + inputs: this.inputs.map((i) => JSON.parse(i.format(format))) + }); + } + const result = []; + if (format !== FormatType.sighash) { + result.push("event"); + } + result.push(this.name + joinParams(format, this.inputs)); + if (format !== FormatType.sighash && this.anonymous) { + result.push("anonymous"); + } + return result.join(" "); + } + static fromString(text) { + return EventFragment.fromTokens(lex(text)); + } + static fromTokens(tokens) { + const name = consumeName("event", tokens); + const inputs = consumeParams(tokens, true); + const anonymous = !!consumeKeywords(tokens, setify(["anonymous"])).has("anonymous"); + consumeEoi(tokens); + return new EventFragment(_guard$4, name, inputs, anonymous); + } +} +class ConstructorFragment extends Fragment { + constructor(guard, type, inputs, payable, gas) { + super(guard, type, inputs); + defineProperties(this, { payable, gas }); + } + format(format = FormatType.sighash) { + if (!FormatType[format]) { + logger$e.throwArgumentError("invalid format type", "format", format); + } + if (format === FormatType.sighash) { + logger$e.throwError("cannot format a constructor for sighash", "UNSUPPORTED_OPERATION", { + operation: "format(sighash)" + }); + } + if (format === FormatType.json) { + return JSON.stringify({ + type: "constructor", + stateMutability: (this.payable ? "payable" : "undefined"), + payable: this.payable, + gas: ((this.gas != null) ? this.gas : undefined), + inputs: this.inputs.map((i) => JSON.parse(i.format(format))) + }); + } + const result = [`constructor${joinParams(format, this.inputs)}`]; + result.push((this.payable) ? "payable" : "nonpayable"); + if (this.gas != null) { + result.push(`@${this.gas.toString()}`); + } + return result.join(" "); + } + static fromString(text) { + return ConstructorFragment.fromTokens(lex(text)); + } + static fromObject(obj) { + throw new Error("TODO"); + } + static fromTokens(tokens) { + consumeKeywords(tokens, setify(["constructor"])); + const inputs = consumeParams(tokens); + const payable = !!consumeKeywords(tokens, setify(["payable"])).has("payable"); + const gas = consumeGas(tokens); + consumeEoi(tokens); + return new ConstructorFragment(_guard$4, FragmentType.constructor, inputs, payable, gas); + } +} +class FunctionFragment extends NamedFragment { + constructor(guard, name, stateMutability, inputs, outputs, gas) { + super(guard, FragmentType.function, name, inputs); + outputs = Object.freeze(outputs.slice()); + const constant = (stateMutability === "view" || stateMutability === "pure"); + const payable = (stateMutability === "payable"); + defineProperties(this, { constant, gas, outputs, payable, stateMutability }); + } + format(format = FormatType.sighash) { + if (!FormatType[format]) { + logger$e.throwArgumentError("invalid format type", "format", format); + } + if (format === FormatType.json) { + return JSON.stringify({ + type: "function", + name: this.name, + constant: this.constant, + stateMutability: ((this.stateMutability !== "nonpayable") ? this.stateMutability : undefined), + payable: this.payable, + gas: ((this.gas != null) ? this.gas : undefined), + inputs: this.inputs.map((i) => JSON.parse(i.format(format))), + outputs: this.outputs.map((o) => JSON.parse(o.format(format))), + }); + } + const result = []; + if (format !== FormatType.sighash) { + result.push("function"); + } + result.push(this.name + joinParams(format, this.inputs)); + if (format !== FormatType.sighash) { + if (this.stateMutability !== "nonpayable") { + result.push(this.stateMutability); + } + if (this.outputs && this.outputs.length) { + result.push("returns"); + result.push(joinParams(format, this.outputs)); + } + if (this.gas != null) { + result.push(`@${this.gas.toString()}`); + } + } + return result.join(" "); + } + static fromString(text) { + return FunctionFragment.fromTokens(lex(text)); + } + static fromTokens(tokens) { + const name = consumeName("function", tokens); + const inputs = consumeParams(tokens); + const mutability = consumeMutability(tokens); + let outputs = []; + if (consumeKeywords(tokens, setify(["returns"])).has("returns")) { + outputs = consumeParams(tokens); + } + const gas = consumeGas(tokens); + consumeEoi(tokens); + return new FunctionFragment(_guard$4, name, mutability, inputs, outputs, gas); + } +} +class StructFragment extends NamedFragment { + format() { + throw new Error("@TODO"); + } + static fromString(text) { + return StructFragment.fromTokens(lex(text)); + } + static fromTokens(tokens) { + const name = consumeName("struct", tokens); + const inputs = consumeParams(tokens); + consumeEoi(tokens); + return new StructFragment(_guard$4, FragmentType.struct, name, inputs); + } +} + +const version$e = "@ethersproject/math@6.0.0-beta.1"; + +const logger$d = new Logger(version$e); + +// IEEE 754 support 53-bits of mantissa +const maxValue = 0x1fffffffffffff; +const nibbles$1 = "0123456789abcdef"; +const BN_0$7 = BigInt(0); +// Converts a value to a BigInt, including big endian data +function toBigInt(_value) { + if (_value instanceof Uint8Array) { + let result = "0x0"; + for (const v of _value) { + result += nibbles$1[v >> 4]; + result += nibbles$1[v & 0x0f]; + } + return BigInt(result); + } + return logger$d.getBigInt(_value, "value"); +} +function toNumber(_value) { + const value = toBigInt(_value); + if (value < -maxValue || value > maxValue) { + logger$d.throwArgumentError("overflow", "value", _value); + } + return Number(value); +} +// Converts value to hex, optionally padding on the left to width bytes +function toHex(_value, _width) { + const value = logger$d.getBigInt(_value, "value"); + if (value < 0) { + throw new Error("cannot convert negative value to hex"); + } + let result = value.toString(16); + if (_width == null) { + // Ensure the value is of even length + if (result.length % 2) { + result = "0" + result; + } + } + else { + const width = logger$d.getNumber(_width, "width"); + if (width * 2 < result.length) { + throw new Error(`value ${value} exceeds width ${width}`); + } + // Pad the value to the required width + while (result.length < (width * 2)) { + result = "0" + result; + } + } + return "0x" + result; +} +function toArray(_value) { + const value = logger$d.getBigInt(_value, "value"); + if (value < 0) { + throw new Error("cannot convert negative value to hex"); + } + if (value === BN_0$7) { + return new Uint8Array([]); + } + let hex = value.toString(16); + if (hex.length % 2) { + hex = "0" + hex; + } + const result = new Uint8Array(hex.length / 2); + for (let i = 0; i < result.length; i++) { + const offset = i * 2; + result[i] = parseInt(hex.substring(offset, offset + 2), 16); + } + return result; +} + +const BN_0$6 = BigInt(0); +const BN_1$5 = BigInt(1); +// Convert a value from a twos-compliment value +function fromTwos(_value, _width) { + const value = logger$d.getBigInt(_value, "value"); + const width = BigInt(logger$d.getNumber(_width, "width")); + // Top bit set; treat as a negative value + if (value >> (width - BN_1$5)) { + const mask = (BN_1$5 << width) - BN_1$5; + return -(((~value) & mask) + BN_1$5); + } + return value; +} +// Convert value to a twos-compliment value +function toTwos(_value, _width) { + const value = logger$d.getBigInt(_value, "value"); + const width = BigInt(logger$d.getNumber(_width, "width")); + if (value < BN_0$6) { + const mask = (BN_1$5 << width) - BN_1$5; + return ((~(-value)) & mask) + BN_1$5; + } + return value; +} +function mask(_value, _bits) { + const value = logger$d.getBigInt(_value, "value"); + const bits = logger$d.getBigInt(_bits, "bits"); + return value & ((BN_1$5 << bits) - BN_1$5); +} + +var __classPrivateFieldSet$v = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$w = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _FixedNumber_instances, _FixedNumber_value, _FixedNumber_checkFormat; +const _constructorGuard = {}; +//const Zero = BigInt(0); +const NegativeOne = BigInt(-1); +function throwFault(message, fault, operation, value) { + const params = { fault: fault, operation: operation }; + if (value !== undefined) { + params.value = value; + } + return logger$d.throwError(message, "NUMERIC_FAULT", params); +} +// Constant to pull zeros from for multipliers +let zeros$1 = "0"; +while (zeros$1.length < 256) { + zeros$1 += zeros$1; +} +// Returns a string "1" followed by decimal "0"s +function getMultiplier(decimals) { + if (typeof (decimals) !== "number" || decimals < 0 || decimals > 256 || decimals % 1) { + logger$d.throwArgumentError("invalid decimal length", "decimals", decimals); + } + return BigInt("1" + zeros$1.substring(0, decimals)); +} +function formatFixed(_value, _decimals = 0) { + let value = logger$d.getBigInt(_value, "value"); + const decimals = logger$d.getNumber(_decimals, "decimals"); + const multiplier = getMultiplier(decimals); + const multiplierStr = String(multiplier); + const negative = (value < 0); + if (negative) { + value *= NegativeOne; + } + let fraction = String(value % multiplier); + // Make sure there are enough place-holders + while (fraction.length < multiplierStr.length - 1) { + fraction = "0" + fraction; + } + // Strip training 0 + while (fraction.length > 1 && fraction.substring(fraction.length - 1) === "0") { + fraction = fraction.substring(0, fraction.length - 1); + } + let result = String(value / multiplier); + if (multiplierStr.length !== 1) { + result += "." + fraction; + } + if (negative) { + result = "-" + result; + } + return result; +} +function parseFixed(value, _decimals = 0) { + const decimals = logger$d.getNumber(_decimals, "decimals"); + const multiplier = getMultiplier(decimals); + if (typeof (value) !== "string" || !value.match(/^-?[0-9.]+$/)) { + logger$d.throwArgumentError("invalid decimal value", "value", value); + } + // Is it negative? + const negative = (value.substring(0, 1) === "-"); + if (negative) { + value = value.substring(1); + } + if (value === ".") { + logger$d.throwArgumentError("missing value", "value", value); + } + // Split it into a whole and fractional part + const comps = value.split("."); + if (comps.length > 2) { + logger$d.throwArgumentError("too many decimal points", "value", value); + } + let whole = (comps[0] || "0"), fraction = (comps[1] || "0"); + // Trim trialing zeros + while (fraction[fraction.length - 1] === "0") { + fraction = fraction.substring(0, fraction.length - 1); + } + // Check the fraction doesn't exceed our decimals size + if (fraction.length > String(multiplier).length - 1) { + throwFault("fractional component exceeds decimals", "underflow", "parseFixed"); + } + // If decimals is 0, we have an empty string for fraction + if (fraction === "") { + fraction = "0"; + } + // Fully pad the string with zeros to get to wei + while (fraction.length < String(multiplier).length - 1) { + fraction += "0"; + } + const wholeValue = BigInt(whole); + const fractionValue = BigInt(fraction); + let wei = (wholeValue * multiplier) + fractionValue; + if (negative) { + wei *= NegativeOne; + } + return wei; +} +class FixedFormat { + constructor(constructorGuard, signed, width, decimals) { + if (constructorGuard !== _constructorGuard) { + logger$d.throwError("cannot use FixedFormat constructor; use FixedFormat.from", "UNSUPPORTED_OPERATION", { + operation: "new FixedFormat" + }); + } + this.signed = signed; + this.width = width; + this.decimals = decimals; + this.name = (signed ? "" : "u") + "fixed" + String(width) + "x" + String(decimals); + this._multiplier = getMultiplier(decimals); + Object.freeze(this); + } + static from(value) { + if (value instanceof FixedFormat) { + return value; + } + if (typeof (value) === "number") { + value = `fixed128x${value}`; + } + let signed = true; + let width = 128; + let decimals = 18; + if (typeof (value) === "string") { + if (value === "fixed") ; + else if (value === "ufixed") { + signed = false; + } + else { + const match = value.match(/^(u?)fixed([0-9]+)x([0-9]+)$/); + if (!match) { + return logger$d.throwArgumentError("invalid fixed format", "format", value); + } + signed = (match[1] !== "u"); + width = parseInt(match[2]); + decimals = parseInt(match[3]); + } + } + else if (value) { + const check = (key, type, defaultValue) => { + if (value[key] == null) { + return defaultValue; + } + if (typeof (value[key]) !== type) { + logger$d.throwArgumentError("invalid fixed format (" + key + " not " + type + ")", "format." + key, value[key]); + } + return value[key]; + }; + signed = check("signed", "boolean", signed); + width = check("width", "number", width); + decimals = check("decimals", "number", decimals); + } + if (width % 8) { + logger$d.throwArgumentError("invalid fixed format width (not byte aligned)", "format.width", width); + } + if (decimals > 80) { + logger$d.throwArgumentError("invalid fixed format (decimals too large)", "format.decimals", decimals); + } + return new FixedFormat(_constructorGuard, signed, width, decimals); + } +} +class FixedNumber { + constructor(constructorGuard, hex, value, format) { + _FixedNumber_instances.add(this); + //#hex: string; + _FixedNumber_value.set(this, void 0); + if (constructorGuard !== _constructorGuard) { + logger$d.throwError("cannot use FixedNumber constructor; use FixedNumber.from", "UNSUPPORTED_OPERATION", { + operation: "new FixedFormat" + }); + } + this.format = FixedFormat.from(format); + //this.#hex = hex; + __classPrivateFieldSet$v(this, _FixedNumber_value, value, "f"); + this._isFixedNumber = true; + Object.freeze(this); + } + addUnsafe(other) { + __classPrivateFieldGet$w(this, _FixedNumber_instances, "m", _FixedNumber_checkFormat).call(this, other); + const a = parseFixed(__classPrivateFieldGet$w(this, _FixedNumber_value, "f"), this.format.decimals); + const b = parseFixed(__classPrivateFieldGet$w(other, _FixedNumber_value, "f"), other.format.decimals); + return FixedNumber.fromValue(a + b, this.format.decimals, this.format); + } + subUnsafe(other) { + __classPrivateFieldGet$w(this, _FixedNumber_instances, "m", _FixedNumber_checkFormat).call(this, other); + const a = parseFixed(__classPrivateFieldGet$w(this, _FixedNumber_value, "f"), this.format.decimals); + const b = parseFixed(__classPrivateFieldGet$w(other, _FixedNumber_value, "f"), other.format.decimals); + return FixedNumber.fromValue(a - b, this.format.decimals, this.format); + } + mulUnsafe(other) { + __classPrivateFieldGet$w(this, _FixedNumber_instances, "m", _FixedNumber_checkFormat).call(this, other); + const a = parseFixed(__classPrivateFieldGet$w(this, _FixedNumber_value, "f"), this.format.decimals); + const b = parseFixed(__classPrivateFieldGet$w(other, _FixedNumber_value, "f"), other.format.decimals); + return FixedNumber.fromValue((a * b) / this.format._multiplier, this.format.decimals, this.format); + } + divUnsafe(other) { + __classPrivateFieldGet$w(this, _FixedNumber_instances, "m", _FixedNumber_checkFormat).call(this, other); + const a = parseFixed(__classPrivateFieldGet$w(this, _FixedNumber_value, "f"), this.format.decimals); + const b = parseFixed(__classPrivateFieldGet$w(other, _FixedNumber_value, "f"), other.format.decimals); + return FixedNumber.fromValue((a * this.format._multiplier) / b, this.format.decimals, this.format); + } + floor() { + const comps = this.toString().split("."); + if (comps.length === 1) { + comps.push("0"); + } + let result = FixedNumber.from(comps[0], this.format); + const hasFraction = !comps[1].match(/^(0*)$/); + if (this.isNegative() && hasFraction) { + result = result.subUnsafe(ONE.toFormat(result.format)); + } + return result; + } + ceiling() { + const comps = this.toString().split("."); + if (comps.length === 1) { + comps.push("0"); + } + let result = FixedNumber.from(comps[0], this.format); + const hasFraction = !comps[1].match(/^(0*)$/); + if (!this.isNegative() && hasFraction) { + result = result.addUnsafe(ONE.toFormat(result.format)); + } + return result; + } + // @TODO: Support other rounding algorithms + round(decimals) { + if (decimals == null) { + decimals = 0; + } + // If we are already in range, we're done + const comps = this.toString().split("."); + if (comps.length === 1) { + comps.push("0"); + } + if (decimals < 0 || decimals > 80 || (decimals % 1)) { + logger$d.throwArgumentError("invalid decimal count", "decimals", decimals); + } + if (comps[1].length <= decimals) { + return this; + } + const factor = FixedNumber.from("1" + zeros$1.substring(0, decimals), this.format); + const bump = BUMP.toFormat(this.format); + return this.mulUnsafe(factor).addUnsafe(bump).floor().divUnsafe(factor); + } + isZero() { + return (__classPrivateFieldGet$w(this, _FixedNumber_value, "f") === "0.0" || __classPrivateFieldGet$w(this, _FixedNumber_value, "f") === "0"); + } + isNegative() { + return (__classPrivateFieldGet$w(this, _FixedNumber_value, "f")[0] === "-"); + } + toString() { return __classPrivateFieldGet$w(this, _FixedNumber_value, "f"); } + toHexString(_width) { + throw new Error("TODO"); + /* + return toHex(); + if (width == null) { return this.#hex; } + + const width = logger.getNumeric(_width); + if (width % 8) { logger.throwArgumentError("invalid byte width", "width", width); } + + const hex = BigNumber.from(this.#hex).fromTwos(this.format.width).toTwos(width).toHexString(); + return zeroPadLeft(hex, width / 8); + */ + } + toUnsafeFloat() { return parseFloat(this.toString()); } + toFormat(format) { + return FixedNumber.fromString(__classPrivateFieldGet$w(this, _FixedNumber_value, "f"), format); + } + static fromValue(value, decimals = 0, format = "fixed") { + return FixedNumber.fromString(formatFixed(value, decimals), FixedFormat.from(format)); + } + static fromString(value, format = "fixed") { + const fixedFormat = FixedFormat.from(format); + const numeric = parseFixed(value, fixedFormat.decimals); + if (!fixedFormat.signed && numeric < 0) { + throwFault("unsigned value cannot be negative", "overflow", "value", value); + } + const hex = (function () { + if (fixedFormat.signed) { + return toHex(toTwos(numeric, fixedFormat.width)); + } + return toHex(numeric, fixedFormat.width / 8); + })(); + const decimal = formatFixed(numeric, fixedFormat.decimals); + return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat); + } + static fromBytes(_value, format = "fixed") { + const value = logger$d.getBytes(_value, "value"); + const fixedFormat = FixedFormat.from(format); + if (value.length > fixedFormat.width / 8) { + throw new Error("overflow"); + } + let numeric = toBigInt(value); + if (fixedFormat.signed) { + numeric = fromTwos(numeric, fixedFormat.width); + } + const hex = toHex(toTwos(numeric, (fixedFormat.signed ? 0 : 1) + fixedFormat.width)); + const decimal = formatFixed(numeric, fixedFormat.decimals); + return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat); + } + static from(value, format) { + if (typeof (value) === "string") { + return FixedNumber.fromString(value, format); + } + if (value instanceof Uint8Array) { + return FixedNumber.fromBytes(value, format); + } + try { + return FixedNumber.fromValue(value, 0, format); + } + catch (error) { + // Allow NUMERIC_FAULT to bubble up + if (error.code !== "INVALID_ARGUMENT") { + throw error; + } + } + return logger$d.throwArgumentError("invalid FixedNumber value", "value", value); + } + static isFixedNumber(value) { + return !!(value && value._isFixedNumber); + } +} +_FixedNumber_value = new WeakMap(), _FixedNumber_instances = new WeakSet(), _FixedNumber_checkFormat = function _FixedNumber_checkFormat(other) { + if (this.format.name !== other.format.name) { + logger$d.throwArgumentError("incompatible format; use fixedNumber.toFormat", "other", other); + } +}; +const ONE = FixedNumber.from(1); +const BUMP = FixedNumber.from("0.5"); + +const Alphabet = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; +let Lookup = null; +function getAlpha(letter) { + if (Lookup == null) { + Lookup = {}; + for (let i = 0; i < Alphabet.length; i++) { + Lookup[Alphabet[i]] = BigInt(i); + } + } + const result = Lookup[letter]; + if (result == null) { + logger$d.throwArgumentError(`invalid base58 value`, "letter", letter); + } + return result; +} +const BN_0$5 = BigInt(0); +const BN_58 = BigInt(58); +function encodeBase58(_value) { + let value = toBigInt(logger$d.getBytes(_value)); + let result = ""; + while (value) { + result = Alphabet[Number(value % BN_58)] + result; + value /= BN_58; + } + return result; +} +function decodeBase58(value) { + let result = BN_0$5; + for (let i = 0; i < value.length; i++) { + result *= BN_58; + result += getAlpha(value[i]); + } + return toHex(result); +} + +function isHexString(value, length) { + if (typeof (value) !== "string" || !value.match(/^0x[0-9A-Fa-f]*$/)) { + return false; + } + if (typeof (length) === "number" && value.length !== 2 + 2 * length) { + return false; + } + if (length === true && (value.length % 2) !== 0) { + return false; + } + return true; +} +/* +function _isByte(value: number): boolean { + return (typeof(value) === "number" && value >= 0 && value < 256 && Math.floor(value) === value); +} +export function isBytes(value: any): value is Bytes { + if (value == null) { return false; } + + if (value instanceof Uint8Array) { return true; } + if (typeof(value) === "string") { return false; } + + if (Array.isArray(value)) { + for (let i = 0; i < value.length; i++) { + if (!_isByte(value[i])) { return false; } + } + return true; + } + + return false; +} +*/ +function isBytesLike(value) { + return (isHexString(value, true) || (value instanceof Uint8Array)); +} + +const version$d = "@ethersproject/bytes@6.0.0-beta.1"; + +const logger$c = new Logger(version$d); + +let BN_8 = null; +let BN_255$1 = null; +try { + BN_8 = BigInt("8"); + BN_255$1 = BigInt("255"); +} +catch (error) { + console.log("Unsupported bigint", error); +} +function isHexable(value) { + return (value && typeof (value.toHexString) === "function"); +} +function arrayify(data) { + if (data == null) { + logger$c.throwArgumentError("cannot arrayify nullish", "data", data); + } + if (typeof (data) === "number") { + logger$c.assertUint53(data); + const result = []; + while (data) { + result.unshift(data & 0xff); + data = parseInt(String(data / 256)); + } + if (result.length === 0) { + result.push(0); + } + return new Uint8Array(result); + } + if (BN_8 && typeof (data) === "bigint") { + const result = []; + while (data) { + result.unshift(Number(data & BN_255$1)); + data >>= BN_8; + } + if (result.length === 0) { + result.push(0); + } + return new Uint8Array(result); + } + if (isHexable(data)) { + return arrayify(data.toHexString()); + } + if (typeof (data) === "string") { + let hex = data; + //if (options.allowMissingPrefix && hex.substring(0, 2) !== "0x") { + // hex = "0x" + hex; + //} + if (!hex.match(/^0x[0-9a-f]*$/i)) { + throw new RangeError(`invalid hex data string (${JSON.stringify(data)})`); + } + const result = []; + for (let i = 2; i < hex.length; i += 2) { + result.push(parseInt(hex.substring(i, i + 2), 16)); + } + return new Uint8Array(result); + } + if (data instanceof Uint8Array) { + return new Uint8Array(data); + } + throw new TypeError(`cannot arrayify ${JSON.stringify(data)}`); +} +function _noCopyArrayify(data) { + if (!isBytesLike(data)) { + logger$c.throwArgumentError("invalid BytesLike value", "data", data); + } // @TODO: ArgumentE> + if (data instanceof Uint8Array) { + return data; + } + return arrayify(data); +} + +function decodeBase64(textData) { + return new Uint8Array(Buffer.from(textData, "base64")); +} +function encodeBase64(data) { + return Buffer.from(logger$c.getBytes(data, "data")).toString("base64"); +} + +const HexCharacters = "0123456789abcdef"; +function hexlify(data) { + const bytes = _noCopyArrayify(data); + let result = "0x"; + for (let i = 0; i < bytes.length; i++) { + const v = bytes[i]; + result += HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f]; + } + return result; +} +function quantity(value) { + let result = hexlify(arrayify(value)).substring(2); + while (result.substring(0, 1) === "0") { + result = result.substring(1); + } + if (result === "") { + result = "0"; + } + return "0x" + result; +} + +function concat(datas) { + return "0x" + datas.map((d) => hexlify(d).substring(2)).join(""); +} +function dataLength(data) { + if (isHexString(data, true)) { + return (data.length - 2) / 2; + } + return _noCopyArrayify(data).length; +} +function dataSlice(data, start, end) { + const bytes = _noCopyArrayify(data); + if (end != null && end > bytes.length) { + logger$c.throwError("cannot slice beyond data bounds", "BUFFER_OVERRUN", { + buffer: bytes, length: bytes.length, offset: end + }); + } + return hexlify(bytes.slice((start == null) ? 0 : start, (end == null) ? bytes.length : end)); +} +function stripZerosLeft(data) { + let bytes = hexlify(data).substring(2); + while (bytes.substring(0, 2) == "00") { + bytes = bytes.substring(2); + } + return "0x" + bytes; +} + +function zeroPad(data, length, left) { + const bytes = _noCopyArrayify(data); + if (length < bytes.length) { + logger$c.throwError("padding exceeds data length", "BUFFER_OVERRUN", { + buffer: new Uint8Array(bytes), + length: length, + offset: length + 1 + }); + } + const result = new Uint8Array(length); + result.fill(0); + if (left) { + result.set(bytes, length - bytes.length); + } + else { + result.set(bytes, 0); + } + return hexlify(result); +} +function zeroPadLeft(data, length) { + return zeroPad(data, length, true); +} +function zeroPadRight(data, length) { + return zeroPad(data, length, false); +} + +var __classPrivateFieldSet$u = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$v = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _Result_instances, _Result_indices, _Result_throwError, _Writer_instances, _Writer_data, _Writer_dataLength, _Writer_writeData, _Reader_instances, _Reader_data, _Reader_offset, _Reader_coerceFunc, _Reader_peekBytes; +const WordSize = 32; +const Padding = new Uint8Array(WordSize); +// Properties used to immediate pass through to the underlying object +// - `then` is used to detect if an object is a Promise for await +const passProperties$1 = ["then"]; +const _guard$3 = {}; +class Result extends Array { + constructor(guard, items, keys) { + logger$e.assertPrivate(guard, _guard$3, "Result"); + super(...items); + _Result_instances.add(this); + _Result_indices.set(this, void 0); + // Name lookup table + __classPrivateFieldSet$u(this, _Result_indices, new Map(), "f"); + if (keys) { + keys.forEach((key, index) => { + if (key == null) { + return; + } + if (__classPrivateFieldGet$v(this, _Result_indices, "f").has(key)) { + (__classPrivateFieldGet$v(this, _Result_indices, "f").get(key)).push(index); + } + else { + __classPrivateFieldGet$v(this, _Result_indices, "f").set(key, [index]); + } + }); + } + Object.freeze(this); + return new Proxy(this, { + get: (target, prop, receiver) => { + if (typeof (prop) === "string") { + if (prop.match(/^[0-9]+$/)) { + const index = logger$e.getNumber(prop, "%index"); + if (index < 0 || index >= this.length) { + throw new RangeError("out of result range"); + } + const item = target[index]; + if (item instanceof Error) { + __classPrivateFieldGet$v(this, _Result_instances, "m", _Result_throwError).call(this, `index ${index}`, item); + } + return item; + } + // Pass important checks (like `then` for Promise) through + if (prop in target || passProperties$1.indexOf(prop) >= 0) { + return Reflect.get(target, prop, receiver); + } + // Something that could be a result keyword value + if (!(prop in target)) { + return target.getValue(prop); + } + } + return Reflect.get(target, prop, receiver); + } + }); + } + slice(start, end) { + if (start == null) { + start = 0; + } + if (end == null) { + end = this.length; + } + const result = []; + for (let i = start; i < end; i++) { + let value; + try { + value = this[i]; + } + catch (error) { + value = error.error; + } + result.push(value); + } + return result; + } + getValue(name) { + const index = __classPrivateFieldGet$v(this, _Result_indices, "f").get(name); + if (index != null && index.length === 1) { + const item = this[index[0]]; + if (item instanceof Error) { + __classPrivateFieldGet$v(this, _Result_instances, "m", _Result_throwError).call(this, `property ${JSON.stringify(name)}`, item); + } + return item; + } + throw new Error(`no named parameter: ${JSON.stringify(name)}`); + } + static fromItems(items, keys) { + return new Result(_guard$3, items, keys); + } +} +_Result_indices = new WeakMap(), _Result_instances = new WeakSet(), _Result_throwError = function _Result_throwError(name, error) { + const wrapped = new Error(`deferred error during ABI decoding triggered accessing ${name}`); + wrapped.error = error; + throw wrapped; +}; +function getValue$1(value) { + let bytes = toArray(value); + if (bytes.length > WordSize) { + logger$e.throwError("value out-of-bounds", "BUFFER_OVERRUN", { + buffer: bytes, + length: WordSize, + offset: bytes.length + }); + } + if (bytes.length % WordSize) { + bytes = arrayify(concat([Padding.slice(bytes.length % WordSize), bytes])); + } + return bytes; +} +class Coder { + constructor(name, type, localName, dynamic) { + defineProperties(this, { name, type, localName, dynamic }, { + name: "string", type: "string", localName: "string", dynamic: "boolean" + }); + } + _throwError(message, value) { + return logger$e.throwArgumentError(message, this.localName, value); + } +} +class Writer { + constructor() { + _Writer_instances.add(this); + // An array of WordSize lengthed objects to concatenation + _Writer_data.set(this, void 0); + _Writer_dataLength.set(this, void 0); + __classPrivateFieldSet$u(this, _Writer_data, [], "f"); + __classPrivateFieldSet$u(this, _Writer_dataLength, 0, "f"); + } + get data() { + return concat(__classPrivateFieldGet$v(this, _Writer_data, "f")); + } + get length() { return __classPrivateFieldGet$v(this, _Writer_dataLength, "f"); } + appendWriter(writer) { + return __classPrivateFieldGet$v(this, _Writer_instances, "m", _Writer_writeData).call(this, arrayify(writer.data)); + } + // Arrayish item; pad on the right to *nearest* WordSize + writeBytes(value) { + let bytes = arrayify(value); + const paddingOffset = bytes.length % WordSize; + if (paddingOffset) { + bytes = arrayify(concat([bytes, Padding.slice(paddingOffset)])); + } + return __classPrivateFieldGet$v(this, _Writer_instances, "m", _Writer_writeData).call(this, bytes); + } + // Numeric item; pad on the left *to* WordSize + writeValue(value) { + return __classPrivateFieldGet$v(this, _Writer_instances, "m", _Writer_writeData).call(this, getValue$1(value)); + } + // Inserts a numeric place-holder, returning a callback that can + // be used to asjust the value later + writeUpdatableValue() { + const offset = __classPrivateFieldGet$v(this, _Writer_data, "f").length; + __classPrivateFieldGet$v(this, _Writer_data, "f").push(Padding); + __classPrivateFieldSet$u(this, _Writer_dataLength, __classPrivateFieldGet$v(this, _Writer_dataLength, "f") + WordSize, "f"); + return (value) => { + __classPrivateFieldGet$v(this, _Writer_data, "f")[offset] = getValue$1(value); + }; + } +} +_Writer_data = new WeakMap(), _Writer_dataLength = new WeakMap(), _Writer_instances = new WeakSet(), _Writer_writeData = function _Writer_writeData(data) { + __classPrivateFieldGet$v(this, _Writer_data, "f").push(data); + __classPrivateFieldSet$u(this, _Writer_dataLength, __classPrivateFieldGet$v(this, _Writer_dataLength, "f") + data.length, "f"); + return data.length; +}; +class Reader { + constructor(data, coerceFunc, allowLoose) { + _Reader_instances.add(this); + _Reader_data.set(this, void 0); + _Reader_offset.set(this, void 0); + _Reader_coerceFunc.set(this, void 0); + defineProperties(this, { allowLoose: !!allowLoose }); + __classPrivateFieldSet$u(this, _Reader_data, arrayify(data), "f"); + __classPrivateFieldSet$u(this, _Reader_coerceFunc, coerceFunc || Reader.coerce, "f"); + __classPrivateFieldSet$u(this, _Reader_offset, 0, "f"); + } + get data() { return hexlify(__classPrivateFieldGet$v(this, _Reader_data, "f")); } + get dataLength() { return __classPrivateFieldGet$v(this, _Reader_data, "f").length; } + get consumed() { return __classPrivateFieldGet$v(this, _Reader_offset, "f"); } + get bytes() { return new Uint8Array(__classPrivateFieldGet$v(this, _Reader_data, "f")); } + // The default Coerce function + static coerce(type, value) { + let match = type.match("^u?int([0-9]+)$"); + if (match && parseInt(match[1]) <= 48) { + value = value.toNumber(); + } + return value; + } + coerce(type, value) { + return __classPrivateFieldGet$v(this, _Reader_coerceFunc, "f").call(this, type, value); + } + // Create a sub-reader with the same underlying data, but offset + subReader(offset) { + return new Reader(__classPrivateFieldGet$v(this, _Reader_data, "f").slice(__classPrivateFieldGet$v(this, _Reader_offset, "f") + offset), __classPrivateFieldGet$v(this, _Reader_coerceFunc, "f"), this.allowLoose); + } + // Read bytes + readBytes(length, loose) { + let bytes = __classPrivateFieldGet$v(this, _Reader_instances, "m", _Reader_peekBytes).call(this, 0, length, !!loose); + __classPrivateFieldSet$u(this, _Reader_offset, __classPrivateFieldGet$v(this, _Reader_offset, "f") + bytes.length, "f"); + // @TODO: Make sure the length..end bytes are all 0? + return bytes.slice(0, length); + } + // Read a numeric values + readValue() { + return toBigInt(this.readBytes(WordSize)); + } + readIndex() { + return toNumber(this.readBytes(WordSize)); + } +} +_Reader_data = new WeakMap(), _Reader_offset = new WeakMap(), _Reader_coerceFunc = new WeakMap(), _Reader_instances = new WeakSet(), _Reader_peekBytes = function _Reader_peekBytes(offset, length, loose) { + let alignedLength = Math.ceil(length / WordSize) * WordSize; + if (__classPrivateFieldGet$v(this, _Reader_offset, "f") + alignedLength > __classPrivateFieldGet$v(this, _Reader_data, "f").length) { + if (this.allowLoose && loose && __classPrivateFieldGet$v(this, _Reader_offset, "f") + length <= __classPrivateFieldGet$v(this, _Reader_data, "f").length) { + alignedLength = length; + } + else { + logger$e.throwError("data out-of-bounds", "BUFFER_OVERRUN", { + buffer: arrayify(__classPrivateFieldGet$v(this, _Reader_data, "f")), + length: __classPrivateFieldGet$v(this, _Reader_data, "f").length, + offset: __classPrivateFieldGet$v(this, _Reader_offset, "f") + alignedLength + }); + } + } + return __classPrivateFieldGet$v(this, _Reader_data, "f").slice(__classPrivateFieldGet$v(this, _Reader_offset, "f"), __classPrivateFieldGet$v(this, _Reader_offset, "f") + alignedLength); +}; + +/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */ +const u32 = (arr) => new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4)); +// Cast array to view +const createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength); +// The rotate right (circular right shift) operation for uint32 +const rotr = (word, shift) => (word << (32 - shift)) | (word >>> shift); +const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44; +// There is almost no big endian hardware, but js typed arrays uses platform specific endianess. +// So, just to be sure not to corrupt anything. +if (!isLE) + throw new Error('Non little-endian hardware is not supported'); +Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0')); +// Currently avoid insertion of polyfills with packers (browserify/webpack/etc) +// But setTimeout is pretty slow, maybe worth to investigate howto do minimal polyfill here +const nextTick = (() => { + const nodeRequire = typeof module !== 'undefined' && + typeof module.require === 'function' && + module.require.bind(module); + try { + if (nodeRequire) { + const { setImmediate } = nodeRequire('timers'); + return () => new Promise((resolve) => setImmediate(resolve)); + } + } + catch (e) { } + return () => new Promise((resolve) => setTimeout(resolve, 0)); +})(); +// Returns control to thread each 'tick' ms to avoid blocking +async function asyncLoop(iters, tick, cb) { + let ts = Date.now(); + for (let i = 0; i < iters; i++) { + cb(i); + // Date.now() is not monotonic, so in case if clock goes backwards we return return control too + const diff = Date.now() - ts; + if (diff >= 0 && diff < tick) + continue; + await nextTick(); + ts += diff; + } +} +function utf8ToBytes(str) { + if (typeof str !== 'string') { + throw new TypeError(`utf8ToBytes expected string, got ${typeof str}`); + } + return new TextEncoder().encode(str); +} +function toBytes(data) { + if (typeof data === 'string') + data = utf8ToBytes(data); + if (!(data instanceof Uint8Array)) + throw new TypeError(`Expected input type is Uint8Array (got ${typeof data})`); + return data; +} +function assertNumber(n) { + if (!Number.isSafeInteger(n) || n < 0) + throw new Error(`Wrong positive integer: ${n}`); +} +function assertHash(hash) { + if (typeof hash !== 'function' || typeof hash.create !== 'function') + throw new Error('Hash should be wrapped by utils.wrapConstructor'); + assertNumber(hash.outputLen); + assertNumber(hash.blockLen); +} +// For runtime check if class implements interface +class Hash { + // Safe version that clones internal state + clone() { + return this._cloneInto(); + } +} +// Check if object doens't have custom constructor (like Uint8Array/Array) +const isPlainObject = (obj) => Object.prototype.toString.call(obj) === '[object Object]' && obj.constructor === Object; +function checkOpts(def, _opts) { + if (_opts !== undefined && (typeof _opts !== 'object' || !isPlainObject(_opts))) + throw new TypeError('Options should be object or undefined'); + const opts = Object.assign(def, _opts); + return opts; +} +function wrapConstructor(hashConstructor) { + const hashC = (message) => hashConstructor().update(toBytes(message)).digest(); + const tmp = hashConstructor(); + hashC.outputLen = tmp.outputLen; + hashC.blockLen = tmp.blockLen; + hashC.create = () => hashConstructor(); + return hashC; +} +function wrapConstructorWithOpts(hashCons) { + const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest(); + const tmp = hashCons({}); + hashC.outputLen = tmp.outputLen; + hashC.blockLen = tmp.blockLen; + hashC.create = (opts) => hashCons(opts); + return hashC; +} + +// HMAC (RFC 2104) +class HMAC extends Hash { + constructor(hash, _key) { + super(); + this.finished = false; + this.destroyed = false; + assertHash(hash); + const key = toBytes(_key); + this.iHash = hash.create(); + if (!(this.iHash instanceof Hash)) + throw new TypeError('Expected instance of class which extends utils.Hash'); + const blockLen = (this.blockLen = this.iHash.blockLen); + this.outputLen = this.iHash.outputLen; + const pad = new Uint8Array(blockLen); + // blockLen can be bigger than outputLen + pad.set(key.length > this.iHash.blockLen ? hash.create().update(key).digest() : key); + for (let i = 0; i < pad.length; i++) + pad[i] ^= 0x36; + this.iHash.update(pad); + // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone + this.oHash = hash.create(); + // Undo internal XOR && apply outer XOR + for (let i = 0; i < pad.length; i++) + pad[i] ^= 0x36 ^ 0x5c; + this.oHash.update(pad); + pad.fill(0); + } + update(buf) { + if (this.destroyed) + throw new Error('instance is destroyed'); + this.iHash.update(buf); + return this; + } + digestInto(out) { + if (this.destroyed) + throw new Error('instance is destroyed'); + if (!(out instanceof Uint8Array) || out.length !== this.outputLen) + throw new Error('HMAC: Invalid output buffer'); + if (this.finished) + throw new Error('digest() was already called'); + this.finished = true; + this.iHash.digestInto(out); + this.oHash.update(out); + this.oHash.digestInto(out); + this.destroy(); + } + digest() { + const out = new Uint8Array(this.oHash.outputLen); + this.digestInto(out); + return out; + } + _cloneInto(to) { + // Create new instance without calling constructor since key already in state and we don't know it. + to || (to = Object.create(Object.getPrototypeOf(this), {})); + const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this; + to = to; + to.finished = finished; + to.destroyed = destroyed; + to.blockLen = blockLen; + to.outputLen = outputLen; + to.oHash = oHash._cloneInto(to.oHash); + to.iHash = iHash._cloneInto(to.iHash); + return to; + } + destroy() { + this.destroyed = true; + this.oHash.destroy(); + this.iHash.destroy(); + } +} +/** + * HMAC: RFC2104 message authentication code. + * @param hash - function that would be used e.g. sha256 + * @param key - message key + * @param message - message data + */ +const hmac = (hash, key, message) => new HMAC(hash, key).update(message).digest(); +hmac.create = (hash, key) => new HMAC(hash, key); + +// Common prologue and epilogue for sync/async functions +function pbkdf2Init(hash, _password, _salt, _opts) { + assertHash(hash); + const opts = checkOpts({ dkLen: 32, asyncTick: 10 }, _opts); + const { c, dkLen, asyncTick } = opts; + assertNumber(c); + assertNumber(dkLen); + assertNumber(asyncTick); + if (c < 1) + throw new Error('PBKDF2: iterations (c) should be >= 1'); + const password = toBytes(_password); + const salt = toBytes(_salt); + // DK = PBKDF2(PRF, Password, Salt, c, dkLen); + const DK = new Uint8Array(dkLen); + // U1 = PRF(Password, Salt + INT_32_BE(i)) + const PRF = hmac.create(hash, password); + const PRFSalt = PRF._cloneInto().update(salt); + return { c, dkLen, asyncTick, DK, PRF, PRFSalt }; +} +function pbkdf2Output(PRF, PRFSalt, DK, prfW, u) { + PRF.destroy(); + PRFSalt.destroy(); + if (prfW) + prfW.destroy(); + u.fill(0); + return DK; +} +/** + * PBKDF2-HMAC: RFC 2898 key derivation function + * @param hash - hash function that would be used e.g. sha256 + * @param password - password from which a derived key is generated + * @param salt - cryptographic salt + * @param opts - {c, dkLen} where c is work factor and dkLen is output message size + */ +function pbkdf2$1(hash, password, salt, opts) { + const { c, dkLen, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts); + let prfW; // Working copy + const arr = new Uint8Array(4); + const view = createView(arr); + const u = new Uint8Array(PRF.outputLen); + // DK = T1 + T2 + ⋯ + Tdklen/hlen + for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) { + // Ti = F(Password, Salt, c, i) + const Ti = DK.subarray(pos, pos + PRF.outputLen); + view.setInt32(0, ti, false); + // F(Password, Salt, c, i) = U1 ^ U2 ^ ⋯ ^ Uc + // U1 = PRF(Password, Salt + INT_32_BE(i)) + (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u); + Ti.set(u.subarray(0, Ti.length)); + for (let ui = 1; ui < c; ui++) { + // Uc = PRF(Password, Uc−1) + PRF._cloneInto(prfW).update(u).digestInto(u); + for (let i = 0; i < Ti.length; i++) + Ti[i] ^= u[i]; + } + } + return pbkdf2Output(PRF, PRFSalt, DK, prfW, u); +} + +// Polyfill for Safari 14 +function setBigUint64(view, byteOffset, value, isLE) { + if (typeof view.setBigUint64 === 'function') + return view.setBigUint64(byteOffset, value, isLE); + const _32n = BigInt(32); + const _u32_max = BigInt(0xffffffff); + const wh = Number((value >> _32n) & _u32_max); + const wl = Number(value & _u32_max); + const h = isLE ? 4 : 0; + const l = isLE ? 0 : 4; + view.setUint32(byteOffset + h, wh, isLE); + view.setUint32(byteOffset + l, wl, isLE); +} +// Base SHA2 class (RFC 6234) +class SHA2 extends Hash { + constructor(blockLen, outputLen, padOffset, isLE) { + super(); + this.blockLen = blockLen; + this.outputLen = outputLen; + this.padOffset = padOffset; + this.isLE = isLE; + this.finished = false; + this.length = 0; + this.pos = 0; + this.destroyed = false; + this.buffer = new Uint8Array(blockLen); + this.view = createView(this.buffer); + } + update(data) { + if (this.destroyed) + throw new Error('instance is destroyed'); + const { view, buffer, blockLen, finished } = this; + if (finished) + throw new Error('digest() was already called'); + data = toBytes(data); + const len = data.length; + for (let pos = 0; pos < len;) { + const take = Math.min(blockLen - this.pos, len - pos); + // Fast path: we have at least one block in input, cast it to view and process + if (take === blockLen) { + const dataView = createView(data); + for (; blockLen <= len - pos; pos += blockLen) + this.process(dataView, pos); + continue; + } + buffer.set(data.subarray(pos, pos + take), this.pos); + this.pos += take; + pos += take; + if (this.pos === blockLen) { + this.process(view, 0); + this.pos = 0; + } + } + this.length += data.length; + this.roundClean(); + return this; + } + digestInto(out) { + if (this.destroyed) + throw new Error('instance is destroyed'); + if (!(out instanceof Uint8Array) || out.length < this.outputLen) + throw new Error('_Sha2: Invalid output buffer'); + if (this.finished) + throw new Error('digest() was already called'); + this.finished = true; + // Padding + // We can avoid allocation of buffer for padding completely if it + // was previously not allocated here. But it won't change performance. + const { buffer, view, blockLen, isLE } = this; + let { pos } = this; + // append the bit '1' to the message + buffer[pos++] = 0b10000000; + this.buffer.subarray(pos).fill(0); + // we have less than padOffset left in buffer, so we cannot put length in current block, need process it and pad again + if (this.padOffset > blockLen - pos) { + this.process(view, 0); + pos = 0; + } + // Pad until full block byte with zeros + for (let i = pos; i < blockLen; i++) + buffer[i] = 0; + // NOTE: sha512 requires length to be 128bit integer, but length in JS will overflow before that + // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen. + // So we just write lowest 64bit of that value. + setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE); + this.process(view, 0); + const oview = createView(out); + this.get().forEach((v, i) => oview.setUint32(4 * i, v, isLE)); + } + digest() { + const { buffer, outputLen } = this; + this.digestInto(buffer); + const res = buffer.slice(0, outputLen); + this.destroy(); + return res; + } + _cloneInto(to) { + to || (to = new this.constructor()); + to.set(...this.get()); + const { blockLen, buffer, length, finished, destroyed, pos } = this; + to.length = length; + to.pos = pos; + to.finished = finished; + to.destroyed = destroyed; + if (length % blockLen) + to.buffer.set(buffer); + return to; + } +} + +// Choice: a ? b : c +const Chi = (a, b, c) => (a & b) ^ (~a & c); +// Majority function, true if any two inpust is true +const Maj = (a, b, c) => (a & b) ^ (a & c) ^ (b & c); +// Round constants: +// first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311) +// prettier-ignore +const SHA256_K = new Uint32Array([ + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 +]); +// Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19): +// prettier-ignore +const IV = new Uint32Array([ + 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 +]); +// Temporary buffer, not used to store anything between runs +// Named this way because it matches specification. +const SHA256_W = new Uint32Array(64); +class SHA256 extends SHA2 { + constructor() { + super(64, 32, 8, false); + // We cannot use array here since array allows indexing by variable + // which means optimizer/compiler cannot use registers. + this.A = IV[0] | 0; + this.B = IV[1] | 0; + this.C = IV[2] | 0; + this.D = IV[3] | 0; + this.E = IV[4] | 0; + this.F = IV[5] | 0; + this.G = IV[6] | 0; + this.H = IV[7] | 0; + } + get() { + const { A, B, C, D, E, F, G, H } = this; + return [A, B, C, D, E, F, G, H]; + } + // prettier-ignore + set(A, B, C, D, E, F, G, H) { + this.A = A | 0; + this.B = B | 0; + this.C = C | 0; + this.D = D | 0; + this.E = E | 0; + this.F = F | 0; + this.G = G | 0; + this.H = H | 0; + } + process(view, offset) { + // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array + for (let i = 0; i < 16; i++, offset += 4) + SHA256_W[i] = view.getUint32(offset, false); + for (let i = 16; i < 64; i++) { + const W15 = SHA256_W[i - 15]; + const W2 = SHA256_W[i - 2]; + const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3); + const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10); + SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0; + } + // Compression function main loop, 64 rounds + let { A, B, C, D, E, F, G, H } = this; + for (let i = 0; i < 64; i++) { + const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25); + const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0; + const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22); + const T2 = (sigma0 + Maj(A, B, C)) | 0; + H = G; + G = F; + F = E; + E = (D + T1) | 0; + D = C; + C = B; + B = A; + A = (T1 + T2) | 0; + } + // Add the compressed chunk to the current hash value + A = (A + this.A) | 0; + B = (B + this.B) | 0; + C = (C + this.C) | 0; + D = (D + this.D) | 0; + E = (E + this.E) | 0; + F = (F + this.F) | 0; + G = (G + this.G) | 0; + H = (H + this.H) | 0; + this.set(A, B, C, D, E, F, G, H); + } + roundClean() { + SHA256_W.fill(0); + } + destroy() { + this.set(0, 0, 0, 0, 0, 0, 0, 0); + this.buffer.fill(0); + } +} +/** + * SHA2-256 hash function + * @param message - data that would be hashed + */ +const sha256$1 = wrapConstructor(() => new SHA256()); + +const U32_MASK64 = BigInt(2 ** 32 - 1); +const _32n = BigInt(32); +function fromBig(n, le = false) { + if (le) + return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) }; + return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 }; +} +function split(lst, le = false) { + let Ah = new Uint32Array(lst.length); + let Al = new Uint32Array(lst.length); + for (let i = 0; i < lst.length; i++) { + const { h, l } = fromBig(lst[i], le); + [Ah[i], Al[i]] = [h, l]; + } + return [Ah, Al]; +} +// for Shift in [0, 32) +const shrSH = (h, l, s) => h >>> s; +const shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s); +// Right rotate for Shift in [1, 32) +const rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s)); +const rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s); +// Right rotate for Shift in (32, 64), NOTE: 32 is special case. +const rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32)); +const rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s)); +// Left rotate for Shift in [1, 32) +const rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s)); +const rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s)); +// Left rotate for Shift in (32, 64), NOTE: 32 is special case. +const rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s)); +const rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s)); +// JS uses 32-bit signed integers for bitwise operations which means we cannot +// simple take carry out of low bit sum by shift, we need to use division. +function add(Ah, Al, Bh, Bl) { + const l = (Al >>> 0) + (Bl >>> 0); + return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 }; +} +// Addition with more than 2 elements +const add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0); +const add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0; +const add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0); +const add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0; +const add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0); +const add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0; + +// Round contants (first 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409): +// prettier-ignore +const [SHA512_Kh, SHA512_Kl] = split([ + '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc', + '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118', + '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2', + '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694', + '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65', + '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5', + '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4', + '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70', + '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df', + '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b', + '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30', + '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8', + '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8', + '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3', + '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec', + '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b', + '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178', + '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b', + '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c', + '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817' +].map(n => BigInt(n))); +// Temporary buffer, not used to store anything between runs +const SHA512_W_H = new Uint32Array(80); +const SHA512_W_L = new Uint32Array(80); +class SHA512 extends SHA2 { + constructor() { + super(128, 64, 16, false); + // We cannot use array here since array allows indexing by variable which means optimizer/compiler cannot use registers. + // Also looks cleaner and easier to verify with spec. + // Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19): + // h -- high 32 bits, l -- low 32 bits + this.Ah = 0x6a09e667 | 0; + this.Al = 0xf3bcc908 | 0; + this.Bh = 0xbb67ae85 | 0; + this.Bl = 0x84caa73b | 0; + this.Ch = 0x3c6ef372 | 0; + this.Cl = 0xfe94f82b | 0; + this.Dh = 0xa54ff53a | 0; + this.Dl = 0x5f1d36f1 | 0; + this.Eh = 0x510e527f | 0; + this.El = 0xade682d1 | 0; + this.Fh = 0x9b05688c | 0; + this.Fl = 0x2b3e6c1f | 0; + this.Gh = 0x1f83d9ab | 0; + this.Gl = 0xfb41bd6b | 0; + this.Hh = 0x5be0cd19 | 0; + this.Hl = 0x137e2179 | 0; + } + // prettier-ignore + get() { + const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this; + return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl]; + } + // prettier-ignore + set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl) { + this.Ah = Ah | 0; + this.Al = Al | 0; + this.Bh = Bh | 0; + this.Bl = Bl | 0; + this.Ch = Ch | 0; + this.Cl = Cl | 0; + this.Dh = Dh | 0; + this.Dl = Dl | 0; + this.Eh = Eh | 0; + this.El = El | 0; + this.Fh = Fh | 0; + this.Fl = Fl | 0; + this.Gh = Gh | 0; + this.Gl = Gl | 0; + this.Hh = Hh | 0; + this.Hl = Hl | 0; + } + process(view, offset) { + // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array + for (let i = 0; i < 16; i++, offset += 4) { + SHA512_W_H[i] = view.getUint32(offset); + SHA512_W_L[i] = view.getUint32((offset += 4)); + } + for (let i = 16; i < 80; i++) { + // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7) + const W15h = SHA512_W_H[i - 15] | 0; + const W15l = SHA512_W_L[i - 15] | 0; + const s0h = rotrSH(W15h, W15l, 1) ^ rotrSH(W15h, W15l, 8) ^ shrSH(W15h, W15l, 7); + const s0l = rotrSL(W15h, W15l, 1) ^ rotrSL(W15h, W15l, 8) ^ shrSL(W15h, W15l, 7); + // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6) + const W2h = SHA512_W_H[i - 2] | 0; + const W2l = SHA512_W_L[i - 2] | 0; + const s1h = rotrSH(W2h, W2l, 19) ^ rotrBH(W2h, W2l, 61) ^ shrSH(W2h, W2l, 6); + const s1l = rotrSL(W2h, W2l, 19) ^ rotrBL(W2h, W2l, 61) ^ shrSL(W2h, W2l, 6); + // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16]; + const SUMl = add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]); + const SUMh = add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]); + SHA512_W_H[i] = SUMh | 0; + SHA512_W_L[i] = SUMl | 0; + } + let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this; + // Compression function main loop, 80 rounds + for (let i = 0; i < 80; i++) { + // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41) + const sigma1h = rotrSH(Eh, El, 14) ^ rotrSH(Eh, El, 18) ^ rotrBH(Eh, El, 41); + const sigma1l = rotrSL(Eh, El, 14) ^ rotrSL(Eh, El, 18) ^ rotrBL(Eh, El, 41); + //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0; + const CHIh = (Eh & Fh) ^ (~Eh & Gh); + const CHIl = (El & Fl) ^ (~El & Gl); + // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i] + // prettier-ignore + const T1ll = add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]); + const T1h = add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]); + const T1l = T1ll | 0; + // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39) + const sigma0h = rotrSH(Ah, Al, 28) ^ rotrBH(Ah, Al, 34) ^ rotrBH(Ah, Al, 39); + const sigma0l = rotrSL(Ah, Al, 28) ^ rotrBL(Ah, Al, 34) ^ rotrBL(Ah, Al, 39); + const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch); + const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl); + Hh = Gh | 0; + Hl = Gl | 0; + Gh = Fh | 0; + Gl = Fl | 0; + Fh = Eh | 0; + Fl = El | 0; + ({ h: Eh, l: El } = add(Dh | 0, Dl | 0, T1h | 0, T1l | 0)); + Dh = Ch | 0; + Dl = Cl | 0; + Ch = Bh | 0; + Cl = Bl | 0; + Bh = Ah | 0; + Bl = Al | 0; + const All = add3L(T1l, sigma0l, MAJl); + Ah = add3H(All, T1h, sigma0h, MAJh); + Al = All | 0; + } + // Add the compressed chunk to the current hash value + ({ h: Ah, l: Al } = add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0)); + ({ h: Bh, l: Bl } = add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0)); + ({ h: Ch, l: Cl } = add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0)); + ({ h: Dh, l: Dl } = add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0)); + ({ h: Eh, l: El } = add(this.Eh | 0, this.El | 0, Eh | 0, El | 0)); + ({ h: Fh, l: Fl } = add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0)); + ({ h: Gh, l: Gl } = add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0)); + ({ h: Hh, l: Hl } = add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0)); + this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl); + } + roundClean() { + SHA512_W_H.fill(0); + SHA512_W_L.fill(0); + } + destroy() { + this.buffer.fill(0); + this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + } +} +class SHA512_256 extends SHA512 { + constructor() { + super(); + // h -- high 32 bits, l -- low 32 bits + this.Ah = 0x22312194 | 0; + this.Al = 0xfc2bf72c | 0; + this.Bh = 0x9f555fa3 | 0; + this.Bl = 0xc84c64c2 | 0; + this.Ch = 0x2393b86b | 0; + this.Cl = 0x6f53b151 | 0; + this.Dh = 0x96387719 | 0; + this.Dl = 0x5940eabd | 0; + this.Eh = 0x96283ee2 | 0; + this.El = 0xa88effe3 | 0; + this.Fh = 0xbe5e1e25 | 0; + this.Fl = 0x53863992 | 0; + this.Gh = 0x2b0199fc | 0; + this.Gl = 0x2c85b8aa | 0; + this.Hh = 0x0eb72ddc | 0; + this.Hl = 0x81c52ca2 | 0; + this.outputLen = 32; + } +} +class SHA384 extends SHA512 { + constructor() { + super(); + // h -- high 32 bits, l -- low 32 bits + this.Ah = 0xcbbb9d5d | 0; + this.Al = 0xc1059ed8 | 0; + this.Bh = 0x629a292a | 0; + this.Bl = 0x367cd507 | 0; + this.Ch = 0x9159015a | 0; + this.Cl = 0x3070dd17 | 0; + this.Dh = 0x152fecd8 | 0; + this.Dl = 0xf70e5939 | 0; + this.Eh = 0x67332667 | 0; + this.El = 0xffc00b31 | 0; + this.Fh = 0x8eb44a87 | 0; + this.Fl = 0x68581511 | 0; + this.Gh = 0xdb0c2e0d | 0; + this.Gl = 0x64f98fa7 | 0; + this.Hh = 0x47b5481d | 0; + this.Hl = 0xbefa4fa4 | 0; + this.outputLen = 48; + } +} +const sha512$1 = wrapConstructor(() => new SHA512()); +wrapConstructor(() => new SHA512_256()); +wrapConstructor(() => new SHA384()); + +const version$c = "@ethersproject/crypto@6.0.0-beta.1"; + +const logger$b = new Logger(version$c); + +/* Browser Crypto Shims */ +function getGlobal$1() { + if (typeof self !== 'undefined') { + return self; + } + if (typeof window !== 'undefined') { + return window; + } + if (typeof global !== 'undefined') { + return global; + } + throw new Error('unable to locate global object'); +} +const anyGlobal = getGlobal$1(); +let crypto$1 = anyGlobal.crypto || anyGlobal.msCrypto; +function createHash(algo) { + switch (algo) { + case "sha256": return sha256$1.create(); + case "sha512": return sha512$1.create(); + } + return logger$b.throwArgumentError("invalid hashing algorithm name", "algorithm", algo); +} +function createHmac(_algo, key) { + const algo = ({ sha256: sha256$1, sha512: sha512$1 }[_algo]); + if (algo == null) { + return logger$b.throwArgumentError("invalid hmac algorithm", "algorithm", _algo); + } + return hmac.create(algo, key); +} +function pbkdf2Sync(password, salt, iterations, keylen, _algo) { + const algo = ({ sha256: sha256$1, sha512: sha512$1 }[_algo]); + if (algo == null) { + return logger$b.throwArgumentError("invalid pbkdf2 algorithm", "algorithm", _algo); + } + return pbkdf2$1(algo, password, salt, { c: iterations, dkLen: keylen }); +} +function randomBytes$1(length) { + if (crypto$1 == null) { + return logger$b.throwError("platform does not support secure random numbers", "UNSUPPORTED_OPERATION", { + operation: "randomBytes" + }); + } + if (length <= 0 || length > 1024 || (length % 1) || length != length) { + logger$b.throwArgumentError("invalid length", "length", length); + } + const result = new Uint8Array(length); + crypto$1.getRandomValues(result); + return result; +} + +let locked$4 = false; +const _computeHmac = function (algorithm, key, data) { + return "0x" + createHmac(algorithm, key).update(data).digest("hex"); +}; +let __computeHmac = _computeHmac; +function computeHmac(algorithm, _key, _data) { + const key = logger$b.getBytes(_key, "key"); + const data = logger$b.getBytes(_data, "data"); + return hexlify(__computeHmac(algorithm, key, data)); +} +computeHmac._ = _computeHmac; +computeHmac.lock = function () { locked$4 = true; }; +computeHmac.register = function (func) { + if (locked$4) { + throw new Error("computeHmac is locked"); + } + __computeHmac = func; +}; +Object.freeze(computeHmac); + +// Various per round constants calculations +const [SHA3_PI, SHA3_ROTL, _SHA3_IOTA] = [[], [], []]; +const _0n$1 = BigInt(0); +const _1n$1 = BigInt(1); +const _2n$1 = BigInt(2); +const _7n = BigInt(7); +const _256n = BigInt(256); +const _0x71n = BigInt(0x71); +for (let round = 0, R = _1n$1, x = 1, y = 0; round < 24; round++) { + // Pi + [x, y] = [y, (2 * x + 3 * y) % 5]; + SHA3_PI.push(2 * (5 * y + x)); + // Rotational + SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64); + // Iota + let t = _0n$1; + for (let j = 0; j < 7; j++) { + R = ((R << _1n$1) ^ ((R >> _7n) * _0x71n)) % _256n; + if (R & _2n$1) + t ^= _1n$1 << ((_1n$1 << BigInt(j)) - _1n$1); + } + _SHA3_IOTA.push(t); +} +const [SHA3_IOTA_H, SHA3_IOTA_L] = split(_SHA3_IOTA, true); +// Left rotation (without 0, 32, 64) +const rotlH = (h, l, s) => s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s); +const rotlL = (h, l, s) => s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s); +// Same as keccakf1600, but allows to skip some rounds +function keccakP(s, rounds = 24) { + const B = new Uint32Array(5 * 2); + // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js) + for (let round = 24 - rounds; round < 24; round++) { + // Theta θ + for (let x = 0; x < 10; x++) + B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40]; + for (let x = 0; x < 10; x += 2) { + const idx1 = (x + 8) % 10; + const idx0 = (x + 2) % 10; + const B0 = B[idx0]; + const B1 = B[idx0 + 1]; + const Th = rotlH(B0, B1, 1) ^ B[idx1]; + const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1]; + for (let y = 0; y < 50; y += 10) { + s[x + y] ^= Th; + s[x + y + 1] ^= Tl; + } + } + // Rho (ρ) and Pi (π) + let curH = s[2]; + let curL = s[3]; + for (let t = 0; t < 24; t++) { + const shift = SHA3_ROTL[t]; + const Th = rotlH(curH, curL, shift); + const Tl = rotlL(curH, curL, shift); + const PI = SHA3_PI[t]; + curH = s[PI]; + curL = s[PI + 1]; + s[PI] = Th; + s[PI + 1] = Tl; + } + // Chi (χ) + for (let y = 0; y < 50; y += 10) { + for (let x = 0; x < 10; x++) + B[x] = s[y + x]; + for (let x = 0; x < 10; x++) + s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10]; + } + // Iota (ι) + s[0] ^= SHA3_IOTA_H[round]; + s[1] ^= SHA3_IOTA_L[round]; + } + B.fill(0); +} +class Keccak extends Hash { + // NOTE: we accept arguments in bytes instead of bits here. + constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24) { + super(); + this.blockLen = blockLen; + this.suffix = suffix; + this.outputLen = outputLen; + this.enableXOF = enableXOF; + this.rounds = rounds; + this.pos = 0; + this.posOut = 0; + this.finished = false; + this.destroyed = false; + // Can be passed from user as dkLen + assertNumber(outputLen); + // 1600 = 5x5 matrix of 64bit. 1600 bits === 200 bytes + if (0 >= this.blockLen || this.blockLen >= 200) + throw new Error('Sha3 supports only keccak-f1600 function'); + this.state = new Uint8Array(200); + this.state32 = u32(this.state); + } + keccak() { + keccakP(this.state32, this.rounds); + this.posOut = 0; + this.pos = 0; + } + update(data) { + if (this.destroyed) + throw new Error('instance is destroyed'); + if (this.finished) + throw new Error('digest() was already called'); + const { blockLen, state } = this; + data = toBytes(data); + const len = data.length; + for (let pos = 0; pos < len;) { + const take = Math.min(blockLen - this.pos, len - pos); + for (let i = 0; i < take; i++) + state[this.pos++] ^= data[pos++]; + if (this.pos === blockLen) + this.keccak(); + } + return this; + } + finish() { + if (this.finished) + return; + this.finished = true; + const { state, suffix, pos, blockLen } = this; + // Do the padding + state[pos] ^= suffix; + if ((suffix & 0x80) !== 0 && pos === blockLen - 1) + this.keccak(); + state[blockLen - 1] ^= 0x80; + this.keccak(); + } + writeInto(out) { + if (this.destroyed) + throw new Error('instance is destroyed'); + if (!(out instanceof Uint8Array)) + throw new Error('Keccak: invalid output buffer'); + this.finish(); + for (let pos = 0, len = out.length; pos < len;) { + if (this.posOut >= this.blockLen) + this.keccak(); + const take = Math.min(this.blockLen - this.posOut, len - pos); + out.set(this.state.subarray(this.posOut, this.posOut + take), pos); + this.posOut += take; + pos += take; + } + return out; + } + xofInto(out) { + // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF + if (!this.enableXOF) + throw new Error('XOF is not possible for this instance'); + return this.writeInto(out); + } + xof(bytes) { + assertNumber(bytes); + return this.xofInto(new Uint8Array(bytes)); + } + digestInto(out) { + if (out.length < this.outputLen) + throw new Error('Keccak: invalid output buffer'); + if (this.finished) + throw new Error('digest() was already called'); + this.finish(); + this.writeInto(out); + this.destroy(); + return out; + } + digest() { + return this.digestInto(new Uint8Array(this.outputLen)); + } + destroy() { + this.destroyed = true; + this.state.fill(0); + } + _cloneInto(to) { + const { blockLen, suffix, outputLen, rounds, enableXOF } = this; + to || (to = new Keccak(blockLen, suffix, outputLen, enableXOF, rounds)); + to.state32.set(this.state32); + to.pos = this.pos; + to.posOut = this.posOut; + to.finished = this.finished; + to.rounds = rounds; + // Suffix can change in cSHAKE + to.suffix = suffix; + to.outputLen = outputLen; + to.enableXOF = enableXOF; + to.destroyed = this.destroyed; + return to; + } +} +const gen = (suffix, blockLen, outputLen) => wrapConstructor(() => new Keccak(blockLen, suffix, outputLen)); +gen(0x06, 144, 224 / 8); +/** + * SHA3-256 hash function + * @param message - that would be hashed + */ +gen(0x06, 136, 256 / 8); +gen(0x06, 104, 384 / 8); +gen(0x06, 72, 512 / 8); +gen(0x01, 144, 224 / 8); +/** + * keccak-256 hash function. Different from SHA3-256. + * @param message - that would be hashed + */ +const keccak_256 = gen(0x01, 136, 256 / 8); +gen(0x01, 104, 384 / 8); +gen(0x01, 72, 512 / 8); +const genShake = (suffix, blockLen, outputLen) => wrapConstructorWithOpts((opts = {}) => new Keccak(blockLen, suffix, opts.dkLen !== undefined ? opts.dkLen : outputLen, true)); +genShake(0x1f, 168, 128 / 8); +genShake(0x1f, 136, 256 / 8); + +let locked$3 = false; +const _keccak256 = function (data) { + return keccak_256(data); +}; +let __keccak256 = _keccak256; +function keccak256(_data) { + const data = logger$b.getBytes(_data, "data"); + return hexlify(__keccak256(data)); +} +keccak256._ = _keccak256; +keccak256.lock = function () { locked$3 = true; }; +keccak256.register = function (func) { + if (locked$3) { + throw new TypeError("keccak256 is locked"); + } + __keccak256 = func; +}; +Object.freeze(keccak256); + +// https://homes.esat.kuleuven.be/~bosselae/ripemd160.html +// https://homes.esat.kuleuven.be/~bosselae/ripemd160/pdf/AB-9601/AB-9601.pdf +const Rho = new Uint8Array([7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8]); +const Id = Uint8Array.from({ length: 16 }, (_, i) => i); +const Pi = Id.map((i) => (9 * i + 5) % 16); +let idxL = [Id]; +let idxR = [Pi]; +for (let i = 0; i < 4; i++) + for (let j of [idxL, idxR]) + j.push(j[i].map((k) => Rho[k])); +const shifts = [ + [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8], + [12, 13, 11, 15, 6, 9, 9, 7, 12, 15, 11, 13, 7, 8, 7, 7], + [13, 15, 14, 11, 7, 7, 6, 8, 13, 14, 13, 12, 5, 5, 6, 9], + [14, 11, 12, 14, 8, 6, 5, 5, 15, 12, 15, 14, 9, 9, 8, 6], + [15, 12, 13, 13, 9, 5, 8, 6, 14, 11, 12, 11, 8, 6, 5, 5], +].map((i) => new Uint8Array(i)); +const shiftsL = idxL.map((idx, i) => idx.map((j) => shifts[i][j])); +const shiftsR = idxR.map((idx, i) => idx.map((j) => shifts[i][j])); +const Kl = new Uint32Array([0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]); +const Kr = new Uint32Array([0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]); +// The rotate left (circular left shift) operation for uint32 +const rotl$1 = (word, shift) => (word << shift) | (word >>> (32 - shift)); +// It's called f() in spec. +function f(group, x, y, z) { + if (group === 0) + return x ^ y ^ z; + else if (group === 1) + return (x & y) | (~x & z); + else if (group === 2) + return (x | ~y) ^ z; + else if (group === 3) + return (x & z) | (y & ~z); + else + return x ^ (y | ~z); +} +// Temporary buffer, not used to store anything between runs +const BUF = new Uint32Array(16); +class RIPEMD160 extends SHA2 { + constructor() { + super(64, 20, 8, true); + this.h0 = 0x67452301 | 0; + this.h1 = 0xefcdab89 | 0; + this.h2 = 0x98badcfe | 0; + this.h3 = 0x10325476 | 0; + this.h4 = 0xc3d2e1f0 | 0; + } + get() { + const { h0, h1, h2, h3, h4 } = this; + return [h0, h1, h2, h3, h4]; + } + set(h0, h1, h2, h3, h4) { + this.h0 = h0 | 0; + this.h1 = h1 | 0; + this.h2 = h2 | 0; + this.h3 = h3 | 0; + this.h4 = h4 | 0; + } + process(view, offset) { + for (let i = 0; i < 16; i++, offset += 4) + BUF[i] = view.getUint32(offset, true); + // prettier-ignore + let al = this.h0 | 0, ar = al, bl = this.h1 | 0, br = bl, cl = this.h2 | 0, cr = cl, dl = this.h3 | 0, dr = dl, el = this.h4 | 0, er = el; + // Instead of iterating 0 to 80, we split it into 5 groups + // And use the groups in constants, functions, etc. Much simpler + for (let group = 0; group < 5; group++) { + const rGroup = 4 - group; + const hbl = Kl[group], hbr = Kr[group]; // prettier-ignore + const rl = idxL[group], rr = idxR[group]; // prettier-ignore + const sl = shiftsL[group], sr = shiftsR[group]; // prettier-ignore + for (let i = 0; i < 16; i++) { + const tl = (rotl$1(al + f(group, bl, cl, dl) + BUF[rl[i]] + hbl, sl[i]) + el) | 0; + al = el, el = dl, dl = rotl$1(cl, 10) | 0, cl = bl, bl = tl; // prettier-ignore + } + // 2 loops are 10% faster + for (let i = 0; i < 16; i++) { + const tr = (rotl$1(ar + f(rGroup, br, cr, dr) + BUF[rr[i]] + hbr, sr[i]) + er) | 0; + ar = er, er = dr, dr = rotl$1(cr, 10) | 0, cr = br, br = tr; // prettier-ignore + } + } + // Add the compressed chunk to the current hash value + this.set((this.h1 + cl + dr) | 0, (this.h2 + dl + er) | 0, (this.h3 + el + ar) | 0, (this.h4 + al + br) | 0, (this.h0 + bl + cr) | 0); + } + roundClean() { + BUF.fill(0); + } + destroy() { + this.destroyed = true; + this.buffer.fill(0); + this.set(0, 0, 0, 0, 0); + } +} +/** + * RIPEMD-160 - a hash function from 1990s. + * @param message - msg that would be hashed + */ +const ripemd160$1 = wrapConstructor(() => new RIPEMD160()); + +let locked$2 = false; +const _ripemd160 = function (data) { + return ripemd160$1(data); +}; +let __ripemd160 = _ripemd160; +function ripemd160(_data) { + const data = logger$b.getBytes(_data, "data"); + return hexlify(__ripemd160(data)); +} +ripemd160._ = _ripemd160; +ripemd160.lock = function () { locked$2 = true; }; +ripemd160.register = function (func) { + if (locked$2) { + throw new TypeError("ripemd160 is locked"); + } + __ripemd160 = func; +}; +Object.freeze(ripemd160); + +let locked$1 = false; +const _pbkdf2 = function (password, salt, iterations, keylen, algo) { + return pbkdf2Sync(password, salt, iterations, keylen, algo); +}; +let __pbkdf2 = _pbkdf2; +function pbkdf2(_password, _salt, iterations, keylen, algo) { + const password = logger$b.getBytes(_password, "password"); + const salt = logger$b.getBytes(_salt, "salt"); + return hexlify(__pbkdf2(password, salt, iterations, keylen, algo)); +} +pbkdf2._ = _pbkdf2; +pbkdf2.lock = function () { locked$1 = true; }; +pbkdf2.register = function (func) { + if (locked$1) { + throw new Error("pbkdf2 is locked"); + } + __pbkdf2 = func; +}; +Object.freeze(pbkdf2); + +let locked = false; +const _randomBytes = function (length) { + return new Uint8Array(randomBytes$1(length)); +}; +let __randomBytes = _randomBytes; +function randomBytes(length) { + return __randomBytes(length); +} +randomBytes._ = _randomBytes; +randomBytes.lock = function () { locked = true; }; +randomBytes.register = function (func) { + if (locked) { + throw new Error("random is locked"); + } + __randomBytes = func; +}; +Object.freeze(randomBytes); + +// RFC 7914 Scrypt KDF +// Left rotate for uint32 +const rotl = (a, b) => (a << b) | (a >>> (32 - b)); +// The main Scrypt loop: uses Salsa extensively. +// Six versions of the function were tried, this is the fastest one. +// prettier-ignore +function XorAndSalsa(prev, pi, input, ii, out, oi) { + // Based on https://cr.yp.to/salsa20.html + // Xor blocks + let y00 = prev[pi++] ^ input[ii++], y01 = prev[pi++] ^ input[ii++]; + let y02 = prev[pi++] ^ input[ii++], y03 = prev[pi++] ^ input[ii++]; + let y04 = prev[pi++] ^ input[ii++], y05 = prev[pi++] ^ input[ii++]; + let y06 = prev[pi++] ^ input[ii++], y07 = prev[pi++] ^ input[ii++]; + let y08 = prev[pi++] ^ input[ii++], y09 = prev[pi++] ^ input[ii++]; + let y10 = prev[pi++] ^ input[ii++], y11 = prev[pi++] ^ input[ii++]; + let y12 = prev[pi++] ^ input[ii++], y13 = prev[pi++] ^ input[ii++]; + let y14 = prev[pi++] ^ input[ii++], y15 = prev[pi++] ^ input[ii++]; + // Save state to temporary variables (salsa) + let x00 = y00, x01 = y01, x02 = y02, x03 = y03, x04 = y04, x05 = y05, x06 = y06, x07 = y07, x08 = y08, x09 = y09, x10 = y10, x11 = y11, x12 = y12, x13 = y13, x14 = y14, x15 = y15; + // Main loop (salsa) + for (let i = 0; i < 8; i += 2) { + x04 ^= rotl(x00 + x12 | 0, 7); + x08 ^= rotl(x04 + x00 | 0, 9); + x12 ^= rotl(x08 + x04 | 0, 13); + x00 ^= rotl(x12 + x08 | 0, 18); + x09 ^= rotl(x05 + x01 | 0, 7); + x13 ^= rotl(x09 + x05 | 0, 9); + x01 ^= rotl(x13 + x09 | 0, 13); + x05 ^= rotl(x01 + x13 | 0, 18); + x14 ^= rotl(x10 + x06 | 0, 7); + x02 ^= rotl(x14 + x10 | 0, 9); + x06 ^= rotl(x02 + x14 | 0, 13); + x10 ^= rotl(x06 + x02 | 0, 18); + x03 ^= rotl(x15 + x11 | 0, 7); + x07 ^= rotl(x03 + x15 | 0, 9); + x11 ^= rotl(x07 + x03 | 0, 13); + x15 ^= rotl(x11 + x07 | 0, 18); + x01 ^= rotl(x00 + x03 | 0, 7); + x02 ^= rotl(x01 + x00 | 0, 9); + x03 ^= rotl(x02 + x01 | 0, 13); + x00 ^= rotl(x03 + x02 | 0, 18); + x06 ^= rotl(x05 + x04 | 0, 7); + x07 ^= rotl(x06 + x05 | 0, 9); + x04 ^= rotl(x07 + x06 | 0, 13); + x05 ^= rotl(x04 + x07 | 0, 18); + x11 ^= rotl(x10 + x09 | 0, 7); + x08 ^= rotl(x11 + x10 | 0, 9); + x09 ^= rotl(x08 + x11 | 0, 13); + x10 ^= rotl(x09 + x08 | 0, 18); + x12 ^= rotl(x15 + x14 | 0, 7); + x13 ^= rotl(x12 + x15 | 0, 9); + x14 ^= rotl(x13 + x12 | 0, 13); + x15 ^= rotl(x14 + x13 | 0, 18); + } + // Write output (salsa) + out[oi++] = (y00 + x00) | 0; + out[oi++] = (y01 + x01) | 0; + out[oi++] = (y02 + x02) | 0; + out[oi++] = (y03 + x03) | 0; + out[oi++] = (y04 + x04) | 0; + out[oi++] = (y05 + x05) | 0; + out[oi++] = (y06 + x06) | 0; + out[oi++] = (y07 + x07) | 0; + out[oi++] = (y08 + x08) | 0; + out[oi++] = (y09 + x09) | 0; + out[oi++] = (y10 + x10) | 0; + out[oi++] = (y11 + x11) | 0; + out[oi++] = (y12 + x12) | 0; + out[oi++] = (y13 + x13) | 0; + out[oi++] = (y14 + x14) | 0; + out[oi++] = (y15 + x15) | 0; +} +function BlockMix(input, ii, out, oi, r) { + // The block B is r 128-byte chunks (which is equivalent of 2r 64-byte chunks) + let head = oi + 0; + let tail = oi + 16 * r; + for (let i = 0; i < 16; i++) + out[tail + i] = input[ii + (2 * r - 1) * 16 + i]; // X ← B[2r−1] + for (let i = 0; i < r; i++, head += 16, ii += 16) { + // We write odd & even Yi at same time. Even: 0bXXXXX0 Odd: 0bXXXXX1 + XorAndSalsa(out, tail, input, ii, out, head); // head[i] = Salsa(blockIn[2*i] ^ tail[i-1]) + if (i > 0) + tail += 16; // First iteration overwrites tmp value in tail + XorAndSalsa(out, head, input, (ii += 16), out, tail); // tail[i] = Salsa(blockIn[2*i+1] ^ head[i]) + } +} +// Common prologue and epilogue for sync/async functions +function scryptInit(password, salt, _opts) { + // Maxmem - 1GB+1KB by default + const opts = checkOpts({ + dkLen: 32, + asyncTick: 10, + maxmem: 1024 ** 3 + 1024, + }, _opts); + const { N, r, p, dkLen, asyncTick, maxmem, onProgress } = opts; + assertNumber(N); + assertNumber(r); + assertNumber(p); + assertNumber(dkLen); + assertNumber(asyncTick); + assertNumber(maxmem); + if (onProgress !== undefined && typeof onProgress !== 'function') + throw new Error('progressCb should be function'); + const blockSize = 128 * r; + const blockSize32 = blockSize / 4; + if (N <= 1 || (N & (N - 1)) !== 0 || N >= 2 ** (blockSize / 8) || N > 2 ** 32) { + // NOTE: we limit N to be less than 2**32 because of 32 bit variant of Integrify function + // There is no JS engines that allows alocate more than 4GB per single Uint8Array for now, but can change in future. + throw new Error('Scrypt: N must be larger than 1, a power of 2, less than 2^(128 * r / 8) and less than 2^32'); + } + if (p < 0 || p > ((2 ** 32 - 1) * 32) / blockSize) { + throw new Error('Scrypt: p must be a positive integer less than or equal to ((2^32 - 1) * 32) / (128 * r)'); + } + if (dkLen < 0 || dkLen > (2 ** 32 - 1) * 32) { + throw new Error('Scrypt: dkLen should be positive integer less than or equal to (2^32 - 1) * 32'); + } + const memUsed = blockSize * (N + p); + if (memUsed > maxmem) { + throw new Error(`Scrypt: parameters too large, ${memUsed} (128 * r * (N + p)) > ${maxmem} (maxmem)`); + } + // [B0...Bp−1] ← PBKDF2HMAC-SHA256(Passphrase, Salt, 1, blockSize*ParallelizationFactor) + // Since it has only one iteration there is no reason to use async variant + const B = pbkdf2$1(sha256$1, password, salt, { c: 1, dkLen: blockSize * p }); + const B32 = u32(B); + // Re-used between parallel iterations. Array(iterations) of B + const V = u32(new Uint8Array(blockSize * N)); + const tmp = u32(new Uint8Array(blockSize)); + let blockMixCb = () => { }; + if (onProgress) { + const totalBlockMix = 2 * N * p; + // Invoke callback if progress changes from 10.01 to 10.02 + // Allows to draw smooth progress bar on up to 8K screen + const callbackPer = Math.max(Math.floor(totalBlockMix / 10000), 1); + let blockMixCnt = 0; + blockMixCb = () => { + blockMixCnt++; + if (onProgress && (!(blockMixCnt % callbackPer) || blockMixCnt === totalBlockMix)) + onProgress(blockMixCnt / totalBlockMix); + }; + } + return { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb, asyncTick }; +} +function scryptOutput(password, dkLen, B, V, tmp) { + const res = pbkdf2$1(sha256$1, password, B, { c: 1, dkLen }); + B.fill(0); + V.fill(0); + tmp.fill(0); + return res; +} +/** + * Scrypt KDF from RFC 7914. + * @param password - pass + * @param salt - salt + * @param opts - parameters + * - `N` is cpu/mem work factor (power of 2 e.g. 2**18) + * - `r` is block size (8 is common), fine-tunes sequential memory read size and performance + * - `p` is parallelization factor (1 is common) + * - `dkLen` is output key length in bytes e.g. 32. + * - `asyncTick` - (default: 10) max time in ms for which async function can block execution + * - `maxmem` - (default: `1024 ** 3 + 1024` aka 1GB+1KB). A limit that the app could use for scrypt + * - `onProgress` - callback function that would be executed for progress report + * @returns Derived key + */ +function scrypt$1(password, salt, opts) { + const { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb } = scryptInit(password, salt, opts); + for (let pi = 0; pi < p; pi++) { + const Pi = blockSize32 * pi; + for (let i = 0; i < blockSize32; i++) + V[i] = B32[Pi + i]; // V[0] = B[i] + for (let i = 0, pos = 0; i < N - 1; i++) { + BlockMix(V, pos, V, (pos += blockSize32), r); // V[i] = BlockMix(V[i-1]); + blockMixCb(); + } + BlockMix(V, (N - 1) * blockSize32, B32, Pi, r); // Process last element + blockMixCb(); + for (let i = 0; i < N; i++) { + // First u32 of the last 64-byte block (u32 is LE) + const j = B32[Pi + blockSize32 - 16] % N; // j = Integrify(X) % iterations + for (let k = 0; k < blockSize32; k++) + tmp[k] = B32[Pi + k] ^ V[j * blockSize32 + k]; // tmp = B ^ V[j] + BlockMix(tmp, 0, B32, Pi, r); // B = BlockMix(B ^ V[j]) + blockMixCb(); + } + } + return scryptOutput(password, dkLen, B, V, tmp); +} +/** + * Scrypt KDF from RFC 7914. + */ +async function scryptAsync(password, salt, opts) { + const { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb, asyncTick } = scryptInit(password, salt, opts); + for (let pi = 0; pi < p; pi++) { + const Pi = blockSize32 * pi; + for (let i = 0; i < blockSize32; i++) + V[i] = B32[Pi + i]; // V[0] = B[i] + let pos = 0; + await asyncLoop(N - 1, asyncTick, (i) => { + BlockMix(V, pos, V, (pos += blockSize32), r); // V[i] = BlockMix(V[i-1]); + blockMixCb(); + }); + BlockMix(V, (N - 1) * blockSize32, B32, Pi, r); // Process last element + blockMixCb(); + await asyncLoop(N, asyncTick, (i) => { + // First u32 of the last 64-byte block (u32 is LE) + const j = B32[Pi + blockSize32 - 16] % N; // j = Integrify(X) % iterations + for (let k = 0; k < blockSize32; k++) + tmp[k] = B32[Pi + k] ^ V[j * blockSize32 + k]; // tmp = B ^ V[j] + BlockMix(tmp, 0, B32, Pi, r); // B = BlockMix(B ^ V[j]) + blockMixCb(); + }); + } + return scryptOutput(password, dkLen, B, V, tmp); +} + +let lockedSync = false, lockedAsync = false; +const _scryptAsync = async function (passwd, salt, N, r, p, dkLen, onProgress) { + return await scryptAsync(passwd, salt, { N, r, p, dkLen, onProgress }); +}; +const _scryptSync = function (passwd, salt, N, r, p, dkLen) { + return scrypt$1(passwd, salt, { N, r, p, dkLen }); +}; +let __scryptAsync = _scryptAsync; +let __scryptSync = _scryptSync; +async function scrypt(_passwd, _salt, N, r, p, dkLen, progress) { + const passwd = logger$b.getBytes(_passwd, "passwd"); + const salt = logger$b.getBytes(_salt, "salt"); + return hexlify(await __scryptAsync(passwd, salt, N, r, p, dkLen, progress)); +} +scrypt._ = _scryptAsync; +scrypt.lock = function () { lockedAsync = true; }; +scrypt.register = function (func) { + if (lockedAsync) { + throw new Error("scrypt is locked"); + } + __scryptAsync = func; +}; +Object.freeze(scrypt); +function scryptSync(_passwd, _salt, N, r, p, dkLen) { + const passwd = logger$b.getBytes(_passwd, "passwd"); + const salt = logger$b.getBytes(_salt, "salt"); + return hexlify(__scryptSync(passwd, salt, N, r, p, dkLen)); +} +scryptSync._ = _scryptSync; +scryptSync.lock = function () { lockedSync = true; }; +scryptSync.register = function (func) { + if (lockedSync) { + throw new Error("scryptSync is locked"); + } + __scryptSync = func; +}; +Object.freeze(scryptSync); + +const _sha256 = function (data) { + return createHash("sha256").update(data).digest(); +}; +const _sha512 = function (data) { + return createHash("sha512").update(data).digest(); +}; +let __sha256 = _sha256; +let __sha512 = _sha512; +let locked256 = false, locked512 = false; +function sha256(_data) { + const data = logger$b.getBytes(_data, "data"); + return hexlify(__sha256(data)); +} +sha256._ = _sha256; +sha256.lock = function () { locked256 = true; }; +sha256.register = function (func) { + if (locked256) { + throw new Error("sha256 is locked"); + } + __sha256 = func; +}; +Object.freeze(sha256); +function sha512(_data) { + const data = logger$b.getBytes(_data, "data"); + return hexlify(__sha512(data)); +} +sha512._ = _sha512; +sha512.lock = function () { locked512 = true; }; +sha512.register = function (func) { + if (locked512) { + throw new Error("sha512 is locked"); + } + __sha512 = func; +}; +Object.freeze(sha256); + +// We import all these so we can export lock() +function lock() { + computeHmac.lock(); + keccak256.lock(); + pbkdf2.lock(); + randomBytes.lock(); + ripemd160.lock(); + scrypt.lock(); + scryptSync.lock(); + sha256.lock(); + sha512.lock(); +} + +const version$b = "@ethersproject/address@6.0.0-beta.1"; + +const logger$a = new Logger(version$b); + +const BN_0$4 = BigInt(0); +const BN_36 = BigInt(36); +function getChecksumAddress(address) { + // if (!isHexString(address, 20)) { + // logger.throwArgumentError("invalid address", "address", address); + // } + address = address.toLowerCase(); + const chars = address.substring(2).split(""); + const expanded = new Uint8Array(40); + for (let i = 0; i < 40; i++) { + expanded[i] = chars[i].charCodeAt(0); + } + const hashed = arrayify(keccak256(expanded)); + for (let i = 0; i < 40; i += 2) { + if ((hashed[i >> 1] >> 4) >= 8) { + chars[i] = chars[i].toUpperCase(); + } + if ((hashed[i >> 1] & 0x0f) >= 8) { + chars[i + 1] = chars[i + 1].toUpperCase(); + } + } + return "0x" + chars.join(""); +} +// See: https://en.wikipedia.org/wiki/International_Bank_Account_Number +// Create lookup table +const ibanLookup = {}; +for (let i = 0; i < 10; i++) { + ibanLookup[String(i)] = String(i); +} +for (let i = 0; i < 26; i++) { + ibanLookup[String.fromCharCode(65 + i)] = String(10 + i); +} +// How many decimal digits can we process? (for 64-bit float, this is 15) +// i.e. Math.floor(Math.log10(Number.MAX_SAFE_INTEGER)); +const safeDigits = 15; +function ibanChecksum(address) { + address = address.toUpperCase(); + address = address.substring(4) + address.substring(0, 2) + "00"; + let expanded = address.split("").map((c) => { return ibanLookup[c]; }).join(""); + // Javascript can handle integers safely up to 15 (decimal) digits + while (expanded.length >= safeDigits) { + let block = expanded.substring(0, safeDigits); + expanded = parseInt(block, 10) % 97 + expanded.substring(block.length); + } + let checksum = String(98 - (parseInt(expanded, 10) % 97)); + while (checksum.length < 2) { + checksum = "0" + checksum; + } + return checksum; +} +const Base36 = (function () { + const result = {}; + for (let i = 0; i < 36; i++) { + const key = "0123456789abcdefghijklmnopqrstuvwxyz"[i]; + result[key] = BigInt(i); + } + return result; +})(); +function fromBase36(value) { + value = value.toLowerCase(); + let result = BN_0$4; + for (let i = 0; i < value.length; i++) { + result = result * BN_36 + Base36[value[i]]; + } + return result; +} +function getAddress(address) { + if (typeof (address) !== "string") { + logger$a.throwArgumentError("invalid address", "address", address); + } + if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) { + // Missing the 0x prefix + if (address.substring(0, 2) !== "0x") { + address = "0x" + address; + } + const result = getChecksumAddress(address); + // It is a checksummed address with a bad checksum + if (address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) && result !== address) { + logger$a.throwArgumentError("bad address checksum", "address", address); + } + return result; + } + // Maybe ICAP? (we only support direct mode) + if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) { + // It is an ICAP address with a bad checksum + if (address.substring(2, 4) !== ibanChecksum(address)) { + logger$a.throwArgumentError("bad icap checksum", "address", address); + } + let result = fromBase36(address.substring(4)).toString(16); + while (result.length < 40) { + result = "0" + result; + } + return getChecksumAddress("0x" + result); + } + return logger$a.throwArgumentError("invalid address", "address", address); +} +function getIcapAddress(address) { + //let base36 = _base16To36(getAddress(address).substring(2)).toUpperCase(); + let base36 = BigInt(getAddress(address)).toString(36).toUpperCase(); + while (base36.length < 30) { + base36 = "0" + base36; + } + return "XE" + ibanChecksum("XE00" + base36) + base36; +} + +const version$a = "@ethersproject/rlp@6.0.0-beta.1"; + +const logger$9 = new Logger(version$a); + +//See: https://github.com/ethereum/wiki/wiki/RLP +function arrayifyInteger(value) { + const result = []; + while (value) { + result.unshift(value & 0xff); + value >>= 8; + } + return result; +} +function _encode(object) { + if (Array.isArray(object)) { + let payload = []; + object.forEach(function (child) { + payload = payload.concat(_encode(child)); + }); + if (payload.length <= 55) { + payload.unshift(0xc0 + payload.length); + return payload; + } + const length = arrayifyInteger(payload.length); + length.unshift(0xf7 + length.length); + return length.concat(payload); + } + const data = Array.prototype.slice.call(logger$9.getBytes(object, "object")); + if (data.length === 1 && data[0] <= 0x7f) { + return data; + } + else if (data.length <= 55) { + data.unshift(0x80 + data.length); + return data; + } + const length = arrayifyInteger(data.length); + length.unshift(0xb7 + length.length); + return length.concat(data); +} +const nibbles = "0123456789abcdef"; +function encodeRlp(object) { + let result = "0x"; + for (const v of _encode(object)) { + result += nibbles[v >> 4]; + result += nibbles[v & 0xf]; + } + return result; +} + +//See: https://github.com/ethereum/wiki/wiki/RLP +function hexlifyByte(value) { + let result = value.toString(16); + while (result.length < 2) { + result = "0" + result; + } + return "0x" + result; +} +function unarrayifyInteger(data, offset, length) { + let result = 0; + for (let i = 0; i < length; i++) { + result = (result * 256) + data[offset + i]; + } + return result; +} +function _decodeChildren(data, offset, childOffset, length) { + const result = []; + while (childOffset < offset + 1 + length) { + const decoded = _decode(data, childOffset); + result.push(decoded.result); + childOffset += decoded.consumed; + if (childOffset > offset + 1 + length) { + logger$9.throwError("child data too short", "BUFFER_OVERRUN", { + buffer: data, length, offset + }); + } + } + return { consumed: (1 + length), result: result }; +} +// returns { consumed: number, result: Object } +function _decode(data, offset) { + if (data.length === 0) { + logger$9.throwError("data too short", "BUFFER_OVERRUN", { + buffer: data, length: 0, offset: 1 + }); + } + const checkOffset = (offset) => { + if (offset > data.length) { + logger$9.throwError("data short segment too short", "BUFFER_OVERRUN", { + buffer: data, length: data.length, offset + }); + } + }; + // Array with extra length prefix + if (data[offset] >= 0xf8) { + const lengthLength = data[offset] - 0xf7; + checkOffset(offset + 1 + lengthLength); + const length = unarrayifyInteger(data, offset + 1, lengthLength); + checkOffset(offset + 1 + lengthLength + length); + return _decodeChildren(data, offset, offset + 1 + lengthLength, lengthLength + length); + } + else if (data[offset] >= 0xc0) { + const length = data[offset] - 0xc0; + checkOffset(offset + 1 + length); + return _decodeChildren(data, offset, offset + 1, length); + } + else if (data[offset] >= 0xb8) { + const lengthLength = data[offset] - 0xb7; + checkOffset(offset + 1 + lengthLength); + const length = unarrayifyInteger(data, offset + 1, lengthLength); + checkOffset(offset + 1 + lengthLength + length); + const result = hexlify(data.slice(offset + 1 + lengthLength, offset + 1 + lengthLength + length)); + return { consumed: (1 + lengthLength + length), result: result }; + } + else if (data[offset] >= 0x80) { + const length = data[offset] - 0x80; + checkOffset(offset + 1 + length); + const result = hexlify(data.slice(offset + 1, offset + 1 + length)); + return { consumed: (1 + length), result: result }; + } + return { consumed: 1, result: hexlifyByte(data[offset]) }; +} +function decodeRlp(_data) { + const data = logger$9.getBytes(_data, "data"); + const decoded = _decode(data, 0); + if (decoded.consumed !== data.length) { + logger$9.throwArgumentError("unexpected junk after rlp payload", "data", _data); + } + return decoded.result; +} + +// http://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed +function getCreateAddress(tx) { + const from = getAddress(tx.from); + const nonce = logger$a.getBigInt(tx.nonce, "tx.nonce"); + let nonceHex = nonce.toString(16); + if (nonceHex === "0") { + nonceHex = "0x"; + } + else if (nonceHex.length % 2) { + nonceHex = "0x0" + nonceHex; + } + else { + nonceHex = "0x" + nonceHex; + } + return getAddress(dataSlice(keccak256(encodeRlp([from, nonceHex])), 12)); +} +function getCreate2Address(_from, _salt, _initCodeHash) { + const from = getAddress(_from); + const salt = logger$a.getBytes(_salt, "salt"); + const initCodeHash = logger$a.getBytes(_initCodeHash, "initCodeHash"); + if (salt.length !== 32) { + logger$a.throwArgumentError("salt must be 32 bytes", "salt", _salt); + } + if (initCodeHash.length !== 32) { + logger$a.throwArgumentError("initCodeHash must be 32 bytes", "initCodeHash", _initCodeHash); + } + return getAddress(dataSlice(keccak256(concat(["0xff", from, salt, initCodeHash])), 12)); +} + +function isAddressable(value) { + return (value && typeof (value.getAddress) === "function"); +} +function isAddress(value) { + try { + getAddress(value); + return true; + } + catch (error) { } + return false; +} +// Resolves an Ethereum address, ENS name or Addressable object, +// throwing if the result is null; an explicit null returns null +//export async function resolveAddress(target?: null, resolver?: null | NameResolver): Promise; +//export async function resolveAddress(target: string | Addressable, resolver?: null | NameResolver): Promise; +//export async function resolveAddress(target: null | undefined | string | Addressable, resolver?: null | NameResolver) { +async function resolveAddress(target, resolver) { + //if (target == null) { return null; } + if (typeof (target) === "string") { + if (target.match(/^0x[0-9a-f]{40}$/i)) { + return getAddress(target); + } + if (resolver == null) { + return logger$a.throwError("ENS resolution requires a provider", "UNSUPPORTED_OPERATION", { + operation: "resolveName", + }); + } + const result = await resolver.resolveName(target); + if (result == null || result === "0x0000000000000000000000000000000000000000") { + return logger$a.throwError("unconfigured name", "UNCONFIGURED_NAME", { value: target }); + } + return getAddress(result); + } + else if (isAddressable(target)) { + const result = await target.getAddress(); + if (result == null) { + logger$a.throwArgumentError("addressable resolved to null", "target", target); + } + return getAddress(result); + } + return logger$a.throwArgumentError("unsupported addressable value", "target", target); +} + +var __classPrivateFieldSet$t = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$u = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _Typed_options; +const _gaurd = {}; +function n(value, width) { + let signed = false; + if (width < 0) { + signed = true; + width *= -1; + } + // @TODO: Check range is valid for value + return new Typed(_gaurd, `${signed ? "" : "u"}int${width}`, value, { signed, width }); +} +function b(value, size) { + // @TODO: Check range is valid for value + return new Typed(_gaurd, `bytes${(size) ? size : ""}`, value, { size }); +} +const _typedSymbol = Symbol.for("_ethers_typed"); +class Typed { + constructor(gaurd, type, value, options = null) { + _Typed_options.set(this, void 0); + if (gaurd !== _gaurd) { + throw new Error("private constructor"); + } + defineProperties(this, { _typedSymbol, type, value }); + __classPrivateFieldSet$t(this, _Typed_options, options, "f"); + // Check the value is valid + this.format(); + } + format() { + if (this.type === "array") { + throw new Error(""); + } + else if (this.type === "dynamicArray") { + throw new Error(""); + } + else if (this.type === "tuple") { + return `tuple(${this.value.map((v) => v.format()).join(",")})`; + } + return this.type; + } + defaultValue() { + return 0; + } + minValue() { + return 0; + } + maxValue() { + return 0; + } + isBigInt() { + return !!(this.type.match(/^u?int[0-9]+$/)); + } + isData() { + return (this.type.substring(0, 5) === "bytes"); + } + isString() { + return (this.type === "string"); + } + get tupleName() { + if (this.type !== "tuple") { + throw TypeError("not a tuple"); + } + return __classPrivateFieldGet$u(this, _Typed_options, "f"); + } + // Returns the length of this type as an array + // - `null` indicates the length is unforced, it could be dynamic + // - `-1` indicates the length is dynamic + // - any other value indicates it is a static array and is its length + get arrayLength() { + if (this.type !== "array") { + throw TypeError("not an array"); + } + if (__classPrivateFieldGet$u(this, _Typed_options, "f") === true) { + return -1; + } + if (__classPrivateFieldGet$u(this, _Typed_options, "f") === false) { + return (this.value).length; + } + return null; + } + static from(type, value) { + return new Typed(_gaurd, type, value); + } + static uint8(v) { return n(v, 8); } + static uint16(v) { return n(v, 16); } + static uint24(v) { return n(v, 24); } + static uint32(v) { return n(v, 32); } + static uint40(v) { return n(v, 40); } + static uint48(v) { return n(v, 46); } + static uint56(v) { return n(v, 56); } + static uint64(v) { return n(v, 64); } + static uint72(v) { return n(v, 72); } + static uint80(v) { return n(v, 80); } + static uint88(v) { return n(v, 88); } + static uint96(v) { return n(v, 96); } + static uint104(v) { return n(v, 104); } + static uint112(v) { return n(v, 112); } + static uint120(v) { return n(v, 120); } + static uint128(v) { return n(v, 128); } + static uint136(v) { return n(v, 136); } + static uint144(v) { return n(v, 144); } + static uint152(v) { return n(v, 152); } + static uint160(v) { return n(v, 160); } + static uint168(v) { return n(v, 168); } + static uint176(v) { return n(v, 176); } + static uint184(v) { return n(v, 184); } + static uint192(v) { return n(v, 192); } + static uint200(v) { return n(v, 200); } + static uint208(v) { return n(v, 208); } + static uint216(v) { return n(v, 216); } + static uint224(v) { return n(v, 224); } + static uint232(v) { return n(v, 232); } + static uint240(v) { return n(v, 240); } + static uint248(v) { return n(v, 248); } + static uint256(v) { return n(v, 256); } + static uint(v) { return n(v, 256); } + static int8(v) { return n(v, -8); } + static int16(v) { return n(v, -16); } + static int24(v) { return n(v, -24); } + static int32(v) { return n(v, -32); } + static int40(v) { return n(v, -40); } + static int48(v) { return n(v, -46); } + static int56(v) { return n(v, -56); } + static int64(v) { return n(v, -64); } + static int72(v) { return n(v, -72); } + static int80(v) { return n(v, -80); } + static int88(v) { return n(v, -88); } + static int96(v) { return n(v, -96); } + static int104(v) { return n(v, -104); } + static int112(v) { return n(v, -112); } + static int120(v) { return n(v, -120); } + static int128(v) { return n(v, -128); } + static int136(v) { return n(v, -136); } + static int144(v) { return n(v, -144); } + static int152(v) { return n(v, -152); } + static int160(v) { return n(v, -160); } + static int168(v) { return n(v, -168); } + static int176(v) { return n(v, -176); } + static int184(v) { return n(v, -184); } + static int192(v) { return n(v, -192); } + static int200(v) { return n(v, -200); } + static int208(v) { return n(v, -208); } + static int216(v) { return n(v, -216); } + static int224(v) { return n(v, -224); } + static int232(v) { return n(v, -232); } + static int240(v) { return n(v, -240); } + static int248(v) { return n(v, -248); } + static int256(v) { return n(v, -256); } + static int(v) { return n(v, -256); } + static bytes(v) { return b(v); } + static bytes1(v) { return b(v, 1); } + static bytes2(v) { return b(v, 2); } + static bytes3(v) { return b(v, 3); } + static bytes4(v) { return b(v, 4); } + static bytes5(v) { return b(v, 5); } + static bytes6(v) { return b(v, 6); } + static bytes7(v) { return b(v, 7); } + static bytes8(v) { return b(v, 8); } + static bytes9(v) { return b(v, 9); } + static bytes10(v) { return b(v, 10); } + static bytes11(v) { return b(v, 11); } + static bytes12(v) { return b(v, 12); } + static bytes13(v) { return b(v, 13); } + static bytes14(v) { return b(v, 14); } + static bytes15(v) { return b(v, 15); } + static bytes16(v) { return b(v, 16); } + static bytes17(v) { return b(v, 17); } + static bytes18(v) { return b(v, 18); } + static bytes19(v) { return b(v, 19); } + static bytes20(v) { return b(v, 20); } + static bytes21(v) { return b(v, 21); } + static bytes22(v) { return b(v, 22); } + static bytes23(v) { return b(v, 23); } + static bytes24(v) { return b(v, 24); } + static bytes25(v) { return b(v, 25); } + static bytes26(v) { return b(v, 26); } + static bytes27(v) { return b(v, 27); } + static bytes28(v) { return b(v, 28); } + static bytes29(v) { return b(v, 29); } + static bytes30(v) { return b(v, 30); } + static bytes31(v) { return b(v, 31); } + static bytes32(v) { return b(v, 32); } + static address(v) { return new Typed(_gaurd, "address", v); } + static bool(v) { return new Typed(_gaurd, "bool", !!v); } + static string(v) { return new Typed(_gaurd, "string", v); } + static array(v, dynamic) { + throw new Error("not implemented yet"); + } + static tuple(v, name) { + throw new Error("not implemented yet"); + } + static overrides(v) { + return new Typed(_gaurd, "overrides", Object.assign({}, v)); + } + static isTyped(value) { + return (value && value._typedSymbol === _typedSymbol); + } + static dereference(value, type) { + if (Typed.isTyped(value)) { + if (value.type !== type) { + throw new Error(`invalid type: expecetd ${type}, got ${value.type}`); + } + return value.value; + } + return value; + } +} +_Typed_options = new WeakMap(); + +class AddressCoder extends Coder { + constructor(localName) { + super("address", "address", localName, false); + } + defaultValue() { + return "0x0000000000000000000000000000000000000000"; + } + encode(writer, _value) { + let value = Typed.dereference(_value, "string"); + try { + value = getAddress(value); + } + catch (error) { + return this._throwError(error.message, _value); + } + return writer.writeValue(value); + } + decode(reader) { + return getAddress(toHex(reader.readValue(), 20)); + } +} + +// Clones the functionality of an existing Coder, but without a localName +class AnonymousCoder extends Coder { + constructor(coder) { + super(coder.name, coder.type, "_", coder.dynamic); + this.coder = coder; + } + defaultValue() { + return this.coder.defaultValue(); + } + encode(writer, value) { + return this.coder.encode(writer, value); + } + decode(reader) { + return this.coder.decode(reader); + } +} + +function pack(writer, coders, values) { + let arrayValues = []; + if (Array.isArray(values)) { + arrayValues = values; + } + else if (values && typeof (values) === "object") { + let unique = {}; + arrayValues = coders.map((coder) => { + const name = coder.localName; + if (!name) { + logger$e.throwError("cannot encode object for signature with missing names", "INVALID_ARGUMENT", { + argument: "values", + info: { coder }, + value: values + }); + } + if (unique[name]) { + logger$e.throwError("cannot encode object for signature with duplicate names", "INVALID_ARGUMENT", { + argument: "values", + info: { coder }, + value: values + }); + } + unique[name] = true; + return values[name]; + }); + } + else { + logger$e.throwArgumentError("invalid tuple value", "tuple", values); + } + if (coders.length !== arrayValues.length) { + logger$e.throwArgumentError("types/value length mismatch", "tuple", values); + } + let staticWriter = new Writer(); + let dynamicWriter = new Writer(); + let updateFuncs = []; + coders.forEach((coder, index) => { + let value = arrayValues[index]; + if (coder.dynamic) { + // Get current dynamic offset (for the future pointer) + let dynamicOffset = dynamicWriter.length; + // Encode the dynamic value into the dynamicWriter + coder.encode(dynamicWriter, value); + // Prepare to populate the correct offset once we are done + let updateFunc = staticWriter.writeUpdatableValue(); + updateFuncs.push((baseOffset) => { + updateFunc(baseOffset + dynamicOffset); + }); + } + else { + coder.encode(staticWriter, value); + } + }); + // Backfill all the dynamic offsets, now that we know the static length + updateFuncs.forEach((func) => { func(staticWriter.length); }); + let length = writer.appendWriter(staticWriter); + length += writer.appendWriter(dynamicWriter); + return length; +} +function unpack(reader, coders) { + let values = []; + let keys = []; + // A reader anchored to this base + let baseReader = reader.subReader(0); + coders.forEach((coder) => { + let value = null; + if (coder.dynamic) { + let offset = reader.readIndex(); + let offsetReader = baseReader.subReader(offset); + try { + value = coder.decode(offsetReader); + } + catch (error) { + // Cannot recover from this + if (isError(error, "BUFFER_OVERRUN")) { + throw error; + } + value = error; + value.baseType = coder.name; + value.name = coder.localName; + value.type = coder.type; + } + } + else { + try { + value = coder.decode(reader); + } + catch (error) { + // Cannot recover from this + if (isError(error, "BUFFER_OVERRUN")) { + throw error; + } + value = error; + value.baseType = coder.name; + value.name = coder.localName; + value.type = coder.type; + } + } + if (value == undefined) { + throw new Error("investigate"); + } + values.push(value); + keys.push(coder.localName || null); + }); + return Result.fromItems(values, keys); +} +class ArrayCoder extends Coder { + constructor(coder, length, localName) { + const type = (coder.type + "[" + (length >= 0 ? length : "") + "]"); + const dynamic = (length === -1 || coder.dynamic); + super("array", type, localName, dynamic); + defineProperties(this, { coder, length }); + } + defaultValue() { + // Verifies the child coder is valid (even if the array is dynamic or 0-length) + const defaultChild = this.coder.defaultValue(); + const result = []; + for (let i = 0; i < this.length; i++) { + result.push(defaultChild); + } + return result; + } + encode(writer, _value) { + const value = Typed.dereference(_value, "array"); + if (!Array.isArray(value)) { + this._throwError("expected array value", value); + } + let count = this.length; + if (count === -1) { + count = value.length; + writer.writeValue(value.length); + } + logger$e.assertArgumentCount(value.length, count, "coder array" + (this.localName ? (" " + this.localName) : "")); + let coders = []; + for (let i = 0; i < value.length; i++) { + coders.push(this.coder); + } + return pack(writer, coders, value); + } + decode(reader) { + let count = this.length; + if (count === -1) { + count = reader.readIndex(); + // Check that there is *roughly* enough data to ensure + // stray random data is not being read as a length. Each + // slot requires at least 32 bytes for their value (or 32 + // bytes as a link to the data). This could use a much + // tighter bound, but we are erroring on the side of safety. + if (count * WordSize > reader.dataLength) { + logger$e.throwError("insufficient data length", "BUFFER_OVERRUN", { + buffer: reader.bytes, + offset: count * WordSize, + length: reader.dataLength + }); + } + } + let coders = []; + for (let i = 0; i < count; i++) { + coders.push(new AnonymousCoder(this.coder)); + } + return reader.coerce(this.name, unpack(reader, coders)); + } +} + +class BooleanCoder extends Coder { + constructor(localName) { + super("bool", "bool", localName, false); + } + defaultValue() { + return false; + } + encode(writer, _value) { + const value = Typed.dereference(_value, "bool"); + return writer.writeValue(value ? 1 : 0); + } + decode(reader) { + return reader.coerce(this.type, !reader.readValue()); + } +} + +class DynamicBytesCoder extends Coder { + constructor(type, localName) { + super(type, type, localName, true); + } + defaultValue() { + return "0x"; + } + encode(writer, value) { + value = arrayify(value); + let length = writer.writeValue(value.length); + length += writer.writeBytes(value); + return length; + } + decode(reader) { + return reader.readBytes(reader.readIndex(), true); + } +} +class BytesCoder extends DynamicBytesCoder { + constructor(localName) { + super("bytes", localName); + } + decode(reader) { + return reader.coerce(this.name, hexlify(super.decode(reader))); + } +} + +class FixedBytesCoder extends Coder { + constructor(size, localName) { + let name = "bytes" + String(size); + super(name, name, localName, false); + defineProperties(this, { size }, { size: "number" }); + } + defaultValue() { + return ("0x0000000000000000000000000000000000000000000000000000000000000000").substring(0, 2 + this.size * 2); + } + encode(writer, _value) { + let data = arrayify(Typed.dereference(_value, this.type)); + if (data.length !== this.size) { + this._throwError("incorrect data length", _value); + } + return writer.writeBytes(data); + } + decode(reader) { + return reader.coerce(this.name, hexlify(reader.readBytes(this.size))); + } +} + +const Empty$1 = new Uint8Array([]); +class NullCoder extends Coder { + constructor(localName) { + super("null", "", localName, false); + } + defaultValue() { + return null; + } + encode(writer, value) { + if (value != null) { + this._throwError("not null", value); + } + return writer.writeBytes(Empty$1); + } + decode(reader) { + reader.readBytes(0); + return reader.coerce(this.name, null); + } +} + +const BN_0$3 = BigInt(0); +const BN_1$4 = BigInt(1); +const BN_MAX_UINT256$2 = BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); +class NumberCoder extends Coder { + constructor(size, signed, localName) { + const name = ((signed ? "int" : "uint") + (size * 8)); + super(name, name, localName, false); + defineProperties(this, { size, signed }, { size: "number", signed: "boolean" }); + } + defaultValue() { + return 0; + } + encode(writer, _value) { + let value = logger$e.getBigInt(Typed.dereference(_value, this.type)); + // Check bounds are safe for encoding + let maxUintValue = mask(BN_MAX_UINT256$2, WordSize * 8); + if (this.signed) { + let bounds = mask(maxUintValue, (this.size * 8) - 1); + if (value > bounds || value < -(bounds + BN_1$4)) { + this._throwError("value out-of-bounds", _value); + } + } + else if (value < BN_0$3 || value > mask(maxUintValue, this.size * 8)) { + this._throwError("value out-of-bounds", _value); + } + value = mask(toTwos(value, this.size * 8), this.size * 8); + if (this.signed) { + value = toTwos(fromTwos(value, this.size * 8), 8 * WordSize); + } + return writer.writeValue(value); + } + decode(reader) { + let value = mask(reader.readValue(), this.size * 8); + if (this.signed) { + value = fromTwos(value, this.size * 8); + } + return reader.coerce(this.name, value); + } +} + +const version$9 = "@ethersproject/strings@6.0.0-beta.1"; + +const logger$8 = new Logger(version$9); + +/////////////////////////////// +var UnicodeNormalizationForm; +(function (UnicodeNormalizationForm) { + UnicodeNormalizationForm["current"] = ""; + UnicodeNormalizationForm["NFC"] = "NFC"; + UnicodeNormalizationForm["NFD"] = "NFD"; + UnicodeNormalizationForm["NFKC"] = "NFKC"; + UnicodeNormalizationForm["NFKD"] = "NFKD"; +})(UnicodeNormalizationForm || (UnicodeNormalizationForm = {})); +var Utf8ErrorReason; +(function (Utf8ErrorReason) { + // A continuation byte was present where there was nothing to continue + // - offset = the index the codepoint began in + Utf8ErrorReason["UNEXPECTED_CONTINUE"] = "unexpected continuation byte"; + // An invalid (non-continuation) byte to start a UTF-8 codepoint was found + // - offset = the index the codepoint began in + Utf8ErrorReason["BAD_PREFIX"] = "bad codepoint prefix"; + // The string is too short to process the expected codepoint + // - offset = the index the codepoint began in + Utf8ErrorReason["OVERRUN"] = "string overrun"; + // A missing continuation byte was expected but not found + // - offset = the index the continuation byte was expected at + Utf8ErrorReason["MISSING_CONTINUE"] = "missing continuation byte"; + // The computed code point is outside the range for UTF-8 + // - offset = start of this codepoint + // - badCodepoint = the computed codepoint; outside the UTF-8 range + Utf8ErrorReason["OUT_OF_RANGE"] = "out of UTF-8 range"; + // UTF-8 strings may not contain UTF-16 surrogate pairs + // - offset = start of this codepoint + // - badCodepoint = the computed codepoint; inside the UTF-16 surrogate range + Utf8ErrorReason["UTF16_SURROGATE"] = "UTF-16 surrogate"; + // The string is an overlong representation + // - offset = start of this codepoint + // - badCodepoint = the computed codepoint; already bounds checked + Utf8ErrorReason["OVERLONG"] = "overlong representation"; +})(Utf8ErrorReason || (Utf8ErrorReason = {})); +function errorFunc(reason, offset, bytes, output, badCodepoint) { + return logger$8.throwArgumentError(`invalid codepoint at offset ${offset}; ${reason}`, "bytes", bytes); +} +function ignoreFunc(reason, offset, bytes, output, badCodepoint) { + // If there is an invalid prefix (including stray continuation), skip any additional continuation bytes + if (reason === Utf8ErrorReason.BAD_PREFIX || reason === Utf8ErrorReason.UNEXPECTED_CONTINUE) { + let i = 0; + for (let o = offset + 1; o < bytes.length; o++) { + if (bytes[o] >> 6 !== 0x02) { + break; + } + i++; + } + return i; + } + // This byte runs us past the end of the string, so just jump to the end + // (but the first byte was read already read and therefore skipped) + if (reason === Utf8ErrorReason.OVERRUN) { + return bytes.length - offset - 1; + } + // Nothing to skip + return 0; +} +function replaceFunc(reason, offset, bytes, output, badCodepoint) { + // Overlong representations are otherwise "valid" code points; just non-deistingtished + if (reason === Utf8ErrorReason.OVERLONG) { + output.push((badCodepoint != null) ? badCodepoint : -1); + return 0; + } + // Put the replacement character into the output + output.push(0xfffd); + // Otherwise, process as if ignoring errors + return ignoreFunc(reason, offset, bytes); +} +// Common error handing strategies +const Utf8ErrorFuncs = Object.freeze({ + error: errorFunc, + ignore: ignoreFunc, + replace: replaceFunc +}); +// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499 +function getUtf8CodePoints(_bytes, onError) { + if (onError == null) { + onError = Utf8ErrorFuncs.error; + } + const bytes = logger$8.getBytes(_bytes, "bytes"); + const result = []; + let i = 0; + // Invalid bytes are ignored + while (i < bytes.length) { + const c = bytes[i++]; + // 0xxx xxxx + if (c >> 7 === 0) { + result.push(c); + continue; + } + // Multibyte; how many bytes left for this character? + let extraLength = null; + let overlongMask = null; + // 110x xxxx 10xx xxxx + if ((c & 0xe0) === 0xc0) { + extraLength = 1; + overlongMask = 0x7f; + // 1110 xxxx 10xx xxxx 10xx xxxx + } + else if ((c & 0xf0) === 0xe0) { + extraLength = 2; + overlongMask = 0x7ff; + // 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx + } + else if ((c & 0xf8) === 0xf0) { + extraLength = 3; + overlongMask = 0xffff; + } + else { + if ((c & 0xc0) === 0x80) { + i += onError(Utf8ErrorReason.UNEXPECTED_CONTINUE, i - 1, bytes, result); + } + else { + i += onError(Utf8ErrorReason.BAD_PREFIX, i - 1, bytes, result); + } + continue; + } + // Do we have enough bytes in our data? + if (i - 1 + extraLength >= bytes.length) { + i += onError(Utf8ErrorReason.OVERRUN, i - 1, bytes, result); + continue; + } + // Remove the length prefix from the char + let res = c & ((1 << (8 - extraLength - 1)) - 1); + for (let j = 0; j < extraLength; j++) { + let nextChar = bytes[i]; + // Invalid continuation byte + if ((nextChar & 0xc0) != 0x80) { + i += onError(Utf8ErrorReason.MISSING_CONTINUE, i, bytes, result); + res = null; + break; + } + res = (res << 6) | (nextChar & 0x3f); + i++; + } + // See above loop for invalid continuation byte + if (res === null) { + continue; + } + // Maximum code point + if (res > 0x10ffff) { + i += onError(Utf8ErrorReason.OUT_OF_RANGE, i - 1 - extraLength, bytes, result, res); + continue; + } + // Reserved for UTF-16 surrogate halves + if (res >= 0xd800 && res <= 0xdfff) { + i += onError(Utf8ErrorReason.UTF16_SURROGATE, i - 1 - extraLength, bytes, result, res); + continue; + } + // Check for overlong sequences (more bytes than needed) + if (res <= overlongMask) { + i += onError(Utf8ErrorReason.OVERLONG, i - 1 - extraLength, bytes, result, res); + continue; + } + result.push(res); + } + return result; +} +// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array +function toUtf8Bytes(str, form = UnicodeNormalizationForm.current) { + if (form != UnicodeNormalizationForm.current) { + logger$8.assertNormalize(form); + str = str.normalize(form); + } + let result = []; + for (let i = 0; i < str.length; i++) { + const c = str.charCodeAt(i); + if (c < 0x80) { + result.push(c); + } + else if (c < 0x800) { + result.push((c >> 6) | 0xc0); + result.push((c & 0x3f) | 0x80); + } + else if ((c & 0xfc00) == 0xd800) { + i++; + const c2 = str.charCodeAt(i); + if (i >= str.length || (c2 & 0xfc00) !== 0xdc00) { + throw new Error("invalid utf-8 string"); + } + // Surrogate Pair + const pair = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff); + result.push((pair >> 18) | 0xf0); + result.push(((pair >> 12) & 0x3f) | 0x80); + result.push(((pair >> 6) & 0x3f) | 0x80); + result.push((pair & 0x3f) | 0x80); + } + else { + result.push((c >> 12) | 0xe0); + result.push(((c >> 6) & 0x3f) | 0x80); + result.push((c & 0x3f) | 0x80); + } + } + return new Uint8Array(result); +} +function escapeChar(value) { + const hex = ("0000" + value.toString(16)); + return "\\u" + hex.substring(hex.length - 4); +} +function _toEscapedUtf8String(bytes, onError) { + return '"' + getUtf8CodePoints(bytes, onError).map((codePoint) => { + if (codePoint < 256) { + switch (codePoint) { + case 8: return "\\b"; + case 9: return "\\t"; + case 10: return "\\n"; + case 13: return "\\r"; + case 34: return "\\\""; + case 92: return "\\\\"; + } + if (codePoint >= 32 && codePoint < 127) { + return String.fromCharCode(codePoint); + } + } + if (codePoint <= 0xffff) { + return escapeChar(codePoint); + } + codePoint -= 0x10000; + return escapeChar(((codePoint >> 10) & 0x3ff) + 0xd800) + escapeChar((codePoint & 0x3ff) + 0xdc00); + }).join("") + '"'; +} +function _toUtf8String(codePoints) { + return codePoints.map((codePoint) => { + if (codePoint <= 0xffff) { + return String.fromCharCode(codePoint); + } + codePoint -= 0x10000; + return String.fromCharCode((((codePoint >> 10) & 0x3ff) + 0xd800), ((codePoint & 0x3ff) + 0xdc00)); + }).join(""); +} +function toUtf8String(bytes, onError) { + return _toUtf8String(getUtf8CodePoints(bytes, onError)); +} +function toUtf8CodePoints(str, form = UnicodeNormalizationForm.current) { + return getUtf8CodePoints(toUtf8Bytes(str, form)); +} + +function formatBytes32String(text) { + // Get the bytes + const bytes = toUtf8Bytes(text); + // Check we have room for null-termination + if (bytes.length > 31) { + throw new Error("bytes32 string must be less than 32 bytes"); + } + // Zero-pad (implicitly null-terminates) + return zeroPadRight(bytes, 32); +} +function parseBytes32String(_bytes) { + const data = logger$8.getBytes(_bytes, "bytes"); + // Must be 32 bytes with a null-termination + if (data.length !== 32) { + throw new Error("invalid bytes32 - not 32 bytes long"); + } + if (data[31] !== 0) { + throw new Error("invalid bytes32 string - no null terminator"); + } + // Find the null termination + let length = 31; + while (data[length - 1] === 0) { + length--; + } + // Determine the string value + return toUtf8String(data.slice(0, length)); +} + +function bytes2(data) { + if ((data.length % 4) !== 0) { + throw new Error("should not happen; bad data"); + } + let result = []; + for (let i = 0; i < data.length; i += 4) { + result.push(parseInt(data.substring(i, i + 4), 16)); + } + return result; +} +function createTable(data, _func) { + const func = _func || function (value) { return [parseInt(value, 16)]; }; + let lo = 0; + let result = {}; + data.split(",").forEach((pair) => { + let comps = pair.split(":"); + lo += parseInt(comps[0], 16); + result[lo] = func(comps[1]); + }); + return result; +} +function createRangeTable(data) { + let hi = 0; + return data.split(",").map((v) => { + let comps = v.split("-"); + if (comps.length === 1) { + comps[1] = "0"; + } + else if (comps[1] === "") { + comps[1] = "1"; + } + let lo = hi + parseInt(comps[0], 16); + hi = parseInt(comps[1], 16); + return { l: lo, h: hi }; + }); +} +function matchMap(value, ranges) { + let lo = 0; + for (let i = 0; i < ranges.length; i++) { + let range = ranges[i]; + lo += range.l; + if (value >= lo && value <= lo + range.h && ((value - lo) % (range.d || 1)) === 0) { + if (range.e && range.e.indexOf(value - lo) !== -1) { + continue; + } + return range; + } + } + return null; +} +const Table_A_1_ranges = createRangeTable("221,13-1b,5f-,40-10,51-f,11-3,3-3,2-2,2-4,8,2,15,2d,28-8,88,48,27-,3-5,11-20,27-,8,28,3-5,12,18,b-a,1c-4,6-16,2-d,2-2,2,1b-4,17-9,8f-,10,f,1f-2,1c-34,33-14e,4,36-,13-,6-2,1a-f,4,9-,3-,17,8,2-2,5-,2,8-,3-,4-8,2-3,3,6-,16-6,2-,7-3,3-,17,8,3,3,3-,2,6-3,3-,4-a,5,2-6,10-b,4,8,2,4,17,8,3,6-,b,4,4-,2-e,2-4,b-10,4,9-,3-,17,8,3-,5-,9-2,3-,4-7,3-3,3,4-3,c-10,3,7-2,4,5-2,3,2,3-2,3-2,4-2,9,4-3,6-2,4,5-8,2-e,d-d,4,9,4,18,b,6-3,8,4,5-6,3-8,3-3,b-11,3,9,4,18,b,6-3,8,4,5-6,3-6,2,3-3,b-11,3,9,4,18,11-3,7-,4,5-8,2-7,3-3,b-11,3,13-2,19,a,2-,8-2,2-3,7,2,9-11,4-b,3b-3,1e-24,3,2-,3,2-,2-5,5,8,4,2,2-,3,e,4-,6,2,7-,b-,3-21,49,23-5,1c-3,9,25,10-,2-2f,23,6,3,8-2,5-5,1b-45,27-9,2a-,2-3,5b-4,45-4,53-5,8,40,2,5-,8,2,5-,28,2,5-,20,2,5-,8,2,5-,8,8,18,20,2,5-,8,28,14-5,1d-22,56-b,277-8,1e-2,52-e,e,8-a,18-8,15-b,e,4,3-b,5e-2,b-15,10,b-5,59-7,2b-555,9d-3,5b-5,17-,7-,27-,7-,9,2,2,2,20-,36,10,f-,7,14-,4,a,54-3,2-6,6-5,9-,1c-10,13-1d,1c-14,3c-,10-6,32-b,240-30,28-18,c-14,a0,115-,3,66-,b-76,5,5-,1d,24,2,5-2,2,8-,35-2,19,f-10,1d-3,311-37f,1b,5a-b,d7-19,d-3,41,57-,68-4,29-3,5f,29-37,2e-2,25-c,2c-2,4e-3,30,78-3,64-,20,19b7-49,51a7-59,48e-2,38-738,2ba5-5b,222f-,3c-94,8-b,6-4,1b,6,2,3,3,6d-20,16e-f,41-,37-7,2e-2,11-f,5-b,18-,b,14,5-3,6,88-,2,bf-2,7-,7-,7-,4-2,8,8-9,8-2ff,20,5-b,1c-b4,27-,27-cbb1,f7-9,28-2,b5-221,56,48,3-,2-,3-,5,d,2,5,3,42,5-,9,8,1d,5,6,2-2,8,153-3,123-3,33-27fd,a6da-5128,21f-5df,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3,2-1d,61-ff7d"); +// @TODO: Make this relative... +const Table_B_1_flags = "ad,34f,1806,180b,180c,180d,200b,200c,200d,2060,feff".split(",").map((v) => parseInt(v, 16)); +const Table_B_2_ranges = [ + { h: 25, s: 32, l: 65 }, + { h: 30, s: 32, e: [23], l: 127 }, + { h: 54, s: 1, e: [48], l: 64, d: 2 }, + { h: 14, s: 1, l: 57, d: 2 }, + { h: 44, s: 1, l: 17, d: 2 }, + { h: 10, s: 1, e: [2, 6, 8], l: 61, d: 2 }, + { h: 16, s: 1, l: 68, d: 2 }, + { h: 84, s: 1, e: [18, 24, 66], l: 19, d: 2 }, + { h: 26, s: 32, e: [17], l: 435 }, + { h: 22, s: 1, l: 71, d: 2 }, + { h: 15, s: 80, l: 40 }, + { h: 31, s: 32, l: 16 }, + { h: 32, s: 1, l: 80, d: 2 }, + { h: 52, s: 1, l: 42, d: 2 }, + { h: 12, s: 1, l: 55, d: 2 }, + { h: 40, s: 1, e: [38], l: 15, d: 2 }, + { h: 14, s: 1, l: 48, d: 2 }, + { h: 37, s: 48, l: 49 }, + { h: 148, s: 1, l: 6351, d: 2 }, + { h: 88, s: 1, l: 160, d: 2 }, + { h: 15, s: 16, l: 704 }, + { h: 25, s: 26, l: 854 }, + { h: 25, s: 32, l: 55915 }, + { h: 37, s: 40, l: 1247 }, + { h: 25, s: -119711, l: 53248 }, + { h: 25, s: -119763, l: 52 }, + { h: 25, s: -119815, l: 52 }, + { h: 25, s: -119867, e: [1, 4, 5, 7, 8, 11, 12, 17], l: 52 }, + { h: 25, s: -119919, l: 52 }, + { h: 24, s: -119971, e: [2, 7, 8, 17], l: 52 }, + { h: 24, s: -120023, e: [2, 7, 13, 15, 16, 17], l: 52 }, + { h: 25, s: -120075, l: 52 }, + { h: 25, s: -120127, l: 52 }, + { h: 25, s: -120179, l: 52 }, + { h: 25, s: -120231, l: 52 }, + { h: 25, s: -120283, l: 52 }, + { h: 25, s: -120335, l: 52 }, + { h: 24, s: -119543, e: [17], l: 56 }, + { h: 24, s: -119601, e: [17], l: 58 }, + { h: 24, s: -119659, e: [17], l: 58 }, + { h: 24, s: -119717, e: [17], l: 58 }, + { h: 24, s: -119775, e: [17], l: 58 } +]; +const Table_B_2_lut_abs = createTable("b5:3bc,c3:ff,7:73,2:253,5:254,3:256,1:257,5:259,1:25b,3:260,1:263,2:269,1:268,5:26f,1:272,2:275,7:280,3:283,5:288,3:28a,1:28b,5:292,3f:195,1:1bf,29:19e,125:3b9,8b:3b2,1:3b8,1:3c5,3:3c6,1:3c0,1a:3ba,1:3c1,1:3c3,2:3b8,1:3b5,1bc9:3b9,1c:1f76,1:1f77,f:1f7a,1:1f7b,d:1f78,1:1f79,1:1f7c,1:1f7d,107:63,5:25b,4:68,1:68,1:68,3:69,1:69,1:6c,3:6e,4:70,1:71,1:72,1:72,1:72,7:7a,2:3c9,2:7a,2:6b,1:e5,1:62,1:63,3:65,1:66,2:6d,b:3b3,1:3c0,6:64,1b574:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3"); +const Table_B_2_lut_rel = createTable("179:1,2:1,2:1,5:1,2:1,a:4f,a:1,8:1,2:1,2:1,3:1,5:1,3:1,4:1,2:1,3:1,4:1,8:2,1:1,2:2,1:1,2:2,27:2,195:26,2:25,1:25,1:25,2:40,2:3f,1:3f,33:1,11:-6,1:-9,1ac7:-3a,6d:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,b:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,c:-8,2:-8,2:-8,2:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,49:-8,1:-8,1:-4a,1:-4a,d:-56,1:-56,1:-56,1:-56,d:-8,1:-8,f:-8,1:-8,3:-7"); +const Table_B_2_complex = createTable("df:00730073,51:00690307,19:02BC006E,a7:006A030C,18a:002003B9,16:03B903080301,20:03C503080301,1d7:05650582,190f:00680331,1:00740308,1:0077030A,1:0079030A,1:006102BE,b6:03C50313,2:03C503130300,2:03C503130301,2:03C503130342,2a:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,3:1F7003B9,1:03B103B9,1:03AC03B9,2:03B10342,1:03B1034203B9,5:03B103B9,6:1F7403B9,1:03B703B9,1:03AE03B9,2:03B70342,1:03B7034203B9,5:03B703B9,6:03B903080300,1:03B903080301,3:03B90342,1:03B903080342,b:03C503080300,1:03C503080301,1:03C10313,2:03C50342,1:03C503080342,b:1F7C03B9,1:03C903B9,1:03CE03B9,2:03C90342,1:03C9034203B9,5:03C903B9,ac:00720073,5b:00B00063,6:00B00066,d:006E006F,a:0073006D,1:00740065006C,1:0074006D,124f:006800700061,2:00610075,2:006F0076,b:00700061,1:006E0061,1:03BC0061,1:006D0061,1:006B0061,1:006B0062,1:006D0062,1:00670062,3:00700066,1:006E0066,1:03BC0066,4:0068007A,1:006B0068007A,1:006D0068007A,1:00670068007A,1:00740068007A,15:00700061,1:006B00700061,1:006D00700061,1:006700700061,8:00700076,1:006E0076,1:03BC0076,1:006D0076,1:006B0076,1:006D0076,1:00700077,1:006E0077,1:03BC0077,1:006D0077,1:006B0077,1:006D0077,1:006B03C9,1:006D03C9,2:00620071,3:00632215006B0067,1:0063006F002E,1:00640062,1:00670079,2:00680070,2:006B006B,1:006B006D,9:00700068,2:00700070006D,1:00700072,2:00730076,1:00770062,c723:00660066,1:00660069,1:0066006C,1:006600660069,1:00660066006C,1:00730074,1:00730074,d:05740576,1:05740565,1:0574056B,1:057E0576,1:0574056D", bytes2); +const Table_C_ranges = createRangeTable("80-20,2a0-,39c,32,f71,18e,7f2-f,19-7,30-4,7-5,f81-b,5,a800-20ff,4d1-1f,110,fa-6,d174-7,2e84-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,2,1f-5f,ff7f-20001"); +function flatten(values) { + return values.reduce((accum, value) => { + value.forEach((value) => { accum.push(value); }); + return accum; + }, []); +} +function _nameprepTableA1(codepoint) { + return !!matchMap(codepoint, Table_A_1_ranges); +} +function _nameprepTableB2(codepoint) { + const range = matchMap(codepoint, Table_B_2_ranges); + if (range) { + if (range.s == null) { + throw new Error("should not happenl bad range"); + } + return [codepoint + range.s]; + } + const codes = Table_B_2_lut_abs[codepoint]; + if (codes) { + return codes; + } + const shift = Table_B_2_lut_rel[codepoint]; + if (shift) { + return [codepoint + shift[0]]; + } + const complex = Table_B_2_complex[codepoint]; + if (complex) { + return complex; + } + return null; +} +function _nameprepTableC(codepoint) { + return !!matchMap(codepoint, Table_C_ranges); +} +function nameprep(value) { + // This allows platforms with incomplete normalize to bypass + // it for very basic names which the built-in toLowerCase + // will certainly handle correctly + if (value.match(/^[a-z0-9-]*$/i) && value.length <= 59) { + return value.toLowerCase(); + } + // Get the code points (keeping the current normalization) + let codes = toUtf8CodePoints(value); + codes = flatten(codes.map((code) => { + // Substitute Table B.1 (Maps to Nothing) + if (Table_B_1_flags.indexOf(code) >= 0) { + return []; + } + if (code >= 0xfe00 && code <= 0xfe0f) { + return []; + } + // Substitute Table B.2 (Case Folding) + let codesTableB2 = _nameprepTableB2(code); + if (codesTableB2) { + return codesTableB2; + } + // No Substitution + return [code]; + })); + // Normalize using form KC + codes = toUtf8CodePoints(_toUtf8String(codes), UnicodeNormalizationForm.NFKC); + // Prohibit Tables C.1.2, C.2.2, C.3, C.4, C.5, C.6, C.7, C.8, C.9 + codes.forEach((code) => { + if (_nameprepTableC(code)) { + logger$8.throwArgumentError("STRINGPREP_CONTAINS_PROHIBITED", "value", value); + } + }); + // Prohibit Unassigned Code Points (Table A.1) + codes.forEach((code) => { + if (_nameprepTableA1(code)) { + logger$8.throwArgumentError("STRINGPREP_CONTAINS_UNASSIGNED", "value", value); + } + }); + // IDNA extras + let name = _toUtf8String(codes); + // IDNA: 4.2.3.1 + if (name.substring(0, 1) === "-" || name.substring(2, 4) === "--" || name.substring(name.length - 1) === "-") { + logger$8.throwArgumentError("invalid hyphen", "value", value); + } + // IDNA: 4.2.4 + if (name.length > 63) { + logger$8.throwArgumentError("too long", "value", value); + } + return name; +} + +class StringCoder extends DynamicBytesCoder { + constructor(localName) { + super("string", localName); + } + defaultValue() { + return ""; + } + encode(writer, _value) { + return super.encode(writer, toUtf8Bytes(Typed.dereference(_value, "string"))); + } + decode(reader) { + return toUtf8String(super.decode(reader)); + } +} + +class TupleCoder extends Coder { + constructor(coders, localName) { + let dynamic = false; + const types = []; + coders.forEach((coder) => { + if (coder.dynamic) { + dynamic = true; + } + types.push(coder.type); + }); + const type = ("tuple(" + types.join(",") + ")"); + super("tuple", type, localName, dynamic); + defineProperties(this, { coders: Object.freeze(coders.slice()) }); + } + defaultValue() { + const values = []; + this.coders.forEach((coder) => { + values.push(coder.defaultValue()); + }); + // We only output named properties for uniquely named coders + const uniqueNames = this.coders.reduce((accum, coder) => { + const name = coder.localName; + if (name) { + if (!accum[name]) { + accum[name] = 0; + } + accum[name]++; + } + return accum; + }, {}); + // Add named values + this.coders.forEach((coder, index) => { + let name = coder.localName; + if (!name || uniqueNames[name] !== 1) { + return; + } + if (name === "length") { + name = "_length"; + } + if (values[name] != null) { + return; + } + values[name] = values[index]; + }); + return Object.freeze(values); + } + encode(writer, _value) { + const value = Typed.dereference(_value, "tuple"); + return pack(writer, this.coders, value); + } + decode(reader) { + return reader.coerce(this.name, unpack(reader, this.coders)); + } +} + +var __classPrivateFieldGet$t = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _AbiCoder_instances, _AbiCoder_getCoder; +const paramTypeBytes = new RegExp(/^bytes([0-9]*)$/); +const paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/); +class AbiCoder { + constructor(coerceFunc) { + _AbiCoder_instances.add(this); + defineProperties(this, { coerceFunc }, {}, { coerceFunc: null }); + } + getDefaultValue(types) { + const coders = types.map((type) => __classPrivateFieldGet$t(this, _AbiCoder_instances, "m", _AbiCoder_getCoder).call(this, ParamType.from(type))); + const coder = new TupleCoder(coders, "_"); + return coder.defaultValue(); + } + encode(types, values) { + logger$e.assertArgumentCount(values.length, types.length, "types/values length mismatch"); + const coders = types.map((type) => __classPrivateFieldGet$t(this, _AbiCoder_instances, "m", _AbiCoder_getCoder).call(this, ParamType.from(type))); + const coder = (new TupleCoder(coders, "_")); + const writer = new Writer(); + coder.encode(writer, values); + return writer.data; + } + decode(types, data, loose) { + const coders = types.map((type) => __classPrivateFieldGet$t(this, _AbiCoder_instances, "m", _AbiCoder_getCoder).call(this, ParamType.from(type))); + const coder = new TupleCoder(coders, "_"); + return coder.decode(new Reader(data, this.coerceFunc, loose)); + } +} +_AbiCoder_instances = new WeakSet(), _AbiCoder_getCoder = function _AbiCoder_getCoder(param) { + if (param.isArray()) { + return new ArrayCoder(__classPrivateFieldGet$t(this, _AbiCoder_instances, "m", _AbiCoder_getCoder).call(this, param.arrayChildren), param.arrayLength, param.name); + } + if (param.isTuple()) { + return new TupleCoder(param.components.map((c) => __classPrivateFieldGet$t(this, _AbiCoder_instances, "m", _AbiCoder_getCoder).call(this, c)), param.name); + } + switch (param.baseType) { + case "address": + return new AddressCoder(param.name); + case "bool": + return new BooleanCoder(param.name); + case "string": + return new StringCoder(param.name); + case "bytes": + return new BytesCoder(param.name); + case "": + return new NullCoder(param.name); + } + // u?int[0-9]* + let match = param.type.match(paramTypeNumber); + if (match) { + let size = parseInt(match[2] || "256"); + if (size === 0 || size > 256 || (size % 8) !== 0) { + logger$e.throwArgumentError("invalid " + match[1] + " bit length", "param", param); + } + return new NumberCoder(size / 8, (match[1] === "int"), param.name); + } + // bytes[0-9]+ + match = param.type.match(paramTypeBytes); + if (match) { + let size = parseInt(match[1]); + if (size === 0 || size > 32) { + logger$e.throwArgumentError("invalid bytes length", "param", param); + } + return new FixedBytesCoder(size, param.name); + } + return logger$e.throwArgumentError("invalid type", "type", param.type); +}; +const defaultAbiCoder = new AbiCoder(); + +function id(value) { + return keccak256(toUtf8Bytes(value)); +} + +const version$8 = "@ethersproject/hash@6.0.0-beta.1"; + +const logger$7 = new Logger(version$8); + +const Zeros = new Uint8Array(32); +Zeros.fill(0); +const Partition = new RegExp("^((.*)\\.)?([^.]+)$"); +function isValidName(name) { + try { + const comps = name.split("."); + for (let i = 0; i < comps.length; i++) { + if (nameprep(comps[i]).length === 0) { + throw new Error("empty"); + } + } + return true; + } + catch (error) { } + return false; +} +function namehash(name) { + if (typeof (name) !== "string") { + logger$7.throwArgumentError("invalid ENS name; not a string", "name", name); + } + let current = name; + let result = Zeros; + while (current.length) { + const partition = current.match(Partition); + if (partition == null || partition[2] === "") { + return logger$7.throwArgumentError("invalid ENS name; missing component", "name", name); + } + const label = toUtf8Bytes(nameprep(partition[3])); + result = keccak256(concat([result, keccak256(label)])); + current = partition[2] || ""; + } + return hexlify(result); +} +function dnsEncode(name) { + if (typeof (name) !== "string") { + logger$7.throwArgumentError("invalid DNS name; not a string", "name", name); + } + if (name === "") { + return "0x00"; + } + // @TODO: should we enforce the 255 octet limit? + return concat(name.split(".").map((comp) => { + if (comp === "") { + logger$7.throwArgumentError("invalid DNS name; missing component", "name", name); + } + // We jam in an _ prefix to fill in with the length later + // Note: Nameprep throws if the component is over 63 bytes + const bytes = toUtf8Bytes("_" + nameprep(comp)); + bytes[0] = bytes.length - 1; + return bytes; + })) + "00"; +} + +const messagePrefix = "\x19Ethereum Signed Message:\n"; +function hashMessage(message) { + if (typeof (message) === "string") { + message = toUtf8Bytes(message); + } + return keccak256(concat([ + toUtf8Bytes(messagePrefix), + toUtf8Bytes(String(message.length)), + message + ])); +} + +var __classPrivateFieldSet$s = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$s = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _TypedDataEncoder_instances, _TypedDataEncoder_types, _TypedDataEncoder_fullTypes, _TypedDataEncoder_encoderCache, _TypedDataEncoder_getEncoder; +const padding = new Uint8Array(32); +padding.fill(0); +const BN__1 = BigInt(-1); +const BN_0$2 = BigInt(0); +const BN_1$3 = BigInt(1); +const BN_MAX_UINT256$1 = BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); +function hexPadRight(value) { + const bytes = arrayify(value); + const padOffset = bytes.length % 32; + if (padOffset) { + return concat([bytes, padding.slice(padOffset)]); + } + return hexlify(bytes); +} +const hexTrue = toHex(BN_1$3, 32); +const hexFalse = toHex(BN_0$2, 32); +const domainFieldTypes = { + name: "string", + version: "string", + chainId: "uint256", + verifyingContract: "address", + salt: "bytes32" +}; +const domainFieldNames = [ + "name", "version", "chainId", "verifyingContract", "salt" +]; +function checkString(key) { + return function (value) { + if (typeof (value) !== "string") { + logger$7.throwArgumentError(`invalid domain value for ${JSON.stringify(key)}`, `domain.${key}`, value); + } + return value; + }; +} +const domainChecks = { + name: checkString("name"), + version: checkString("version"), + chainId: function (value) { + return logger$7.getBigInt(value, "domain.chainId"); + }, + verifyingContract: function (value) { + try { + return getAddress(value).toLowerCase(); + } + catch (error) { } + return logger$7.throwArgumentError(`invalid domain value "verifyingContract"`, "domain.verifyingContract", value); + }, + salt: function (value) { + const bytes = logger$7.getBytes(value, "domain.salt"); + if (bytes.length !== 32) { + logger$7.throwArgumentError(`invalid domain value "salt"`, "domain.salt", value); + } + return hexlify(bytes); + } +}; +function getBaseEncoder(type) { + // intXX and uintXX + { + const match = type.match(/^(u?)int(\d*)$/); + if (match) { + const signed = (match[1] === ""); + const width = parseInt(match[2] || "256"); + if (width % 8 !== 0 || width > 256 || (match[2] && match[2] !== String(width))) { + logger$7.throwArgumentError("invalid numeric width", "type", type); + } + const boundsUpper = mask(BN_MAX_UINT256$1, signed ? (width - 1) : width); + const boundsLower = signed ? ((boundsUpper + BN_1$3) * BN__1) : BN_0$2; + return function (_value) { + const value = logger$7.getBigInt(_value, "value"); + if (value < boundsLower || value > boundsUpper) { + logger$7.throwArgumentError(`value out-of-bounds for ${type}`, "value", value); + } + return toHex(toTwos(value, 256), 32); + }; + } + } + // bytesXX + { + const match = type.match(/^bytes(\d+)$/); + if (match) { + const width = parseInt(match[1]); + if (width === 0 || width > 32 || match[1] !== String(width)) { + logger$7.throwArgumentError("invalid bytes width", "type", type); + } + return function (value) { + const bytes = arrayify(value); + if (bytes.length !== width) { + logger$7.throwArgumentError(`invalid length for ${type}`, "value", value); + } + return hexPadRight(value); + }; + } + } + switch (type) { + case "address": return function (value) { + return zeroPadLeft(getAddress(value), 32); + }; + case "bool": return function (value) { + return ((!value) ? hexFalse : hexTrue); + }; + case "bytes": return function (value) { + return keccak256(value); + }; + case "string": return function (value) { + return id(value); + }; + } + return null; +} +function encodeType(name, fields) { + return `${name}(${fields.map(({ name, type }) => (type + " " + name)).join(",")})`; +} +class TypedDataEncoder { + constructor(types) { + _TypedDataEncoder_instances.add(this); + _TypedDataEncoder_types.set(this, void 0); + _TypedDataEncoder_fullTypes.set(this, void 0); + _TypedDataEncoder_encoderCache.set(this, void 0); + __classPrivateFieldSet$s(this, _TypedDataEncoder_types, JSON.stringify(types), "f"); + __classPrivateFieldSet$s(this, _TypedDataEncoder_fullTypes, new Map(), "f"); + __classPrivateFieldSet$s(this, _TypedDataEncoder_encoderCache, new Map(), "f"); + // Link struct types to their direct child structs + const links = new Map(); + // Link structs to structs which contain them as a child + const parents = new Map(); + // Link all subtypes within a given struct + const subtypes = new Map(); + Object.keys(types).forEach((type) => { + links.set(type, new Set()); + parents.set(type, []); + subtypes.set(type, new Set()); + }); + for (const name in types) { + const uniqueNames = new Set(); + for (const field of types[name]) { + // Check each field has a unique name + if (uniqueNames.has(field.name)) { + logger$7.throwArgumentError(`duplicate variable name ${JSON.stringify(field.name)} in ${JSON.stringify(name)}`, "types", types); + } + uniqueNames.add(field.name); + // Get the base type (drop any array specifiers) + const baseType = (field.type.match(/^([^\x5b]*)(\x5b|$)/))[1] || null; + if (baseType === name) { + logger$7.throwArgumentError(`circular type reference to ${JSON.stringify(baseType)}`, "types", types); + } + // Is this a base encoding type? + const encoder = getBaseEncoder(baseType); + if (encoder) { + continue; + } + if (!parents.has(baseType)) { + logger$7.throwArgumentError(`unknown type ${JSON.stringify(baseType)}`, "types", types); + } + // Add linkage + parents.get(baseType).push(name); + links.get(name).add(baseType); + } + } + // Deduce the primary type + const primaryTypes = Array.from(parents.keys()).filter((n) => (parents.get(n).length === 0)); + if (primaryTypes.length === 0) { + logger$7.throwArgumentError("missing primary type", "types", types); + } + else if (primaryTypes.length > 1) { + logger$7.throwArgumentError(`ambiguous primary types or unused types: ${primaryTypes.map((t) => (JSON.stringify(t))).join(", ")}`, "types", types); + } + defineProperties(this, { primaryType: primaryTypes[0] }); + // Check for circular type references + function checkCircular(type, found) { + if (found.has(type)) { + logger$7.throwArgumentError(`circular type reference to ${JSON.stringify(type)}`, "types", types); + } + found.add(type); + for (const child of links.get(type)) { + if (!parents.has(child)) { + continue; + } + // Recursively check children + checkCircular(child, found); + // Mark all ancestors as having this decendant + for (const subtype of found) { + subtypes.get(subtype).add(child); + } + } + found.delete(type); + } + checkCircular(this.primaryType, new Set()); + // Compute each fully describe type + for (const [name, set] of subtypes) { + const st = Array.from(set); + st.sort(); + __classPrivateFieldGet$s(this, _TypedDataEncoder_fullTypes, "f").set(name, encodeType(name, types[name]) + st.map((t) => encodeType(t, types[t])).join("")); + } + } + get types() { + return JSON.parse(__classPrivateFieldGet$s(this, _TypedDataEncoder_types, "f")); + } + getEncoder(type) { + let encoder = __classPrivateFieldGet$s(this, _TypedDataEncoder_encoderCache, "f").get(type); + if (!encoder) { + encoder = __classPrivateFieldGet$s(this, _TypedDataEncoder_instances, "m", _TypedDataEncoder_getEncoder).call(this, type); + __classPrivateFieldGet$s(this, _TypedDataEncoder_encoderCache, "f").set(type, encoder); + } + return encoder; + } + encodeType(name) { + const result = __classPrivateFieldGet$s(this, _TypedDataEncoder_fullTypes, "f").get(name); + if (!result) { + return logger$7.throwArgumentError(`unknown type: ${JSON.stringify(name)}`, "name", name); + } + return result; + } + encodeData(type, value) { + return this.getEncoder(type)(value); + } + hashStruct(name, value) { + return keccak256(this.encodeData(name, value)); + } + encode(value) { + return this.encodeData(this.primaryType, value); + } + hash(value) { + return this.hashStruct(this.primaryType, value); + } + _visit(type, value, callback) { + // Basic encoder type (address, bool, uint256, etc) + { + const encoder = getBaseEncoder(type); + if (encoder) { + return callback(type, value); + } + } + // Array + const match = type.match(/^(.*)(\x5b(\d*)\x5d)$/); + if (match) { + const subtype = match[1]; + const length = parseInt(match[3]); + if (length >= 0 && value.length !== length) { + logger$7.throwArgumentError("array length mismatch; expected length ${ arrayLength }", "value", value); + } + return value.map((v) => this._visit(subtype, v, callback)); + } + // Struct + const fields = this.types[type]; + if (fields) { + return fields.reduce((accum, { name, type }) => { + accum[name] = this._visit(type, value[name], callback); + return accum; + }, {}); + } + return logger$7.throwArgumentError(`unknown type: ${type}`, "type", type); + } + visit(value, callback) { + return this._visit(this.primaryType, value, callback); + } + static from(types) { + return new TypedDataEncoder(types); + } + static getPrimaryType(types) { + return TypedDataEncoder.from(types).primaryType; + } + static hashStruct(name, types, value) { + return TypedDataEncoder.from(types).hashStruct(name, value); + } + static hashDomain(domain) { + const domainFields = []; + for (const name in domain) { + const type = domainFieldTypes[name]; + if (!type) { + logger$7.throwArgumentError(`invalid typed-data domain key: ${JSON.stringify(name)}`, "domain", domain); + } + domainFields.push({ name, type }); + } + domainFields.sort((a, b) => { + return domainFieldNames.indexOf(a.name) - domainFieldNames.indexOf(b.name); + }); + return TypedDataEncoder.hashStruct("EIP712Domain", { EIP712Domain: domainFields }, domain); + } + static encode(domain, types, value) { + return concat([ + "0x1901", + TypedDataEncoder.hashDomain(domain), + TypedDataEncoder.from(types).hash(value) + ]); + } + static hash(domain, types, value) { + return keccak256(TypedDataEncoder.encode(domain, types, value)); + } + // Replaces all address types with ENS names with their looked up address + static async resolveNames(domain, types, value, resolveName) { + // Make a copy to isolate it from the object passed in + domain = Object.assign({}, domain); + // Look up all ENS names + const ensCache = {}; + // Do we need to look up the domain's verifyingContract? + if (domain.verifyingContract && !isHexString(domain.verifyingContract, 20)) { + ensCache[domain.verifyingContract] = "0x"; + } + // We are going to use the encoder to visit all the base values + const encoder = TypedDataEncoder.from(types); + // Get a list of all the addresses + encoder.visit(value, (type, value) => { + if (type === "address" && !isHexString(value, 20)) { + ensCache[value] = "0x"; + } + return value; + }); + // Lookup each name + for (const name in ensCache) { + ensCache[name] = await resolveName(name); + } + // Replace the domain verifyingContract if needed + if (domain.verifyingContract && ensCache[domain.verifyingContract]) { + domain.verifyingContract = ensCache[domain.verifyingContract]; + } + // Replace all ENS names with their address + value = encoder.visit(value, (type, value) => { + if (type === "address" && ensCache[value]) { + return ensCache[value]; + } + return value; + }); + return { domain, value }; + } + static getPayload(domain, types, value) { + // Validate the domain fields + TypedDataEncoder.hashDomain(domain); + // Derive the EIP712Domain Struct reference type + const domainValues = {}; + const domainTypes = []; + domainFieldNames.forEach((name) => { + const value = domain[name]; + if (value == null) { + return; + } + domainValues[name] = domainChecks[name](value); + domainTypes.push({ name, type: domainFieldTypes[name] }); + }); + const encoder = TypedDataEncoder.from(types); + const typesWithDomain = Object.assign({}, types); + if (typesWithDomain.EIP712Domain) { + logger$7.throwArgumentError("types must not contain EIP712Domain type", "types.EIP712Domain", types); + } + else { + typesWithDomain.EIP712Domain = domainTypes; + } + // Validate the data structures and types + encoder.encode(value); + return { + types: typesWithDomain, + domain: domainValues, + primaryType: encoder.primaryType, + message: encoder.visit(value, (type, value) => { + // bytes + if (type.match(/^bytes(\d*)/)) { + return hexlify(logger$7.getBytes(value)); + } + // uint or int + if (type.match(/^u?int/)) { + return logger$7.getBigInt(value).toString(); + } + switch (type) { + case "address": + return value.toLowerCase(); + case "bool": + return !!value; + case "string": + if (typeof (value) !== "string") { + logger$7.throwArgumentError(`invalid string`, "value", value); + } + return value; + } + return logger$7.throwArgumentError("unsupported type", "type", type); + }) + }; + } +} +_TypedDataEncoder_types = new WeakMap(), _TypedDataEncoder_fullTypes = new WeakMap(), _TypedDataEncoder_encoderCache = new WeakMap(), _TypedDataEncoder_instances = new WeakSet(), _TypedDataEncoder_getEncoder = function _TypedDataEncoder_getEncoder(type) { + // Basic encoder type (address, bool, uint256, etc) + { + const encoder = getBaseEncoder(type); + if (encoder) { + return encoder; + } + } + // Array + const match = type.match(/^(.*)(\x5b(\d*)\x5d)$/); + if (match) { + const subtype = match[1]; + const subEncoder = this.getEncoder(subtype); + const length = parseInt(match[3]); + return (value) => { + if (length >= 0 && value.length !== length) { + logger$7.throwArgumentError("array length mismatch; expected length ${ arrayLength }", "value", value); + } + let result = value.map(subEncoder); + if (__classPrivateFieldGet$s(this, _TypedDataEncoder_fullTypes, "f").has(subtype)) { + result = result.map(keccak256); + } + return keccak256(concat(result)); + }; + } + // Struct + const fields = this.types[type]; + if (fields) { + const encodedType = id(__classPrivateFieldGet$s(this, _TypedDataEncoder_fullTypes, "f").get(type)); + return (value) => { + const values = fields.map(({ name, type }) => { + const result = this.getEncoder(type)(value[name]); + if (__classPrivateFieldGet$s(this, _TypedDataEncoder_fullTypes, "f").has(type)) { + return keccak256(result); + } + return result; + }); + values.unshift(encodedType); + return concat(values); + }; + } + return logger$7.throwArgumentError(`unknown type: ${type}`, "type", type); +}; + +var __classPrivateFieldSet$r = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$r = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _Interface_instances, _Interface_errors, _Interface_events, _Interface_functions, _Interface_abiCoder, _Interface_getFunction, _Interface_getEvent; +class LogDescription { + constructor(fragment, topic, args) { + const name = fragment.name, signature = fragment.format(); + defineProperties(this, { + fragment, name, signature, topic, args + }); + } +} +class TransactionDescription { + constructor(fragment, selector, args, value) { + const name = fragment.name, signature = fragment.format(); + defineProperties(this, { + fragment, name, args, signature, selector, value + }); + } +} +class ErrorDescription { + constructor(fragment, selector, args) { + const name = fragment.name, signature = fragment.format(); + defineProperties(this, { + fragment, name, args, signature, selector + }); + } +} +class Indexed { + constructor(hash) { + defineProperties(this, { hash, _isIndexed: true }); + } + static isIndexed(value) { + return !!(value && value._isIndexed); + } +} +// https://docs.soliditylang.org/en/v0.8.13/control-structures.html?highlight=panic#panic-via-assert-and-error-via-require +const PanicReasons = { + "0": "generic panic", + "1": "assert(false)", + "17": "arithmetic overflow", + "18": "division or modulo by zero", + "33": "enum overflow", + "34": "invalid encoded storage byte array accessed", + "49": "out-of-bounds array access; popping on an empty array", + "50": "out-of-bounds access of an array or bytesN", + "65": "out of memory", + "81": "uninitialized function", +}; +const BuiltinErrors = { + "0x08c379a0": { + signature: "Error(string)", + name: "Error", + inputs: ["string"], + reason: (message) => { + return `reverted with reason string ${JSON.stringify(message)}`; + } + }, + "0x4e487b71": { + signature: "Panic(uint256)", + name: "Panic", + inputs: ["uint256"], + reason: (code) => { + let reason = "unknown panic code"; + if (code >= 0 && code <= 0xff && PanicReasons[code.toString()]) { + reason = PanicReasons[code.toString()]; + } + return `reverted with panic code 0x${code.toString(16)} (${reason})`; + } + } +}; +class Interface { + constructor(fragments) { + _Interface_instances.add(this); + _Interface_errors.set(this, void 0); + _Interface_events.set(this, void 0); + _Interface_functions.set(this, void 0); + // #structs: Map; + _Interface_abiCoder.set(this, void 0); + let abi = []; + if (typeof (fragments) === "string") { + abi = JSON.parse(fragments); + } + else { + abi = fragments; + } + __classPrivateFieldSet$r(this, _Interface_functions, new Map(), "f"); + __classPrivateFieldSet$r(this, _Interface_errors, new Map(), "f"); + __classPrivateFieldSet$r(this, _Interface_events, new Map(), "f"); + // this.#structs = new Map(); + defineProperties(this, { + fragments: Object.freeze(abi.map((f) => Fragment.from(f)).filter((f) => (f != null))), + }); + __classPrivateFieldSet$r(this, _Interface_abiCoder, this.getAbiCoder(), "f"); + // Add all fragments by their signature + this.fragments.forEach((fragment) => { + let bucket; + switch (fragment.type) { + case "constructor": + if (this.deploy) { + logger$e.warn("duplicate definition - constructor"); + return; + } + //checkNames(fragment, "input", fragment.inputs); + defineProperties(this, { deploy: fragment }); + return; + case "function": + //checkNames(fragment, "input", fragment.inputs); + //checkNames(fragment, "output", (fragment).outputs); + bucket = __classPrivateFieldGet$r(this, _Interface_functions, "f"); + break; + case "event": + //checkNames(fragment, "input", fragment.inputs); + bucket = __classPrivateFieldGet$r(this, _Interface_events, "f"); + break; + case "error": + bucket = __classPrivateFieldGet$r(this, _Interface_errors, "f"); + break; + default: + return; + } + const signature = fragment.format(); + if (bucket.has(signature)) { + logger$e.warn("duplicate definition - " + signature); + return; + } + bucket.set(signature, fragment); + }); + // If we do not have a constructor add a default + if (!this.deploy) { + defineProperties(this, { + deploy: ConstructorFragment.fromString("constructor()") + }); + } + } + // @TODO: multi sig? + format(format) { + if (!format) { + format = FormatType.full; + } + if (format === FormatType.sighash) { + logger$e.throwArgumentError("interface does not support formatting sighash", "format", format); + } + const abi = this.fragments.map((f) => f.format(format)); + // We need to re-bundle the JSON fragments a bit + if (format === FormatType.json) { + return JSON.stringify(abi.map((j) => JSON.parse(j))); + } + return abi; + } + getAbiCoder() { + return defaultAbiCoder; + } + getFunctionName(key) { + return (__classPrivateFieldGet$r(this, _Interface_instances, "m", _Interface_getFunction).call(this, key, null, false)).name; + } + getFunction(key, values) { + return __classPrivateFieldGet$r(this, _Interface_instances, "m", _Interface_getFunction).call(this, key, values || null, true); + } + getEventName(key) { + return (__classPrivateFieldGet$r(this, _Interface_instances, "m", _Interface_getEvent).call(this, key, null, false)).name; + } + getEvent(key, values) { + return __classPrivateFieldGet$r(this, _Interface_instances, "m", _Interface_getEvent).call(this, key, values || null, true); + } + // Find a function definition by any means necessary (unless it is ambiguous) + getError(key, values) { + if (isHexString(key)) { + const selector = key.toLowerCase(); + for (const fragment of __classPrivateFieldGet$r(this, _Interface_errors, "f").values()) { + if (selector === this.getSelector(fragment)) { + return fragment; + } + } + logger$e.throwArgumentError("no matching error", "selector", key); + } + // It is a bare name, look up the function (will return null if ambiguous) + if (key.indexOf("(") === -1) { + const matching = []; + for (const [name, fragment] of __classPrivateFieldGet$r(this, _Interface_errors, "f")) { + if (name.split("(" /* fix:) */)[0] === key) { + matching.push(fragment); + } + } + if (matching.length === 0) { + logger$e.throwArgumentError("no matching error", "name", key); + } + else if (matching.length > 1) { + // @TODO: refine by Typed + logger$e.throwArgumentError("multiple matching errors", "name", key); + } + return matching[0]; + } + // Normalize the signature and lookup the function + const result = __classPrivateFieldGet$r(this, _Interface_errors, "f").get(ErrorFragment.fromString(key).format()); + if (result) { + return result; + } + return logger$e.throwArgumentError("no matching error", "signature", key); + } + // Get the 4-byte selector used by Solidity to identify a function + getSelector(fragment) { + /* + if (typeof(fragment) === "string") { + const matches: Array = [ ]; + + try { matches.push(this.getFunction(fragment)); } catch (error) { } + try { matches.push(this.getError(fragment)); } catch (_) { } + + if (matches.length === 0) { + logger.throwArgumentError("unknown fragment", "key", fragment); + } else if (matches.length > 1) { + logger.throwArgumentError("ambiguous fragment matches function and error", "key", fragment); + } + + fragment = matches[0]; + } + */ + return dataSlice(id(fragment.format()), 0, 4); + } + // Get the 32-byte topic hash used by Solidity to identify an event + getEventTopic(fragment) { + //if (typeof(fragment) === "string") { fragment = this.getEvent(eventFragment); } + return id(fragment.format()); + } + _decodeParams(params, data) { + return __classPrivateFieldGet$r(this, _Interface_abiCoder, "f").decode(params, data); + } + _encodeParams(params, values) { + return __classPrivateFieldGet$r(this, _Interface_abiCoder, "f").encode(params, values); + } + encodeDeploy(values) { + return this._encodeParams(this.deploy.inputs, values || []); + } + decodeErrorResult(fragment, data) { + if (typeof (fragment) === "string") { + fragment = this.getError(fragment); + } + if (dataSlice(data, 0, 4) !== this.getSelector(fragment)) { + logger$e.throwArgumentError(`data signature does not match error ${fragment.name}.`, "data", data); + } + return this._decodeParams(fragment.inputs, dataSlice(data, 4)); + } + encodeErrorResult(fragment, values) { + if (typeof (fragment) === "string") { + fragment = this.getError(fragment); + } + return concat([ + this.getSelector(fragment), + this._encodeParams(fragment.inputs, values || []) + ]); + } + // Decode the data for a function call (e.g. tx.data) + decodeFunctionData(fragment, data) { + if (typeof (fragment) === "string") { + fragment = this.getFunction(fragment); + } + if (dataSlice(data, 0, 4) !== this.getSelector(fragment)) { + logger$e.throwArgumentError(`data signature does not match function ${fragment.name}.`, "data", data); + } + return this._decodeParams(fragment.inputs, dataSlice(data, 4)); + } + // Encode the data for a function call (e.g. tx.data) + encodeFunctionData(fragment, values) { + if (typeof (fragment) === "string") { + fragment = this.getFunction(fragment); + } + return concat([ + this.getSelector(fragment), + this._encodeParams(fragment.inputs, values || []) + ]); + } + // Decode the result from a function call (e.g. from eth_call) + decodeFunctionResult(fragment, data) { + if (typeof (fragment) === "string") { + fragment = this.getFunction(fragment); + } + let message = "invalid length for result data"; + const bytes = arrayify(data); + if ((bytes.length % 32) === 0) { + try { + return __classPrivateFieldGet$r(this, _Interface_abiCoder, "f").decode(fragment.outputs, bytes); + } + catch (error) { + message = "could not decode result data"; + } + } + // Call returned data with no error, but the data is junk + return logger$e.throwError(message, "BAD_DATA", { + value: hexlify(bytes), + info: { method: fragment.name, signature: fragment.format() } + }); + } + makeError(fragment, _data, tx) { + if (typeof (fragment) === "string") { + fragment = this.getFunction(fragment); + } + const data = logger$e.getBytes(_data); + let args = undefined; + if (tx) { + try { + args = __classPrivateFieldGet$r(this, _Interface_abiCoder, "f").decode(fragment.inputs, tx.data || "0x"); + } + catch (error) { + console.log(error); + } + } + let errorArgs = undefined; + let errorName = undefined; + let errorSignature = undefined; + let reason = "unknown reason"; + if (data.length === 0) { + reason = "missing error reason"; + } + else if ((data.length % 32) === 4) { + const selector = hexlify(data.slice(0, 4)); + const builtin = BuiltinErrors[selector]; + if (builtin) { + try { + errorName = builtin.name; + errorSignature = builtin.signature; + errorArgs = __classPrivateFieldGet$r(this, _Interface_abiCoder, "f").decode(builtin.inputs, data.slice(4)); + reason = builtin.reason(...errorArgs); + } + catch (error) { + console.log(error); // @TODO: remove + } + } + else { + reason = "unknown custom error"; + try { + const error = this.getError(selector); + errorName = error.name; + errorSignature = error.format(); + reason = `custom error: ${errorSignature}`; + try { + errorArgs = __classPrivateFieldGet$r(this, _Interface_abiCoder, "f").decode(error.inputs, data.slice(4)); + } + catch (error) { + reason = `custom error: ${errorSignature} (coult not decode error data)`; + } + } + catch (error) { + console.log(error); // @TODO: remove + } + } + } + return logger$e.makeError("call revert exception", "CALL_EXCEPTION", { + data: hexlify(data), transaction: null, + method: fragment.name, signature: fragment.format(), args, + errorArgs, errorName, errorSignature, reason + }); + } + // Encode the result for a function call (e.g. for eth_call) + encodeFunctionResult(functionFragment, values) { + if (typeof (functionFragment) === "string") { + functionFragment = this.getFunction(functionFragment); + } + return hexlify(__classPrivateFieldGet$r(this, _Interface_abiCoder, "f").encode(functionFragment.outputs, values || [])); + } + /* + spelunk(inputs: Array, values: ReadonlyArray, processfunc: (type: string, value: any) => Promise): Promise> { + const promises: Array> = [ ]; + const process = function(type: ParamType, value: any): any { + if (type.baseType === "array") { + return descend(type.child + } + if (type. === "address") { + } + }; + + const descend = function (inputs: Array, values: ReadonlyArray) { + if (inputs.length !== values.length) { throw new Error("length mismatch"); } + + }; + + const result: Array = [ ]; + values.forEach((value, index) => { + if (value == null) { + topics.push(null); + } else if (param.baseType === "array" || param.baseType === "tuple") { + logger.throwArgumentError("filtering with tuples or arrays not supported", ("contract." + param.name), value); + } else if (Array.isArray(value)) { + topics.push(value.map((value) => encodeTopic(param, value))); + } else { + topics.push(encodeTopic(param, value)); + } + }); + } + */ + // Create the filter for the event with search criteria (e.g. for eth_filterLog) + encodeFilterTopics(eventFragment, values) { + if (typeof (eventFragment) === "string") { + eventFragment = this.getEvent(eventFragment); + } + if (values.length > eventFragment.inputs.length) { + logger$e.throwError("too many arguments for " + eventFragment.format(), "UNEXPECTED_ARGUMENT", { + count: values.length, + expectedCount: eventFragment.inputs.length + }); + } + const topics = []; + if (!eventFragment.anonymous) { + topics.push(this.getEventTopic(eventFragment)); + } + const encodeTopic = (param, value) => { + if (param.type === "string") { + return id(value); + } + else if (param.type === "bytes") { + return keccak256(hexlify(value)); + } + // Check addresses are valid + if (param.type === "address") { + __classPrivateFieldGet$r(this, _Interface_abiCoder, "f").encode(["address"], [value]); + } + return zeroPadLeft(hexlify(value), 32); + //@TOOD should probably be return toHex(value, 32) + }; + values.forEach((value, index) => { + const param = eventFragment.inputs[index]; + if (!param.indexed) { + if (value != null) { + logger$e.throwArgumentError("cannot filter non-indexed parameters; must be null", ("contract." + param.name), value); + } + return; + } + if (value == null) { + topics.push(null); + } + else if (param.baseType === "array" || param.baseType === "tuple") { + logger$e.throwArgumentError("filtering with tuples or arrays not supported", ("contract." + param.name), value); + } + else if (Array.isArray(value)) { + topics.push(value.map((value) => encodeTopic(param, value))); + } + else { + topics.push(encodeTopic(param, value)); + } + }); + // Trim off trailing nulls + while (topics.length && topics[topics.length - 1] === null) { + topics.pop(); + } + return topics; + } + encodeEventLog(eventFragment, values) { + if (typeof (eventFragment) === "string") { + eventFragment = this.getEvent(eventFragment); + } + const topics = []; + const dataTypes = []; + const dataValues = []; + if (!eventFragment.anonymous) { + topics.push(this.getEventTopic(eventFragment)); + } + if (values.length !== eventFragment.inputs.length) { + logger$e.throwArgumentError("event arguments/values mismatch", "values", values); + } + eventFragment.inputs.forEach((param, index) => { + const value = values[index]; + if (param.indexed) { + if (param.type === "string") { + topics.push(id(value)); + } + else if (param.type === "bytes") { + topics.push(keccak256(value)); + } + else if (param.baseType === "tuple" || param.baseType === "array") { + // @TODO + throw new Error("not implemented"); + } + else { + topics.push(__classPrivateFieldGet$r(this, _Interface_abiCoder, "f").encode([param.type], [value])); + } + } + else { + dataTypes.push(param); + dataValues.push(value); + } + }); + return { + data: __classPrivateFieldGet$r(this, _Interface_abiCoder, "f").encode(dataTypes, dataValues), + topics: topics + }; + } + // Decode a filter for the event and the search criteria + decodeEventLog(eventFragment, data, topics) { + if (typeof (eventFragment) === "string") { + eventFragment = this.getEvent(eventFragment); + } + if (topics != null && !eventFragment.anonymous) { + const eventTopic = this.getEventTopic(eventFragment); + if (!isHexString(topics[0], 32) || topics[0].toLowerCase() !== eventTopic) { + logger$e.throwArgumentError("fragment/topic mismatch", "topics[0]", topics[0]); + } + topics = topics.slice(1); + } + const indexed = []; + const nonIndexed = []; + const dynamic = []; + eventFragment.inputs.forEach((param, index) => { + if (param.indexed) { + if (param.type === "string" || param.type === "bytes" || param.baseType === "tuple" || param.baseType === "array") { + indexed.push(ParamType.fromObject({ type: "bytes32", name: param.name })); + dynamic.push(true); + } + else { + indexed.push(param); + dynamic.push(false); + } + } + else { + nonIndexed.push(param); + dynamic.push(false); + } + }); + const resultIndexed = (topics != null) ? __classPrivateFieldGet$r(this, _Interface_abiCoder, "f").decode(indexed, concat(topics)) : null; + const resultNonIndexed = __classPrivateFieldGet$r(this, _Interface_abiCoder, "f").decode(nonIndexed, data, true); + //const result: (Array & { [ key: string ]: any }) = [ ]; + const values = []; + const keys = []; + let nonIndexedIndex = 0, indexedIndex = 0; + eventFragment.inputs.forEach((param, index) => { + let value = null; + if (param.indexed) { + if (resultIndexed == null) { + value = new Indexed(null); + } + else if (dynamic[index]) { + value = new Indexed(resultIndexed[indexedIndex++]); + } + else { + try { + value = resultIndexed[indexedIndex++]; + } + catch (error) { + value = error; + } + } + } + else { + try { + value = resultNonIndexed[nonIndexedIndex++]; + } + catch (error) { + value = error; + } + } + values.push(value); + keys.push(param.name || null); + }); + return Result.fromItems(values, keys); + } + // Given a transaction, find the matching function fragment (if any) and + // determine all its properties and call parameters + parseTransaction(tx) { + const data = logger$e.getBytes(tx.data, "tx.data"); + const value = logger$e.getBigInt((tx.value != null) ? tx.value : 0, "tx.value"); + const fragment = this.getFunction(hexlify(data.slice(0, 4))); + if (!fragment) { + return null; + } + const args = __classPrivateFieldGet$r(this, _Interface_abiCoder, "f").decode(fragment.inputs, data.slice(4)); + return new TransactionDescription(fragment, this.getSelector(fragment), args, value); + } + // @TODO + //parseCallResult(data: BytesLike): ?? + // Given an event log, find the matching event fragment (if any) and + // determine all its properties and values + parseLog(log) { + const fragment = this.getEvent(log.topics[0]); + if (!fragment || fragment.anonymous) { + return null; + } + // @TODO: If anonymous, and the only method, and the input count matches, should we parse? + // Probably not, because just because it is the only event in the ABI does + // not mean we have the full ABI; maybe just a fragment? + return new LogDescription(fragment, this.getEventTopic(fragment), this.decodeEventLog(fragment, log.data, log.topics)); + } + parseError(data) { + const hexData = hexlify(data); + const fragment = this.getError(dataSlice(hexData, 0, 4)); + if (!fragment) { + return null; + } + const args = __classPrivateFieldGet$r(this, _Interface_abiCoder, "f").decode(fragment.inputs, dataSlice(hexData, 4)); + return new ErrorDescription(fragment, this.getSelector(fragment), args); + } + static from(value) { + // Already an Interface, which is immutable + if (value instanceof Interface) { + return value; + } + // JSON + if (typeof (value) === "string") { + return new Interface(JSON.parse(value)); + } + // Maybe an interface from an older version, or from a symlinked copy + if (typeof (value.format) === "function") { + return new Interface(value.format(FormatType.json)); + } + // Array of fragments + return new Interface(value); + } +} +_Interface_errors = new WeakMap(), _Interface_events = new WeakMap(), _Interface_functions = new WeakMap(), _Interface_abiCoder = new WeakMap(), _Interface_instances = new WeakSet(), _Interface_getFunction = function _Interface_getFunction(key, values, forceUnique) { + // Selector + if (isHexString(key)) { + const selector = key.toLowerCase(); + for (const fragment of __classPrivateFieldGet$r(this, _Interface_functions, "f").values()) { + if (selector === this.getSelector(fragment)) { + return fragment; + } + } + logger$e.throwArgumentError("no matching function", "selector", key); + } + // It is a bare name, look up the function (will return null if ambiguous) + if (key.indexOf("(") === -1) { + const matching = []; + for (const [name, fragment] of __classPrivateFieldGet$r(this, _Interface_functions, "f")) { + if (name.split("(" /* fix:) */)[0] === key) { + matching.push(fragment); + } + } + if (values) { + const lastValue = (values.length > 0) ? values[values.length - 1] : null; + let valueLength = values.length; + let allowOptions = true; + if (Typed.isTyped(lastValue) && lastValue.type === "overrides") { + allowOptions = false; + valueLength--; + } + // Remove all matches that don't have a compatible length. The args + // may contain an overrides, so the match may have n or n - 1 parameters + for (let i = matching.length - 1; i >= 0; i--) { + const inputs = matching[i].inputs.length; + if (inputs !== valueLength && (!allowOptions || inputs !== valueLength - 1)) { + matching.splice(i, 1); + } + } + // Remove all matches that don't match the Typed signature + for (let i = matching.length - 1; i >= 0; i--) { + const inputs = matching[i].inputs; + for (let j = 0; j < values.length; j++) { + // Not a typed value + if (!Typed.isTyped(values[j])) { + continue; + } + // We are past the inputs + if (j >= inputs.length) { + if (values[j].type === "overrides") { + continue; + } + matching.splice(i, 1); + break; + } + // Make sure the value type matches the input type + if (values[j].type !== inputs[j].baseType) { + matching.splice(i, 1); + break; + } + } + } + } + // We found a single matching signature with an overrides, but the + // last value is something that cannot possibly be an options + if (matching.length === 1 && values && values.length !== matching[0].inputs.length) { + const lastArg = values[values.length - 1]; + if (lastArg == null || Array.isArray(lastArg) || typeof (lastArg) !== "object") { + matching.splice(0, 1); + } + } + if (matching.length === 0) { + logger$e.throwArgumentError("no matching function", "name", key); + } + else if (matching.length > 1 && forceUnique) { + const matchStr = matching.map((m) => JSON.stringify(m.format())).join(", "); + logger$e.throwArgumentError(`multiple matching functions (i.e. ${matchStr})`, "name", key); + } + return matching[0]; + } + // Normalize the signature and lookup the function + const result = __classPrivateFieldGet$r(this, _Interface_functions, "f").get(FunctionFragment.fromString(key).format()); + if (result) { + return result; + } + return logger$e.throwArgumentError("no matching function", "signature", key); +}, _Interface_getEvent = function _Interface_getEvent(key, values, forceUnique) { + // EventTopic + if (isHexString(key)) { + const eventTopic = key.toLowerCase(); + for (const fragment of __classPrivateFieldGet$r(this, _Interface_events, "f").values()) { + if (eventTopic === this.getEventTopic(fragment)) { + return fragment; + } + } + logger$e.throwArgumentError("no matching event", "eventTopic", key); + } + // It is a bare name, look up the function (will return null if ambiguous) + if (key.indexOf("(") === -1) { + const matching = []; + for (const [name, fragment] of __classPrivateFieldGet$r(this, _Interface_events, "f")) { + if (name.split("(" /* fix:) */)[0] === key) { + matching.push(fragment); + } + } + if (values) { + // Remove all matches that don't have a compatible length. + for (let i = matching.length - 1; i >= 0; i--) { + if (matching[i].inputs.length < values.length) { + matching.splice(i, 1); + } + } + // Remove all matches that don't match the Typed signature + for (let i = matching.length - 1; i >= 0; i--) { + const inputs = matching[i].inputs; + for (let j = 0; j < values.length; j++) { + // Not a typed value + if (!Typed.isTyped(values[j])) { + continue; + } + // Make sure the value type matches the input type + if (values[j].type !== inputs[j].baseType) { + matching.splice(i, 1); + break; + } + } + } + } + if (matching.length === 0) { + logger$e.throwArgumentError("no matching event", "name", key); + } + else if (matching.length > 1 && forceUnique) { + // @TODO: refine by Typed + logger$e.throwArgumentError("multiple matching events", "name", key); + } + return matching[0]; + } + // Normalize the signature and lookup the function + const result = __classPrivateFieldGet$r(this, _Interface_events, "f").get(EventFragment.fromString(key).format()); + if (result) { + return result; + } + return logger$e.throwArgumentError("no matching event", "signature", key); +}; + +const version$7 = "@ethersproject/web@6.0.0-beta.1"; + +const logger$6 = new Logger(version$7); + +var __classPrivateFieldSet$q = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$q = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _FetchResponse_props, _FetchResponse_error; +class FetchResponse { + constructor(statusCode, statusMessage, headers, body, request) { + _FetchResponse_props.set(this, void 0); + _FetchResponse_error.set(this, void 0); + __classPrivateFieldSet$q(this, _FetchResponse_props, { + statusCode, + statusMessage, + headers: Object.freeze(Object.assign({}, Object.keys(headers).reduce((accum, k) => { + accum[k.toLowerCase()] = headers[k]; + return accum; + }, {}))), + body: ((body == null) ? null : new Uint8Array(body)), + request: (request || null), + }, "f"); + __classPrivateFieldSet$q(this, _FetchResponse_error, { message: "" }, "f"); + } + toString() { + const body = getStore(__classPrivateFieldGet$q(this, _FetchResponse_props, "f"), "body"); + return ``; + } + get statusCode() { return getStore(__classPrivateFieldGet$q(this, _FetchResponse_props, "f"), "statusCode"); } + get statusMessage() { return getStore(__classPrivateFieldGet$q(this, _FetchResponse_props, "f"), "statusMessage"); } + get headers() { return getStore(__classPrivateFieldGet$q(this, _FetchResponse_props, "f"), "headers"); } + get body() { + const body = getStore(__classPrivateFieldGet$q(this, _FetchResponse_props, "f"), "body"); + return (body == null) ? null : new Uint8Array(body); + } + get bodyText() { + try { + const body = getStore(__classPrivateFieldGet$q(this, _FetchResponse_props, "f"), "body"); + return (body == null) ? "" : toUtf8String(body); + } + catch (error) { + return logger$6.throwError("response body is not valid UTF-8 data", "UNSUPPORTED_OPERATION", { + operation: "bodyText", info: { response: this } + }); + } + } + get bodyJson() { + try { + return JSON.parse(this.bodyText); + } + catch (error) { + return logger$6.throwError("response body is not valid JSON", "UNSUPPORTED_OPERATION", { + operation: "bodyJson", info: { response: this } + }); + } + } + [(_FetchResponse_props = new WeakMap(), _FetchResponse_error = new WeakMap(), Symbol.iterator)]() { + const headers = this.headers; + const keys = Object.keys(headers); + let index = 0; + return { + next: () => { + if (index < keys.length) { + const key = keys[index++]; + return { + value: [key, headers[key]], done: false + }; + } + return { value: undefined, done: true }; + } + }; + } + makeServerError(message, error) { + let statusMessage; + if (!message) { + message = `${this.statusCode} ${this.statusMessage}`; + statusMessage = `CLIENT ESCALATED SERVER ERROR (${message})`; + } + else { + statusMessage = `CLIENT ESCALATED SERVER ERROR (${this.statusCode} ${this.statusMessage}; ${message})`; + } + const response = new FetchResponse(599, statusMessage, this.headers, this.body, getStore(__classPrivateFieldGet$q(this, _FetchResponse_props, "f"), "request") || undefined); + __classPrivateFieldSet$q(response, _FetchResponse_error, { message, error }, "f"); + return response; + } + throwThrottleError(message, stall) { + if (stall == null) { + stall = 1000; + } + if (typeof (stall) !== "number" || !Number.isInteger(stall) || stall < 0) { + logger$6.throwArgumentError("invalid stall timeout", "stall", stall); + } + const error = new Error(message || "throttling requests"); + defineProperties(error, { stall, throttle: true }); + throw error; + } + getHeader(key) { + return this.headers[key.toLowerCase()]; + } + hasBody() { + const body = getStore(__classPrivateFieldGet$q(this, _FetchResponse_props, "f"), "body"); + return (body != null); + } + get request() { return getStore(__classPrivateFieldGet$q(this, _FetchResponse_props, "f"), "request"); } + ok() { + return (__classPrivateFieldGet$q(this, _FetchResponse_error, "f").message === "" && this.statusCode >= 200 && this.statusCode < 300); + } + assertOk() { + if (this.ok()) { + return; + } + let { message, error } = __classPrivateFieldGet$q(this, _FetchResponse_error, "f"); + if (message === "") { + message = `server response ${this.statusCode} ${this.statusMessage}`; + } + logger$6.throwError(message, "SERVER_ERROR", { + request: (this.request || "unknown request"), response: this, error + }); + } +} + +async function getUrl(req, timeout) { + const protocol = req.url.split(":")[0].toLowerCase(); + if (protocol !== "http" && protocol !== "https") { + logger$6.throwError(`unsupported protocol ${protocol}`, "UNSUPPORTED_OPERATION", { + info: { protocol }, + operation: "request" + }); + } + if (req.credentials && !req.allowInsecureAuthentication) { + logger$6.throwError("insecure authorized connections unsupported", "UNSUPPORTED_OPERATION", { + operation: "request" + }); + } + const init = { + method: req.method, + headers: new Headers(Array.from(req)), + body: req.body || undefined, + }; + const resp = await fetch(req.url, init); + const headers = {}; + resp.headers.forEach((value, key) => { + headers[key.toLowerCase()] = value; + }); + const body = new Uint8Array(await resp.arrayBuffer()); + return new FetchResponse(resp.status, resp.statusText, headers, body, req); +} + +var __classPrivateFieldSet$p = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$p = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _FetchRequest_props; +function check(value, type, name) { + if (typeof (value) !== type) { + throw new Error(`invalid ${name}`); + } + return value; +} +class FetchRequest { + constructor(url) { + _FetchRequest_props.set(this, void 0); + __classPrivateFieldSet$p(this, _FetchRequest_props, { + allowInsecure: false, + gzip: false, + headers: {}, + method: "", + timeout: 300, + url: check(url, "string", "url") + }, "f"); + } + // URL + get url() { return getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "url"); } + set url(url) { + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "url", check(url, "string", "url")); + } + // Body + get body() { + const body = getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "body"); + if (body == null) { + return null; + } + if (this.isFrozen()) { + return new Uint8Array(body); + } + return body; + } + set body(body) { + if (body == null) { + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "body", undefined); + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "bodyType", undefined); + } + else if (typeof (body) === "string") { + // @TODO: utf8-check + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "body", toUtf8Bytes(body)); + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "bodyType", "text/plain"); + } + else if (body instanceof Uint8Array) { + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "body", body); + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "bodyType", "application/octet-stream"); + } + else if (typeof (body) === "object") { + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "body", toUtf8Bytes(JSON.stringify(body))); + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "bodyType", "application/json"); + } + else { + throw new Error("invalid body"); + } + } + hasBody() { + return (getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "body") != null); + } + // Method (default: GET with no body, POST with a body) + get method() { + const method = getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "method"); + if (method) { + return method.toUpperCase(); + } + if (this.body) { + return "POST"; + } + return "GET"; + } + set method(method) { + if (method == null) { + method = ""; + } + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "method", check(method, "string", "method")); + } + // Headers (automatically fills content-type if not explicitly set) + get headers() { + const headers = Object.assign({}, getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "headers")); + const bodyType = getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "bodyType"); + if (this.credentials) ; + if (this.allowGzip) { + headers["accept-encoding"] = "gzip"; + } + if (headers["content-type"] == null && bodyType) { + headers["content-type"] = bodyType; + } + if (this.body) { + headers["content-length"] = String(this.body.length); + } + return Object.freeze(headers); + } + getHeader(key) { + return this.headers[key.toLowerCase()]; + } + setHeader(key, value) { + const headers = getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "headers"); + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "headers", headers); + headers[check(key, "string", "key").toLowerCase()] = String(value); + } + clearHeaders() { + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "headers", {}); + } + [(_FetchRequest_props = new WeakMap(), Symbol.iterator)]() { + const headers = this.headers; + const keys = Object.keys(headers); + let index = 0; + return { + next: () => { + if (index < keys.length) { + const key = keys[index++]; + return { + value: [key, headers[key]], done: false + }; + } + return { value: undefined, done: true }; + } + }; + } + // Configure an Authorization header + get credentials() { + return getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "creds") || null; + } + setCredentials(username, password) { + if (username.match(/:/)) { + logger$6.throwArgumentError("invalid basic authentication username", "username", "[REDACTED]"); + } + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "creds", `${username}:${password}`); + // @TODO: + //const auth = username + ":" + password; + //this.setHeader("authorization", "Basic " + base64Encode(toUtf8Bytes(auth))) + //this.setHeader("authorization", "Basic TODO:" + auth); + } + // Configure the request to allow gzipped responses + get allowGzip() { + return getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "gzip"); + } + set allowGzip(value) { + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "gzip", !!value); + } + // Allow credentials to be sent over an insecure (non-HTTPS) channel + get allowInsecureAuthentication() { + return !!getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "allowInsecure"); + } + set allowInsecureAuthentication(value) { + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "allowInsecure", check(value, "boolean", "allowInsecureAuthentication")); + } + // Timeout (seconds) + get timeout() { return getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "timeout"); } + set timeout(timeout) { + timeout = check(timeout, "number", "timeout"); + if (timeout <= 0) { + throw new Error("invalid timerout"); + } + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "timeout", timeout); + } + redirect(location) { + // Redirection; for now we only support absolute locataions + const current = this.url.split(":")[0].toLowerCase(); + const target = location.split(":")[0].toLowerCase(); + if (this.method !== "GET" || (current === "https" && target === "http") || + !location.match(/^https?:$/)) { + return logger$6.throwError(`unsupported redirect`, "UNSUPPORTED_OPERATION", { + operation: `redirect(${this.method} ${JSON.stringify(this.url)} => ${JSON.stringify(location)})` + }); + } + // Create a copy of this request, with a new URL + const req = new FetchRequest(location); + req.method = "GET"; + req.allowGzip = this.allowGzip; + req.timeout = this.timeout; + setStore(__classPrivateFieldGet$p(req, _FetchRequest_props, "f"), "body", getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "body")); + setStore(__classPrivateFieldGet$p(req, _FetchRequest_props, "f"), "headers", Object.assign({}, getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "headers"))); + setStore(__classPrivateFieldGet$p(req, _FetchRequest_props, "f"), "bodyType", getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "bodyType")); + // Do not forward credentials unless on the same domain; only absolute + //req.allowInsecure = false; + // paths are currently supported; may want a way to specify to forward? + //setStore(req.#props, "creds", getStore(this.#pros, "creds")); + return req; + } + clone() { + const clone = new FetchRequest(this.url); + // Preserve "default method" (i.e. null) + setStore(__classPrivateFieldGet$p(clone, _FetchRequest_props, "f"), "method", getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "method")); + // Preserve "default body" with type, copying the Uint8Array is present + const body = getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "body"); + setStore(__classPrivateFieldGet$p(clone, _FetchRequest_props, "f"), "body", (body == null) ? undefined : new Uint8Array(body)); + setStore(__classPrivateFieldGet$p(clone, _FetchRequest_props, "f"), "bodyType", getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "bodyType")); + // Preserve "default headers" + setStore(__classPrivateFieldGet$p(clone, _FetchRequest_props, "f"), "headers", Object.assign({}, getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "headers"))); + // Credentials is readonly, so we copy internally + setStore(__classPrivateFieldGet$p(clone, _FetchRequest_props, "f"), "creds", getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "creds")); + if (this.allowGzip) { + clone.allowGzip = true; + } + clone.timeout = this.timeout; + if (this.allowInsecureAuthentication) { + clone.allowInsecureAuthentication = true; + } + return clone; + } + freeze() { + // Copy the body so any changes to previous access do not modify it + const body = getStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "body"); + if (body != null) { + setStore(__classPrivateFieldGet$p(this, _FetchRequest_props, "f"), "body", new Uint8Array(body)); + } + Object.freeze(__classPrivateFieldGet$p(this, _FetchRequest_props, "f").headers); + Object.freeze(__classPrivateFieldGet$p(this, _FetchRequest_props, "f")); + return this; + } + isFrozen() { + return Object.isFrozen(__classPrivateFieldGet$p(this, _FetchRequest_props, "f")); + } +} + +async function delay(duration) { + return new Promise((resolve) => { setTimeout(resolve, duration); }); +} +// @TODO: Add option for global preflightRequest? +function getTime$2() { return (new Date()).getTime(); } +function unpercent(value) { + value = value.replace(/%([0-9a-f][0-9a-f])/gi, (all, code) => { + return String.fromCharCode(parseInt(code, 16)); + }); + return toUtf8Bytes(value); +} +let lockGateways = false; +async function fetchData(connection) { + const conn = (typeof (connection) === "string") ? { + request: new FetchRequest(connection) + } : (connection instanceof FetchRequest) ? { + request: connection + } : Object.assign({}, connection); + if (conn.request == null) { + return logger$6.throwArgumentError("missing request", "connection", connection); + } + let req = conn.request.clone().freeze(); + switch (conn.request.url.split(":")[0]) { + case "data": { + const match = req.url.match(/^data:([^;:]*)?(;base64)?,(.*)$/i); + if (match) { + try { + const headers = { + "content-type": (match[1] ? match[1] : "text/plain") + }; + const body = (match[2] ? decodeBase64(match[3]) : unpercent(match[3])); + return new FetchResponse(200, "OK", headers, body, req.clone()); + } + catch (error) { + return new FetchResponse(400, "BAD REQUEST (invalid base64 encoded data)", {}, null, req.clone()); + } + } + return new FetchResponse(500, "INTERNAL SERVER ERROR (unsupported dara URI)", {}, null, req.clone()); + } + case "ipfs": + case "ipns": + case "ar": + throw new Error("not implemented yet"); + case "http": + case "https": + break; + default: + throw new Error("unsupported scheme"); + } + const attempts = (conn.throttleLimit != null) ? conn.throttleLimit : 12; + if (!Number.isInteger(attempts) || attempts < 1) { + return logger$6.throwArgumentError("invalid throttleLimit", "connection", connection); + } + const slotInterval = (conn.throttleSlotInterval != null) ? conn.throttleSlotInterval : 100; + //logger.assertInteger(slotInterval, "connection.throttleSlotInterval", connection.throttleSlotInterval); + if (!Number.isInteger(slotInterval) || attempts < 0) { + return logger$6.throwArgumentError("invalid throttleSlotInterval", "connection", connection); + } + const retryFunc = (conn.throttleRetry != null) ? conn.throttleRetry : null; + if (retryFunc && typeof (retryFunc) !== "function") { + return logger$6.throwArgumentError("invalid throttleRetry callback", "connection", connection); + } + const preflightRequest = conn.preflightRequest || null; + if (preflightRequest && typeof (preflightRequest) !== "function") { + return logger$6.throwArgumentError("invalid preflightRequest callback", "connection", connection); + } + const processResponse = conn.processResponse || null; + if (processResponse && typeof (processResponse) !== "function") { + return logger$6.throwArgumentError("invalid processResponse callback", "connection", connection); + } + // Start time of this fetch (for timeouts) + const t0 = getTime$2(); + let response = null; + for (let a = 0; a < attempts; a++) { + let request = req.clone(); + if (preflightRequest) { + request = (await preflightRequest(request.freeze())).clone(); + } + const remainingTime = getTime$2() - t0; + if (remainingTime < 0) { + return logger$6.throwError("timeout", "TIMEOUT", { operation: "request", request }); + } + response = await getUrl(request); + // Retry logic (server forced) + if (a < attempts) { + if (response.statusCode === 301 || response.statusCode === 302) { + // Try following the redirect; the request will through if the + // type of redirect is not supported + try { + req = request.redirect(response.headers.location || ""); + continue; + } + catch (error) { } + // Things won't get any better on another attempt; abort + return response; + } + else if (response.statusCode === 429) { + if (retryFunc == null || (await retryFunc(request.freeze(), response, a))) { + const retryAfter = response.headers["retry-after"]; + if (typeof (retryAfter) === "string" && retryAfter.match(/^[1-9][0-9]*$/)) { + await delay(parseInt(retryAfter)); + } + else { + await delay(slotInterval * Math.trunc(Math.random() * Math.pow(2, a))); + } + continue; + } + } + } + // Optional post-processing response; also allows trapping + // HTTP status errors and doing "something different", + // including any further throttling. + if (processResponse) { + try { + return await processResponse(request, response); + } + catch (error) { + // response.throwThrottleError + if (error.throttle && typeof (error.stall) === "number") { + if (a < attempts) { + await delay(error.stall); + continue; + } + // Too many retries should behave more like a 5xx server error + return response.makeServerError("exceeded maximum retry limit", error); + } + // Something went wrong during processing; throw a 5xx server error + response.makeServerError("error in post-processing function", error).assertOk(); + } + } + return response; + } + // Too many retries should behave more like a 5xx server error + return response.makeServerError("exceeded maximum retry limit"); +} +fetchData.lock = function () { + lockGateways = true; +}; +// @TODO: Allow a master Gateway function +fetchData.setGateway = function (gateway) { +}; +fetchData.setIpfsGateway = function (gateway) { + if (lockGateways) { + logger$6.throwError("gateways are locked", "UNSUPPORTED_OPERATION", { + operation: "setIpfsGateway" + }); + } +}; +fetchData.setArGateway = function (gateway) { + if (lockGateways) { + logger$6.throwError("gateways are locked", "UNSUPPORTED_OPERATION", { + operation: "setArGateway" + }); + } +}; + +const version$6 = "@ethersproject/providers@6.0.0-beta.1"; + +const logger$5 = new Logger(version$6); + +var __classPrivateFieldSet$o = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$o = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _a$1, _EnsResolver_supports2544, _EnsResolver_getResolver; +const BN_1$2 = BigInt(1); +const Empty = new Uint8Array([]); +const HashZero = "0x0000000000000000000000000000000000000000000000000000000000000000"; +function parseBytes(result, start) { + if (result === "0x") { + return null; + } + const offset = toNumber(dataSlice(result, start, start + 32)); + const length = toNumber(dataSlice(result, offset, offset + 32)); + return dataSlice(result, offset + 32, offset + 32 + length); +} +function parseString(result, start) { + try { + const bytes = parseBytes(result, start); + if (bytes != null) { + return toUtf8String(bytes); + } + } + catch (error) { } + return null; +} +function numPad$1(value) { + const result = toArray(value); + if (result.length > 32) { + throw new Error("internal; should not happen"); + } + const padded = new Uint8Array(32); + padded.set(result, 32 - result.length); + return padded; +} +function bytesPad$1(value) { + if ((value.length % 32) === 0) { + return value; + } + const result = new Uint8Array(Math.ceil(value.length / 32) * 32); + result.set(value); + return result; +} +// ABI Encodes a series of (bytes, bytes, ...) +function encodeBytes$1(datas) { + const result = []; + let byteCount = 0; + // Add place-holders for pointers as we add items + for (let i = 0; i < datas.length; i++) { + result.push(Empty); + byteCount += 32; + } + for (let i = 0; i < datas.length; i++) { + const data = logger$5.getBytes(datas[i]); + // Update the bytes offset + result[i] = numPad$1(byteCount); + // The length and padded value of data + result.push(numPad$1(data.length)); + result.push(bytesPad$1(data)); + byteCount += 32 + Math.ceil(data.length / 32) * 32; + } + return concat(result); +} +// @TODO: This should use the fetch-data:ipfs gateway +// Trim off the ipfs:// prefix and return the default gateway URL +function getIpfsLink(link) { + if (link.match(/^ipfs:\/\/ipfs\//i)) { + link = link.substring(12); + } + else if (link.match(/^ipfs:\/\//i)) { + link = link.substring(7); + } + else { + logger$5.throwArgumentError("unsupported IPFS format", "link", link); + } + return `https:/\/gateway.ipfs.io/ipfs/${link}`; +} +class MulticoinProviderPlugin { + constructor(name) { + defineProperties(this, { name }); + } + validate(proivder) { + return this; + } + supportsCoinType(coinType) { + return false; + } + async encodeAddress(coinType, address) { + throw new Error("unsupported coin"); + } + async decodeAddress(coinType, data) { + throw new Error("unsupported coin"); + } +} +const matcherIpfs = new RegExp("^(ipfs):/\/(.*)$", "i"); +const matchers = [ + new RegExp("^(https):/\/(.*)$", "i"), + new RegExp("^(data):(.*)$", "i"), + matcherIpfs, + new RegExp("^eip155:[0-9]+/(erc[0-9]+):(.*)$", "i"), +]; +class EnsResolver { + constructor(provider, address, name) { + // For EIP-2544 names, the ancestor that provided the resolver + _EnsResolver_supports2544.set(this, void 0); + defineProperties(this, { provider, address, name }); + __classPrivateFieldSet$o(this, _EnsResolver_supports2544, null, "f"); + } + async supportsWildcard() { + if (!__classPrivateFieldGet$o(this, _EnsResolver_supports2544, "f")) { + // supportsInterface(bytes4 = selector("resolve(bytes,bytes)")) + __classPrivateFieldSet$o(this, _EnsResolver_supports2544, this.provider.call({ + to: this.address, + data: "0x01ffc9a79061b92300000000000000000000000000000000000000000000000000000000" + }).then((result) => { + return (logger$5.getBigInt(result) === BN_1$2); + }).catch((error) => { + if (error.code === "CALL_EXCEPTION") { + return false; + } + // Rethrow the error: link is down, etc. Let future attempts retry. + __classPrivateFieldSet$o(this, _EnsResolver_supports2544, null, "f"); + throw error; + }), "f"); + } + return await __classPrivateFieldGet$o(this, _EnsResolver_supports2544, "f"); + } + async _fetch(selector, parameters = "0x") { + // e.g. keccak256("addr(bytes32,uint256)") + const addrData = concat([selector, namehash(this.name), parameters]); + const tx = { + to: this.address, + enableCcipRead: true, + data: addrData + }; + // Wildcard support; use EIP-2544 to resolve the request + let wrapped = false; + if (await this.supportsWildcard()) { + wrapped = true; + // selector("resolve(bytes,bytes)") + tx.data = concat(["0x9061b923", encodeBytes$1([dnsEncode(this.name), addrData])]); + } + try { + let data = await this.provider.call(tx); + if ((logger$5.getBytes(data).length % 32) === 4) { + return logger$5.throwError("resolver threw error", "CALL_EXCEPTION", { + transaction: tx, data + }); + } + if (wrapped) { + return parseBytes(data, 0); + } + return data; + } + catch (error) { + if (error.code !== "CALL_EXCEPTION") { + throw error; + } + } + return null; + } + async getAddress(coinType = 60) { + if (coinType === 60) { + try { + // keccak256("addr(bytes32)") + const result = await this._fetch("0x3b3b57de"); + // No address + if (result === "0x" || result === HashZero) { + return null; + } + const network = await this.provider.getNetwork(); + return network.formatter.callAddress(result); + } + catch (error) { + if (error.code === "CALL_EXCEPTION") { + return null; + } + throw error; + } + } + let coinPlugin = null; + for (const plugin of this.provider.plugins) { + if (!(plugin instanceof MulticoinProviderPlugin)) { + continue; + } + if (plugin.supportsCoinType(coinType)) { + coinPlugin = plugin; + break; + } + } + if (coinPlugin == null) { + return null; + } + // keccak256("addr(bytes32,uint256") + const data = parseBytes((await this._fetch("0xf1cb7e06", numPad$1(coinType))) || "0x", 0); + // No address + if (data == null || data === "0x") { + return null; + } + // Compute the address + const address = await coinPlugin.encodeAddress(coinType, data); + if (address != null) { + return address; + } + return logger$5.throwError(`invalid coin data`, "UNSUPPORTED_OPERATION", { + operation: `getAddress(${coinType})`, + info: { coinType, data } + }); + } + async getText(key) { + // The key encoded as parameter to fetchBytes + let keyBytes = toUtf8Bytes(key); + // The nodehash consumes the first slot, so the string pointer targets + // offset 64, with the length at offset 64 and data starting at offset 96 + const calldata = logger$5.getBytes(concat([numPad$1(64), numPad$1(keyBytes.length), keyBytes])); + const hexBytes = parseBytes((await this._fetch("0x59d1d43c", bytesPad$1(calldata))) || "0x", 0); + if (hexBytes == null || hexBytes === "0x") { + return null; + } + return toUtf8String(hexBytes); + } + async getContentHash() { + // keccak256("contenthash()") + const hexBytes = parseBytes((await this._fetch("0xbc1c58d1")) || "0x", 0); + // No contenthash + if (hexBytes == null || hexBytes === "0x") { + return null; + } + // IPFS (CID: 1, Type: 70=DAG-PB, 72=libp2p-key) + const ipfs = hexBytes.match(/^0x(e3010170|e5010172)(([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f]*))$/); + if (ipfs) { + const scheme = (ipfs[1] === "e3010170") ? "ipfs" : "ipns"; + const length = parseInt(ipfs[4], 16); + if (ipfs[5].length === length * 2) { + return `${scheme}:/\/${encodeBase58("0x" + ipfs[2])}`; + } + } + // Swarm (CID: 1, Type: swarm-manifest; hash/length hard-coded to keccak256/32) + const swarm = hexBytes.match(/^0xe40101fa011b20([0-9a-f]*)$/); + if (swarm && swarm[1].length === 64) { + return `bzz:/\/${swarm[1]}`; + } + return logger$5.throwError(`invalid or unsupported content hash data`, "UNSUPPORTED_OPERATION", { + operation: "getContentHash()", + info: { data: hexBytes } + }); + } + async getAvatar() { + return (await this._getAvatar()).url; + } + async _getAvatar() { + const linkage = [{ type: "name", value: this.name }]; + try { + // test data for ricmoo.eth + //const avatar = "eip155:1/erc721:0x265385c7f4132228A0d54EB1A9e7460b91c0cC68/29233"; + const avatar = await this.getText("avatar"); + if (avatar == null) { + linkage.push({ type: "!avatar", value: "" }); + throw new Error("!avatar"); + } + linkage.push({ type: "avatar", value: avatar }); + for (let i = 0; i < matchers.length; i++) { + const match = avatar.match(matchers[i]); + if (match == null) { + continue; + } + const scheme = match[1].toLowerCase(); + switch (scheme) { + case "https": + case "data": + linkage.push({ type: "url", value: avatar }); + return { linkage, url: avatar }; + case "ipfs": { + const url = getIpfsLink(avatar); + linkage.push({ type: "ipfs", value: avatar }); + linkage.push({ type: "url", value: url }); + return { linkage, url }; + } + case "erc721": + case "erc1155": { + // Depending on the ERC type, use tokenURI(uint256) or url(uint256) + const selector = (scheme === "erc721") ? "0xc87b56dd" : "0x0e89341c"; + linkage.push({ type: scheme, value: avatar }); + // The owner of this name + const owner = await this.getAddress(); + if (owner == null) { + linkage.push({ type: "!owner", value: "" }); + throw new Error("!owner"); + } + const comps = (match[2] || "").split("/"); + if (comps.length !== 2) { + linkage.push({ type: `!${scheme}caip`, value: (match[2] || "") }); + throw new Error("!caip"); + } + const formatter = (await this.provider.getNetwork()).formatter; + const addr = formatter.address(comps[0]); + const tokenId = numPad$1(comps[1]); + // Check that this account owns the token + if (scheme === "erc721") { + // ownerOf(uint256 tokenId) + const tokenOwner = formatter.callAddress(await this.provider.call({ + to: addr, data: concat(["0x6352211e", tokenId]) + })); + if (owner !== tokenOwner) { + linkage.push({ type: "!owner", value: tokenOwner }); + throw new Error("!owner"); + } + linkage.push({ type: "owner", value: tokenOwner }); + } + else if (scheme === "erc1155") { + // balanceOf(address owner, uint256 tokenId) + const balance = logger$5.getBigInt(await this.provider.call({ + to: addr, data: concat(["0x00fdd58e", zeroPadLeft(owner, 32), tokenId]) + })); + if (!balance) { + linkage.push({ type: "!balance", value: "0" }); + throw new Error("!balance"); + } + linkage.push({ type: "balance", value: balance.toString() }); + } + // Call the token contract for the metadata URL + const tx = { + to: comps[0], + data: concat([selector, tokenId]) + }; + let metadataUrl = parseString(await this.provider.call(tx), 0); + if (metadataUrl == null) { + linkage.push({ type: "!metadata-url", value: "" }); + throw new Error("!metadata-url"); + } + linkage.push({ type: "metadata-url-base", value: metadataUrl }); + // ERC-1155 allows a generic {id} in the URL + if (scheme === "erc1155") { + metadataUrl = metadataUrl.replace("{id}", hexlify(tokenId).substring(2)); + linkage.push({ type: "metadata-url-expanded", value: metadataUrl }); + } + // Transform IPFS metadata links + if (metadataUrl.match(/^ipfs:/i)) { + metadataUrl = getIpfsLink(metadataUrl); + } + linkage.push({ type: "metadata-url", value: metadataUrl }); + // Get the token metadata + let metadata = {}; + const response = await fetchData(metadataUrl); + try { + metadata = response.bodyJson; + } + catch (error) { + try { + linkage.push({ type: "!metadata", value: response.bodyText }); + } + catch (error) { + const bytes = response.body; + if (bytes) { + linkage.push({ type: "!metadata", value: hexlify(bytes) }); + } + throw error; + } + throw error; + } + if (!metadata) { + linkage.push({ type: "!metadata", value: "" }); + throw new Error("!metadata"); + } + linkage.push({ type: "metadata", value: JSON.stringify(metadata) }); + // Pull the image URL out + let imageUrl = metadata.image; + if (typeof (imageUrl) !== "string") { + linkage.push({ type: "!imageUrl", value: "" }); + throw new Error("!imageUrl"); + } + if (imageUrl.match(/^(https:\/\/|data:)/i)) { + // Allow + } + else { + // Transform IPFS link to gateway + const ipfs = imageUrl.match(matcherIpfs); + if (ipfs == null) { + linkage.push({ type: "!imageUrl-ipfs", value: imageUrl }); + throw new Error("!imageUrl-ipfs"); + } + linkage.push({ type: "imageUrl-ipfs", value: imageUrl }); + imageUrl = getIpfsLink(imageUrl); + } + linkage.push({ type: "url", value: imageUrl }); + return { linkage, url: imageUrl }; + } + } + } + } + catch (error) { + console.log("EE", error); + } + return { linkage, url: null }; + } + static async fromName(provider, name) { + let currentName = name; + while (true) { + if (currentName === "" || currentName === ".") { + return null; + } + // Optimization since the eth node cannot change and does + // not have a wildcar resolver + if (name !== "eth" && currentName === "eth") { + return null; + } + // Check the current node for a resolver + const addr = await __classPrivateFieldGet$o(EnsResolver, _a$1, "m", _EnsResolver_getResolver).call(EnsResolver, provider, currentName); + // Found a resolver! + if (addr != null) { + const resolver = new EnsResolver(provider, addr, name); + // Legacy resolver found, using EIP-2544 so it isn't safe to use + if (currentName !== name && !(await resolver.supportsWildcard())) { + return null; + } + return resolver; + } + // Get the parent node + currentName = currentName.split(".").slice(1).join("."); + } + } +} +_a$1 = EnsResolver, _EnsResolver_supports2544 = new WeakMap(), _EnsResolver_getResolver = async function _EnsResolver_getResolver(provider, name) { + const network = await provider.getNetwork(); + const ensPlugin = network.getPlugin("org.ethers.plugins.ens"); + // No ENS... + if (!ensPlugin) { + return logger$5.throwError("network does not support ENS", "UNSUPPORTED_OPERATION", { + operation: "getResolver", info: { network: network.name } + }); + } + try { + // keccak256("resolver(bytes32)") + const addrData = await provider.call({ + to: ensPlugin.address, + data: concat(["0x0178b8bf" + namehash(name)]), + enableCcipRead: true + }); + const addr = network.formatter.callAddress(addrData); + if (addr === dataSlice(HashZero, 0, 20)) { + return null; + } + return addr; + } + catch (error) { + // ENS registry cannot throw errors on resolver(bytes32), + // so probably a link error + throw error; + } + return null; +}; + +const version$5 = "@ethersproject/signing-key@6.0.0-beta.1"; + +const logger$4 = new Logger(version$5); + +var __classPrivateFieldSet$n = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$n = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _Signature_props; +// Constants +const BN_0$1 = BigInt(0); +const BN_1$1 = BigInt(1); +const BN_2$2 = BigInt(2); +const BN_27 = BigInt(27); +const BN_28 = BigInt(28); +const BN_35 = BigInt(35); +const BN_255 = BigInt(255); +const BN_MASK_255 = (BN_1$1 << BN_255) - BN_1$1; +const _guard$2 = {}; +const Zero = "0x0000000000000000000000000000000000000000000000000000000000000000"; +class Signature$1 { + constructor(guard, r, s, v) { + _Signature_props.set(this, void 0); + logger$4.assertPrivate(guard, _guard$2, "Signature"); + __classPrivateFieldSet$n(this, _Signature_props, { r, s, v, networkV: null }, "f"); + } + get r() { return getStore(__classPrivateFieldGet$n(this, _Signature_props, "f"), "r"); } + set r(value) { + if (dataLength(value) !== 32) { + logger$4.throwArgumentError("invalid r", "value", value); + } + setStore(__classPrivateFieldGet$n(this, _Signature_props, "f"), "r", hexlify(value)); + } + get s() { return getStore(__classPrivateFieldGet$n(this, _Signature_props, "f"), "s"); } + set s(value) { + if (dataLength(value) !== 32) { + logger$4.throwArgumentError("invalid r", "value", value); + } + else if (arrayify(value)[0] & 0x80) { + logger$4.throwArgumentError("non-canonical s", "value", value); + } + setStore(__classPrivateFieldGet$n(this, _Signature_props, "f"), "s", hexlify(value)); + } + get v() { return getStore(__classPrivateFieldGet$n(this, _Signature_props, "f"), "v"); } + set v(value) { + const v = logger$4.getNumber(value, "value"); + if (v !== 27 && v !== 28) { + throw new Error("@TODO"); + } + setStore(__classPrivateFieldGet$n(this, _Signature_props, "f"), "v", v); + } + get networkV() { return getStore(__classPrivateFieldGet$n(this, _Signature_props, "f"), "networkV"); } + get legacyChainId() { + const v = this.networkV; + if (v == null) { + return null; + } + return Signature$1.getChainId(v); + } + get vs() { + // The EIP-2098 compact representation + const vs = arrayify(this.s); + if (this.yParity) { + vs[0] |= 0x80; + } + return hexlify(vs); + } + get yParity() { + if (this.v === 27) { + return 0; + } + return 1; + /* + // When v is 0 or 1 it is the recid directly + if (this.v.isZero()) { return 0; } + if (this.v.eq(1)) { return 1; } + + // Otherwise, odd (e.g. 27) is 0 and even (e.g. 28) is 1 + return this.v.and(1).isZero() ? 1: 0; + */ + } + get serialized() { + return concat([this.r, this.s, (this.yParity ? "0x1c" : "0x1b")]); + } + [(_Signature_props = new WeakMap(), Symbol.for('nodejs.util.inspect.custom'))]() { + return `Signature { r: "${this.r}", s: "${this.s}", yParity: ${this.yParity}, networkV: ${this.networkV} }`; + } + clone() { + if (getStore(__classPrivateFieldGet$n(this, _Signature_props, "f"), "networkV")) { + logger$4.throwError("cannot clone EIP-155 signatures", "UNSUPPORTED_OPERATION", { + operation: "clone" + }); + } + const { r, s, v } = __classPrivateFieldGet$n(this, _Signature_props, "f"); + return new Signature$1(_guard$2, r, s, v); + } + freeze() { + Object.freeze(__classPrivateFieldGet$n(this, _Signature_props, "f")); + return this; + } + isFrozen() { + return Object.isFrozen(__classPrivateFieldGet$n(this, _Signature_props, "f")); + } + toJSON() { + const { r, s, v, networkV } = this; + return { + _type: "signature", + networkV: ((networkV != null) ? networkV.toString() : null), + r, s, v, + }; + } + static create() { + return new Signature$1(_guard$2, Zero, Zero, 27); + } + // Get the chain ID from an EIP-155 v + static getChainId(v) { + const bv = logger$4.getBigInt(v, "v"); + // The v is not an EIP-155 v, so it is the unspecified chain ID + if ((bv == BN_27) || (bv == BN_28)) { + return BN_0$1; + } + // Bad value for an EIP-155 v + if (bv < BN_35) { + logger$4.throwArgumentError("invalid EIP-155 v", "v", v); + } + return (bv - BN_35) / BN_2$2; + } + // Get the EIP-155 v transformed for a given chainId + static getChainIdV(chainId, v) { + return (logger$4.getBigInt(chainId) * BN_2$2) + BigInt(35 + v - 27); + } + // Convert an EIP-155 v into a normalized v + static getNormalizedV(v) { + const bv = logger$4.getBigInt(v); + if (bv == BN_0$1) { + return 27; + } + if (bv == BN_1$1) { + return 28; + } + // Otherwise, EIP-155 v means odd is 27 and even is 28 + return (bv & BN_1$1) ? 27 : 28; + } + static fromTransaction(r, s, _v) { + const v = logger$4.getBigInt(_v, "v"); + const sig = Signature$1.from({ r, s, v }); + setStore(__classPrivateFieldGet$n(sig, _Signature_props, "f"), "networkV", v); + return sig.freeze(); + } + static from(sig) { + const throwError = (message) => { + return logger$4.throwArgumentError(message, "signature", sig); + }; + if (typeof (sig) === "string") { + if (dataLength(sig) !== 65) { + throwError("invlaid raw signature length"); + } + const r = dataSlice(sig, 0, 32); + const s = dataSlice(sig, 32, 64); + if (BigInt(s) >> BN_255) { + throwError("non-canonical s"); + } + const v = Signature$1.getNormalizedV(dataSlice(sig, 64, 65)); + return new Signature$1(_guard$2, r, s, v); + } + if (sig instanceof Signature$1) { + return sig.clone(); + } + const r = sig.r; + if (r == null) { + throwError("missing r"); + } + if (!isHexString(r, 32)) { + throwError("invalid r"); + } + const s = (function (s, vs) { + if (s) { + if (!isHexString(s, 32)) { + throwError("invalid s"); + } + return s; + } + if (vs) { + if (!isHexString(vs, 32)) { + throwError("invalid vs"); + } + return toHex(BigInt(vs) & BN_MASK_255, 32); + } + return throwError("missing s"); + })(sig.s, sig.vs); + if (BigInt(s) >> BN_255) { + throwError("non-canonical s"); + } + const v = (function (v, vs, yParity) { + if (v) { + return Signature$1.getNormalizedV(v); + } + if (vs) { + if (!isHexString(vs, 32)) { + throwError("invalid vs"); + } + return ((arrayify(vs)[0] & 0x80) ? 28 : 27); + } + if (yParity) { + switch (yParity) { + case 0: return 27; + case 1: return 28; + } + return throwError("invalid yParity"); + } + //if (chainId) { return BigNumber.from(chainId).and(1).sub(27); } // @TODO: check this + return throwError("missing v"); + })(sig.v, sig.vs, sig.yParity); + // @TODO: check vs, chainId, yParity + const result = new Signature$1(_guard$2, r, s, v); + if (sig.yParity && sig.yParity !== result.yParity) ; + if (sig.vs && sig.vs !== result.vs) ; + //if (sig.chainId && sig.chainId !== result.chainId) { + //} + return result; + } +} + +/*! noble-secp256k1 - MIT License (c) 2019 Paul Miller (paulmillr.com) */ +const nodeCrypto = undefined; /* ethers:rollup */ +const _0n = BigInt(0); +const _1n = BigInt(1); +const _2n = BigInt(2); +const _3n = BigInt(3); +const _8n = BigInt(8); +const POW_2_256 = _2n ** BigInt(256); +const CURVE = { + a: _0n, + b: BigInt(7), + P: POW_2_256 - _2n ** BigInt(32) - BigInt(977), + n: POW_2_256 - BigInt('432420386565659656852420866394968145599'), + h: _1n, + Gx: BigInt('55066263022277343669578718895168534326250603453777594175500187360389116729240'), + Gy: BigInt('32670510020758816978083085130507043184471273380659243275938904335757337482424'), + beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'), +}; +function weistrass(x) { + const { a, b } = CURVE; + const x2 = mod(x * x); + const x3 = mod(x2 * x); + return mod(x3 + a * x + b); +} +const USE_ENDOMORPHISM = CURVE.a === _0n; +class JacobianPoint { + constructor(x, y, z) { + this.x = x; + this.y = y; + this.z = z; + } + static fromAffine(p) { + if (!(p instanceof Point)) { + throw new TypeError('JacobianPoint#fromAffine: expected Point'); + } + return new JacobianPoint(p.x, p.y, _1n); + } + static toAffineBatch(points) { + const toInv = invertBatch(points.map((p) => p.z)); + return points.map((p, i) => p.toAffine(toInv[i])); + } + static normalizeZ(points) { + return JacobianPoint.toAffineBatch(points).map(JacobianPoint.fromAffine); + } + equals(other) { + if (!(other instanceof JacobianPoint)) + throw new TypeError('JacobianPoint expected'); + const { x: X1, y: Y1, z: Z1 } = this; + const { x: X2, y: Y2, z: Z2 } = other; + const Z1Z1 = mod(Z1 ** _2n); + const Z2Z2 = mod(Z2 ** _2n); + const U1 = mod(X1 * Z2Z2); + const U2 = mod(X2 * Z1Z1); + const S1 = mod(mod(Y1 * Z2) * Z2Z2); + const S2 = mod(mod(Y2 * Z1) * Z1Z1); + return U1 === U2 && S1 === S2; + } + negate() { + return new JacobianPoint(this.x, mod(-this.y), this.z); + } + double() { + const { x: X1, y: Y1, z: Z1 } = this; + const A = mod(X1 ** _2n); + const B = mod(Y1 ** _2n); + const C = mod(B ** _2n); + const D = mod(_2n * (mod((X1 + B) ** _2n) - A - C)); + const E = mod(_3n * A); + const F = mod(E ** _2n); + const X3 = mod(F - _2n * D); + const Y3 = mod(E * (D - X3) - _8n * C); + const Z3 = mod(_2n * Y1 * Z1); + return new JacobianPoint(X3, Y3, Z3); + } + add(other) { + if (!(other instanceof JacobianPoint)) + throw new TypeError('JacobianPoint expected'); + const { x: X1, y: Y1, z: Z1 } = this; + const { x: X2, y: Y2, z: Z2 } = other; + if (X2 === _0n || Y2 === _0n) + return this; + if (X1 === _0n || Y1 === _0n) + return other; + const Z1Z1 = mod(Z1 ** _2n); + const Z2Z2 = mod(Z2 ** _2n); + const U1 = mod(X1 * Z2Z2); + const U2 = mod(X2 * Z1Z1); + const S1 = mod(mod(Y1 * Z2) * Z2Z2); + const S2 = mod(mod(Y2 * Z1) * Z1Z1); + const H = mod(U2 - U1); + const r = mod(S2 - S1); + if (H === _0n) { + if (r === _0n) { + return this.double(); + } + else { + return JacobianPoint.ZERO; + } + } + const HH = mod(H ** _2n); + const HHH = mod(H * HH); + const V = mod(U1 * HH); + const X3 = mod(r ** _2n - HHH - _2n * V); + const Y3 = mod(r * (V - X3) - S1 * HHH); + const Z3 = mod(Z1 * Z2 * H); + return new JacobianPoint(X3, Y3, Z3); + } + subtract(other) { + return this.add(other.negate()); + } + multiplyUnsafe(scalar) { + let n = normalizeScalar(scalar); + const P0 = JacobianPoint.ZERO; + if (n === _0n) + return P0; + if (n === _1n) + return this; + if (!USE_ENDOMORPHISM) { + let p = P0; + let d = this; + while (n > _0n) { + if (n & _1n) + p = p.add(d); + d = d.double(); + n >>= _1n; + } + return p; + } + let { k1neg, k1, k2neg, k2 } = splitScalarEndo(n); + let k1p = P0; + let k2p = P0; + let d = this; + while (k1 > _0n || k2 > _0n) { + if (k1 & _1n) + k1p = k1p.add(d); + if (k2 & _1n) + k2p = k2p.add(d); + d = d.double(); + k1 >>= _1n; + k2 >>= _1n; + } + if (k1neg) + k1p = k1p.negate(); + if (k2neg) + k2p = k2p.negate(); + k2p = new JacobianPoint(mod(k2p.x * CURVE.beta), k2p.y, k2p.z); + return k1p.add(k2p); + } + precomputeWindow(W) { + const windows = USE_ENDOMORPHISM ? 128 / W + 1 : 256 / W + 1; + const points = []; + let p = this; + let base = p; + for (let window = 0; window < windows; window++) { + base = p; + points.push(base); + for (let i = 1; i < 2 ** (W - 1); i++) { + base = base.add(p); + points.push(base); + } + p = base.double(); + } + return points; + } + wNAF(n, affinePoint) { + if (!affinePoint && this.equals(JacobianPoint.BASE)) + affinePoint = Point.BASE; + const W = (affinePoint && affinePoint._WINDOW_SIZE) || 1; + if (256 % W) { + throw new Error('Point#wNAF: Invalid precomputation window, must be power of 2'); + } + let precomputes = affinePoint && pointPrecomputes.get(affinePoint); + if (!precomputes) { + precomputes = this.precomputeWindow(W); + if (affinePoint && W !== 1) { + precomputes = JacobianPoint.normalizeZ(precomputes); + pointPrecomputes.set(affinePoint, precomputes); + } + } + let p = JacobianPoint.ZERO; + let f = JacobianPoint.ZERO; + const windows = 1 + (USE_ENDOMORPHISM ? 128 / W : 256 / W); + const windowSize = 2 ** (W - 1); + const mask = BigInt(2 ** W - 1); + const maxNumber = 2 ** W; + const shiftBy = BigInt(W); + for (let window = 0; window < windows; window++) { + const offset = window * windowSize; + let wbits = Number(n & mask); + n >>= shiftBy; + if (wbits > windowSize) { + wbits -= maxNumber; + n += _1n; + } + if (wbits === 0) { + let pr = precomputes[offset]; + if (window % 2) + pr = pr.negate(); + f = f.add(pr); + } + else { + let cached = precomputes[offset + Math.abs(wbits) - 1]; + if (wbits < 0) + cached = cached.negate(); + p = p.add(cached); + } + } + return { p, f }; + } + multiply(scalar, affinePoint) { + let n = normalizeScalar(scalar); + let point; + let fake; + if (USE_ENDOMORPHISM) { + const { k1neg, k1, k2neg, k2 } = splitScalarEndo(n); + let { p: k1p, f: f1p } = this.wNAF(k1, affinePoint); + let { p: k2p, f: f2p } = this.wNAF(k2, affinePoint); + if (k1neg) + k1p = k1p.negate(); + if (k2neg) + k2p = k2p.negate(); + k2p = new JacobianPoint(mod(k2p.x * CURVE.beta), k2p.y, k2p.z); + point = k1p.add(k2p); + fake = f1p.add(f2p); + } + else { + const { p, f } = this.wNAF(n, affinePoint); + point = p; + fake = f; + } + return JacobianPoint.normalizeZ([point, fake])[0]; + } + toAffine(invZ = invert(this.z)) { + const { x, y, z } = this; + const iz1 = invZ; + const iz2 = mod(iz1 * iz1); + const iz3 = mod(iz2 * iz1); + const ax = mod(x * iz2); + const ay = mod(y * iz3); + const zz = mod(z * iz1); + if (zz !== _1n) + throw new Error('invZ was invalid'); + return new Point(ax, ay); + } +} +JacobianPoint.BASE = new JacobianPoint(CURVE.Gx, CURVE.Gy, _1n); +JacobianPoint.ZERO = new JacobianPoint(_0n, _1n, _0n); +const pointPrecomputes = new WeakMap(); +class Point { + constructor(x, y) { + this.x = x; + this.y = y; + } + _setWindowSize(windowSize) { + this._WINDOW_SIZE = windowSize; + pointPrecomputes.delete(this); + } + static fromCompressedHex(bytes) { + const isShort = bytes.length === 32; + const x = bytesToNumber(isShort ? bytes : bytes.subarray(1)); + if (!isValidFieldElement(x)) + throw new Error('Point is not on curve'); + const y2 = weistrass(x); + let y = sqrtMod(y2); + const isYOdd = (y & _1n) === _1n; + if (isShort) { + if (isYOdd) + y = mod(-y); + } + else { + const isFirstByteOdd = (bytes[0] & 1) === 1; + if (isFirstByteOdd !== isYOdd) + y = mod(-y); + } + const point = new Point(x, y); + point.assertValidity(); + return point; + } + static fromUncompressedHex(bytes) { + const x = bytesToNumber(bytes.subarray(1, 33)); + const y = bytesToNumber(bytes.subarray(33, 65)); + const point = new Point(x, y); + point.assertValidity(); + return point; + } + static fromHex(hex) { + const bytes = ensureBytes(hex); + const len = bytes.length; + const header = bytes[0]; + if (len === 32 || (len === 33 && (header === 0x02 || header === 0x03))) { + return this.fromCompressedHex(bytes); + } + if (len === 65 && header === 0x04) + return this.fromUncompressedHex(bytes); + throw new Error(`Point.fromHex: received invalid point. Expected 32-33 compressed bytes or 65 uncompressed bytes, not ${len}`); + } + static fromPrivateKey(privateKey) { + return Point.BASE.multiply(normalizePrivateKey(privateKey)); + } + static fromSignature(msgHash, signature, recovery) { + msgHash = ensureBytes(msgHash); + const h = truncateHash(msgHash); + const { r, s } = normalizeSignature(signature); + if (recovery !== 0 && recovery !== 1) { + throw new Error('Cannot recover signature: invalid recovery bit'); + } + if (h === _0n) + throw new Error('Cannot recover signature: msgHash cannot be 0'); + const prefix = recovery & 1 ? '03' : '02'; + const R = Point.fromHex(prefix + numTo32bStr(r)); + const { n } = CURVE; + const rinv = invert(r, n); + const u1 = mod(-h * rinv, n); + const u2 = mod(s * rinv, n); + const Q = Point.BASE.multiplyAndAddUnsafe(R, u1, u2); + if (!Q) + throw new Error('Cannot recover signature: point at infinify'); + Q.assertValidity(); + return Q; + } + toRawBytes(isCompressed = false) { + return hexToBytes(this.toHex(isCompressed)); + } + toHex(isCompressed = false) { + const x = numTo32bStr(this.x); + if (isCompressed) { + const prefix = this.y & _1n ? '03' : '02'; + return `${prefix}${x}`; + } + else { + return `04${x}${numTo32bStr(this.y)}`; + } + } + toHexX() { + return this.toHex(true).slice(2); + } + toRawX() { + return this.toRawBytes(true).slice(1); + } + assertValidity() { + const msg = 'Point is not on elliptic curve'; + const { x, y } = this; + if (!isValidFieldElement(x) || !isValidFieldElement(y)) + throw new Error(msg); + const left = mod(y * y); + const right = weistrass(x); + if (mod(left - right) !== _0n) + throw new Error(msg); + } + equals(other) { + return this.x === other.x && this.y === other.y; + } + negate() { + return new Point(this.x, mod(-this.y)); + } + double() { + return JacobianPoint.fromAffine(this).double().toAffine(); + } + add(other) { + return JacobianPoint.fromAffine(this).add(JacobianPoint.fromAffine(other)).toAffine(); + } + subtract(other) { + return this.add(other.negate()); + } + multiply(scalar) { + return JacobianPoint.fromAffine(this).multiply(scalar, this).toAffine(); + } + multiplyAndAddUnsafe(Q, a, b) { + const P = JacobianPoint.fromAffine(this); + const aP = P.multiply(a); + const bQ = JacobianPoint.fromAffine(Q).multiplyUnsafe(b); + const sum = aP.add(bQ); + return sum.equals(JacobianPoint.ZERO) ? undefined : sum.toAffine(); + } +} +Point.BASE = new Point(CURVE.Gx, CURVE.Gy); +Point.ZERO = new Point(_0n, _0n); +function sliceDER(s) { + return Number.parseInt(s[0], 16) >= 8 ? '00' + s : s; +} +function parseDERInt(data) { + if (data.length < 2 || data[0] !== 0x02) { + throw new Error(`Invalid signature integer tag: ${bytesToHex(data)}`); + } + const len = data[1]; + const res = data.subarray(2, len + 2); + if (!len || res.length !== len) { + throw new Error(`Invalid signature integer: wrong length`); + } + if (res[0] === 0x00 && res[1] <= 0x7f) { + throw new Error('Invalid signature integer: trailing length'); + } + return { data: bytesToNumber(res), left: data.subarray(len + 2) }; +} +function parseDERSignature(data) { + if (data.length < 2 || data[0] != 0x30) { + throw new Error(`Invalid signature tag: ${bytesToHex(data)}`); + } + if (data[1] !== data.length - 2) { + throw new Error('Invalid signature: incorrect length'); + } + const { data: r, left: sBytes } = parseDERInt(data.subarray(2)); + const { data: s, left: rBytesLeft } = parseDERInt(sBytes); + if (rBytesLeft.length) { + throw new Error(`Invalid signature: left bytes after parsing: ${bytesToHex(rBytesLeft)}`); + } + return { r, s }; +} +class Signature { + constructor(r, s) { + this.r = r; + this.s = s; + this.assertValidity(); + } + static fromCompact(hex) { + const arr = isUint8a(hex); + const name = 'Signature.fromCompact'; + if (typeof hex !== 'string' && !arr) + throw new TypeError(`${name}: Expected string or Uint8Array`); + const str = arr ? bytesToHex(hex) : hex; + if (str.length !== 128) + throw new Error(`${name}: Expected 64-byte hex`); + return new Signature(hexToNumber(str.slice(0, 64)), hexToNumber(str.slice(64, 128))); + } + static fromDER(hex) { + const arr = isUint8a(hex); + if (typeof hex !== 'string' && !arr) + throw new TypeError(`Signature.fromDER: Expected string or Uint8Array`); + const { r, s } = parseDERSignature(arr ? hex : hexToBytes(hex)); + return new Signature(r, s); + } + static fromHex(hex) { + return this.fromDER(hex); + } + assertValidity() { + const { r, s } = this; + if (!isWithinCurveOrder(r)) + throw new Error('Invalid Signature: r must be 0 < r < n'); + if (!isWithinCurveOrder(s)) + throw new Error('Invalid Signature: s must be 0 < s < n'); + } + hasHighS() { + const HALF = CURVE.n >> _1n; + return this.s > HALF; + } + normalizeS() { + return this.hasHighS() ? new Signature(this.r, CURVE.n - this.s) : this; + } + toDERRawBytes(isCompressed = false) { + return hexToBytes(this.toDERHex(isCompressed)); + } + toDERHex(isCompressed = false) { + const sHex = sliceDER(numberToHexUnpadded(this.s)); + if (isCompressed) + return sHex; + const rHex = sliceDER(numberToHexUnpadded(this.r)); + const rLen = numberToHexUnpadded(rHex.length / 2); + const sLen = numberToHexUnpadded(sHex.length / 2); + const length = numberToHexUnpadded(rHex.length / 2 + sHex.length / 2 + 4); + return `30${length}02${rLen}${rHex}02${sLen}${sHex}`; + } + toRawBytes() { + return this.toDERRawBytes(); + } + toHex() { + return this.toDERHex(); + } + toCompactRawBytes() { + return hexToBytes(this.toCompactHex()); + } + toCompactHex() { + return numTo32bStr(this.r) + numTo32bStr(this.s); + } +} +function concatBytes(...arrays) { + if (!arrays.every(isUint8a)) + throw new Error('Uint8Array list expected'); + if (arrays.length === 1) + return arrays[0]; + const length = arrays.reduce((a, arr) => a + arr.length, 0); + const result = new Uint8Array(length); + for (let i = 0, pad = 0; i < arrays.length; i++) { + const arr = arrays[i]; + result.set(arr, pad); + pad += arr.length; + } + return result; +} +function isUint8a(bytes) { + return bytes instanceof Uint8Array; +} +const hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0')); +function bytesToHex(uint8a) { + if (!(uint8a instanceof Uint8Array)) + throw new Error('Expected Uint8Array'); + let hex = ''; + for (let i = 0; i < uint8a.length; i++) { + hex += hexes[uint8a[i]]; + } + return hex; +} +function numTo32bStr(num) { + if (num > POW_2_256) + throw new Error('Expected number < 2^256'); + return num.toString(16).padStart(64, '0'); +} +function numTo32b(num) { + return hexToBytes(numTo32bStr(num)); +} +function numberToHexUnpadded(num) { + const hex = num.toString(16); + return hex.length & 1 ? `0${hex}` : hex; +} +function hexToNumber(hex) { + if (typeof hex !== 'string') { + throw new TypeError('hexToNumber: expected string, got ' + typeof hex); + } + return BigInt(`0x${hex}`); +} +function hexToBytes(hex) { + if (typeof hex !== 'string') { + throw new TypeError('hexToBytes: expected string, got ' + typeof hex); + } + if (hex.length % 2) + throw new Error('hexToBytes: received invalid unpadded hex' + hex.length); + const array = new Uint8Array(hex.length / 2); + for (let i = 0; i < array.length; i++) { + const j = i * 2; + const hexByte = hex.slice(j, j + 2); + const byte = Number.parseInt(hexByte, 16); + if (Number.isNaN(byte) || byte < 0) + throw new Error('Invalid byte sequence'); + array[i] = byte; + } + return array; +} +function bytesToNumber(bytes) { + return hexToNumber(bytesToHex(bytes)); +} +function ensureBytes(hex) { + return hex instanceof Uint8Array ? Uint8Array.from(hex) : hexToBytes(hex); +} +function normalizeScalar(num) { + if (typeof num === 'number' && Number.isSafeInteger(num) && num > 0) + return BigInt(num); + if (typeof num === 'bigint' && isWithinCurveOrder(num)) + return num; + throw new TypeError('Expected valid private scalar: 0 < scalar < curve.n'); +} +function mod(a, b = CURVE.P) { + const result = a % b; + return result >= _0n ? result : b + result; +} +function pow2(x, power) { + const { P } = CURVE; + let res = x; + while (power-- > _0n) { + res *= res; + res %= P; + } + return res; +} +function sqrtMod(x) { + const { P } = CURVE; + const _6n = BigInt(6); + const _11n = BigInt(11); + const _22n = BigInt(22); + const _23n = BigInt(23); + const _44n = BigInt(44); + const _88n = BigInt(88); + const b2 = (x * x * x) % P; + const b3 = (b2 * b2 * x) % P; + const b6 = (pow2(b3, _3n) * b3) % P; + const b9 = (pow2(b6, _3n) * b3) % P; + const b11 = (pow2(b9, _2n) * b2) % P; + const b22 = (pow2(b11, _11n) * b11) % P; + const b44 = (pow2(b22, _22n) * b22) % P; + const b88 = (pow2(b44, _44n) * b44) % P; + const b176 = (pow2(b88, _88n) * b88) % P; + const b220 = (pow2(b176, _44n) * b44) % P; + const b223 = (pow2(b220, _3n) * b3) % P; + const t1 = (pow2(b223, _23n) * b22) % P; + const t2 = (pow2(t1, _6n) * b2) % P; + return pow2(t2, _2n); +} +function invert(number, modulo = CURVE.P) { + if (number === _0n || modulo <= _0n) { + throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`); + } + let a = mod(number, modulo); + let b = modulo; + let x = _0n, u = _1n; + while (a !== _0n) { + const q = b / a; + const r = b % a; + const m = x - u * q; + b = a, a = r, x = u, u = m; + } + const gcd = b; + if (gcd !== _1n) + throw new Error('invert: does not exist'); + return mod(x, modulo); +} +function invertBatch(nums, p = CURVE.P) { + const scratch = new Array(nums.length); + const lastMultiplied = nums.reduce((acc, num, i) => { + if (num === _0n) + return acc; + scratch[i] = acc; + return mod(acc * num, p); + }, _1n); + const inverted = invert(lastMultiplied, p); + nums.reduceRight((acc, num, i) => { + if (num === _0n) + return acc; + scratch[i] = mod(acc * scratch[i], p); + return mod(acc * num, p); + }, inverted); + return scratch; +} +const divNearest = (a, b) => (a + b / _2n) / b; +const POW_2_128 = _2n ** BigInt(128); +function splitScalarEndo(k) { + const { n } = CURVE; + const a1 = BigInt('0x3086d221a7d46bcde86c90e49284eb15'); + const b1 = -_1n * BigInt('0xe4437ed6010e88286f547fa90abfe4c3'); + const a2 = BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8'); + const b2 = a1; + const c1 = divNearest(b2 * k, n); + const c2 = divNearest(-b1 * k, n); + let k1 = mod(k - c1 * a1 - c2 * a2, n); + let k2 = mod(-c1 * b1 - c2 * b2, n); + const k1neg = k1 > POW_2_128; + const k2neg = k2 > POW_2_128; + if (k1neg) + k1 = n - k1; + if (k2neg) + k2 = n - k2; + if (k1 > POW_2_128 || k2 > POW_2_128) { + throw new Error('splitScalarEndo: Endomorphism failed, k=' + k); + } + return { k1neg, k1, k2neg, k2 }; +} +function truncateHash(hash) { + const { n } = CURVE; + const byteLength = hash.length; + const delta = byteLength * 8 - 256; + let h = bytesToNumber(hash); + if (delta > 0) + h = h >> BigInt(delta); + if (h >= n) + h -= n; + return h; +} +class HmacDrbg { + constructor() { + this.v = new Uint8Array(32).fill(1); + this.k = new Uint8Array(32).fill(0); + this.counter = 0; + } + hmac(...values) { + return utils.hmacSha256(this.k, ...values); + } + hmacSync(...values) { + if (typeof utils.hmacSha256Sync !== 'function') + throw new Error('utils.hmacSha256Sync is undefined, you need to set it'); + const res = utils.hmacSha256Sync(this.k, ...values); + if (res instanceof Promise) + throw new Error('To use sync sign(), ensure utils.hmacSha256 is sync'); + return res; + } + incr() { + if (this.counter >= 1000) { + throw new Error('Tried 1,000 k values for sign(), all were invalid'); + } + this.counter += 1; + } + async reseed(seed = new Uint8Array()) { + this.k = await this.hmac(this.v, Uint8Array.from([0x00]), seed); + this.v = await this.hmac(this.v); + if (seed.length === 0) + return; + this.k = await this.hmac(this.v, Uint8Array.from([0x01]), seed); + this.v = await this.hmac(this.v); + } + reseedSync(seed = new Uint8Array()) { + this.k = this.hmacSync(this.v, Uint8Array.from([0x00]), seed); + this.v = this.hmacSync(this.v); + if (seed.length === 0) + return; + this.k = this.hmacSync(this.v, Uint8Array.from([0x01]), seed); + this.v = this.hmacSync(this.v); + } + async generate() { + this.incr(); + this.v = await this.hmac(this.v); + return this.v; + } + generateSync() { + this.incr(); + this.v = this.hmacSync(this.v); + return this.v; + } +} +function isWithinCurveOrder(num) { + return _0n < num && num < CURVE.n; +} +function isValidFieldElement(num) { + return _0n < num && num < CURVE.P; +} +function kmdToSig(kBytes, m, d) { + const k = bytesToNumber(kBytes); + if (!isWithinCurveOrder(k)) + return; + const { n } = CURVE; + const q = Point.BASE.multiply(k); + const r = mod(q.x, n); + if (r === _0n) + return; + const s = mod(invert(k, n) * mod(m + d * r, n), n); + if (s === _0n) + return; + const sig = new Signature(r, s); + const recovery = (q.x === sig.r ? 0 : 2) | Number(q.y & _1n); + return { sig, recovery }; +} +function normalizePrivateKey(key) { + let num; + if (typeof key === 'bigint') { + num = key; + } + else if (typeof key === 'number' && Number.isSafeInteger(key) && key > 0) { + num = BigInt(key); + } + else if (typeof key === 'string') { + if (key.length !== 64) + throw new Error('Expected 32 bytes of private key'); + num = hexToNumber(key); + } + else if (isUint8a(key)) { + if (key.length !== 32) + throw new Error('Expected 32 bytes of private key'); + num = bytesToNumber(key); + } + else { + throw new TypeError('Expected valid private key'); + } + if (!isWithinCurveOrder(num)) + throw new Error('Expected private key: 0 < key < n'); + return num; +} +function normalizePublicKey(publicKey) { + if (publicKey instanceof Point) { + publicKey.assertValidity(); + return publicKey; + } + else { + return Point.fromHex(publicKey); + } +} +function normalizeSignature(signature) { + if (signature instanceof Signature) { + signature.assertValidity(); + return signature; + } + try { + return Signature.fromDER(signature); + } + catch (error) { + return Signature.fromCompact(signature); + } +} +function getPublicKey(privateKey, isCompressed = false) { + return Point.fromPrivateKey(privateKey).toRawBytes(isCompressed); +} +function recoverPublicKey(msgHash, signature, recovery, isCompressed = false) { + return Point.fromSignature(msgHash, signature, recovery).toRawBytes(isCompressed); +} +function isPub(item) { + const arr = isUint8a(item); + const str = typeof item === 'string'; + const len = (arr || str) && item.length; + if (arr) + return len === 33 || len === 65; + if (str) + return len === 66 || len === 130; + if (item instanceof Point) + return true; + return false; +} +function getSharedSecret(privateA, publicB, isCompressed = false) { + if (isPub(privateA)) + throw new TypeError('getSharedSecret: first arg must be private key'); + if (!isPub(publicB)) + throw new TypeError('getSharedSecret: second arg must be public key'); + const b = normalizePublicKey(publicB); + b.assertValidity(); + return b.multiply(normalizePrivateKey(privateA)).toRawBytes(isCompressed); +} +function bits2int(bytes) { + const slice = bytes.length > 32 ? bytes.slice(0, 32) : bytes; + return bytesToNumber(slice); +} +function bits2octets(bytes) { + const z1 = bits2int(bytes); + const z2 = mod(z1, CURVE.n); + return int2octets(z2 < _0n ? z1 : z2); +} +function int2octets(num) { + if (typeof num !== 'bigint') + throw new Error('Expected bigint'); + const hex = numTo32bStr(num); + return hexToBytes(hex); +} +function initSigArgs(msgHash, privateKey, extraEntropy) { + if (msgHash == null) + throw new Error(`sign: expected valid message hash, not "${msgHash}"`); + const h1 = ensureBytes(msgHash); + const d = normalizePrivateKey(privateKey); + const seedArgs = [int2octets(d), bits2octets(h1)]; + if (extraEntropy != null) { + if (extraEntropy === true) + extraEntropy = utils.randomBytes(32); + const e = ensureBytes(extraEntropy); + if (e.length !== 32) + throw new Error('sign: Expected 32 bytes of extra data'); + seedArgs.push(e); + } + const seed = concatBytes(...seedArgs); + const m = bits2int(h1); + return { seed, m, d }; +} +function finalizeSig(recSig, opts) { + let { sig, recovery } = recSig; + const { canonical, der, recovered } = Object.assign({ canonical: true, der: true }, opts); + if (canonical && sig.hasHighS()) { + sig = sig.normalizeS(); + recovery ^= 1; + } + const hashed = der ? sig.toDERRawBytes() : sig.toCompactRawBytes(); + return recovered ? [hashed, recovery] : hashed; +} +function signSync(msgHash, privKey, opts = {}) { + const { seed, m, d } = initSigArgs(msgHash, privKey, opts.extraEntropy); + let sig; + const drbg = new HmacDrbg(); + drbg.reseedSync(seed); + while (!(sig = kmdToSig(drbg.generateSync(), m, d))) + drbg.reseedSync(); + return finalizeSig(sig, opts); +} +Point.BASE._setWindowSize(8); +const crypto = { + node: nodeCrypto, + web: typeof self === 'object' && 'crypto' in self ? self.crypto : undefined, +}; +const utils = { + isValidPrivateKey(privateKey) { + try { + normalizePrivateKey(privateKey); + return true; + } + catch (error) { + return false; + } + }, + hashToPrivateKey: (hash) => { + hash = ensureBytes(hash); + if (hash.length < 40 || hash.length > 1024) + throw new Error('Expected 40-1024 bytes of private key as per FIPS 186'); + const num = mod(bytesToNumber(hash), CURVE.n); + if (num === _0n || num === _1n) + throw new Error('Invalid private key'); + return numTo32b(num); + }, + randomBytes: (bytesLength = 32) => { + if (crypto.web) { + return crypto.web.getRandomValues(new Uint8Array(bytesLength)); + } + else { + throw new Error("The environment doesn't have randomBytes function"); + } + }, + randomPrivateKey: () => { + return utils.hashToPrivateKey(utils.randomBytes(40)); + }, + bytesToHex, + mod, + sha256: async (message) => { + if (crypto.web) { + const buffer = await crypto.web.subtle.digest('SHA-256', message.buffer); + return new Uint8Array(buffer); + } + else { + throw new Error("The environment doesn't have sha256 function"); + } + }, + hmacSha256: async (key, ...messages) => { + if (crypto.web) { + const ckey = await crypto.web.subtle.importKey('raw', key, { name: 'HMAC', hash: { name: 'SHA-256' } }, false, ['sign']); + const message = concatBytes(...messages); + const buffer = await crypto.web.subtle.sign('HMAC', ckey, message); + return new Uint8Array(buffer); + } + else { + throw new Error("The environment doesn't have hmac-sha256 function"); + } + }, + sha256Sync: undefined, + hmacSha256Sync: undefined, + precompute(windowSize = 8, point = Point.BASE) { + const cached = point === Point.BASE ? point : new Point(point.x, point.y); + cached._setWindowSize(windowSize); + cached.multiply(_3n); + return cached; + }, +}; + +var __classPrivateFieldSet$m = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$m = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _SigningKey_privateKey; +// Make noble-secp256k1 sync +utils.hmacSha256Sync = function (key, ...messages) { + return arrayify(computeHmac("sha256", key, concat(messages))); +}; +class SigningKey { + constructor(privateKey) { + _SigningKey_privateKey.set(this, void 0); + logger$4.assertArgument((dataLength(privateKey) === 32), "invalid private key length", "privateKey", "[REDACTED]"); + __classPrivateFieldSet$m(this, _SigningKey_privateKey, hexlify(privateKey), "f"); + } + get privateKey() { return __classPrivateFieldGet$m(this, _SigningKey_privateKey, "f"); } + get publicKey() { return SigningKey.computePublicKey(__classPrivateFieldGet$m(this, _SigningKey_privateKey, "f")); } + get compressedPublicKey() { return SigningKey.computePublicKey(__classPrivateFieldGet$m(this, _SigningKey_privateKey, "f"), true); } + sign(digest) { + logger$4.assertArgument((dataLength(digest) === 32), "invalid digest length", "digest", digest); + const [sigDer, recid] = signSync(arrayify(digest), arrayify(__classPrivateFieldGet$m(this, _SigningKey_privateKey, "f")), { + recovered: true, + canonical: true + }); + const sig = Signature.fromHex(sigDer); + return Signature$1.from({ + r: toHex("0x" + sig.r.toString(16), 32), + s: toHex("0x" + sig.s.toString(16), 32), + v: (recid ? 0x1c : 0x1b) + }).freeze(); + } + computeShardSecret(other) { + const pubKey = SigningKey.computePublicKey(other); + return hexlify(getSharedSecret(arrayify(__classPrivateFieldGet$m(this, _SigningKey_privateKey, "f")), pubKey)); + } + static computePublicKey(key, compressed) { + let bytes = logger$4.getBytes(key, "key"); + if (bytes.length === 32) { + const pubKey = getPublicKey(bytes, !!compressed); + return hexlify(pubKey); + } + if (bytes.length === 64) { + const pub = new Uint8Array(65); + pub[0] = 0x04; + pub.set(bytes, 1); + bytes = pub; + } + const point = Point.fromHex(bytes); + return hexlify(point.toRawBytes(compressed)); + } + static recoverPublicKey(digest, signature) { + const sig = Signature$1.from(signature); + const der = Signature.fromCompact(arrayify(concat([sig.r, sig.s]))).toDERRawBytes(); + const pubKey = recoverPublicKey(arrayify(digest), der, sig.yParity); + if (pubKey != null) { + return hexlify(pubKey); + } + return logger$4.throwArgumentError("invalid signautre for digest", "signature", signature); + } + static _addPoints(p0, p1, compressed) { + const pub0 = Point.fromHex(SigningKey.computePublicKey(p0).substring(2)); + const pub1 = Point.fromHex(SigningKey.computePublicKey(p1).substring(2)); + return "0x" + pub0.add(pub1).toHex(!!compressed); + } +} +_SigningKey_privateKey = new WeakMap(); +/* +const key = new SigningKey("0x1234567890123456789012345678901234567890123456789012345678901234"); +console.log(key); +console.log(key.sign("0x1234567890123456789012345678901234567890123456789012345678901234")); +{ + const privKey = "0x1234567812345678123456781234567812345678123456781234567812345678"; + const signingKey = new SigningKey(privKey); + console.log("0", signingKey, signingKey.publicKey, signingKey.publicKeyCompressed); + + let pubKey = SigningKey.computePublicKey(privKey); + let pubKeyComp = SigningKey.computePublicKey(privKey, true); + let pubKeyRaw = "0x" + SigningKey.computePublicKey(privKey).substring(4); + console.log("A", pubKey, pubKeyComp); + + let a = SigningKey.computePublicKey(pubKey); + let b = SigningKey.computePublicKey(pubKey, true); + console.log("B", a, b); + + a = SigningKey.computePublicKey(pubKeyComp); + b = SigningKey.computePublicKey(pubKeyComp, true); + console.log("C", a, b); + + a = SigningKey.computePublicKey(pubKeyRaw); + b = SigningKey.computePublicKey(pubKeyRaw, true); + console.log("D", a, b); + + const digest = "0x1122334411223344112233441122334411223344112233441122334411223344"; + const sig = signingKey.sign(digest); + console.log("SS", sig, sig.r, sig.s, sig.yParity); + + console.log("R", SigningKey.recoverPublicKey(digest, sig)); +} +*/ + +function accessSetify(addr, storageKeys) { + return { + address: getAddress(addr), + storageKeys: (storageKeys || []).map((storageKey, index) => { + if (dataLength(storageKey) !== 32) { + //logger.throwArgumentError("invalid access list storageKey", `accessList[${ addr }> + throw new Error(""); + } + return storageKey.toLowerCase(); + }) + }; +} +function accessListify(value) { + if (Array.isArray(value)) { + return value.map((set, index) => { + if (Array.isArray(set)) { + if (set.length > 2) { + //logger.throwArgumentError("access list expected to be [ address, storageKeys[> + throw new Error(""); + } + return accessSetify(set[0], set[1]); + } + return accessSetify(set.address, set.storageKeys); + }); + } + const result = Object.keys(value).map((addr) => { + const storageKeys = value[addr].reduce((accum, storageKey) => { + accum[storageKey] = true; + return accum; + }, {}); + return accessSetify(addr, Object.keys(storageKeys).sort()); + }); + result.sort((a, b) => (a.address.localeCompare(b.address))); + return result; +} + +const version$4 = "@ethersproject/transactions@6.0.0-beta.1"; + +const logger$3 = new Logger(version$4); + +var __classPrivateFieldSet$l = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$l = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _Transaction_props; +const BN_0 = BigInt(0); +function formatNumber(_value, name) { + const value = logger$3.getBigInt(_value, "value"); + const result = toArray(value); + if (result.length > 32) { + logger$3.throwArgumentError(`value too large`, `tx.${name}`, value); + } + return result; +} +function formatAccessList(value) { + return accessListify(value).map((set) => [set.address, set.storageKeys]); +} +function _parseLegacy(data) { + return {}; +} +function _serializeLegacy(tx, sig) { + const fields = [ + formatNumber(tx.nonce || 0, "nonce"), + formatNumber(tx.gasPrice || 0, "gasPrice"), + formatNumber(tx.gasLimit || 0, "gasLimit"), + ((tx.to != null) ? getAddress(tx.to) : "0x"), + formatNumber(tx.value || 0, "value"), + (tx.data || "0x"), + ]; + let chainId = BN_0; + if (tx.chainId != null) { + // A chainId was provided; if non-zero we'll use EIP-155 + chainId = logger$3.getBigInt(tx.chainId, "tx.chainId"); + // We have a chainId in the tx and an EIP-155 v in the signature, + // make sure they agree with each other + if (sig && sig.networkV != null && sig.legacyChainId !== chainId) { + logger$3.throwArgumentError("tx.chainId/sig.v mismatch", "sig", sig); + } + } + else if (sig) { + // No chainId provided, but the signature is signing with EIP-155; derive chainId + const legacy = sig.legacyChainId; + if (legacy != null) { + chainId = legacy; + } + } + // Requesting an unsigned transaction + if (!sig) { + // We have an EIP-155 transaction (chainId was specified and non-zero) + if (chainId !== BN_0) { + fields.push(toArray(chainId)); + fields.push("0x"); + fields.push("0x"); + } + return encodeRlp(fields); + } + // We pushed a chainId and null r, s on for hashing only; remove those + let v = BigInt(27 + sig.yParity); + if (chainId !== BN_0) { + v = Signature$1.getChainIdV(chainId, sig.v); + } + else if (BigInt(sig.v) !== v) { + logger$3.throwArgumentError("tx.chainId/sig.v mismatch", "sig", sig); + } + fields.push(toArray(v)); + fields.push(toArray(sig.r)); + fields.push(toArray(sig.s)); + return encodeRlp(fields); +} +function _parseEip1559(data) { + throw new Error("@TODO"); +} +function _serializeEip1559(tx, sig) { + // If there is an explicit gasPrice, make sure it matches the + // EIP-1559 fees; otherwise they may not understand what they + // think they are setting in terms of fee. + //if (tx.gasPrice != null) { + // if (tx.gasPrice !== (tx.maxFeePerGas || BN_0)) { + // logger.throwArgumentError("mismatch EIP-1559 gasPrice != maxFeePerGas", "tx", tx); + // } + //} + const fields = [ + formatNumber(tx.chainId || 0, "chainId"), + formatNumber(tx.nonce || 0, "nonce"), + formatNumber(tx.maxPriorityFeePerGas || 0, "maxPriorityFeePerGas"), + formatNumber(tx.maxFeePerGas || 0, "maxFeePerGas"), + formatNumber(tx.gasLimit || 0, "gasLimit"), + ((tx.to != null) ? getAddress(tx.to) : "0x"), + formatNumber(tx.value || 0, "value"), + (tx.data || "0x"), + (formatAccessList(tx.accessList || [])) + ]; + if (sig) { + fields.push(formatNumber(sig.yParity, "yParity")); + fields.push(toArray(sig.r)); + fields.push(toArray(sig.s)); + } + return concat(["0x02", encodeRlp(fields)]); +} +function _parseEip2930(data) { + throw new Error("@TODO"); +} +function _serializeEip2930(tx, sig) { + const fields = [ + formatNumber(tx.chainId || 0, "chainId"), + formatNumber(tx.nonce || 0, "nonce"), + formatNumber(tx.gasPrice || 0, "gasPrice"), + formatNumber(tx.gasLimit || 0, "gasLimit"), + ((tx.to != null) ? getAddress(tx.to) : "0x"), + formatNumber(tx.value || 0, "value"), + (tx.data || "0x"), + (formatAccessList(tx.accessList || [])) + ]; + if (sig) { + fields.push(formatNumber(sig.yParity, "recoveryParam")); + fields.push(toArray(sig.r)); + fields.push(toArray(sig.s)); + } + return concat(["0x01", encodeRlp(fields)]); +} +class Transaction { + constructor() { + _Transaction_props.set(this, void 0); + __classPrivateFieldSet$l(this, _Transaction_props, { + type: null, + to: null, + nonce: 0, + gasLimit: BigInt(0), + gasPrice: null, + maxPriorityFeePerGas: null, + maxFeePerGas: null, + data: "0x", + value: BigInt(0), + chainId: BigInt(0), + sig: null, + accessList: null + }, "f"); + } + // A type of null indicates the type will be populated automatically + get type() { return getStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "type"); } + get typeName() { + switch (this.type) { + case 0: return "legacy"; + case 1: return "eip-2930"; + case 2: return "eip-1559"; + } + return null; + } + set type(value) { + switch (value) { + case null: + setStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "type", null); + break; + case 0: + case "legacy": + setStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "type", 0); + break; + case 1: + case "berlin": + case "eip-2930": + setStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "type", 1); + break; + case 2: + case "london": + case "eip-1559": + setStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "type", 2); + break; + default: + throw new Error(`unsupported transaction type`); + } + } + /* + detectType(): number { + const hasFee = (this.maxFeePerGas != null) || (this.maxPriorityFeePerGas != null); + const hasAccessList = (this.accessList != null); + const hasLegacy = (this.gasPrice != null); + + if (hasLegacy) { + if (hasFee) { + throw new Error("cannot mix legacy and london properties"); + } + if (hasAccessList) { return 1; } + return 0; + } + + return 2; + } + */ + get to() { return getStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "to"); } + set to(value) { + setStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "to", (value == null) ? null : getAddress(value)); + } + get nonce() { return getStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "nonce"); } + set nonce(value) { setStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "nonce", logger$3.getNumber(value, "value")); } + get gasLimit() { return getStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "gasLimit"); } + set gasLimit(value) { setStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "gasLimit", logger$3.getBigInt(value)); } + get gasPrice() { return getStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "gasPrice"); } + set gasPrice(value) { + setStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "gasPrice", (value == null) ? null : logger$3.getBigInt(value)); + } + get maxPriorityFeePerGas() { return getStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "maxPriorityFeePerGas"); } + set maxPriorityFeePerGas(value) { + setStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "maxPriorityFeePerGas", (value == null) ? null : logger$3.getBigInt(value)); + } + get maxFeePerGas() { return getStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "maxFeePerGas"); } + set maxFeePerGas(value) { + setStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "maxFeePerGas", (value == null) ? null : logger$3.getBigInt(value)); + } + get data() { return getStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "data"); } + set data(value) { setStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "data", hexlify(value)); } + get value() { return getStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "value"); } + set value(value) { + setStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "value", logger$3.getBigInt(value)); + } + get chainId() { return getStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "chainId"); } + set chainId(value) { setStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "chainId", logger$3.getBigInt(value)); } + get signature() { return getStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "sig") || null; } + set signature(value) { + setStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "sig", (value == null) ? null : Signature$1.from(value)); + } + get accessList() { return getStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "accessList") || null; } + set accessList(value) { + setStore(__classPrivateFieldGet$l(this, _Transaction_props, "f"), "accessList", (value == null) ? null : accessListify(value)); + } + get hash() { + if (this.signature == null) { + throw new Error("cannot hash unsigned transaction; maybe you meant .unsignedHash"); + } + return keccak256(this.serialized); + } + get unsignedHash() { + return keccak256(this.unsignedSerialized); + } + get from() { + if (this.signature == null) { + return null; + } + // use ecomputeAddress(this.fromPublicKey); + return ""; + } + get fromPublicKey() { + if (this.signature == null) { + return null; + } + // use ecrecover + return ""; + } + isSigned() { + return this.signature != null; + } + get serialized() { + if (this.signature == null) { + throw new Error("cannot serialize unsigned transaction; maybe you meant .unsignedSerialized"); + } + const types = this.inferTypes(); + if (types.length !== 1) { + throw new Error("cannot determine transaction type; specify type manually"); + } + switch (types[0]) { + case 0: + return _serializeLegacy(this, this.signature); + case 1: + return _serializeEip2930(this, this.signature); + case 2: + return _serializeEip1559(this, this.signature); + } + throw new Error("unsupported type"); + } + get unsignedSerialized() { + if (this.signature != null) { + throw new Error("cannot serialize unsigned transaction; maybe you meant .unsignedSerialized"); + } + const types = this.inferTypes(); + if (types.length !== 1) { + throw new Error("cannot determine transaction type; specify type manually"); + } + switch (types[0]) { + case 0: + return _serializeLegacy(this); + case 1: + return _serializeEip2930(this); + case 2: + return _serializeEip1559(this); + } + throw new Error("unsupported type"); + } + // Validates properties and lists possible types this transaction adheres to + inferTypes() { + // Checks that there are no conflicting properties set + const hasGasPrice = this.gasPrice != null; + const hasFee = (this.maxFeePerGas != null || this.maxPriorityFeePerGas != null); + const hasAccessList = (this.accessList != null); + //if (hasGasPrice && hasFee) { + // throw new Error("transaction cannot have gasPrice and maxFeePerGas"); + //} + if (!!this.maxFeePerGas && !!this.maxPriorityFeePerGas) { + if (this.maxFeePerGas < this.maxPriorityFeePerGas) { + throw new Error("priorityFee cannot be more than maxFee"); + } + } + //if (this.type === 2 && hasGasPrice) { + // throw new Error("eip-1559 transaction cannot have gasPrice"); + //} + if ((this.type === 0 || this.type === 1) && hasFee) { + throw new Error("transaction type cannot have maxFeePerGas or maxPriorityFeePerGas"); + } + if (this.type === 0 && hasAccessList) { + throw new Error("legacy transaction cannot have accessList"); + } + const types = []; + // Explicit type + if (this.type != null) { + types.push(this.type); + } + else { + if (hasFee) { + types.push(2); + } + else if (hasGasPrice) { + types.push(1); + if (!hasAccessList) { + types.push(0); + } + } + else if (hasAccessList) { + types.push(1); + types.push(2); + } + else { + types.push(0); + types.push(1); + types.push(2); + } + } + types.sort(); + return types; + } + clone() { + return Transaction.from(this); + } + freeze() { + if (__classPrivateFieldGet$l(this, _Transaction_props, "f").sig) { + __classPrivateFieldGet$l(this, _Transaction_props, "f").sig = (__classPrivateFieldGet$l(this, _Transaction_props, "f").sig.clone().freeze()); + } + if (__classPrivateFieldGet$l(this, _Transaction_props, "f").accessList) { + __classPrivateFieldGet$l(this, _Transaction_props, "f").accessList = Object.freeze(__classPrivateFieldGet$l(this, _Transaction_props, "f").accessList.map((set) => { + Object.freeze(set.storageKeys); + return Object.freeze(set); + })); + } + Object.freeze(__classPrivateFieldGet$l(this, _Transaction_props, "f")); + return this; + } + isFrozen() { + return Object.isFrozen(__classPrivateFieldGet$l(this, _Transaction_props, "f")); + } + static from(tx) { + if (typeof (tx) === "string") { + const payload = arrayify(tx); + if (payload[0] >= 0x7f) { // @TODO: > vs >= ?? + return Transaction.from(_parseLegacy()); + } + switch (payload[0]) { + case 1: return Transaction.from(_parseEip2930(payload.slice(1))); + case 2: return Transaction.from(_parseEip1559(payload.slice(1))); + } + throw new Error("unsupported transaction type"); + } + const result = new Transaction(); + if (tx.type != null) { + result.type = tx.type; + } + if (tx.to != null) { + result.to = tx.to; + } + if (tx.nonce != null) { + result.nonce = tx.nonce; + } + if (tx.gasLimit != null) { + result.gasLimit = tx.gasLimit; + } + if (tx.gasPrice != null) { + result.gasPrice = tx.gasPrice; + } + if (tx.maxPriorityFeePerGas != null) { + result.maxPriorityFeePerGas = tx.maxPriorityFeePerGas; + } + if (tx.maxFeePerGas != null) { + result.maxFeePerGas = tx.maxFeePerGas; + } + if (tx.data != null) { + result.data = tx.data; + } + if (tx.value != null) { + result.value = tx.value; + } + if (tx.chainId != null) { + result.chainId = tx.chainId; + } + if (tx.signature != null) { + result.signature = Signature$1.from(tx.signature); + } + if (tx.accessList != null) { + result.accessList = tx.accessList; + } + // Should these be checked?? Should from be allowed if there is no signature? + // from?: null | A; + // hash?: null | string; + return result; + } +} +_Transaction_props = new WeakMap(); + +var __classPrivateFieldSet$k = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$k = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _Block_transactions, _TransactionReceipt_logs; +// ----------------------- +function getValue(value) { + if (value == null) { + return null; + } + return value; +} +function toJson(value) { + if (value == null) { + return null; + } + return value.toString(); +} +// @TODO? implements Required +class FeeData { + constructor(gasPrice, maxFeePerGas, maxPriorityFeePerGas) { + defineProperties(this, { + gasPrice: getValue(gasPrice), + maxFeePerGas: getValue(maxFeePerGas), + maxPriorityFeePerGas: getValue(maxPriorityFeePerGas) + }); + } + toJSON() { + const { gasPrice, maxFeePerGas, maxPriorityFeePerGas } = this; + return { + _type: "FeeData", + gasPrice: toJson(gasPrice), + maxFeePerGas: toJson(maxFeePerGas), + maxPriorityFeePerGas: toJson(maxPriorityFeePerGas), + }; + } +} +function copyRequest$1(req) { + const result = {}; + // These could be addresses, ENS names or Addressables + if (req.to) { + result.to = req.to; + } + if (req.from) { + result.from = req.from; + } + if (req.data) { + result.data = hexlify(req.data); + } + const bigIntKeys = "chainId,gasLimit,gasPrice,maxFeePerGas, maxPriorityFeePerGas,value".split(/,/); + for (const key in bigIntKeys) { + if (!(key in req) || req[key] == null) { + continue; + } + result[key] = logger$5.getBigInt(req[key], `request.${key}`); + } + const numberKeys = "type,nonce".split(/,/); + for (const key in numberKeys) { + if (!(key in req) || req[key] == null) { + continue; + } + result[key] = logger$5.getNumber(req[key], `request.${key}`); + } + if (req.accessList) { + result.accessList = accessListify(req.accessList); + } + if ("blockTag" in req) { + result.blockTag = req.blockTag; + } + if ("enableCcipRead" in req) { + result.enableCcipReadEnabled = !!req.enableCcipRead; + } + if ("customData" in req) { + result.customData = req.customData; + } + return result; +} +class Block { + constructor(block, provider) { + _Block_transactions.set(this, void 0); + if (provider == null) { + provider = dummyProvider; + } + __classPrivateFieldSet$k(this, _Block_transactions, Object.freeze(block.transactions.map((tx) => { + if (typeof (tx) !== "string" && tx.provider !== provider) { + throw new Error("provider mismatch"); + } + return tx; + })), "f"); + defineProperties(this, { + provider, + hash: getValue(block.hash), + number: block.number, + timestamp: block.timestamp, + parentHash: block.parentHash, + nonce: block.nonce, + difficulty: block.difficulty, + gasLimit: block.gasLimit, + gasUsed: block.gasUsed, + miner: block.miner, + extraData: block.extraData, + baseFeePerGas: getValue(block.baseFeePerGas) + }); + } + get transactions() { return __classPrivateFieldGet$k(this, _Block_transactions, "f"); } + //connect(provider: Provider): Block { + // return new Block(this, provider); + //} + toJSON() { + const { baseFeePerGas, difficulty, extraData, gasLimit, gasUsed, hash, miner, nonce, number, parentHash, timestamp, transactions } = this; + return { + _type: "Block", + baseFeePerGas: toJson(baseFeePerGas), + difficulty: toJson(difficulty), + extraData, + gasLimit: toJson(gasLimit), + gasUsed: toJson(gasUsed), + hash, miner, nonce, number, parentHash, timestamp, + transactions, + }; + } + [(_Block_transactions = new WeakMap(), Symbol.iterator)]() { + let index = 0; + return { + next: () => { + if (index < this.length) { + return { + value: this.transactions[index++], done: false + }; + } + return { value: undefined, done: true }; + } + }; + } + get length() { return this.transactions.length; } + get date() { + if (this.timestamp == null) { + return null; + } + return new Date(this.timestamp * 1000); + } + async getTransaction(index) { + const tx = this.transactions[index]; + if (tx == null) { + throw new Error("no such tx"); + } + if (typeof (tx) === "string") { + return (await this.provider.getTransaction(tx)); + } + else { + return tx; + } + } + isMined() { return !!this.hash; } + isLondon() { return !!this.baseFeePerGas; } + orphanedEvent() { + if (!this.isMined()) { + throw new Error(""); + } + return createOrphanedBlockFilter(this); + } +} +class Log { + constructor(log, provider) { + if (provider == null) { + provider = dummyProvider; + } + this.provider = provider; + const topics = Object.freeze(log.topics.slice()); + defineProperties(this, { + transactionHash: log.transactionHash, + blockHash: log.blockHash, + blockNumber: log.blockNumber, + removed: log.removed, + address: log.address, + data: log.data, + topics, + index: log.index, + transactionIndex: log.transactionIndex, + }); + } + //connect(provider: Provider): Log { + // return new Log(this, provider); + //} + toJSON() { + const { address, blockHash, blockNumber, data, index, removed, topics, transactionHash, transactionIndex } = this; + return { + _type: "log", + address, blockHash, blockNumber, data, index, + removed, topics, transactionHash, transactionIndex + }; + } + async getBlock() { + return (await this.provider.getBlock(this.blockHash)); + } + async getTransaction() { + return (await this.provider.getTransaction(this.transactionHash)); + } + async getTransactionReceipt() { + return (await this.provider.getTransactionReceipt(this.transactionHash)); + } + removedEvent() { + return createRemovedLogFilter(this); + } +} +class TransactionReceipt { + constructor(tx, provider) { + _TransactionReceipt_logs.set(this, void 0); + if (provider == null) { + provider = dummyProvider; + } + __classPrivateFieldSet$k(this, _TransactionReceipt_logs, Object.freeze(tx.logs.map((log) => { + if (provider !== log.provider) { + //return log.connect(provider); + throw new Error("provider mismatch"); + } + return log; + })), "f"); + defineProperties(this, { + provider, + to: tx.to, + from: tx.from, + contractAddress: tx.contractAddress, + hash: tx.hash, + index: tx.index, + blockHash: tx.blockHash, + blockNumber: tx.blockNumber, + logsBloom: tx.logsBloom, + gasUsed: tx.gasUsed, + cumulativeGasUsed: tx.cumulativeGasUsed, + gasPrice: (tx.effectiveGasPrice || tx.gasPrice), + byzantium: tx.byzantium, + status: tx.status, + root: tx.root + }); + } + get logs() { return __classPrivateFieldGet$k(this, _TransactionReceipt_logs, "f"); } + //connect(provider: Provider): TransactionReceipt { + // return new TransactionReceipt(this, provider); + //} + toJSON() { + const { to, from, contractAddress, hash, index, blockHash, blockNumber, logsBloom, logs, byzantium, status, root } = this; + return { + _type: "TransactionReceipt", + blockHash, blockNumber, byzantium, contractAddress, + cumulativeGasUsed: toJson(this.cumulativeGasUsed), + from, + gasPrice: toJson(this.gasPrice), + gasUsed: toJson(this.gasUsed), + hash, index, logs, logsBloom, root, status, to + }; + } + get length() { return this.logs.length; } + [(_TransactionReceipt_logs = new WeakMap(), Symbol.iterator)]() { + let index = 0; + return { + next: () => { + if (index < this.length) { + return { value: this.logs[index++], done: false }; + } + return { value: undefined, done: true }; + } + }; + } + get fee() { + return this.gasUsed * this.gasPrice; + } + async getBlock() { + const block = await this.provider.getBlock(this.blockHash); + if (block == null) { + throw new Error("TODO"); + } + return block; + } + async getTransaction() { + const tx = await this.provider.getTransaction(this.hash); + if (tx == null) { + throw new Error("TODO"); + } + return tx; + } + async confirmations() { + return (await this.provider.getBlockNumber()) - this.blockNumber + 1; + } + removedEvent() { + return createRemovedTransactionFilter(this); + } + reorderedEvent(other) { + if (other && !other.isMined()) { + return logger$5.throwError("unmined 'other' transction cannot be orphaned", "UNSUPPORTED_OPERATION", { + operation: "reorderedEvent(other)" + }); + } + return createReorderedTransactionFilter(this, other); + } +} +class TransactionResponse { + constructor(tx, provider) { + if (provider == null) { + provider = dummyProvider; + } + this.provider = provider; + this.blockNumber = (tx.blockNumber != null) ? tx.blockNumber : null; + this.blockHash = (tx.blockHash != null) ? tx.blockHash : null; + this.hash = tx.hash; + this.index = tx.index; + this.type = tx.type; + this.from = tx.from; + this.to = tx.to || null; + this.gasLimit = tx.gasLimit; + this.nonce = tx.nonce; + this.data = tx.data; + this.value = tx.value; + this.gasPrice = tx.gasPrice; + this.maxPriorityFeePerGas = (tx.maxPriorityFeePerGas != null) ? tx.maxPriorityFeePerGas : null; + this.maxFeePerGas = (tx.maxFeePerGas != null) ? tx.maxFeePerGas : null; + this.chainId = tx.chainId; + this.signature = tx.signature; + this.accessList = (tx.accessList != null) ? tx.accessList : null; + } + //connect(provider: Provider): TransactionResponse { + // return new TransactionResponse(this, provider); + //} + toJSON() { + const { blockNumber, blockHash, index, hash, type, to, from, nonce, data, signature, accessList } = this; + return { + _type: "TransactionReceipt", + accessList, blockNumber, blockHash, + chainId: toJson(this.chainId), + data, from, + gasLimit: toJson(this.gasLimit), + gasPrice: toJson(this.gasPrice), + hash, + maxFeePerGas: toJson(this.maxFeePerGas), + maxPriorityFeePerGas: toJson(this.maxPriorityFeePerGas), + nonce, signature, to, index, type, + value: toJson(this.value), + }; + } + async getBlock() { + let blockNumber = this.blockNumber; + if (blockNumber == null) { + const tx = await this.getTransaction(); + if (tx) { + blockNumber = tx.blockNumber; + } + } + if (blockNumber == null) { + return null; + } + const block = this.provider.getBlock(blockNumber); + if (block == null) { + throw new Error("TODO"); + } + return block; + } + async getTransaction() { + return this.provider.getTransaction(this.hash); + } + async wait(confirms) { + return this.provider.waitForTransaction(this.hash, confirms); + } + isMined() { + return (this.blockHash != null); + } + isLegacy() { + return (this.type === 0); + } + isBerlin() { + return (this.type === 1); + } + isLondon() { + return (this.type === 2); + } + removedEvent() { + if (!this.isMined()) { + return logger$5.throwError("unmined transaction canot be orphaned", "UNSUPPORTED_OPERATION", { + operation: "removeEvent()" + }); + } + return createRemovedTransactionFilter(this); + } + reorderedEvent(other) { + if (!this.isMined()) { + return logger$5.throwError("unmined transaction canot be orphaned", "UNSUPPORTED_OPERATION", { + operation: "removeEvent()" + }); + } + if (other && !other.isMined()) { + return logger$5.throwError("unmined 'other' transaction canot be orphaned", "UNSUPPORTED_OPERATION", { + operation: "removeEvent()" + }); + } + return createReorderedTransactionFilter(this, other); + } +} +function createOrphanedBlockFilter(block) { + return { orphan: "drop-block", hash: block.hash, number: block.number }; +} +function createReorderedTransactionFilter(tx, other) { + return { orphan: "reorder-transaction", tx, other }; +} +function createRemovedTransactionFilter(tx) { + return { orphan: "drop-transaction", tx }; +} +function createRemovedLogFilter(log) { + return { orphan: "drop-log", log: { + transactionHash: log.transactionHash, + blockHash: log.blockHash, + blockNumber: log.blockNumber, + address: log.address, + data: log.data, + topics: Object.freeze(log.topics.slice()), + index: log.index + } }; +} +function fail() { + throw new Error("this provider should not be used"); +} +class DummyProvider { + async getNetwork() { return fail(); } + async getFeeData() { return fail(); } + async estimateGas(tx) { return fail(); } + async call(tx) { return fail(); } + async resolveName(name) { return fail(); } + // State + async getBlockNumber() { return fail(); } + // Account + async getBalanceOf(address, blockTag) { + return fail(); + } + async getTransactionCountOf(address, blockTag) { + return fail(); + } + async getCode(address, blockTag) { + return fail(); + } + async getStorageAt(address, position, blockTag) { + return fail(); + } + // Write + async broadcastTransaction(signedTx) { return fail(); } + // Queries + async getBlock(blockHashOrBlockTag) { + return fail(); + } + async getBlockWithTransactions(blockHashOrBlockTag) { + return fail(); + } + async getTransaction(hash) { + return fail(); + } + async getTransactionReceipt(hash) { + return fail(); + } + // Bloom-filter Queries + async getLogs(filter) { + return fail(); + } + // ENS + async lookupAddress(address) { + return fail(); + } + async waitForTransaction(hash, confirms, timeout) { + return fail(); + } + async waitForBlock(blockTag) { + return fail(); + } + // EventEmitterable + async on(event, listener) { return fail(); } + async once(event, listener) { return fail(); } + async emit(event, ...args) { return fail(); } + async listenerCount(event) { return fail(); } + async listeners(event) { return fail(); } + async off(event, listener) { return fail(); } + async removeAllListeners(event) { return fail(); } + async addListener(event, listener) { return fail(); } + async removeListener(event, listener) { return fail(); } +} +// A singleton provider instance that can be used as a placeholder. This +// allows API that have a Provider added later to not require a null check. +const dummyProvider = new DummyProvider(); + +// Belongs to Networks; requires abstract-provider +// provider requires abstract-provider and network +var __classPrivateFieldSet$j = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$j = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _Formatter_format, _Formatter_baseBlock; +const BN_MAX_UINT256 = BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); +//export type AccessListSet = { address: string, storageKeys: Array }; +//export type AccessList = Array; +//export type AccessListish = AccessList | +// Array<[ string, Array ]> | +// Record>; +function stringify(value) { + if (typeof (value) !== "string") { + throw new Error("invalid string"); + } + return value; +} +class Formatter { + constructor() { + _Formatter_format.set(this, void 0); + _Formatter_baseBlock.set(this, void 0); + const address = this.address.bind(this); + const bigNumber = this.bigNumber.bind(this); + const blockTag = this.blockTag.bind(this); + const data = this.data.bind(this); + const hash = this.hash.bind(this); + const number = this.number.bind(this); + const uint256 = this.uint256.bind(this); + const topics = this.arrayOf(hash); + __classPrivateFieldSet$j(this, _Formatter_format, { + address, + bigNumber, + blockTag, + data, + hash, + number, + uint256, + topics, + filter: this.object({ + fromBlock: this.allowNull(blockTag, undefined), + toBlock: this.allowNull(blockTag, undefined), + blockHash: this.allowNull(hash, undefined), + address: this.allowNull(address, undefined), + topics: this.allowNull(topics, undefined) + }), + transactionRequest: this.object({ + from: this.allowNull(address), + type: this.allowNull(number), + to: this.allowNull(address), + nonce: this.allowNull(number), + gasLimit: this.allowNull(uint256), + gasPrice: this.allowNull(uint256), + maxFeePerGas: this.allowNull(uint256), + maxPriorityFeePerGas: this.allowNull(uint256), + data: this.allowNull(data), + value: this.allowNull(uint256), + }), + transactionResponse: this.object({ + hash: hash, + index: number, + type: this.allowNull(number, 0), + // These can be null for pending blocks + blockHash: this.allowNull(hash), + blockNumber: this.allowNull(number), + // For Legacy transactions, this comes from the v + chainId: this.allowNull(number), + from: address, + to: this.address, + gasLimit: bigNumber, + gasPrice: this.allowNull(bigNumber), + maxFeePerGas: this.allowNull(bigNumber), + maxPriorityFeePerGas: this.allowNull(bigNumber), + value: bigNumber, + data: data, + nonce: number, + r: hash, + s: hash, + v: number, + accessList: this.allowNull(this.accessList) + }, { + index: ["transactionIndex"] + }), + }, "f"); + __classPrivateFieldSet$j(this, _Formatter_baseBlock, this.object({ + number: number, + hash: this.allowNull(hash, null), + timestamp: number, + parentHash: hash, + nonce: this.allowNull(stringify, "0x0000000000000000"), + difficulty: bigNumber, + gasLimit: bigNumber, + gasUsed: bigNumber, + miner: this.allowNull(address, "0x0000000000000000000000000000000000000000"), + extraData: stringify, + baseFeePerGas: this.allowNull(bigNumber), + }), "f"); + } + // An address + address(value) { + return getAddress(value); + } + // An address from a call result; may be zero-padded + callAddress(value) { + if (dataLength(value) !== 32 || dataSlice(value, 0, 12) !== "0x000000000000000000000000") { + logger$5.throwArgumentError("invalid call address", "value", value); + } + return this.address(dataSlice(value, 12)); + } + // An address from a transaction (e.g. { from: string, nonce: number }) + contractAddress(value) { + return getCreateAddress({ + from: this.address(value.from), + nonce: logger$5.getNumber(value.nonce, "value.nonce") + }); + } + // Block Tag + blockTag(value) { + if (value == null) { + return "latest"; + } + switch (value) { + case "earliest": + return "0x0"; + case "latest": + case "pending": + return value; + } + if (typeof (value) === "number" || (isHexString(value) && dataLength(value) < 32)) { + return quantity(value); + } + return logger$5.throwArgumentError("invalid blockTag", "value", value); + } + // Block objects + block(value, provider) { + const params = __classPrivateFieldGet$j(this, _Formatter_baseBlock, "f").call(this, value); + params.transactions = value.transactions.map((t) => this.hash(t)); + return new Block(params, provider); + } + blockWithTransactions(value, provider) { + throw new Error(); + } + // Transactions + transactionRequest(value, provider) { + return __classPrivateFieldGet$j(this, _Formatter_format, "f").transactionRequest(value); + } + transactionResponse(value, provider) { + value = Object.assign({}, value); + // @TODO: Use the remap feature + if (value.data == null && value.input != null) { + value.data = value.input; + } + if (value.gasLimit == null && value.gas) { + value.gasLimit = value.gas; + } + value = __classPrivateFieldGet$j(this, _Formatter_format, "f").transactionResponse(value); + const sig = Signature$1.fromTransaction(value.r, value.s, value.v); + value.signature = sig; + if (value.chainId == null) { + value.chainId = sig.legacyChainId; + } + return new TransactionResponse(value, provider); + } + // Receipts + log(value, provider) { + const log = this.object({ + address: this.address, + blockHash: this.hash, + blockNumber: this.number, + data: this.data, + index: this.number, + removed: this.boolean, + topics: this.topics, + transactionHash: this.hash, + transactionIndex: this.number, + }, { + index: ["logIndex"] + })(value); + return new Log(log, provider); + } + receipt(value, provider) { + const receipt = this.object({ + blockHash: this.hash, + blockNumber: this.number, + contractAddress: this.allowNull(this.address), + cumulativeGasUsed: this.bigNumber, + from: this.address, + gasUsed: this.bigNumber, + logs: this.arrayOf((v) => (this.log(v, provider))), + logsBloom: this.data, + root: this.allowNull(this.data), + status: this.allowNull(this.number), + to: this.address, + gasPrice: this.allowNull(this.bigNumber), + hash: this.hash, + index: this.number, + type: this.allowNull(this.number, 0), + }, { + hash: ["transactionHash"], + gasPrice: ["effectiveGasPrice"], + index: ["transactionIndex"] + })(value); + // RSK incorrectly implemented EIP-658, so we munge things a bit here for it + if (receipt.root != null) { + if (receipt.root.length <= 4) { + // Could be 0x00, 0x0, 0x01 or 0x1 + const value = parseInt(receipt.root); + if (value === 0 || value === 1) { + // Make sure if both are specified, they match + if (receipt.status != null && receipt.status !== value) { + return logger$5.throwError("alt-root-status/status mismatch", "BAD_DATA", { + value: { root: receipt.root, status: receipt.status } + }); + } + receipt.status = value; + delete receipt.root; + } + else { + return logger$5.throwError("invalid alt-root-status", "BAD_DATA", { + value: receipt.root + }); + } + } + else if (!isHexString(receipt.root, 32)) { + // Must be a valid bytes32 + return logger$5.throwError("invalid receipt root hash", "BAD_DATA", { + value: receipt.root + }); + } + } + //receipt.byzantium = (receipt.root == null); + return new TransactionReceipt(receipt, provider); + } + // Fitlers + topics(value) { + return __classPrivateFieldGet$j(this, _Formatter_format, "f").topics(value); + } + filter(value) { + return __classPrivateFieldGet$j(this, _Formatter_format, "f").filter(value); + } + filterLog(value) { + console.log("ME", value); + return null; + } + // Converts a serialized transaction to a TransactionResponse + transaction(value) { + throw new Error(); + } + // Useful utility formatters functions, which if need be use the + // methods within the formatter to ensure internal compatibility + // Access List; converts an AccessListish to an AccessList + accessList(value) { + return accessListify(value); + } + // Converts falsish values to a specific value, otherwise use the formatter. Calls preserve `this`. + allowFalsish(format, ifFalse) { + return ((value) => { + if (!value) { + return ifFalse; + } + return format.call(this, value); + }); + } + // Allows null, optionally replacing it with a default value. Calls preserve `this`. + allowNull(format, ifNull) { + return ((value) => { + if (value == null) { + return ifNull; + } + return format.call(this, value); + }); + } + // Requires an Array satisfying the formatter. Calls preserves `this`. + arrayOf(format) { + return ((array) => { + if (!Array.isArray(array)) { + throw new Error("not an array"); + } + return array.map((i) => format.call(this, i)); + }); + } + // Requires a value which is a value BigNumber + bigNumber(value) { + return logger$5.getBigInt(value, "value"); + } + uint256(value) { + const result = this.bigNumber(value); + if (result < 0 || result > BN_MAX_UINT256) { + logger$5.throwArgumentError("invalid uint256", "value", value); + } + return result; + } + // Requires a value which is a value boolean or string equivalent + boolean(value) { + switch (value) { + case true: + case "true": + return true; + case false: + case "false": + return false; + } + return logger$5.throwArgumentError(`invalid boolean; ${JSON.stringify(value)}`, "value", value); + } + // Requires a value which is a valid hexstring. If dataOrLength is true, + // the length must be even (i.e. a datahexstring) or if it is a number, + // specifies teh number of bytes value must represent + _hexstring(dataOrLength) { + if (dataOrLength == null) { + dataOrLength = false; + } + return (function (value) { + if (isHexString(value, dataOrLength)) { + return value.toLowerCase(); + } + throw new Error("bad hexstring"); + }); + } + data(value) { + if (dataLength(value) == null) { + logger$5.throwArgumentError("", "value", value); + } + return value; + } + // Requires a network-native hash + hash(value) { + if (dataLength(value) !== 32) { + logger$5.throwArgumentError("", "value", value); + } + return __classPrivateFieldGet$j(this, _Formatter_format, "f").data(value); + } + // Requires a valid number, within the IEEE 754 safe range + number(value) { + return logger$5.getNumber(value); + } + // Requires an object which matches a fleet of other formatters + // Any FormatFunc may return `undefined` to have the value omitted + // from the result object. Calls preserve `this`. + object(format, altNames) { + return ((value) => { + const result = {}; + for (const key in format) { + let srcKey = key; + if (altNames && key in altNames && !(srcKey in value)) { + for (const altKey of altNames[key]) { + if (altKey in value) { + srcKey = altKey; + break; + } + } + } + try { + const nv = format[key].call(this, value[srcKey]); + if (nv !== undefined) { + result[key] = nv; + } + } + catch (error) { + const message = (error instanceof Error) ? error.message : "not-an-error"; + logger$5.throwError(`invalid value for value.${key} (${message})`, "BAD_DATA", { value }); + } + } + return result; + }); + } + // Requires a value which matches a network-native storage slot + storageSlot(value) { + return toHex(logger$5.getBigInt(value), 32); + } +} +_Formatter_format = new WeakMap(), _Formatter_baseBlock = new WeakMap(); + +const EnsAddress = "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"; +class NetworkPlugin { + constructor(name) { + defineProperties(this, { name }); + } + clone() { + return new NetworkPlugin(this.name); + } + validate(network) { + return this; + } +} +class GasCostPlugin extends NetworkPlugin { + constructor(effectiveBlock = 0, costs) { + super(`org.ethers.plugins.gas-cost#${(effectiveBlock || 0)}`); + const props = { effectiveBlock }; + function set(name, nullish) { + let value = (costs || {})[name]; + if (value == null) { + value = nullish; + } + if (typeof (value) !== "number") { + logger$5.throwArgumentError(`invalud value for ${name}`, "costs", costs); + } + props[name] = value; + } + set("txBase", 21000); + set("txCreate", 32000); + set("txDataZero", 4); + set("txDataNonzero", 16); + set("txAccessListStorageKey", 1900); + set("txAccessListAddress", 2400); + defineProperties(this, props); + } + clone() { + return new GasCostPlugin(this.effectiveBlock, this); + } +} +// Networks shoudl use this plugin to specify the contract address +// and network necessary to resolve ENS names. +class EnsPlugin extends NetworkPlugin { + constructor(address, targetNetwork) { + super("org.ethers.plugins.ens"); + defineProperties(this, { + address: (address || EnsAddress), + targetNetwork: ((targetNetwork == null) ? 1 : targetNetwork) + }); + } + clone() { + return new EnsPlugin(this.address, this.targetNetwork); + } + validate(network) { + network.formatter.address(this.address); + return this; + } +} +class MaxPriorityFeePlugin extends NetworkPlugin { + constructor(priorityFee) { + super("org.ethers.plugins.max-priority-fee"); + defineProperties(this, { + priorityFee: logger$5.getBigInt(priorityFee) + }); + } + async getPriorityFee(provider) { + return this.priorityFee; + } + clone() { + return new MaxPriorityFeePlugin(this.priorityFee); + } +} + +var __classPrivateFieldSet$i = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$i = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _Network_props; +/* * * * +// Networks which operation against an L2 can use this plugin to +// specify how to access L1, for the purpose of resolving ENS, +// for example. +export class LayerOneConnectionPlugin extends NetworkPlugin { + readonly provider!: Provider; +// @TODO: Rename to ChainAccess and allow for connecting to any chain + constructor(provider: Provider) { + super("org.ethers.plugins.layer-one-connection"); + defineProperties(this, { provider }); + } + + clone(): LayerOneConnectionPlugin { + return new LayerOneConnectionPlugin(this.provider); + } +} +*/ +/* * * * +export class PriceOraclePlugin extends NetworkPlugin { + readonly address!: string; + + constructor(address: string) { + super("org.ethers.plugins.price-oracle"); + defineProperties(this, { address }); + } + + clone(): PriceOraclePlugin { + return new PriceOraclePlugin(this.address); + } +} +*/ +// Networks or clients with a higher need for security (such as clients +// that may automatically make CCIP requests without user interaction) +// can use this plugin to anonymize requests or intercept CCIP requests +// to notify and/or receive authorization from the user +/* * * * +export type FetchDataFunc = (req: Frozen) => Promise; +export class CcipPreflightPlugin extends NetworkPlugin { + readonly fetchData!: FetchDataFunc; + + constructor(fetchData: FetchDataFunc) { + super("org.ethers.plugins.ccip-preflight"); + defineProperties(this, { fetchData }); + } + + clone(): CcipPreflightPlugin { + return new CcipPreflightPlugin(this.fetchData); + } +} +*/ +const Networks = new Map(); +const defaultFormatter = new Formatter(); +class Network$1 { + constructor(name, _chainId, formatter) { + _Network_props.set(this, void 0); + const chainId = logger$5.getBigInt(_chainId); + if (formatter == null) { + formatter = defaultFormatter; + } + const plugins = new Map(); + __classPrivateFieldSet$i(this, _Network_props, { name, chainId, formatter, plugins }, "f"); + } + toJSON() { + return { name: this.name, chainId: this.chainId }; + } + get name() { return getStore(__classPrivateFieldGet$i(this, _Network_props, "f"), "name"); } + set name(value) { setStore(__classPrivateFieldGet$i(this, _Network_props, "f"), "name", value); } + get chainId() { return getStore(__classPrivateFieldGet$i(this, _Network_props, "f"), "chainId"); } + set chainId(value) { setStore(__classPrivateFieldGet$i(this, _Network_props, "f"), "chainId", logger$5.getBigInt(value, "chainId")); } + get formatter() { return getStore(__classPrivateFieldGet$i(this, _Network_props, "f"), "formatter"); } + set formatter(value) { setStore(__classPrivateFieldGet$i(this, _Network_props, "f"), "formatter", value); } + get plugins() { + return Array.from(__classPrivateFieldGet$i(this, _Network_props, "f").plugins.values()); + } + attachPlugin(plugin) { + if (this.isFrozen()) { + throw new Error("frozen"); + } + if (__classPrivateFieldGet$i(this, _Network_props, "f").plugins.get(plugin.name)) { + throw new Error(`cannot replace existing plugin: ${plugin.name} `); + } + __classPrivateFieldGet$i(this, _Network_props, "f").plugins.set(plugin.name, plugin.validate(this)); + return this; + } + getPlugin(name) { + return (__classPrivateFieldGet$i(this, _Network_props, "f").plugins.get(name)) || null; + } + // Gets a list of Plugins which match basename, ignoring any fragment + getPlugins(basename) { + return (this.plugins.filter((p) => (p.name.split("#")[0] === basename))); + } + clone() { + const clone = new Network$1(this.name, this.chainId, this.formatter); + this.plugins.forEach((plugin) => { + clone.attachPlugin(plugin.clone()); + }); + return clone; + } + freeze() { + Object.freeze(__classPrivateFieldGet$i(this, _Network_props, "f")); + return this; + } + isFrozen() { + return Object.isFrozen(__classPrivateFieldGet$i(this, _Network_props, "f")); + } + computeIntrinsicGas(tx) { + const costs = this.getPlugin("org.ethers.gas-cost") || (new GasCostPlugin()); + let gas = costs.txBase; + if (tx.to == null) { + gas += costs.txCreate; + } + if (tx.data) { + for (let i = 2; i < tx.data.length; i += 2) { + if (tx.data.substring(i, i + 2) === "00") { + gas += costs.txDataZero; + } + else { + gas += costs.txDataNonzero; + } + } + } + if (tx.accessList) { + const accessList = this.formatter.accessList(tx.accessList); + for (const addr in accessList) { + gas += costs.txAccessListAddress + costs.txAccessListStorageKey * accessList[addr].storageKeys.length; + } + } + return gas; + } + static from(network) { + // Default network + if (network == null) { + return Network$1.from("homestead"); + } + // Canonical name or chain ID + if (typeof (network) === "number") { + network = BigInt(network); + } + if (typeof (network) === "string" || typeof (network) === "bigint") { + const networkFunc = Networks.get(network); + if (networkFunc) { + return networkFunc(); + } + if (typeof (network) === "bigint") { + return new Network$1("unknown", network); + } + logger$5.throwArgumentError("unknown network", "network", network); + } + // Clonable with network-like abilities + if (typeof (network.clone) === "function") { + const clone = network.clone(); + //if (typeof(network.name) !== "string" || typeof(network.chainId) !== "number") { + //} + return clone; + } + // Networkish + if (typeof (network) === "object") { + if (typeof (network.name) !== "string" || typeof (network.chainId) !== "number") { + logger$5.throwArgumentError("invalid network object name or chainId", "network", network); + } + const custom = new Network$1((network.name), (network.chainId)); + if (network.ensAddress || network.ensNetwork != null) { + custom.attachPlugin(new EnsPlugin(network.ensAddress, network.ensNetwork)); + } + //if ((network).layerOneConnection) { + // custom.attachPlugin(new LayerOneConnectionPlugin((network).layerOneConnection)); + //} + return custom; + } + return logger$5.throwArgumentError("invalid network", "network", network); + } + static register(nameOrChainId, networkFunc) { + if (typeof (nameOrChainId) === "number") { + nameOrChainId = BigInt(nameOrChainId); + } + const existing = Networks.get(nameOrChainId); + if (existing) { + logger$5.throwArgumentError(`conflicting network for ${JSON.stringify(existing.name)}`, "nameOrChainId", nameOrChainId); + } + Networks.set(nameOrChainId, networkFunc); + } +} +_Network_props = new WeakMap(); + +var __classPrivateFieldSet$h = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$h = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _PollingBlockSubscriber_instances, _PollingBlockSubscriber_provider, _PollingBlockSubscriber_poller, _PollingBlockSubscriber_interval, _PollingBlockSubscriber_blockNumber, _PollingBlockSubscriber_poll, _OnBlockSubscriber_provider, _OnBlockSubscriber_poll, _PollingOrphanSubscriber_filter, _PollingTransactionSubscriber_hash, _PollingEventSubscriber_instances, _PollingEventSubscriber_provider, _PollingEventSubscriber_filter, _PollingEventSubscriber_poller, _PollingEventSubscriber_blockNumber, _PollingEventSubscriber_poll; +function copy$3(obj) { + return JSON.parse(JSON.stringify(obj)); +} +// @TODO: refactor this +class PollingBlockSubscriber { + constructor(provider) { + _PollingBlockSubscriber_instances.add(this); + _PollingBlockSubscriber_provider.set(this, void 0); + _PollingBlockSubscriber_poller.set(this, void 0); + _PollingBlockSubscriber_interval.set(this, void 0); + // The most recent block we have scanned for events. The value -2 + // indicates we still need to fetch an initial block number + _PollingBlockSubscriber_blockNumber.set(this, void 0); + __classPrivateFieldSet$h(this, _PollingBlockSubscriber_provider, provider, "f"); + __classPrivateFieldSet$h(this, _PollingBlockSubscriber_poller, null, "f"); + __classPrivateFieldSet$h(this, _PollingBlockSubscriber_interval, 4000, "f"); + __classPrivateFieldSet$h(this, _PollingBlockSubscriber_blockNumber, -2, "f"); + } + get pollingInterval() { return __classPrivateFieldGet$h(this, _PollingBlockSubscriber_interval, "f"); } + set pollingInterval(value) { __classPrivateFieldSet$h(this, _PollingBlockSubscriber_interval, value, "f"); } + start() { + if (__classPrivateFieldGet$h(this, _PollingBlockSubscriber_poller, "f")) { + throw new Error("subscriber already running"); + } + __classPrivateFieldGet$h(this, _PollingBlockSubscriber_instances, "m", _PollingBlockSubscriber_poll).call(this); + __classPrivateFieldSet$h(this, _PollingBlockSubscriber_poller, setTimeout(__classPrivateFieldGet$h(this, _PollingBlockSubscriber_instances, "m", _PollingBlockSubscriber_poll).bind(this), __classPrivateFieldGet$h(this, _PollingBlockSubscriber_interval, "f")), "f"); + } + stop() { + if (!__classPrivateFieldGet$h(this, _PollingBlockSubscriber_poller, "f")) { + throw new Error("subscriber not running"); + } + clearTimeout(__classPrivateFieldGet$h(this, _PollingBlockSubscriber_poller, "f")); + __classPrivateFieldSet$h(this, _PollingBlockSubscriber_poller, null, "f"); + } + pause(dropWhilePaused) { + this.stop(); + if (dropWhilePaused) { + __classPrivateFieldSet$h(this, _PollingBlockSubscriber_blockNumber, -2, "f"); + } + } + resume() { + this.start(); + } +} +_PollingBlockSubscriber_provider = new WeakMap(), _PollingBlockSubscriber_poller = new WeakMap(), _PollingBlockSubscriber_interval = new WeakMap(), _PollingBlockSubscriber_blockNumber = new WeakMap(), _PollingBlockSubscriber_instances = new WeakSet(), _PollingBlockSubscriber_poll = async function _PollingBlockSubscriber_poll() { + const blockNumber = await __classPrivateFieldGet$h(this, _PollingBlockSubscriber_provider, "f").getBlockNumber(); + if (__classPrivateFieldGet$h(this, _PollingBlockSubscriber_blockNumber, "f") === -2) { + __classPrivateFieldSet$h(this, _PollingBlockSubscriber_blockNumber, blockNumber, "f"); + return; + } + // @TODO: Put a cap on the maximum number of events per loop? + if (blockNumber !== __classPrivateFieldGet$h(this, _PollingBlockSubscriber_blockNumber, "f")) { + for (let b = __classPrivateFieldGet$h(this, _PollingBlockSubscriber_blockNumber, "f") + 1; b <= blockNumber; b++) { + __classPrivateFieldGet$h(this, _PollingBlockSubscriber_provider, "f").emit("block", b); + } + __classPrivateFieldSet$h(this, _PollingBlockSubscriber_blockNumber, blockNumber, "f"); + } + __classPrivateFieldSet$h(this, _PollingBlockSubscriber_poller, setTimeout(__classPrivateFieldGet$h(this, _PollingBlockSubscriber_instances, "m", _PollingBlockSubscriber_poll).bind(this), __classPrivateFieldGet$h(this, _PollingBlockSubscriber_interval, "f")), "f"); +}; +class OnBlockSubscriber { + constructor(provider) { + _OnBlockSubscriber_provider.set(this, void 0); + _OnBlockSubscriber_poll.set(this, void 0); + __classPrivateFieldSet$h(this, _OnBlockSubscriber_provider, provider, "f"); + __classPrivateFieldSet$h(this, _OnBlockSubscriber_poll, (blockNumber) => { + this._poll(blockNumber, __classPrivateFieldGet$h(this, _OnBlockSubscriber_provider, "f")); + }, "f"); + } + async _poll(blockNumber, provider) { + throw new Error("sub-classes must override this"); + } + start() { + __classPrivateFieldGet$h(this, _OnBlockSubscriber_poll, "f").call(this, -2); + __classPrivateFieldGet$h(this, _OnBlockSubscriber_provider, "f").on("block", __classPrivateFieldGet$h(this, _OnBlockSubscriber_poll, "f")); + } + stop() { + __classPrivateFieldGet$h(this, _OnBlockSubscriber_provider, "f").off("block", __classPrivateFieldGet$h(this, _OnBlockSubscriber_poll, "f")); + } + pause(dropWhilePaused) { this.stop(); } + resume() { this.start(); } +} +_OnBlockSubscriber_provider = new WeakMap(), _OnBlockSubscriber_poll = new WeakMap(); +class PollingOrphanSubscriber extends OnBlockSubscriber { + constructor(provider, filter) { + super(provider); + _PollingOrphanSubscriber_filter.set(this, void 0); + __classPrivateFieldSet$h(this, _PollingOrphanSubscriber_filter, copy$3(filter), "f"); + } + async _poll(blockNumber, provider) { + console.log(__classPrivateFieldGet$h(this, _PollingOrphanSubscriber_filter, "f")); + throw new Error("@TODO"); + } +} +_PollingOrphanSubscriber_filter = new WeakMap(); +class PollingTransactionSubscriber extends OnBlockSubscriber { + constructor(provider, hash) { + super(provider); + _PollingTransactionSubscriber_hash.set(this, void 0); + __classPrivateFieldSet$h(this, _PollingTransactionSubscriber_hash, hash, "f"); + } + async _poll(blockNumber, provider) { + const tx = await provider.getTransactionReceipt(__classPrivateFieldGet$h(this, _PollingTransactionSubscriber_hash, "f")); + if (tx) { + provider.emit(__classPrivateFieldGet$h(this, _PollingTransactionSubscriber_hash, "f"), tx); + } + } +} +_PollingTransactionSubscriber_hash = new WeakMap(); +class PollingEventSubscriber { + constructor(provider, filter) { + _PollingEventSubscriber_instances.add(this); + _PollingEventSubscriber_provider.set(this, void 0); + _PollingEventSubscriber_filter.set(this, void 0); + _PollingEventSubscriber_poller.set(this, void 0); + // The most recent block we have scanned for events. The value -2 + // indicates we still need to fetch an initial block number + _PollingEventSubscriber_blockNumber.set(this, void 0); + __classPrivateFieldSet$h(this, _PollingEventSubscriber_provider, provider, "f"); + __classPrivateFieldSet$h(this, _PollingEventSubscriber_filter, copy$3(filter), "f"); + __classPrivateFieldSet$h(this, _PollingEventSubscriber_poller, __classPrivateFieldGet$h(this, _PollingEventSubscriber_instances, "m", _PollingEventSubscriber_poll).bind(this), "f"); + __classPrivateFieldSet$h(this, _PollingEventSubscriber_blockNumber, -2, "f"); + } + start() { + if (__classPrivateFieldGet$h(this, _PollingEventSubscriber_blockNumber, "f") === -2) { + __classPrivateFieldGet$h(this, _PollingEventSubscriber_provider, "f").getBlockNumber().then((blockNumber) => { + __classPrivateFieldSet$h(this, _PollingEventSubscriber_blockNumber, blockNumber, "f"); + }); + } + __classPrivateFieldGet$h(this, _PollingEventSubscriber_provider, "f").on("block", __classPrivateFieldGet$h(this, _PollingEventSubscriber_poller, "f")); + } + stop() { + __classPrivateFieldGet$h(this, _PollingEventSubscriber_provider, "f").off("block", __classPrivateFieldGet$h(this, _PollingEventSubscriber_poller, "f")); + } + pause(dropWhilePaused) { + this.stop(); + if (dropWhilePaused) { + __classPrivateFieldSet$h(this, _PollingEventSubscriber_blockNumber, -2, "f"); + } + } + resume() { + this.start(); + } +} +_PollingEventSubscriber_provider = new WeakMap(), _PollingEventSubscriber_filter = new WeakMap(), _PollingEventSubscriber_poller = new WeakMap(), _PollingEventSubscriber_blockNumber = new WeakMap(), _PollingEventSubscriber_instances = new WeakSet(), _PollingEventSubscriber_poll = async function _PollingEventSubscriber_poll(blockNumber) { + // The initial block hasn't been determined yet + if (__classPrivateFieldGet$h(this, _PollingEventSubscriber_blockNumber, "f") === -2) { + return; + } + const filter = copy$3(__classPrivateFieldGet$h(this, _PollingEventSubscriber_filter, "f")); + filter.fromBlock = __classPrivateFieldGet$h(this, _PollingEventSubscriber_blockNumber, "f") + 1; + filter.toBlock = blockNumber; + __classPrivateFieldSet$h(this, _PollingEventSubscriber_blockNumber, blockNumber, "f"); + const logs = await __classPrivateFieldGet$h(this, _PollingEventSubscriber_provider, "f").getLogs(filter); + for (const log of logs) { + __classPrivateFieldGet$h(this, _PollingEventSubscriber_provider, "f").emit(__classPrivateFieldGet$h(this, _PollingEventSubscriber_filter, "f"), log); + } +}; + +// @TODO +// Event coalescence +// When we register an event with an async value (e.g. address is a Signer +// or ENS name), we need to add it immeidately for the Event API, but also +// need time to resolve the address. Upon resolving the address, we need to +// migrate the listener to the static event. We also need to maintain a map +// of Signer/ENS name to address so we can sync respond to listenerCount. +var __classPrivateFieldSet$g = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$g = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _AbstractProvider_instances, _AbstractProvider_subs, _AbstractProvider_plugins, _AbstractProvider_pausedState, _AbstractProvider_networkPromise, _AbstractProvider_anyNetwork, _AbstractProvider_performCache, _AbstractProvider_nextTimer, _AbstractProvider_timers, _AbstractProvider_disableCcipRead, _AbstractProvider_perform, _AbstractProvider_call, _AbstractProvider_getBlock, _AbstractProvider_hasSub, _AbstractProvider_getSub; +// Constants +const BN_2$1 = BigInt(2); +const MAX_CCIP_REDIRECTS = 10; +function getTag(prefix, value) { + return prefix + ":" + JSON.stringify(value, (k, v) => { + if (typeof (v) === "bigint") { + return `bigint:${v.toString()}`; + } + if (typeof (v) === "string") { + return v.toLowerCase(); + } + // Sort object keys + if (typeof (v) === "object" && !Array.isArray(v)) { + const keys = Object.keys(v); + keys.sort(); + return keys.reduce((accum, key) => { + accum[key] = v[key]; + return accum; + }, {}); + } + return v; + }); +} +class UnmanagedSubscriber { + constructor(name) { defineProperties(this, { name }); } + start() { } + stop() { } + pause(dropWhilePaused) { } + resume() { } +} +function copy$2(value) { + return JSON.parse(JSON.stringify(value)); +} +function concisify$1(items) { + items = Array.from((new Set(items)).values()); + items.sort(); + return items; +} +// Normalize a ProviderEvent into a Subscription +// @TODO: Make events sync if possible; like block +//function getSyncSubscription(_event: ProviderEvent): Subscription { +//} +async function getSubscription(_event, provider) { + if (_event == null) { + throw new Error("invalid event"); + } + // Normalize topic array info an EventFilter + if (Array.isArray(_event)) { + _event = { topics: _event }; + } + if (typeof (_event) === "string") { + switch (_event) { + case "block": + case "pending": + case "debug": + case "network": { + return { type: _event, tag: _event }; + } + } + } + if (isHexString(_event, 32)) { + const hash = _event.toLowerCase(); + return { type: "transaction", tag: getTag("tx", { hash }), hash }; + } + if (_event.orphan) { + const event = _event; + // @TODO: Should lowercase and whatnot things here instead of copy... + return { type: "orphan", tag: getTag("orphan", event), filter: copy$2(event) }; + } + if ((_event.address || _event.topics)) { + const event = _event; + const filter = { + topics: ((event.topics || []).map((t) => { + if (t == null) { + return null; + } + if (Array.isArray(t)) { + return concisify$1(t.map((t) => t.toLowerCase())); + } + return t.toLowerCase(); + })) + }; + if (event.address) { + const addresses = []; + const promises = []; + const addAddress = (addr) => { + if (isHexString(addr)) { + addresses.push(addr); + } + else { + promises.push((async () => { + addresses.push(await resolveAddress(addr, provider)); + })()); + } + }; + if (Array.isArray(event.address)) { + event.address.forEach(addAddress); + } + else { + addAddress(event.address); + } + if (promises.length) { + await Promise.all(promises); + } + filter.address = concisify$1(addresses.map((a) => a.toLowerCase())); + } + return { filter, tag: getTag("event", filter), type: "event" }; + } + return logger$5.throwArgumentError("unknown ProviderEvent", "event", _event); +} +function getTime$1() { return (new Date()).getTime(); } +function copyRequest(tx) { + // @TODO: copy the copy from contracts and use it from this + return tx; +} +class AbstractProvider { + // @TODO: This should be a () => Promise so network can be + // done when needed; or rely entirely on _detectNetwork? + constructor(_network) { + _AbstractProvider_instances.add(this); + _AbstractProvider_subs.set(this, void 0); + _AbstractProvider_plugins.set(this, void 0); + // null=unpaused, true=paused+dropWhilePaused, false=paused + _AbstractProvider_pausedState.set(this, void 0); + _AbstractProvider_networkPromise.set(this, void 0); + _AbstractProvider_anyNetwork.set(this, void 0); + _AbstractProvider_performCache.set(this, void 0); + _AbstractProvider_nextTimer.set(this, void 0); + _AbstractProvider_timers.set(this, void 0); + _AbstractProvider_disableCcipRead.set(this, void 0); + if (_network === "any") { + __classPrivateFieldSet$g(this, _AbstractProvider_anyNetwork, true, "f"); + __classPrivateFieldSet$g(this, _AbstractProvider_networkPromise, null, "f"); + } + else if (_network) { + const network = Network$1.from(_network); + __classPrivateFieldSet$g(this, _AbstractProvider_anyNetwork, false, "f"); + __classPrivateFieldSet$g(this, _AbstractProvider_networkPromise, Promise.resolve(network), "f"); + setTimeout(() => { this.emit("network", network, null); }, 0); + } + else { + __classPrivateFieldSet$g(this, _AbstractProvider_anyNetwork, false, "f"); + __classPrivateFieldSet$g(this, _AbstractProvider_networkPromise, null, "f"); + } + //this.#approxNumber = -2; + //this.#approxNumberT0 = 0; + __classPrivateFieldSet$g(this, _AbstractProvider_performCache, new Map(), "f"); + __classPrivateFieldSet$g(this, _AbstractProvider_subs, new Map(), "f"); + __classPrivateFieldSet$g(this, _AbstractProvider_plugins, new Map(), "f"); + __classPrivateFieldSet$g(this, _AbstractProvider_pausedState, null, "f"); + __classPrivateFieldSet$g(this, _AbstractProvider_nextTimer, 0, "f"); + __classPrivateFieldSet$g(this, _AbstractProvider_timers, new Map(), "f"); + __classPrivateFieldSet$g(this, _AbstractProvider_disableCcipRead, false, "f"); + } + get plugins() { + return Array.from(__classPrivateFieldGet$g(this, _AbstractProvider_plugins, "f").values()); + } + attachPlugin(plugin) { + if (__classPrivateFieldGet$g(this, _AbstractProvider_plugins, "f").get(plugin.name)) { + throw new Error(`cannot replace existing plugin: ${plugin.name} `); + } + __classPrivateFieldGet$g(this, _AbstractProvider_plugins, "f").set(plugin.name, plugin.validate(this)); + return this; + } + getPlugin(name) { + return (__classPrivateFieldGet$g(this, _AbstractProvider_plugins, "f").get(name)) || null; + } + set disableCcipRead(value) { __classPrivateFieldSet$g(this, _AbstractProvider_disableCcipRead, !!value, "f"); } + get disableCcipRead() { return __classPrivateFieldGet$g(this, _AbstractProvider_disableCcipRead, "f"); } + async ccipReadFetch(tx, calldata, urls) { + if (this.disableCcipRead || urls.length === 0 || tx.to == null) { + return null; + } + const sender = tx.to.toLowerCase(); + const data = calldata.toLowerCase(); + const errorMessages = []; + for (let i = 0; i < urls.length; i++) { + const url = urls[i]; + // URL expansion + const href = url.replace("{sender}", sender).replace("{data}", data); + // If no {data} is present, use POST; otherwise GET + //const json: string | null = (url.indexOf("{data}") >= 0) ? null: JSON.stringify({ data, sender }); + //const result = await fetchJson({ url: href, errorPassThrough: true }, json, (value, response) => { + // value.status = response.statusCode; + // return value; + //}); + const request = new FetchRequest(href); + if (url.indexOf("{data}") === -1) { + request.body = { data, sender }; + } + let errorMessage = "unknown error"; + const resp = await fetchData(request); + try { + const result = resp.bodyJson; + if (result.data) { + return result.data; + } + if (result.message) { + errorMessage = result.message; + } + } + catch (error) { } + // 4xx indicates the result is not present; stop + if (resp.statusCode >= 400 && resp.statusCode < 500) { + return logger$5.throwError(`response not found during CCIP fetch: ${errorMessage}`, "OFFCHAIN_FAULT", { + reason: "404_MISSING_RESOURCE", + transaction: tx, info: { url, errorMessage } + }); + } + // 5xx indicates server issue; try the next url + errorMessages.push(errorMessage); + } + return logger$5.throwError(`error encountered during CCIP fetch: ${errorMessages.map((m) => JSON.stringify(m)).join(", ")}`, "OFFCHAIN_FAULT", { + reason: "500_SERVER_ERROR", + transaction: tx, info: { urls, errorMessages } + }); + } + _wrapTransaction(tx, hash, blockNumber) { + return tx; + } + _detectNetwork() { + return logger$5.throwError("sub-classes must implement this", "UNSUPPORTED_OPERATION", { + operation: "_detectNetwork" + }); + } + async _perform(req) { + return logger$5.throwError(`unsupported method: ${req.method}`, "UNSUPPORTED_OPERATION", { + operation: req.method, + info: req + }); + } + // State + async getBlockNumber() { + return logger$5.getNumber(await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_perform).call(this, { method: "getBlockNumber" }), "%response"); + } + async _getAddress(address) { + if (typeof (address) === "string") { + return address; + } + return await address.getAddress(); + } + async _getBlockTag(blockTag) { + const network = await this.getNetwork(); + if (typeof (blockTag) === "number" && Number.isSafeInteger(blockTag) && blockTag < 0) { + //let blockNumber = await this._getApproxBlockNumber(500); + let blockNumber = await this.getBlockNumber(); + blockNumber += blockTag; + if (blockNumber < 0) { + blockNumber = 0; + } + return network.formatter.blockTag(blockNumber); + } + return network.formatter.blockTag(blockTag); + } + async getNetwork() { + // No explicit network was set and this is our first time + if (__classPrivateFieldGet$g(this, _AbstractProvider_networkPromise, "f") == null) { + // Detect the current network (shared with all calls) + const detectNetwork = this._detectNetwork().then((network) => { + this.emit("network", network, null); + return network; + }, (error) => { + // Reset the networkPromise on failure, so we will try again + if (__classPrivateFieldGet$g(this, _AbstractProvider_networkPromise, "f") === detectNetwork) { + __classPrivateFieldSet$g(this, _AbstractProvider_networkPromise, null, "f"); + } + throw error; + }); + __classPrivateFieldSet$g(this, _AbstractProvider_networkPromise, detectNetwork, "f"); + return await detectNetwork; + } + const networkPromise = __classPrivateFieldGet$g(this, _AbstractProvider_networkPromise, "f"); + const [expected, actual] = await Promise.all([ + networkPromise, + this._detectNetwork() // The actual connected network + ]); + if (expected.chainId !== actual.chainId) { + if (__classPrivateFieldGet$g(this, _AbstractProvider_anyNetwork, "f")) { + // The "any" network can change, so notify listeners + this.emit("network", actual, expected); + // Update the network if something else hasn't already changed it + if (__classPrivateFieldGet$g(this, _AbstractProvider_networkPromise, "f") === networkPromise) { + __classPrivateFieldSet$g(this, _AbstractProvider_networkPromise, Promise.resolve(actual), "f"); + } + } + else { + // Otherwise, we do not allow changes to the underlying network + logger$5.throwError(`network changed: ${expected.chainId} => ${actual.chainId} `, "NETWORK_ERROR", { + event: "changed" + }); + } + } + return expected.clone().freeze(); + } + async getFeeData() { + const { block, gasPrice } = await resolveProperties({ + block: this.getBlock("latest"), + gasPrice: ((async () => { + try { + const gasPrice = await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_perform).call(this, { method: "getGasPrice" }); + return logger$5.getBigInt(gasPrice, "%response"); + } + catch (error) { } + return null; + })()) + }); + let maxFeePerGas = null, maxPriorityFeePerGas = null; + if (block && block.baseFeePerGas) { + // We may want to compute this more accurately in the future, + // using the formula "check if the base fee is correct". + // See: https://eips.ethereum.org/EIPS/eip-1559 + maxPriorityFeePerGas = BigInt("1500000000"); + // Allow a network to override their maximum priority fee per gas + const priorityFeePlugin = (await this.getNetwork()).getPlugin("org.ethers.plugins.max-priority-fee"); + if (priorityFeePlugin) { + maxPriorityFeePerGas = await priorityFeePlugin.getPriorityFee(this); + } + maxFeePerGas = (block.baseFeePerGas * BN_2$1) + maxPriorityFeePerGas; + } + return new FeeData(gasPrice, maxFeePerGas, maxPriorityFeePerGas); + } + async _getTransaction(_request) { + const network = await this.getNetwork(); + // Fill in any addresses + const request = Object.assign({}, _request, await resolveProperties({ + to: (_request.to ? resolveAddress(_request.to, this) : undefined), + from: (_request.from ? resolveAddress(_request.from, this) : undefined), + })); + return network.formatter.transactionRequest(request); + } + async estimateGas(_tx) { + const transaction = await this._getTransaction(_tx); + return logger$5.getBigInt(await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_perform).call(this, { + method: "estimateGas", transaction + }), "%response"); + } + async call(_tx) { + const { tx, blockTag } = await resolveProperties({ + tx: this._getTransaction(_tx), + blockTag: this._getBlockTag(_tx.blockTag) + }); + return __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_call).call(this, tx, blockTag, _tx.enableCcipRead ? 0 : -1); + } + // Account + async getBalanceOf(_address, _blockTag) { + const { address, blockTag } = await resolveProperties({ + address: resolveAddress(_address), + blockTag: this._getBlockTag(_blockTag) + }); + return logger$5.getBigInt(await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_perform).call(this, { + method: "getBalance", address, blockTag + }), "%response"); + } + async getTransactionCountOf(_address, _blockTag) { + const { address, blockTag } = await resolveProperties({ + address: resolveAddress(_address), + blockTag: this._getBlockTag(_blockTag) + }); + return logger$5.getNumber(await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_perform).call(this, { + method: "getTransactionCount", address, blockTag + }), "%response"); + } + async getCode(_address, _blockTag) { + const { address, blockTag } = await resolveProperties({ + address: resolveAddress(_address), + blockTag: this._getBlockTag(_blockTag) + }); + return hexlify(await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_perform).call(this, { + method: "getCode", address, blockTag + })); + } + async getStorageAt(_address, _position, _blockTag) { + const position = logger$5.getBigInt(_position); + const { address, blockTag } = await resolveProperties({ + address: resolveAddress(_address), + blockTag: this._getBlockTag(_blockTag) + }); + return hexlify(await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_perform).call(this, { + method: "getStorageAt", address, position, blockTag + })); + } + // Write + async broadcastTransaction(signedTx) { + throw new Error(); + } + // Queries + async getBlock(block) { + const format = (await this.getNetwork()).formatter; + const params = await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_getBlock).call(this, block, false); + if (params == null) { + return null; + } + return format.block(params, this); + } + async getBlockWithTransactions(block) { + const format = (await this.getNetwork()).formatter; + const params = __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_getBlock).call(this, block, true); + if (params == null) { + return null; + } + return format.blockWithTransactions(params, this); + } + async getTransaction(hash) { + const format = (await this.getNetwork()).formatter; + const params = await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_perform).call(this, { method: "getTransaction", hash }); + return format.transactionResponse(params, this); + } + async getTransactionReceipt(hash) { + const format = (await this.getNetwork()).formatter; + const receipt = await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_perform).call(this, { method: "getTransactionReceipt", hash }); + if (receipt == null) { + return null; + } + // Some backends did not backfill the effectiveGasPrice into old transactions + // in the receipt, so we look it up manually and inject it. + if (receipt.gasPrice == null && receipt.effectiveGasPrice == null) { + const tx = await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_perform).call(this, { method: "getTransaction", hash }); + receipt.effectiveGasPrice = tx.gasPrice; + } + return format.receipt(receipt, this); + } + async _getFilter(filter) { + const lookup = {}; + if (filter.address) { + if (Array.isArray(filter.address)) { + lookup.address = Promise.all(filter.address.map((a) => resolveAddress(a, this))); + } + else { + lookup.address = resolveAddress(filter.address, this); + } + } + const addBlockTag = (key) => { + if (filter[key] == null) { + return; + } + lookup[key] = this._getBlockTag(filter[key]); + }; + addBlockTag("fromBlock"); + addBlockTag("toBlock"); + const result = await resolveProperties(lookup); + if (Array.isArray(result.address)) { + result.address.sort(); + } + if (filter.blockHash) { + if (filter.fromBlock || filter.toBlock) { + throw new Error("invalid filter"); + } + result.blockHash = filter.blockHash; + } + return result; + } + // Bloom-filter Queries + async getLogs(_filter) { + const { network, filter } = await resolveProperties({ + network: this.getNetwork(), + filter: this._getFilter(_filter) + }); + return (await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_perform).call(this, { method: "getLogs", filter })).map((l) => { + return network.formatter.log(l, this); + }); + } + // ENS + _getProvider(chainId) { + return logger$5.throwError("provider cannot connect to target network", "UNSUPPORTED_OPERATION", { + operation: "_getProvider()" + }); + } + async getResolver(name) { + return await EnsResolver.fromName(this, name); + } + async getAvatar(name) { + const resolver = await this.getResolver(name); + if (resolver) { + return await resolver.getAvatar(); + } + return null; + } + async resolveName(name) { + if (typeof (name) === "string") { + const resolver = await this.getResolver(name); + if (resolver) { + return await resolver.getAddress(); + } + } + else { + const address = await name.getAddress(); + if (address == null) { + return logger$5.throwArgumentError("Addressable returned no address", "name", name); + } + return address; + } + return null; + } + async lookupAddress(address) { + throw new Error(); + //return "TODO"; + } + async waitForTransaction(hash, confirms = 1, timeout) { + if (confirms === 0) { + return this.getTransactionReceipt(hash); + } + return new Promise(async (resolve, reject) => { + let timer = null; + const listener = (async (blockNumber) => { + try { + const receipt = await this.getTransactionReceipt(hash); + if (receipt != null) { + if (blockNumber - receipt.blockNumber + 1 >= confirms) { + resolve(receipt); + this.off("block", listener); + if (timer) { + clearTimeout(timer); + timer = null; + } + return; + } + } + } + catch (error) { + console.log("EEE", error); + } + this.once("block", listener); + }); + if (timeout != null) { + timer = setTimeout(() => { + if (timer == null) { + return; + } + timer = null; + this.off("block", listener); + reject(logger$5.makeError("timeout", "TIMEOUT", {})); + }, timeout); + } + listener(await this.getBlockNumber()); + }); + } + async waitForBlock(blockTag) { + throw new Error(); + //return new Block({ }, this); + } + _clearTimeout(timerId) { + const timer = __classPrivateFieldGet$g(this, _AbstractProvider_timers, "f").get(timerId); + if (!timer) { + return; + } + if (timer.timer) { + clearTimeout(timer.timer); + } + __classPrivateFieldGet$g(this, _AbstractProvider_timers, "f").delete(timerId); + } + _setTimeout(_func, timeout = 0) { + var _a, _b; + const timerId = (__classPrivateFieldSet$g(this, _AbstractProvider_nextTimer, (_b = __classPrivateFieldGet$g(this, _AbstractProvider_nextTimer, "f"), _a = _b++, _b), "f"), _a); + const func = () => { + __classPrivateFieldGet$g(this, _AbstractProvider_timers, "f").delete(timerId); + _func(); + }; + if (this.paused) { + __classPrivateFieldGet$g(this, _AbstractProvider_timers, "f").set(timerId, { timer: null, func, time: timeout }); + } + else { + const timer = setTimeout(func, timeout); + __classPrivateFieldGet$g(this, _AbstractProvider_timers, "f").set(timerId, { timer, func, time: getTime$1() }); + } + return timerId; + } + _forEachSubscriber(func) { + for (const sub of __classPrivateFieldGet$g(this, _AbstractProvider_subs, "f").values()) { + func(sub.subscriber); + } + } + // Event API; sub-classes should override this; any supported + // event filter will have been munged into an EventFilter + _getSubscriber(sub) { + switch (sub.type) { + case "debug": + case "network": + return new UnmanagedSubscriber(sub.type); + case "block": + return new PollingBlockSubscriber(this); + case "event": + return new PollingEventSubscriber(this, sub.filter); + case "transaction": + return new PollingTransactionSubscriber(this, sub.hash); + case "orphan": + return new PollingOrphanSubscriber(this, sub.filter); + } + throw new Error(`unsupported event: ${sub.type}`); + } + _recoverSubscriber(oldSub, newSub) { + for (const sub of __classPrivateFieldGet$g(this, _AbstractProvider_subs, "f").values()) { + if (sub.subscriber === oldSub) { + if (sub.started) { + sub.subscriber.stop(); + } + sub.subscriber = newSub; + if (sub.started) { + newSub.start(); + } + if (__classPrivateFieldGet$g(this, _AbstractProvider_pausedState, "f") != null) { + newSub.pause(__classPrivateFieldGet$g(this, _AbstractProvider_pausedState, "f")); + } + break; + } + } + } + async on(event, listener) { + const sub = await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_getSub).call(this, event); + sub.listeners.push({ listener, once: false }); + if (!sub.started) { + sub.subscriber.start(); + sub.started = true; + if (__classPrivateFieldGet$g(this, _AbstractProvider_pausedState, "f") != null) { + sub.subscriber.pause(__classPrivateFieldGet$g(this, _AbstractProvider_pausedState, "f")); + } + } + return this; + } + async once(event, listener) { + const sub = await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_getSub).call(this, event); + sub.listeners.push({ listener, once: true }); + if (!sub.started) { + sub.subscriber.start(); + sub.started = true; + if (__classPrivateFieldGet$g(this, _AbstractProvider_pausedState, "f") != null) { + sub.subscriber.pause(__classPrivateFieldGet$g(this, _AbstractProvider_pausedState, "f")); + } + } + return this; + } + async emit(event, ...args) { + const sub = await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_hasSub).call(this, event, args); + if (!sub) { + return false; + } + const count = sub.listeners.length; + sub.listeners = sub.listeners.filter(({ listener, once }) => { + const payload = new EventPayload(this, (once ? null : listener), event); + setTimeout(() => { listener.call(this, ...args, payload); }, 0); + return !once; + }); + return (count > 0); + } + async listenerCount(event) { + if (event) { + const sub = await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_hasSub).call(this, event); + if (!sub) { + return 0; + } + return sub.listeners.length; + } + let total = 0; + for (const { listeners } of __classPrivateFieldGet$g(this, _AbstractProvider_subs, "f").values()) { + total += listeners.length; + } + return total; + } + async listeners(event) { + if (event) { + const sub = await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_hasSub).call(this, event); + if (!sub) { + return []; + } + return sub.listeners.map(({ listener }) => listener); + } + let result = []; + for (const { listeners } of __classPrivateFieldGet$g(this, _AbstractProvider_subs, "f").values()) { + result = result.concat(listeners.map(({ listener }) => listener)); + } + return result; + } + async off(event, listener) { + const sub = await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_hasSub).call(this, event); + if (!sub) { + return this; + } + if (listener) { + const index = sub.listeners.map(({ listener }) => listener).indexOf(listener); + if (index >= 0) { + sub.listeners.splice(index, 1); + } + } + if (!listener || sub.listeners.length === 0) { + if (sub.started) { + sub.subscriber.stop(); + } + __classPrivateFieldGet$g(this, _AbstractProvider_subs, "f").delete(sub.tag); + } + return this; + } + async removeAllListeners(event) { + if (event) { + const { tag, started, subscriber } = await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_getSub).call(this, event); + if (started) { + subscriber.stop(); + } + __classPrivateFieldGet$g(this, _AbstractProvider_subs, "f").delete(tag); + } + else { + for (const [tag, { started, subscriber }] of __classPrivateFieldGet$g(this, _AbstractProvider_subs, "f")) { + if (started) { + subscriber.stop(); + } + __classPrivateFieldGet$g(this, _AbstractProvider_subs, "f").delete(tag); + } + } + return this; + } + // Alias for "on" + async addListener(event, listener) { + return await this.on(event, listener); + } + // Alias for "off" + async removeListener(event, listener) { + return this.off(event, listener); + } + // Sub-classes should override this to shutdown any sockets, etc. + // but MUST call this super.shutdown. + async shutdown() { + // Stop all listeners + this.removeAllListeners(); + // Shut down all tiemrs + for (const timerId of __classPrivateFieldGet$g(this, _AbstractProvider_timers, "f").keys()) { + this._clearTimeout(timerId); + } + } + get paused() { return (__classPrivateFieldGet$g(this, _AbstractProvider_pausedState, "f") != null); } + pause(dropWhilePaused) { + if (__classPrivateFieldGet$g(this, _AbstractProvider_pausedState, "f") != null) { + if (__classPrivateFieldGet$g(this, _AbstractProvider_pausedState, "f") == !!dropWhilePaused) { + return; + } + return logger$5.throwError("cannot change pause type; resume first", "UNSUPPORTED_OPERATION", { + operation: "pause" + }); + } + this._forEachSubscriber((s) => s.pause(dropWhilePaused)); + __classPrivateFieldSet$g(this, _AbstractProvider_pausedState, !!dropWhilePaused, "f"); + for (const timer of __classPrivateFieldGet$g(this, _AbstractProvider_timers, "f").values()) { + // Clear the timer + if (timer.timer) { + clearTimeout(timer.timer); + } + // Remaining time needed for when we become unpaused + timer.time = getTime$1() - timer.time; + } + } + resume() { + if (__classPrivateFieldGet$g(this, _AbstractProvider_pausedState, "f") == null) { + return; + } + this._forEachSubscriber((s) => s.resume()); + __classPrivateFieldSet$g(this, _AbstractProvider_pausedState, null, "f"); + for (const timer of __classPrivateFieldGet$g(this, _AbstractProvider_timers, "f").values()) { + // Remaining time when we were paused + let timeout = timer.time; + if (timeout < 0) { + timeout = 0; + } + // Start time (in cause paused, so we con compute remaininf time) + timer.time = getTime$1(); + // Start the timer + setTimeout(timer.func, timeout); + } + } +} +_AbstractProvider_subs = new WeakMap(), _AbstractProvider_plugins = new WeakMap(), _AbstractProvider_pausedState = new WeakMap(), _AbstractProvider_networkPromise = new WeakMap(), _AbstractProvider_anyNetwork = new WeakMap(), _AbstractProvider_performCache = new WeakMap(), _AbstractProvider_nextTimer = new WeakMap(), _AbstractProvider_timers = new WeakMap(), _AbstractProvider_disableCcipRead = new WeakMap(), _AbstractProvider_instances = new WeakSet(), _AbstractProvider_perform = +// Shares multiple identical requests made during the same 250ms +async function _AbstractProvider_perform(req) { + // Create a tag + const tag = getTag(req.method, req); + let perform = __classPrivateFieldGet$g(this, _AbstractProvider_performCache, "f").get(tag); + if (!perform) { + perform = this._perform(req); + __classPrivateFieldGet$g(this, _AbstractProvider_performCache, "f").set(tag, perform); + setTimeout(() => { + if (__classPrivateFieldGet$g(this, _AbstractProvider_performCache, "f").get(tag) === perform) { + __classPrivateFieldGet$g(this, _AbstractProvider_performCache, "f").delete(tag); + } + }, 250); + } + return await perform; +}, _AbstractProvider_call = async function _AbstractProvider_call(tx, blockTag, attempt) { + if (attempt >= MAX_CCIP_REDIRECTS) { + logger$5.throwError("CCIP read exceeded maximum redirections", "OFFCHAIN_FAULT", { + reason: "TOO_MANY_REDIRECTS", + transaction: Object.assign({}, tx, { blockTag, enableCcipRead: true }) + }); + } + const transaction = copyRequest(tx); + try { + return hexlify(await this._perform({ method: "call", transaction, blockTag })); + } + catch (error) { + // CCIP Read OffchainLookup + if (!this.disableCcipRead && isCallException(error) && attempt >= 0 && blockTag === "latest" && transaction.to != null && dataSlice(error.data, 0, 4) === "0x556f1830") { + const data = error.data; + const txSender = await resolveAddress(transaction.to, this); + // Parse the CCIP Read Arguments + let ccipArgs; + try { + ccipArgs = parseOffchainLookup(dataSlice(error.data, 4)); + } + catch (error) { + return logger$5.throwError(error.message, "OFFCHAIN_FAULT", { + reason: "BAD_DATA", + transaction, info: { data } + }); + } + // Check the sender of the OffchainLookup matches the transaction + if (ccipArgs.sender.toLowerCase() !== txSender.toLowerCase()) { + return logger$5.throwError("CCIP Read sender mismatch", "CALL_EXCEPTION", { + data, transaction, + errorSignature: "OffchainLookup(address,string[],bytes,bytes4,bytes)", + errorName: "OffchainLookup", + errorArgs: ccipArgs.errorArgs + }); + } + const ccipResult = await this.ccipReadFetch(transaction, ccipArgs.calldata, ccipArgs.urls); + if (ccipResult == null) { + return logger$5.throwError("CCIP Read failed to fetch data", "OFFCHAIN_FAULT", { + reason: "FETCH_FAILED", + transaction, info: { data: error.data, errorArgs: ccipArgs.errorArgs } + }); + } + return __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_call).call(this, { + to: txSender, + data: concat([ + ccipArgs.selector, encodeBytes([ccipResult, ccipArgs.extraData]) + ]), + }, blockTag, attempt + 1); + } + throw error; + } +}, _AbstractProvider_getBlock = async function _AbstractProvider_getBlock(block, includeTransactions) { + const format = (await this.getNetwork()).formatter; + if (isHexString(block, 32)) { + return await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_perform).call(this, { + method: "getBlock", blockHash: block, includeTransactions + }); + } + return await __classPrivateFieldGet$g(this, _AbstractProvider_instances, "m", _AbstractProvider_perform).call(this, { + method: "getBlock", blockTag: format.blockTag(block), includeTransactions + }); +}, _AbstractProvider_hasSub = async function _AbstractProvider_hasSub(event, emitArgs) { + let sub = await getSubscription(event, this); + // This is a log that is removing an existing log; we actually want + // to emit an orphan event for the removed log + if (sub.type === "event" && emitArgs && emitArgs.length > 0 && emitArgs[0].removed === true) { + sub = await getSubscription({ orphan: "drop-log", log: emitArgs[0] }, this); + } + return __classPrivateFieldGet$g(this, _AbstractProvider_subs, "f").get(sub.tag) || null; +}, _AbstractProvider_getSub = async function _AbstractProvider_getSub(event) { + const subscription = await getSubscription(event, this); + // Prevent tampering with our tag in any subclass' _getSubscriber + const tag = subscription.tag; + let sub = __classPrivateFieldGet$g(this, _AbstractProvider_subs, "f").get(tag); + if (!sub) { + const subscriber = this._getSubscriber(subscription); + const addressableMap = new WeakMap(); + const nameMap = new Map(); + sub = { subscriber, tag, addressableMap, nameMap, started: false, listeners: [] }; + __classPrivateFieldGet$g(this, _AbstractProvider_subs, "f").set(tag, sub); + } + return sub; +}; +function _parseString(result, start) { + try { + const bytes = _parseBytes(result, start); + if (bytes) { + return toUtf8String(bytes); + } + } + catch (error) { } + return null; +} +function _parseBytes(result, start) { + if (result === "0x") { + return null; + } + try { + const offset = logger$5.getNumber(dataSlice(result, start, start + 32)); + const length = logger$5.getNumber(dataSlice(result, offset, offset + 32)); + return dataSlice(result, offset + 32, offset + 32 + length); + } + catch (error) { } + return null; +} +function numPad(value) { + const result = toArray(value); + if (result.length > 32) { + throw new Error("internal; should not happen"); + } + const padded = new Uint8Array(32); + padded.set(result, 32 - result.length); + return padded; +} +function bytesPad(value) { + if ((value.length % 32) === 0) { + return value; + } + const result = new Uint8Array(Math.ceil(value.length / 32) * 32); + result.set(value); + return result; +} +const empty = new Uint8Array([]); +// ABI Encodes a series of (bytes, bytes, ...) +function encodeBytes(datas) { + const result = []; + let byteCount = 0; + // Add place-holders for pointers as we add items + for (let i = 0; i < datas.length; i++) { + result.push(empty); + byteCount += 32; + } + for (let i = 0; i < datas.length; i++) { + const data = logger$5.getBytes(datas[i]); + // Update the bytes offset + result[i] = numPad(byteCount); + // The length and padded value of data + result.push(numPad(data.length)); + result.push(bytesPad(data)); + byteCount += 32 + Math.ceil(data.length / 32) * 32; + } + return concat(result); +} +const zeros = "0x0000000000000000000000000000000000000000000000000000000000000000"; +function parseOffchainLookup(data) { + const result = { + sender: "", urls: [], calldata: "", selector: "", extraData: "", errorArgs: [] + }; + if (dataLength(data) < 5 * 32) { + throw new Error("insufficient OffchainLookup data"); + } + const sender = dataSlice(data, 0, 32); + if (dataSlice(sender, 0, 12) !== dataSlice(zeros, 0, 12)) { + throw new Error("corrupt OffchainLookup sender"); + } + result.sender = dataSlice(sender, 12); + // Read the URLs from the response + try { + const urls = []; + const urlsOffset = logger$5.getNumber(dataSlice(data, 32, 64)); + const urlsLength = logger$5.getNumber(dataSlice(data, urlsOffset, urlsOffset + 32)); + const urlsData = dataSlice(data, urlsOffset + 32); + for (let u = 0; u < urlsLength; u++) { + const url = _parseString(urlsData, u * 32); + if (url == null) { + throw new Error("abort"); + } + urls.push(url); + } + result.urls = urls; + } + catch (error) { + throw new Error("corrupt OffchainLookup urls"); + } + // Get the CCIP calldata to forward + try { + const calldata = _parseBytes(data, 64); + if (calldata == null) { + throw new Error("abort"); + } + result.calldata = calldata; + } + catch (error) { + throw new Error("corrupt OffchainLookup calldata"); + } + // Get the callbackSelector (bytes4) + if (dataSlice(data, 100, 128) !== dataSlice(zeros, 0, 28)) { + throw new Error("corrupt OffchainLookup callbaackSelector"); + } + result.selector = dataSlice(data, 96, 100); + // Get the extra data to send back to the contract as context + try { + const extraData = _parseBytes(data, 128); + if (extraData == null) { + throw new Error("abort"); + } + result.extraData = extraData; + } + catch (error) { + throw new Error("corrupt OffchainLookup extraData"); + } + result.errorArgs = "sender,urls,calldata,selector,extraData".split(/,/).map((k) => result[k]); + return result; +} + +var __classPrivateFieldGet$f = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var __classPrivateFieldSet$f = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var _AbstractSigner_instances, _AbstractSigner_checkProvider, _AbstractSigner_fromify, _VoidSigner_instances, _VoidSigner_throwUnsupported, _WrappedSigner_signer; +class AbstractSigner { + constructor(provider) { + _AbstractSigner_instances.add(this); + defineProperties(this, { provider: (provider || null) }); + } + async getBalance(blockTag) { + return __classPrivateFieldGet$f(this, _AbstractSigner_instances, "m", _AbstractSigner_checkProvider).call(this, "getBalance").getBalanceOf(await this.getAddress(), blockTag); + } + async getTransactionCount(blockTag) { + return __classPrivateFieldGet$f(this, _AbstractSigner_instances, "m", _AbstractSigner_checkProvider).call(this, "getTransactionCount").getTransactionCountOf(await this.getAddress(), blockTag); + } + async estimateGas(tx) { + return __classPrivateFieldGet$f(this, _AbstractSigner_instances, "m", _AbstractSigner_checkProvider).call(this, "estimateGas").estimateGas(await __classPrivateFieldGet$f(this, _AbstractSigner_instances, "m", _AbstractSigner_fromify).call(this, tx)); + } + async call(tx) { + return __classPrivateFieldGet$f(this, _AbstractSigner_instances, "m", _AbstractSigner_checkProvider).call(this, "call").call(await __classPrivateFieldGet$f(this, _AbstractSigner_instances, "m", _AbstractSigner_fromify).call(this, tx)); + } + async populateTransaction(tx) { + const provider = __classPrivateFieldGet$f(this, _AbstractSigner_instances, "m", _AbstractSigner_checkProvider).call(this, "populateTransaction"); + //let pop: Deferrable = Object.assign({ }, tx); + let pop = Object.assign({}, tx); + if (pop.to != null) { + pop.to = provider.resolveName(pop.to).then((to) => { + if (to == null) { + return logger$5.throwArgumentError("transaction to ENS name not configured", "tx.to", pop.to); + } + return to; + }); + } + if (pop.from != null) { + const from = pop.from; + pop.from = Promise.all([ + this.getAddress(), + this.resolveName(from) + ]).then(([address, from]) => { + if (!from || address.toLowerCase() !== from.toLowerCase()) { + return logger$5.throwArgumentError("transaction from mismatch", "tx.from", from); + } + return address; + }); + } + if (pop.nonce == null) { + pop.nonce = this.getTransactionCount(); + } + pop = resolveProperties(pop); + if (pop.gasLimit == null) { + pop.gasLimit = provider.estimateGas(pop); + } + pop = resolveProperties(pop); + //@TODO: Copy logic from AbstractSigner in v5 + return await resolveProperties(pop); + } + async resolveName(name) { + const provider = __classPrivateFieldGet$f(this, _AbstractSigner_instances, "m", _AbstractSigner_checkProvider).call(this, "resolveName"); + return await provider.resolveName(name); + } + async sendTransaction(tx) { + const provider = __classPrivateFieldGet$f(this, _AbstractSigner_instances, "m", _AbstractSigner_checkProvider).call(this, "sendTransaction"); + const txObj = Transaction.from(await this.populateTransaction(tx)); + return await provider.broadcastTransaction(await this.signTransaction(txObj)); + } +} +_AbstractSigner_instances = new WeakSet(), _AbstractSigner_checkProvider = function _AbstractSigner_checkProvider(operation) { + if (this.provider) { + return this.provider; + } + return logger$5.throwError("missing provider", "UNSUPPORTED_OPERATION", { operation }); +}, _AbstractSigner_fromify = async function _AbstractSigner_fromify(tx) { + tx = Object.assign({}, tx); + const actions = []; + if (tx.from != null) { + const from = tx.from; + actions.push(Promise.all([ + this.getAddress(), + this.resolveName(from) + ]).then(([address, from]) => { + if (!from || address.toLowerCase() !== from.toLowerCase()) { + logger$5.throwArgumentError("transaction from mismatch", "tx.from", from); + } + tx.from = address; + })); + } + await Promise.all(actions); + return tx; +}; +class VoidSigner extends AbstractSigner { + constructor(address, provider) { + super(provider); + _VoidSigner_instances.add(this); + defineProperties(this, { address }); + } + async getAddress() { return this.address; } + connect(provider) { + return new VoidSigner(this.address, provider); + } + async signTransaction(tx) { + __classPrivateFieldGet$f(this, _VoidSigner_instances, "m", _VoidSigner_throwUnsupported).call(this, "transactions", "signTransaction"); + } + async signMessage(message) { + __classPrivateFieldGet$f(this, _VoidSigner_instances, "m", _VoidSigner_throwUnsupported).call(this, "messages", "signMessage"); + } + async signTypedData(domain, types, value) { + __classPrivateFieldGet$f(this, _VoidSigner_instances, "m", _VoidSigner_throwUnsupported).call(this, "typed-data", "signTypedData"); + } +} +_VoidSigner_instances = new WeakSet(), _VoidSigner_throwUnsupported = function _VoidSigner_throwUnsupported(suffix, operation) { + return logger$5.throwError(`VoidSigner cannot sign ${suffix}`, "UNSUPPORTED_OPERATION", { + operation + }); +}; +class WrappedSigner extends AbstractSigner { + //get provider(): null | Provider { return this.#signer.provider; } + constructor(signer) { + super(signer.provider); + _WrappedSigner_signer.set(this, void 0); + __classPrivateFieldSet$f(this, _WrappedSigner_signer, signer, "f"); + } + async getAddress() { + return await __classPrivateFieldGet$f(this, _WrappedSigner_signer, "f").getAddress(); + } + connect(provider) { + return new WrappedSigner(__classPrivateFieldGet$f(this, _WrappedSigner_signer, "f").connect(provider)); + } + async signTransaction(tx) { + return await __classPrivateFieldGet$f(this, _WrappedSigner_signer, "f").signTransaction(tx); + } + async sendTransaction(tx) { + return await __classPrivateFieldGet$f(this, _WrappedSigner_signer, "f").sendTransaction(tx); + } + async signMessage(message) { + return await __classPrivateFieldGet$f(this, _WrappedSigner_signer, "f").signMessage(message); + } + async signTypedData(domain, types, value) { + return await __classPrivateFieldGet$f(this, _WrappedSigner_signer, "f").signTypedData(domain, types, value); + } +} +_WrappedSigner_signer = new WeakMap(); + +// Show the throttle message only once +const shown = new Set(); +function showThrottleMessage(service) { + if (shown.has(service)) { + return; + } + shown.add(service); + console.log("========= NOTICE ========="); + console.log(`Request-Rate Exceeded for ${service} (this message will not be repeated)`); + console.log(""); + console.log("The default API keys for each service are provided as a highly-throttled,"); + console.log("community resource for low-traffic projects and early prototyping."); + console.log(""); + console.log("While your application will continue to function, we highly recommended"); + console.log("signing up for your own API keys to improve performance, increase your"); + console.log("request rate/limit and enable other perks, such as metrics and advanced APIs."); + console.log(""); + console.log("For more details: https:/\/docs.ethers.io/api-keys/"); + console.log("=========================="); +} + +var __classPrivateFieldSet$e = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$e = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _FilterIdSubscriber_instances, _FilterIdSubscriber_provider, _FilterIdSubscriber_filterIdPromise, _FilterIdSubscriber_poller, _FilterIdSubscriber_network, _FilterIdSubscriber_poll, _FilterIdSubscriber_teardown, _FilterIdEventSubscriber_event; +function copy$1(obj) { + return JSON.parse(JSON.stringify(obj)); +} +class FilterIdSubscriber { + constructor(provider) { + _FilterIdSubscriber_instances.add(this); + _FilterIdSubscriber_provider.set(this, void 0); + _FilterIdSubscriber_filterIdPromise.set(this, void 0); + _FilterIdSubscriber_poller.set(this, void 0); + _FilterIdSubscriber_network.set(this, void 0); + __classPrivateFieldSet$e(this, _FilterIdSubscriber_provider, provider, "f"); + __classPrivateFieldSet$e(this, _FilterIdSubscriber_filterIdPromise, null, "f"); + __classPrivateFieldSet$e(this, _FilterIdSubscriber_poller, __classPrivateFieldGet$e(this, _FilterIdSubscriber_instances, "m", _FilterIdSubscriber_poll).bind(this), "f"); + __classPrivateFieldSet$e(this, _FilterIdSubscriber_network, null, "f"); + } + _subscribe(provider) { + throw new Error("subclasses must override this"); + } + _emitResults(provider, result) { + throw new Error("subclasses must override this"); + } + _recover(provider) { + throw new Error("subclasses must override this"); + } + start() { __classPrivateFieldGet$e(this, _FilterIdSubscriber_instances, "m", _FilterIdSubscriber_poll).call(this, -2); } + stop() { + __classPrivateFieldGet$e(this, _FilterIdSubscriber_instances, "m", _FilterIdSubscriber_teardown).call(this); + __classPrivateFieldGet$e(this, _FilterIdSubscriber_provider, "f").off("block", __classPrivateFieldGet$e(this, _FilterIdSubscriber_poller, "f")); + } + pause(dropWhilePaused) { + if (dropWhilePaused) { + __classPrivateFieldGet$e(this, _FilterIdSubscriber_instances, "m", _FilterIdSubscriber_teardown).call(this); + } + __classPrivateFieldGet$e(this, _FilterIdSubscriber_provider, "f").off("block", __classPrivateFieldGet$e(this, _FilterIdSubscriber_poller, "f")); + } + resume() { this.start(); } +} +_FilterIdSubscriber_provider = new WeakMap(), _FilterIdSubscriber_filterIdPromise = new WeakMap(), _FilterIdSubscriber_poller = new WeakMap(), _FilterIdSubscriber_network = new WeakMap(), _FilterIdSubscriber_instances = new WeakSet(), _FilterIdSubscriber_poll = async function _FilterIdSubscriber_poll(blockNumber) { + try { + if (__classPrivateFieldGet$e(this, _FilterIdSubscriber_filterIdPromise, "f") == null) { + __classPrivateFieldSet$e(this, _FilterIdSubscriber_filterIdPromise, this._subscribe(__classPrivateFieldGet$e(this, _FilterIdSubscriber_provider, "f")), "f"); + } + const filterId = await __classPrivateFieldGet$e(this, _FilterIdSubscriber_filterIdPromise, "f"); + if (filterId == null) { + __classPrivateFieldGet$e(this, _FilterIdSubscriber_provider, "f")._recoverSubscriber(this, this._recover(__classPrivateFieldGet$e(this, _FilterIdSubscriber_provider, "f"))); + return; + } + const network = await __classPrivateFieldGet$e(this, _FilterIdSubscriber_provider, "f").getNetwork(); + if (!__classPrivateFieldGet$e(this, _FilterIdSubscriber_network, "f")) { + __classPrivateFieldSet$e(this, _FilterIdSubscriber_network, network, "f"); + } + if (__classPrivateFieldGet$e(this, _FilterIdSubscriber_network, "f").chainId !== network.chainId) { + throw new Error("chaid changed"); + } + const result = await __classPrivateFieldGet$e(this, _FilterIdSubscriber_provider, "f").send("eth_getFilterChanges", [filterId]); + await this._emitResults(__classPrivateFieldGet$e(this, _FilterIdSubscriber_provider, "f"), result); + } + catch (error) { + console.log("@TODO", error); + } + __classPrivateFieldGet$e(this, _FilterIdSubscriber_provider, "f").once("block", __classPrivateFieldGet$e(this, _FilterIdSubscriber_poller, "f")); +}, _FilterIdSubscriber_teardown = function _FilterIdSubscriber_teardown() { + const filterIdPromise = __classPrivateFieldGet$e(this, _FilterIdSubscriber_filterIdPromise, "f"); + if (filterIdPromise) { + __classPrivateFieldSet$e(this, _FilterIdSubscriber_filterIdPromise, null, "f"); + filterIdPromise.then((filterId) => { + __classPrivateFieldGet$e(this, _FilterIdSubscriber_provider, "f").send("eth_uninstallFilter", [filterId]); + }); + } +}; +class FilterIdEventSubscriber extends FilterIdSubscriber { + constructor(provider, filter) { + super(provider); + _FilterIdEventSubscriber_event.set(this, void 0); + __classPrivateFieldSet$e(this, _FilterIdEventSubscriber_event, copy$1(filter), "f"); + } + _recover(provider) { + return new PollingEventSubscriber(provider, __classPrivateFieldGet$e(this, _FilterIdEventSubscriber_event, "f")); + } + async _subscribe(provider) { + const filterId = await provider.send("eth_newFilter", [__classPrivateFieldGet$e(this, _FilterIdEventSubscriber_event, "f")]); + console.log("____SUB", filterId); + return filterId; + } + async _emitResults(provider, results) { + const network = await provider.getNetwork(); + for (const result of results) { + const log = network.formatter.log(result, provider); + provider.emit(__classPrivateFieldGet$e(this, _FilterIdEventSubscriber_event, "f"), log); + } + } +} +_FilterIdEventSubscriber_event = new WeakMap(); +class FilterIdPendingSubscriber extends FilterIdSubscriber { + async _subscribe(provider) { + return await provider.send("eth_newPendingTransactionFilter", []); + } + async _emitResults(provider, results) { + const network = await provider.getNetwork(); + for (const result of results) { + provider.emit("pending", network.formatter.hash(result)); + } + } +} + +// @TODO: +// - Add the batching API +var __classPrivateFieldSet$d = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$d = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _JsonRpcApiProvider_nextId, _JsonRpcApiProvider_options, _JsonRpcProvider_connect, _JsonRpcProvider_pollingInterval; +function copy(value) { + return JSON.parse(JSON.stringify(value)); +} +const Primitive = "bigint,boolean,function,number,string,symbol".split(/,/g); +//const Methods = "getAddress,then".split(/,/g); +function deepCopy(value) { + if (value == null || Primitive.indexOf(typeof (value)) >= 0) { + return value; + } + // Keep any Addressable + if (typeof (value.getAddress) === "function") { + return value; + } + if (Array.isArray(value)) { + return (value.map(deepCopy)); + } + if (typeof (value) === "object") { + return Object.keys(value).reduce((accum, key) => { + accum[key] = value[key]; + return accum; + }, {}); + } + throw new Error(`should not happen: ${value} (${typeof (value)})`); +} +function getLowerCase(value) { + if (value) { + return value.toLowerCase(); + } + return value; +} +function isPollable(value) { + return (value && typeof (value.pollingInterval) === "number"); +} +const defaultOptions = { + // Default to use filter ID (the FilterIdSubscriber will + // fallback onto polling if subscription fails) + polling: false, + // Maximum batch size (in bytes) + batchMaxSize: (1 << 20), + // How long to wait before dispatching a new batch + batchStallTime: 250, +}; +// @TODO: Unchecked Signers +class JsonRpcSigner { + constructor(provider, address) { + defineProperties(this, { provider, address }); + } + connect(provider) { + return logger$5.throwError("cannot reconnect JsonRpcSigner", "UNSUPPORTED_OPERATION", { + operation: "signer.connect" + }); + } + async getAddress() { + return this.address; + } + async getNetwork() { + return await this.provider.getNetwork(); + } + async getFeeData() { + return await this.provider.getFeeData(); + } + async estimateGas(tx) { + return await this.provider.estimateGas(tx); + } + async call(tx) { + return await this.provider.call(tx); + } + async resolveName(name) { + return await this.provider.resolveName(name); + } + async getBalance(blockTag) { + return await this.provider.getBalanceOf(this.address); + } + async getTransactionCount(blockTag) { + return await this.provider.getTransactionCountOf(this.address); + } + // Returns just the hash of the transaction after sent, which is what + // the bare JSON-RPC API does; + async sendUncheckedTransaction(_tx) { + const tx = deepCopy(_tx); + const promises = []; + // Make sure the from matches the sender + if (tx.from) { + const _from = tx.from; + promises.push((async () => { + const from = await resolveAddress(_from, this.provider); + if (from == null || from.toLowerCase() !== this.address.toLowerCase()) { + logger$5.throwArgumentError("from address mismatch", "transaction", _tx); + } + tx.from = from; + })()); + } + else { + tx.from = this.address; + } + // The JSON-RPC for eth_sendTransaction uses 90000 gas; if the user + // wishes to use this, it is easy to specify explicitly, otherwise + // we look it up for them. + if (tx.gasLimit == null) { + promises.push((async () => { + tx.gasLimit = await this.provider.estimateGas(Object.assign(Object.assign({}, tx), { from: this.address })); + })()); + } + // The address may be an ENS name or Addressable + if (tx.to != null) { + const _to = tx.to; + promises.push((async () => { + tx.to = await resolveAddress(_to, this.provider); + })()); + } + // Wait until all of our properties are filled in + if (promises.length) { + await Promise.all(promises); + } + const hexTx = this.provider.getRpcTransaction(tx); + return this.provider.send("eth_sendTransaction", [hexTx]); + } + async sendTransaction(tx) { + // This cannot be mined any earlier than any recent block + const blockNumber = await this.provider.getBlockNumber(); + // Send the transaction + const hash = await this.sendUncheckedTransaction(tx); + // Unfortunately, JSON-RPC only provides and opaque transaction hash + // for a response, and we need the actual transaction, so we poll + // for it; it should show up very quickly + return await (new Promise((resolve, reject) => { + const checkTx = async (duration) => { + // Try getting the transaction + const tx = await this.provider.getTransaction(hash); + if (tx != null) { + resolve(this.provider._wrapTransaction(tx, hash, blockNumber)); + return; + } + // Wait another 4 seconds + this.provider._setTimeout(() => { checkTx(4000); }, duration); + }; + checkTx(1000); + })); + } + async signTransaction(_tx) { + const tx = deepCopy(_tx); + // Make sure the from matches the sender + if (tx.from) { + const from = await resolveAddress(tx.from, this.provider); + if (from == null || from.toLowerCase() !== this.address.toLowerCase()) { + return logger$5.throwArgumentError("from address mismatch", "transaction", _tx); + } + tx.from = from; + } + else { + tx.from = this.address; + } + const hexTx = this.provider.getRpcTransaction(tx); + return await this.provider.send("eth_sign_Transaction", [hexTx]); + } + async signMessage(_message) { + const message = ((typeof (_message) === "string") ? toUtf8Bytes(_message) : _message); + return await this.provider.send("personal_sign", [ + hexlify(message), this.address.toLowerCase() + ]); + } + async signTypedData(domain, types, _value) { + const value = deepCopy(_value); + // Populate any ENS names (in-place) + const populated = await TypedDataEncoder.resolveNames(domain, types, value, async (value) => { + const address = await resolveAddress(value); + if (address == null) { + return logger$5.throwArgumentError("TypedData does not support null address", "value", value); + } + return address; + }); + return await this.provider.send("eth_signTypedData_v4", [ + this.address.toLowerCase(), + JSON.stringify(TypedDataEncoder.getPayload(populated.domain, types, populated.value)) + ]); + } + async unlock(password) { + return this.provider.send("personal_unlockAccount", [ + this.address.toLowerCase(), password, null + ]); + } + // https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign + async _legacySignMessage(_message) { + const message = ((typeof (_message) === "string") ? toUtf8Bytes(_message) : _message); + return await this.provider.send("eth_sign", [ + this.address.toLowerCase(), hexlify(message) + ]); + } +} +class JsonRpcApiProvider extends AbstractProvider { + constructor(network) { + super(network); + _JsonRpcApiProvider_nextId.set(this, void 0); + _JsonRpcApiProvider_options.set(this, void 0); + __classPrivateFieldSet$d(this, _JsonRpcApiProvider_nextId, 1, "f"); + __classPrivateFieldSet$d(this, _JsonRpcApiProvider_options, Object.assign({}, defaultOptions), "f"); + } + _getOptions(key) { + return __classPrivateFieldGet$d(this, _JsonRpcApiProvider_options, "f")[key]; + } + _setOptions(options) { + // Validate all the options + for (const _key in options) { + const key = _key; + const value = options[key]; + if (typeof (value) !== typeof (__classPrivateFieldGet$d(this, _JsonRpcApiProvider_options, "f")[key])) { + return logger$5.throwArgumentError("invalid option value", `options.${key}`, value); + } + } + // Update the values + for (const _key in options) { + const key = _key; + __classPrivateFieldGet$d(this, _JsonRpcApiProvider_options, "f")[key] = (options[key]); + } + } + prepareRequest(method, params) { + var _a, _b; + return { + method, params, id: (__classPrivateFieldSet$d(this, _JsonRpcApiProvider_nextId, (_b = __classPrivateFieldGet$d(this, _JsonRpcApiProvider_nextId, "f"), _a = _b++, _b), "f"), _a), jsonrpc: "2.0" + }; + } + // Sends the payload to the backend + //async sendPayload(payload: any): Promise { + // throw new Error("sub-class must implement this"); + //} + async send(method, params) { + // @TODO: This should construct and queue the payload + throw new Error("sub-class must implement this"); + } + async getSigner(address = 0) { + const network = await this.getNetwork(); + const accounts = await this.send("eth_accounts", []); + // Account index + if (typeof (address) === "number") { + if (address > accounts.length) { + throw new Error("no such account"); + } + return new JsonRpcSigner(this, accounts[address]); + } + // Account address + address = network.formatter.address(address); + for (const account of accounts) { + if (network.formatter.address(account) === account) { + return new JsonRpcSigner(this, account); + } + } + throw new Error("invalid account"); + } + // Sub-classes can override this; it detects the *actual* network we + // are connected to + async _detectNetwork() { + return Network$1.from(logger$5.getBigInt(await this._perform({ method: "chainId" }))); + } + _getSubscriber(sub) { + // Pending Filters aren't availble via polling + if (sub.type === "pending") { + return new FilterIdPendingSubscriber(this); + } + if (sub.type === "event") { + return new FilterIdEventSubscriber(this, sub.filter); + } + // Orphaned Logs are handled automatically, by the filter, since + // logs with removed are emitted by it + if (sub.type === "orphan" && sub.filter.orphan === "drop-log") { + return new UnmanagedSubscriber("orphan"); + } + return super._getSubscriber(sub); + } + getRpcTransaction(tx) { + const result = {}; + // JSON-RPC now requires numeric values to be "quantity" values + ["chainId", "gasLimit", "gasPrice", "type", "maxFeePerGas", "maxPriorityFeePerGas", "nonce", "value"].forEach((key) => { + if (tx[key] == null) { + return; + } + let dstKey = key; + if (key === "gasLimit") { + dstKey = "gas"; + } + result[dstKey] = quantity(tx[key]); + }); + // Make sure addresses and data are lowercase + ["from", "to", "data"].forEach((key) => { + if (tx[key] == null) { + return; + } + result[key] = hexlify(tx[key]); + }); + // Normalize the access list object + if (tx.accessList) { + result["accessList"] = accessListify(tx.accessList); + } + return result; + } + getRpcRequest(req) { + switch (req.method) { + case "chainId": + return { method: "eth_chainId", args: [] }; + case "getBlockNumber": + return { method: "eth_blockNumber", args: [] }; + case "getGasPrice": + return { method: "eth_gasPrice", args: [] }; + case "getBalance": + return { + method: "eth_getBalance", + args: [getLowerCase(req.address), req.blockTag] + }; + case "getTransactionCount": + return { + method: "eth_getTransactionCount", + args: [getLowerCase(req.address), req.blockTag] + }; + case "getCode": + return { + method: "eth_getCode", + args: [getLowerCase(req.address), req.blockTag] + }; + case "getStorageAt": + return { + method: "eth_getStorageAt", + args: [ + getLowerCase(req.address), + ("0x" + req.position.toString(16)), + req.blockTag + ] + }; + case "sendTransaction": + return { + method: "eth_sendRawTransaction", + args: [req.signedTransaction] + }; + case "getBlock": + if ("blockTag" in req) { + return { + method: "eth_getBlockByNumber", + args: [req.blockTag, !!req.includeTransactions] + }; + } + else if ("blockHash" in req) { + return { + method: "eth_getBlockByHash", + args: [req.blockHash, !!req.includeTransactions] + }; + } + break; + case "getTransaction": + return { + method: "eth_getTransactionByHash", + args: [req.hash] + }; + case "getTransactionReceipt": + return { + method: "eth_getTransactionReceipt", + args: [req.hash] + }; + case "call": + return { + method: "eth_call", + args: [this.getRpcTransaction(req.transaction), req.blockTag] + }; + case "estimateGas": { + return { + method: "eth_estimateGas", + args: [this.getRpcTransaction(req.transaction)] + }; + } + case "getLogs": + if (req.filter && req.filter.address != null) { + if (Array.isArray(req.filter.address)) { + req.filter.address = req.filter.address.map(getLowerCase); + } + else { + req.filter.address = getLowerCase(req.filter.address); + } + } + return { method: "eth_getLogs", args: [req.filter] }; + } + return null; + } + getRpcError(method, args, error) { + if (method === "eth_call") { + const result = spelunkData(error); + if (result) { + // @TODO: Extract errorSignature, errorName, errorArgs, reason if + // it is Error(string) or Panic(uint25) + return logger$5.makeError("execution reverted during JSON-RPC call", "CALL_EXCEPTION", { + data: result.data, + transaction: args[0] + }); + } + return logger$5.makeError("missing revert data during JSON-RPC call", "CALL_EXCEPTION", { + data: "0x", transaction: args[0], info: { error } + }); + } + const message = JSON.stringify(spelunkMessage(error)); + if (message.match(/insufficient funds|base fee exceeds gas limit/)) { + return logger$5.makeError("insufficient funds for intrinsic transaction cost", "INSUFFICIENT_FUNDS", { + transaction: args[0] + }); + } + if (message.match(/nonce/) && message.match(/too low/)) { + return logger$5.makeError("nonce has already been used", "NONCE_EXPIRED", { + transaction: args[0] + }); + } + // "replacement transaction underpriced" + if (message.match(/replacement transaction/) && message.match(/underpriced/)) { + return logger$5.makeError("replacement fee too low", "REPLACEMENT_UNDERPRICED", { + transaction: args[0] + }); + } + if (message.match(/only replay-protected/)) { + return logger$5.makeError("legacy pre-eip-155 transactions not supported", "UNSUPPORTED_OPERATION", { + operation: method, info: { transaction: args[0] } + }); + } + if (method === "estimateGas" && message.match(/gas required exceeds allowance|always failing transaction|execution reverted/)) { + return logger$5.makeError("cannot estimate gas; transaction may fail or may require manual gas limit", "UNPREDICTABLE_GAS_LIMIT", { + transaction: args[0] + }); + } + return error; + } + async _perform(req) { + // Legacy networks do not like the type field being passed along (which + // is fair), so we delete type if it is 0 and a non-EIP-1559 network + if (req.method === "call" || req.method === "estimateGas") { + let tx = req.transaction; + if (tx && tx.type != null && logger$5.getBigInt(tx.type)) { + // If there are no EIP-1559 properties, it might be non-EIP-a559 + if (tx.maxFeePerGas == null && tx.maxPriorityFeePerGas == null) { + const feeData = await this.getFeeData(); + if (feeData.maxFeePerGas == null && feeData.maxPriorityFeePerGas == null) { + // Network doesn't know about EIP-1559 (and hence type) + req = Object.assign({}, req, { + transaction: Object.assign({}, tx, { type: undefined }) + }); + } + } + } + } + const request = this.getRpcRequest(req); + if (request != null) { + this.emit("debug", { type: "sendRequest", request }); + try { + const result = await this.send(request.method, request.args); + //console.log("RR", result); + this.emit("debug", { type: "getResponse", result }); + return result; + } + catch (error) { + this.emit("debug", { type: "getError", error }); + throw this.getRpcError(request.method, request.args, error); + } + } + return super._perform(req); + } +} +_JsonRpcApiProvider_nextId = new WeakMap(), _JsonRpcApiProvider_options = new WeakMap(); +class JsonRpcProvider extends JsonRpcApiProvider { + constructor(url, network) { + if (url == null) { + url = "http:/\/localhost:8545"; + } + super(network); + _JsonRpcProvider_connect.set(this, void 0); + _JsonRpcProvider_pollingInterval.set(this, void 0); + if (typeof (url) === "string") { + __classPrivateFieldSet$d(this, _JsonRpcProvider_connect, { request: new FetchRequest(url) }, "f"); + } + else { + __classPrivateFieldSet$d(this, _JsonRpcProvider_connect, Object.assign({}, url), "f"); + __classPrivateFieldGet$d(this, _JsonRpcProvider_connect, "f").request = __classPrivateFieldGet$d(this, _JsonRpcProvider_connect, "f").request.clone(); + } + __classPrivateFieldSet$d(this, _JsonRpcProvider_pollingInterval, 4000, "f"); + } + async send(method, params) { + params = copy(params); + // Configure a POST connection for the requested method + const connection = Object.assign({}, __classPrivateFieldGet$d(this, _JsonRpcProvider_connect, "f")); + connection.request = connection.request.clone(); + connection.request.body = this.prepareRequest(method, params); + const result = (await fetchData(connection)).bodyJson; + if ("error" in result) { + return logger$5.throwError("error from JSON-RPC", "UNKNOWN_ERROR", { + result + }); + } + return result.result; + } + get pollingInterval() { return __classPrivateFieldGet$d(this, _JsonRpcProvider_pollingInterval, "f"); } + set pollingInterval(value) { + if (!Number.isInteger(value) || value < 0) { + throw new Error("invalid interval"); + } + __classPrivateFieldSet$d(this, _JsonRpcProvider_pollingInterval, value, "f"); + this._forEachSubscriber((sub) => { + if (isPollable(sub)) { + sub.pollingInterval = __classPrivateFieldGet$d(this, _JsonRpcProvider_pollingInterval, "f"); + } + }); + } +} +_JsonRpcProvider_connect = new WeakMap(), _JsonRpcProvider_pollingInterval = new WeakMap(); +// This class should only be used when it is not possible for the +// underlying network to change, such as with INFURA. If you are +// using MetaMask or some other client which allows users to change +// their network DO NOT USE THIS. Bad things will happen. +class StaticJsonRpcProvider extends JsonRpcProvider { + constructor(url, network) { + super(url, network); + defineProperties(this, { network }); + } + async _detectNetwork() { + return this.network; + } +} +function spelunkData(value) { + if (value == null) { + return null; + } + // These *are* the droids we're looking for. + if (typeof (value.message) === "string" && value.message.match("reverted") && isHexString(value.data)) { + return { message: value.message, data: value.data }; + } + // Spelunk further... + if (typeof (value) === "object") { + for (const key in value) { + const result = spelunkData(value[key]); + if (result) { + return result; + } + } + return null; + } + // Might be a JSON string we can further descend... + if (typeof (value) === "string") { + try { + return spelunkData(JSON.parse(value)); + } + catch (error) { } + } + return null; +} +function _spelunkMessage(value, result) { + if (value == null) { + return; + } + // These *are* the droids we're looking for. + if (typeof (value.message) === "string") { + result.push(value.message); + } + // Spelunk further... + if (typeof (value) === "object") { + for (const key in value) { + _spelunkMessage(value[key], result); + } + } + // Might be a JSON string we can further descend... + if (typeof (value) === "string") { + try { + return _spelunkMessage(JSON.parse(value), result); + } + catch (error) { } + } +} +function spelunkMessage(value) { + const result = []; + _spelunkMessage(value, result); + return result; +} + +const defaultApiKey$2 = "9f7d929b018cdffb338517efa06f58359e86ff1ffd350bc889738523659e7972"; +function getHost$3(name) { + switch (name) { + case "homestead": + return "rpc.ankr.com/eth"; + case "matic": + return "rpc.ankr.com/polygon"; + case "arbitrum": + return "rpc.ankr.com/arbitrum"; + } + return logger$5.throwArgumentError("unsupported network", "network", name); +} +class AnkrProvider extends StaticJsonRpcProvider { + constructor(_network = "homestead", apiKey) { + const network = Network$1.from(_network); + if (apiKey == null) { + apiKey = defaultApiKey$2; + } + const connection = AnkrProvider.getConnection(network, apiKey); + super(connection, network); + defineProperties(this, { apiKey }); + // Ankr does not support filterId, so we force polling + super._setOptions({ polling: true }); + } + _getProvider(chainId) { + try { + return new AnkrProvider(chainId, this.apiKey); + } + catch (error) { } + return super._getProvider(chainId); + } + static getConnection(network, apiKey) { + if (apiKey == null) { + apiKey = defaultApiKey$2; + } + const request = new FetchRequest(`https:/\/${getHost$3(network.name)}/${apiKey}`); + request.allowGzip = true; + const throttleRetry = async (request, response, attempt) => { + if (apiKey === defaultApiKey$2) { + showThrottleMessage("AnkrProvider"); + } + return true; + }; + return { request, throttleRetry }; + } + isCommunityResource() { + return (this.apiKey === defaultApiKey$2); + } +} + +const defaultApiKey$1 = "_gg7wSSi0KMBsdKnGVfHDueq6xMB9EkC"; +function getHost$2(name) { + switch (name) { + case "homestead": + return "eth-mainnet.alchemyapi.io"; + case "ropsten": + return "eth-ropsten.alchemyapi.io"; + case "rinkeby": + return "eth-rinkeby.alchemyapi.io"; + case "goerli": + return "eth-goerli.alchemyapi.io"; + case "kovan": + return "eth-kovan.alchemyapi.io"; + case "matic": + return "polygon-mainnet.g.alchemy.com"; + case "maticmum": + return "polygon-mumbai.g.alchemy.com"; + case "arbitrum": + return "arb-mainnet.g.alchemy.com"; + case "arbitrum-rinkeby": + return "arb-rinkeby.g.alchemy.com"; + case "optimism": + return "opt-mainnet.g.alchemy.com"; + case "optimism-kovan": + return "opt-kovan.g.alchemy.com"; + } + return logger$5.throwArgumentError("unsupported network", "network", name); +} +class AlchemyProvider extends StaticJsonRpcProvider { + constructor(_network = "homestead", apiKey) { + const network = Network$1.from(_network); + if (apiKey == null) { + apiKey = defaultApiKey$1; + } + super(AlchemyProvider.getConnection(network, apiKey), network); + defineProperties(this, { apiKey }); + } + _getProvider(chainId) { + try { + return new AlchemyProvider(chainId, this.apiKey); + } + catch (error) { } + return super._getProvider(chainId); + } + isCommunityResource() { + return (this.apiKey === defaultApiKey$1); + } + static getConnection(network, apiKey) { + if (apiKey == null) { + apiKey = defaultApiKey$1; + } + const request = new FetchRequest(`https:/\/${getHost$2(network.name)}/v2/${apiKey}`); + request.allowGzip = true; + const throttleRetry = async (request, response, attempt) => { + if (apiKey === defaultApiKey$1) { + showThrottleMessage("alchemy"); + } + return true; + }; + return { request, throttleRetry }; + } +} + +class CloudflareProvider extends StaticJsonRpcProvider { + constructor(_network = "homestead") { + const network = Network$1.from(_network); + if (network.name !== "homestead") { + return logger$5.throwArgumentError("unsupported network", "network", _network); + } + super("https:/\/cloudflare-eth.com/", network); + } +} + +const defaultApiKey = "9D13ZE7XSBTJ94N9BNJ2MA33VMAY2YPIRB"; +const EtherscanPluginId = "org.ethers.plugins.etherscan"; +class EtherscanPlugin extends NetworkPlugin { + constructor(baseUrl, communityApiKey) { + super(EtherscanPluginId); + //if (communityApiKey == null) { communityApiKey = null; } + defineProperties(this, { baseUrl, communityApiKey }); + } + clone() { + return new EtherscanPlugin(this.baseUrl, this.communityApiKey); + } +} +class EtherscanProvider extends AbstractProvider { + constructor(_network, apiKey) { + super(); + const network = Network$1.from(_network); + if (apiKey == null) { + const plugin = network.getPlugin(EtherscanPluginId); + if (plugin) { + apiKey = plugin.communityApiKey; + } + else { + apiKey = defaultApiKey; + } + } + defineProperties(this, { apiKey, network }); + // Test that the network is supported by Etherscan + this.getBaseUrl(); + } + getBaseUrl() { + const plugin = this.network.getPlugin(EtherscanPluginId); + if (plugin) { + return plugin.baseUrl; + } + switch (this.network.name) { + case "homestead": + return "https:/\/api.etherscan.io"; + case "ropsten": + return "https:/\/api-ropsten.etherscan.io"; + case "rinkeby": + return "https:/\/api-rinkeby.etherscan.io"; + case "kovan": + return "https:/\/api-kovan.etherscan.io"; + case "goerli": + return "https:/\/api-goerli.etherscan.io"; + } + return logger$5.throwArgumentError("unsupported network", "network", this.network); + } + getUrl(module, params) { + const query = Object.keys(params).reduce((accum, key) => { + const value = params[key]; + if (value != null) { + accum += `&${key}=${value}`; + } + return accum; + }, ""); + const apiKey = ((this.apiKey) ? `&apikey=${this.apiKey}` : ""); + return `${this.getBaseUrl()}/api?module=${module}${query}${apiKey}`; + } + getPostUrl() { + return `${this.getBaseUrl()}/api`; + } + getPostData(module, params) { + params.module = module; + params.apikey = this.apiKey; + return params; + } + async detectNetwork() { + return this.network; + } + async fetch(module, params, post) { + const url = (post ? this.getPostUrl() : this.getUrl(module, params)); + const payload = (post ? this.getPostData(module, params) : null); + /* + this.emit("debug", { + action: "request", + request: url, + provider: this + }); + */ + const request = new FetchRequest(url); + const connection = { + request, + throttleSlotInterval: 1000, + processResponse: async (request, response) => { + const result = response.hasBody() ? JSON.parse(toUtf8String(response.body)) : {}; + const throttle = ((typeof (result.result) === "string") ? result.result : "").toLowerCase().indexOf("rate limit") >= 0; + if (module === "proxy") { + // This JSON response indicates we are being throttled + if (result && result.status == 0 && result.message == "NOTOK" && throttle) { + response.throwThrottleError(result.result); + } + } + else { + if (throttle) { + response.throwThrottleError(result.result); + } + } + return response; + }, + }; + if (payload) { + request.setHeader("content-type", "application/x-www-form-urlencoded; charset=UTF-8"); + request.body = Object.keys(payload).map((k) => `${k}=${payload[k]}`).join("&"); + } + const response = await fetchData(connection); + if (!response.hasBody()) { + throw new Error(); + } + /* + this.emit("debug", { + action: "response", + request: url, + response: deepCopy(result), + provider: this + }); + */ + const result = JSON.parse(toUtf8String(response.body)); + if (module === "proxy") { + if (result.jsonrpc != "2.0") { + // @TODO: not any + const error = new Error("invalid response"); + error.result = JSON.stringify(result); + throw error; + } + if (result.error) { + // @TODO: not any + const error = new Error(result.error.message || "unknown error"); + if (result.error.code) { + error.code = result.error.code; + } + if (result.error.data) { + error.data = result.error.data; + } + throw error; + } + return result.result; + } + else { + // getLogs, getHistory have weird success responses + if (result.status == 0 && (result.message === "No records found" || result.message === "No transactions found")) { + return result.result; + } + if (result.status != 1 || result.message != "OK") { + const error = new Error("invalid response"); + error.result = JSON.stringify(result); + // if ((result.result || "").toLowerCase().indexOf("rate limit") >= 0) { + // error.throttleRetry = true; + // } + throw error; + } + return result.result; + } + } + // The transaction has already been sanitized by the calls in Provider + _getTransactionPostData(transaction) { + const result = {}; + for (let key in transaction) { + if (transaction[key] == null) { + continue; + } + let value = transaction[key]; + if (key === "type" && value === 0) { + continue; + } + // Quantity-types require no leading zero, unless 0 + if ({ type: true, gasLimit: true, gasPrice: true, maxFeePerGs: true, maxPriorityFeePerGas: true, nonce: true, value: true }[key]) { + value = quantity(hexlify(value)); + } + else if (key === "accessList") { + value = "[" + this.network.formatter.accessList(value).map((set) => { + return `{address:"${set.address}",storageKeys:["${set.storageKeys.join('","')}"]}`; + }).join(",") + "]"; + } + else { + value = hexlify(value); + } + result[key] = value; + } + return result; + } + _checkError(req, error, transaction) { + /* + let body = ""; + if (isError(error, Logger.Errors.SERVER_ERROR) && error.response && error.response.hasBody()) { + body = toUtf8String(error.response.body); + } + console.log(body); + + // Undo the "convenience" some nodes are attempting to prevent backwards + // incompatibility; maybe for v6 consider forwarding reverts as errors + if (method === "call" && body) { + + // Etherscan keeps changing their string + if (body.match(/reverted/i) || body.match(/VM execution error/i)) { + + // Etherscan prefixes the data like "Reverted 0x1234" + let data = e.data; + if (data) { data = "0x" + data.replace(/^.*0x/i, ""); } + if (!isHexString(data)) { data = "0x"; } + + logger.throwError("call exception", Logger.Errors.CALL_EXCEPTION, { + error, data + }); + } + } + + // Get the message from any nested error structure + let message = error.message; + if (isError(error, Logger.Errors.SERVER_ERROR)) { + if (error.error && typeof(error.error.message) === "string") { + message = error.error.message; + } else if (typeof(error.body) === "string") { + message = error.body; + } else if (typeof(error.responseText) === "string") { + message = error.responseText; + } + } + message = (message || "").toLowerCase(); + + // "Insufficient funds. The account you tried to send transaction from + // does not have enough funds. Required 21464000000000 and got: 0" + if (message.match(/insufficient funds/)) { + logger.throwError("insufficient funds for intrinsic transaction cost", Logger.Errors.INSUFFICIENT_FUNDS, { + error, transaction, info: { method } + }); + } + + // "Transaction with the same hash was already imported." + if (message.match(/same hash was already imported|transaction nonce is too low|nonce too low/)) { + logger.throwError("nonce has already been used", Logger.Errors.NONCE_EXPIRED, { + error, transaction, info: { method } + }); + } + + // "Transaction gas price is too low. There is another transaction with + // same nonce in the queue. Try increasing the gas price or incrementing the nonce." + if (message.match(/another transaction with same nonce/)) { + logger.throwError("replacement fee too low", Logger.Errors.REPLACEMENT_UNDERPRICED, { + error, transaction, info: { method } + }); + } + + if (message.match(/execution failed due to an exception|execution reverted/)) { + logger.throwError("cannot estimate gas; transaction may fail or may require manual gas limit", Logger.Errors.UNPREDICTABLE_GAS_LIMIT, { + error, transaction, info: { method } + }); + } + */ + throw error; + } + async _detectNetwork() { + return this.network; + } + async _perform(req) { + switch (req.method) { + case "chainId": + return this.network.chainId; + case "getBlockNumber": + return this.fetch("proxy", { action: "eth_blockNumber" }); + case "getGasPrice": + return this.fetch("proxy", { action: "eth_gasPrice" }); + case "getBalance": + // Returns base-10 result + return this.fetch("account", { + action: "balance", + address: req.address, + tag: req.blockTag + }); + case "getTransactionCount": + return this.fetch("proxy", { + action: "eth_getTransactionCount", + address: req.address, + tag: req.blockTag + }); + case "getCode": + return this.fetch("proxy", { + action: "eth_getCode", + address: req.address, + tag: req.blockTag + }); + case "getStorageAt": + return this.fetch("proxy", { + action: "eth_getStorageAt", + address: req.address, + position: req.position, + tag: req.blockTag + }); + case "sendTransaction": + return this.fetch("proxy", { + action: "eth_sendRawTransaction", + hex: req.signedTransaction + }, true).catch((error) => { + return this._checkError(req, error, req.signedTransaction); + }); + case "getBlock": + if ("blockTag" in req) { + return this.fetch("proxy", { + action: "eth_getBlockByNumber", + tag: req.blockTag, + boolean: (req.includeTransactions ? "true" : "false") + }); + } + return logger$5.throwError("getBlock by blockHash not supported by Etherscan", "UNSUPPORTED_OPERATION", { + operation: "getBlock(blockHash)" + }); + case "getTransaction": + return this.fetch("proxy", { + action: "eth_getTransactionByHash", + txhash: req.hash + }); + case "getTransactionReceipt": + return this.fetch("proxy", { + action: "eth_getTransactionReceipt", + txhash: req.hash + }); + case "call": { + if (req.blockTag !== "latest") { + throw new Error("EtherscanProvider does not support blockTag for call"); + } + const postData = this._getTransactionPostData(req.transaction); + postData.module = "proxy"; + postData.action = "eth_call"; + try { + return await this.fetch("proxy", postData, true); + } + catch (error) { + return this._checkError(req, error, req.transaction); + } + } + case "estimateGas": { + const postData = this._getTransactionPostData(req.transaction); + postData.module = "proxy"; + postData.action = "eth_estimateGas"; + try { + return await this.fetch("proxy", postData, true); + } + catch (error) { + return this._checkError(req, error, req.transaction); + } + } + } + return super._perform(req); + } + async getNetwork() { + return this.network; + } + async getEtherPrice() { + if (this.network.name !== "homestead") { + return 0.0; + } + return parseFloat((await this.fetch("stats", { action: "ethprice" })).ethusd); + } + isCommunityResource() { + const plugin = this.network.getPlugin(EtherscanPluginId); + if (plugin) { + return (plugin.communityApiKey === this.apiKey); + } + return (defaultApiKey === this.apiKey); + } +} +/* +(async function() { + const provider = new EtherscanProvider(); + console.log(provider); + console.log(await provider.getBlockNumber()); + / * + provider.on("block", (b) => { + console.log("BB", b); + }); + console.log(await provider.getTransactionReceipt("0xa5ded92f548e9f362192f9ab7e5b3fbc9b5a919a868e29247f177d49ce38de6e")); + + provider.once("0xa5ded92f548e9f362192f9ab7e5b3fbc9b5a919a868e29247f177d49ce38de6e", (tx) => { + console.log("TT", tx); + }); + * / + try { + console.log(await provider.getBlock(100)); + } catch (error) { + console.log(error); + } + + try { + console.log(await provider.getBlock(13821768)); + } catch (error) { + console.log(error); + } + +})(); +*/ + +const defaultProjectId = "84842078b09946638c03157f83405213"; +function getHost$1(name) { + switch (name) { + case "homestead": + return "mainnet.infura.io"; + case "ropsten": + return "ropsten.infura.io"; + case "rinkeby": + return "rinkeby.infura.io"; + case "kovan": + return "kovan.infura.io"; + case "goerli": + return "goerli.infura.io"; + case "matic": + return "polygon-mainnet.infura.io"; + case "maticmum": + return "polygon-mumbai.infura.io"; + case "optimism": + return "optimism-mainnet.infura.io"; + case "optimism-kovan": + return "optimism-kovan.infura.io"; + case "arbitrum": + return "arbitrum-mainnet.infura.io"; + case "arbitrum-rinkeby": + return "arbitrum-rinkeby.infura.io"; + } + return logger$5.throwArgumentError("unsupported network", "network", name); +} +class InfuraProvider extends StaticJsonRpcProvider { + constructor(_network = "homestead", projectId, projectSecret) { + const network = Network$1.from(_network); + if (projectId == null) { + projectId = defaultProjectId; + } + if (projectSecret == null) { + projectSecret = null; + } + const connection = InfuraProvider.getConnection(network, projectId, projectSecret); + super(connection, network); + defineProperties(this, { projectId, projectSecret }); + } + _getProvider(chainId) { + try { + return new InfuraProvider(chainId, this.projectId, this.projectSecret); + } + catch (error) { } + return super._getProvider(chainId); + } + static getConnection(network, projectId, projectSecret) { + if (projectId == null) { + projectId = defaultProjectId; + } + if (projectSecret == null) { + projectSecret = null; + } + const request = new FetchRequest(`https:/\/${getHost$1(network.name)}/v3/${projectId}`); + request.allowGzip = true; + if (projectSecret) { + request.setCredentials("", projectSecret); + } + const throttleRetry = async (request, response, attempt) => { + if (projectId === defaultProjectId) { + showThrottleMessage("InfuraProvider"); + } + return true; + }; + return { request, throttleRetry }; + } + isCommunityResource() { + return (this.projectId === defaultProjectId); + } +} + +// These are load-balancer-based application IDs +const defaultAppIds = { + homestead: "6004bcd10040261633ade990", + ropsten: "6004bd4d0040261633ade991", + rinkeby: "6004bda20040261633ade994", + goerli: "6004bd860040261633ade992", +}; +function getHost(name) { + switch (name) { + case "homestead": + return "eth-mainnet.gateway.pokt.network"; + case "ropsten": + return "eth-ropsten.gateway.pokt.network"; + case "rinkeby": + return "eth-rinkeby.gateway.pokt.network"; + case "goerli": + return "eth-goerli.gateway.pokt.network"; + } + return logger$5.throwArgumentError("unsupported network", "network", name); +} +function normalizeApiKey(network, _appId, applicationSecretKey, loadBalancer) { + loadBalancer = !!loadBalancer; + let community = false; + let applicationId = _appId; + if (applicationId == null) { + applicationId = defaultAppIds[network.name]; + if (applicationId == null) { + logger$5.throwArgumentError("network does not support default applicationId", "applicationId", _appId); + } + loadBalancer = true; + community = true; + } + else if (applicationId === defaultAppIds[network.name]) { + loadBalancer = true; + community = true; + } + if (applicationSecretKey == null) { + applicationSecretKey = null; + } + return { applicationId, applicationSecretKey, community, loadBalancer }; +} +class PocketProvider extends StaticJsonRpcProvider { + constructor(_network = "homestead", _appId, _secretKey, _loadBalancer) { + const network = Network$1.from(_network); + const { applicationId, applicationSecretKey, loadBalancer } = normalizeApiKey(network, _appId, _secretKey, _loadBalancer); + const connection = PocketProvider.getConnection(network, applicationId, applicationSecretKey, loadBalancer); + super(connection, network); + defineProperties(this, { applicationId, applicationSecretKey, loadBalancer }); + } + static getConnection(network, _appId, _secretKey, _loadBalancer) { + const { applicationId, applicationSecretKey, community, loadBalancer } = normalizeApiKey(network, _appId, _secretKey, _loadBalancer); + let url = `https:/\/${getHost(network.name)}/v1/`; + if (loadBalancer) { + url += "lb/"; + } + url += applicationId; + const request = new FetchRequest(url); + request.allowGzip = true; + if (applicationSecretKey) { + request.setCredentials("", applicationSecretKey); + } + const throttleRetry = async (request, response, attempt) => { + if (community) { + showThrottleMessage("PocketProvider"); + } + return true; + }; + return { request, throttleRetry }; + } + isCommunityResource() { + return (this.applicationId === defaultAppIds[this.network.name]); + } +} + +function shuffle(array) { + for (let i = array.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + const tmp = array[i]; + array[i] = array[j]; + array[j] = tmp; + } +} + +var __classPrivateFieldSet$c = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$c = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _FallbackProvider_instances, _FallbackProvider_configs, _FallbackProvider_initialSyncPromise, _FallbackProvider_getNextConfig, _FallbackProvider_addRunner, _FallbackProvider_initialSync, _FallbackProvider_checkQuorum, _FallbackProvider_waitForQuorum; +//const BN_0 = BigInt("0"); +const BN_1 = BigInt("1"); +const BN_2 = BigInt("2"); +function stall$2(duration) { + return new Promise((resolve) => { setTimeout(resolve, duration); }); +} +function getTime() { return (new Date()).getTime(); } +const defaultConfig = { stallTimeout: 400, priority: 1, weight: 1 }; +const defaultState = { + blockNumber: -2, requests: 0, lateResponses: 0, errorResponses: 0, + outOfSync: -1, unsupportedEvents: 0, rollingDuration: 0, score: 0, + _network: null, _updateNumber: null, _totalTime: 0 +}; +async function waitForSync(config, blockNumber) { + while (config.blockNumber < 0 || config.blockNumber < blockNumber) { + if (!config._updateNumber) { + config._updateNumber = (async () => { + const blockNumber = await config.provider.getBlockNumber(); + if (blockNumber > config.blockNumber) { + config.blockNumber = blockNumber; + } + config._updateNumber = null; + })(); + } + await config._updateNumber; + config.outOfSync++; + } +} +// Normalizes a result to a string that can be used to compare against +// other results using normal string equality +function normalize(network, value, req) { + switch (req.method) { + case "chainId": + return logger$5.getBigInt(value).toString(); + case "getBlockNumber": + return logger$5.getNumber(value).toString(); + case "getGasPrice": + return logger$5.getBigInt(value).toString(); + case "getBalance": + return logger$5.getBigInt(value).toString(); + case "getTransactionCount": + return logger$5.getNumber(value).toString(); + case "getCode": + return hexlify(value); + case "getStorageAt": + return hexlify(value); + case "getBlock": + if (req.includeTransactions) { + return JSON.stringify(network.formatter.blockWithTransactions(value)); + } + return JSON.stringify(network.formatter.block(value)); + case "getTransaction": + return JSON.stringify(network.formatter.transactionResponse(value)); + case "getTransactionReceipt": + return JSON.stringify(network.formatter.receipt(value)); + case "call": + return hexlify(value); + case "estimateGas": + return logger$5.getBigInt(value).toString(); + case "getLogs": + return JSON.stringify(value.map((v) => network.formatter.log(v))); + } + return logger$5.throwError("unsupported method", "UNSUPPORTED_OPERATION", { + operation: `_perform(${JSON.stringify(req.method)})` + }); +} +// This strategy picks the highest wieght result, as long as the weight is +// equal to or greater than quorum +function checkQuorum(quorum, results) { + const tally = new Map(); + for (const { result, normal, weight } of results) { + const t = tally.get(normal) || { result, weight: 0 }; + t.weight += weight; + tally.set(normal, t); + } + let bestWeight = 0; + let bestResult = undefined; + for (const { weight, result } of tally.values()) { + if (weight >= quorum && weight > bestWeight) { + bestWeight = weight; + bestResult = result; + } + } + return bestResult; +} +/* +function getMean(results: Array): bigint { + const total = results.reduce((a, r) => (a + BigInt(r.result)), BN_0); + return total / BigInt(results.length); +} +*/ +function getMedian(results) { + // Get the sorted values + const values = results.map((r) => BigInt(r.result)); + values.sort((a, b) => ((a < b) ? -1 : (b > a) ? 1 : 0)); + const mid = values.length / 2; + // Odd-length; take the middle value + if (values.length % 2) { + return values[mid]; + } + // Even length; take the ceiling of the mean of the center two values + return (values[mid - 1] + values[mid] + BN_1) / BN_2; +} +class FallbackProvider extends AbstractProvider { + constructor(providers, network) { + super(network); + _FallbackProvider_instances.add(this); + _FallbackProvider_configs.set(this, void 0); + _FallbackProvider_initialSyncPromise.set(this, void 0); + __classPrivateFieldSet$c(this, _FallbackProvider_configs, providers.map((p) => { + if (p instanceof AbstractProvider) { + return Object.assign({ provider: p }, defaultConfig, defaultState); + } + else { + return Object.assign({}, defaultConfig, p, defaultState); + } + }), "f"); + __classPrivateFieldSet$c(this, _FallbackProvider_initialSyncPromise, null, "f"); + this.quorum = 2; //Math.ceil(providers.length / 2); + this.eventQuorum = 1; + this.eventWorkers = 1; + if (this.quorum > __classPrivateFieldGet$c(this, _FallbackProvider_configs, "f").reduce((a, c) => (a + c.weight), 0)) { + logger$5.throwArgumentError("quorum exceed provider wieght", "quorum", this.quorum); + } + } + async _detectNetwork() { + return Network$1.from(logger$5.getBigInt(await this._perform({ method: "chainId" }))).freeze(); + } + _getSubscriber(sub) { + throw new Error("@TODO"); + } + async _perform(req) { + await __classPrivateFieldGet$c(this, _FallbackProvider_instances, "m", _FallbackProvider_initialSync).call(this); + // Bootstrap enough to meet quorum + const running = new Set(); + for (let i = 0; i < this.quorum; i++) { + __classPrivateFieldGet$c(this, _FallbackProvider_instances, "m", _FallbackProvider_addRunner).call(this, running, req); + } + const result = __classPrivateFieldGet$c(this, _FallbackProvider_instances, "m", _FallbackProvider_waitForQuorum).call(this, running, req); + for (const runner of running) { + runner.done = true; + } + return result; + } +} +_FallbackProvider_configs = new WeakMap(), _FallbackProvider_initialSyncPromise = new WeakMap(), _FallbackProvider_instances = new WeakSet(), _FallbackProvider_getNextConfig = function _FallbackProvider_getNextConfig(configs) { + // Shuffle the states, sorted by priority + const allConfigs = __classPrivateFieldGet$c(this, _FallbackProvider_configs, "f").slice(); + shuffle(allConfigs); + allConfigs.sort((a, b) => (b.priority - a.priority)); + for (const config of allConfigs) { + if (configs.indexOf(config) === -1) { + return config; + } + } + return null; +}, _FallbackProvider_addRunner = function _FallbackProvider_addRunner(running, req) { + const config = __classPrivateFieldGet$c(this, _FallbackProvider_instances, "m", _FallbackProvider_getNextConfig).call(this, Array.from(running).map((r) => r.config)); + if (config == null) { + return null; + } + const result = {}; + const runner = { + config, result, didBump: false, done: false, + perform: null, staller: null + }; + const now = getTime(); + runner.perform = (async () => { + try { + config.requests++; + result.result = await config.provider._perform(req); + } + catch (error) { + config.errorResponses++; + result.error = error; + } + if (runner.done) { + config.lateResponses++; + } + const dt = (getTime() - now); + config._totalTime += dt; + config.rollingDuration = 0.95 * config.rollingDuration + 0.05 * dt; + runner.perform = null; + })(); + runner.staller = (async () => { + await stall$2(config.stallTimeout); + runner.staller = null; + })(); + running.add(runner); + return runner; +}, _FallbackProvider_initialSync = +// Initializes the blockNumber and network for each runner and +// blocks until initialized +async function _FallbackProvider_initialSync() { + let initialSync = __classPrivateFieldGet$c(this, _FallbackProvider_initialSyncPromise, "f"); + if (!initialSync) { + const promises = []; + __classPrivateFieldGet$c(this, _FallbackProvider_configs, "f").forEach((config) => { + promises.push(waitForSync(config, 0)); + promises.push((async () => { + config._network = await config.provider.getNetwork(); + })()); + }); + __classPrivateFieldSet$c(this, _FallbackProvider_initialSyncPromise, initialSync = (async () => { + // Wait for all providers to have a block number and network + await Promise.all(promises); + // Check all the networks match + let chainId = null; + for (const config of __classPrivateFieldGet$c(this, _FallbackProvider_configs, "f")) { + const network = (config._network); + if (chainId == null) { + chainId = network.chainId; + } + else if (network.chainId !== chainId) { + logger$5.throwError("cannot mix providers on different networks", "UNSUPPORTED_OPERATION", { + operation: "new FallbackProvider" + }); + } + } + })(), "f"); + } + await initialSync; +}, _FallbackProvider_checkQuorum = async function _FallbackProvider_checkQuorum(running, req) { + // Get all the result objects + const results = []; + for (const runner of running) { + if ("result" in runner.result) { + const result = runner.result.result; + results.push({ + result, + normal: normalize((runner.config._network), result, req), + weight: runner.config.weight + }); + } + } + // Are there enough results to event meet quorum? + if (results.reduce((a, r) => (a + r.weight), 0) < this.quorum) { + return undefined; + } + switch (req.method) { + case "getBlockNumber": { + throw new Error("TODO"); + } + case "getGasPrice": + case "estimateGas": + return getMedian(results); + case "getBlock": + // Pending blocks are mempool dependant and already + // quite untrustworthy + if ("blockTag" in req && req.blockTag === "pending") { + return results[0].result; + } + return checkQuorum(this.quorum, results); + case "chainId": + case "getBalance": + case "getTransactionCount": + case "getCode": + case "getStorageAt": + case "getTransaction": + case "getTransactionReceipt": + case "getLogs": + return checkQuorum(this.quorum, results); + case "call": + // @TODO: Check errors + return checkQuorum(this.quorum, results); + case "sendTransaction": + throw new Error("TODO"); + } + return logger$5.throwError("unsupported method", "UNSUPPORTED_OPERATION", { + operation: `_perform(${JSON.stringify(req.method)})` + }); +}, _FallbackProvider_waitForQuorum = async function _FallbackProvider_waitForQuorum(running, req) { + if (running.size === 0) { + throw new Error("no runners?!"); + } + // Any promises that are interesting to watch for; an expired stall + // or a successful perform + const interesting = []; + //const results: Array = [ ]; + //const errors: Array = [ ]; + let newRunners = 0; + for (const runner of running) { + // @TODO: use runner.perfom != null + /* + if ("result" in runner.result) { + results.push(runner.result.result); + } else if ("error" in runner.result) { + errors.push(runner.result.error); + } +*/ + // No responses, yet; keep an eye on it + if (runner.perform) { + interesting.push(runner.perform); + } + // Still stalling... + if (runner.staller) { + interesting.push(runner.staller); + continue; + } + // This runner has already triggered another runner + if (runner.didBump) { + continue; + } + // Got a response (result or error) or stalled; kick off another runner + runner.didBump = true; + newRunners++; + } + // Check for quorum + /* + console.log({ results, errors } ); + if (results.length >= this.quorum) { + return results[0]; + } + + if (errors.length >= this.quorum) { + return errors[0]; + } + */ + const value = await __classPrivateFieldGet$c(this, _FallbackProvider_instances, "m", _FallbackProvider_checkQuorum).call(this, running, req); + if (value !== undefined) { + if (value instanceof Error) { + throw value; + } + return value; + } + // Add any new runners, because a staller timed out or a result + // or error response came in. + for (let i = 0; i < newRunners; i++) { + __classPrivateFieldGet$c(this, _FallbackProvider_instances, "m", _FallbackProvider_addRunner).call(this, running, req); + } + if (interesting.length === 0) { + throw new Error("quorum not met"); + // return logger.throwError("failed to meet quorum", "", { + // }); + } + // Wait for someone to either complete its perform or trigger a stall + await Promise.race(interesting); + return await __classPrivateFieldGet$c(this, _FallbackProvider_instances, "m", _FallbackProvider_waitForQuorum).call(this, running, req); +}; + +function getGlobal() { + if (typeof self !== 'undefined') { + return self; + } + if (typeof window !== 'undefined') { + return window; + } + if (typeof global !== 'undefined') { + return global; + } + throw new Error('unable to locate global object'); +} +const _WebSocket = getGlobal().WebSocket; + +/** + * SocketProvider + * + * Generic long-lived socket provider. + * + * Sub-classing notes + * - a sub-class MUST call the `_start()` method once connected + * - a sub-class MUST override the `_write(string)` method + * - a sub-class MUST call `_processMessage(string)` for each message + */ +var __classPrivateFieldSet$b = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$b = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _SocketSubscriber_provider, _SocketSubscriber_filter, _SocketSubscriber_filterId, _SocketSubscriber_paused, _SocketSubscriber_emitPromise, _SocketEventSubscriber_logFilter, _SocketEventSubscriber_formatter, _SocketProvider_callbacks, _SocketProvider_ready, _SocketProvider_subs, _SocketProvider_pending; +class SocketSubscriber { + constructor(provider, filter) { + _SocketSubscriber_provider.set(this, void 0); + _SocketSubscriber_filter.set(this, void 0); + _SocketSubscriber_filterId.set(this, void 0); + _SocketSubscriber_paused.set(this, void 0); + _SocketSubscriber_emitPromise.set(this, void 0); + __classPrivateFieldSet$b(this, _SocketSubscriber_provider, provider, "f"); + __classPrivateFieldSet$b(this, _SocketSubscriber_filter, JSON.stringify(filter), "f"); + __classPrivateFieldSet$b(this, _SocketSubscriber_filterId, null, "f"); + __classPrivateFieldSet$b(this, _SocketSubscriber_paused, null, "f"); + __classPrivateFieldSet$b(this, _SocketSubscriber_emitPromise, null, "f"); + } + get filter() { return JSON.parse(__classPrivateFieldGet$b(this, _SocketSubscriber_filter, "f")); } + start() { + __classPrivateFieldSet$b(this, _SocketSubscriber_filterId, __classPrivateFieldGet$b(this, _SocketSubscriber_provider, "f").send("eth_subscribe", this.filter).then((filterId) => { + __classPrivateFieldGet$b(this, _SocketSubscriber_provider, "f")._register(filterId, this); + return filterId; + }), "f"); + } + stop() { + (__classPrivateFieldGet$b(this, _SocketSubscriber_filterId, "f")).then((filterId) => { + __classPrivateFieldGet$b(this, _SocketSubscriber_provider, "f").send("eth_unsubscribe", [filterId]); + }); + __classPrivateFieldSet$b(this, _SocketSubscriber_filterId, null, "f"); + } + // @TODO: pause should trap the current blockNumber, unsub, and on resume use getLogs + // and resume + pause(dropWhilePaused) { + if (!dropWhilePaused) { + logger$5.throwError("preserve logs while paused not supported by SocketSubscriber yet", "UNSUPPORTED_OPERATION", { + operation: "pause(false)" + }); + } + __classPrivateFieldSet$b(this, _SocketSubscriber_paused, !!dropWhilePaused, "f"); + } + resume() { + __classPrivateFieldSet$b(this, _SocketSubscriber_paused, null, "f"); + } + _handleMessage(message) { + if (__classPrivateFieldGet$b(this, _SocketSubscriber_filterId, "f") == null) { + return; + } + if (__classPrivateFieldGet$b(this, _SocketSubscriber_paused, "f") === null) { + let emitPromise = __classPrivateFieldGet$b(this, _SocketSubscriber_emitPromise, "f"); + if (emitPromise == null) { + emitPromise = this._emit(__classPrivateFieldGet$b(this, _SocketSubscriber_provider, "f"), message); + } + else { + emitPromise = emitPromise.then(async () => { + await this._emit(__classPrivateFieldGet$b(this, _SocketSubscriber_provider, "f"), message); + }); + } + __classPrivateFieldSet$b(this, _SocketSubscriber_emitPromise, emitPromise.then(() => { + if (__classPrivateFieldGet$b(this, _SocketSubscriber_emitPromise, "f") === emitPromise) { + __classPrivateFieldSet$b(this, _SocketSubscriber_emitPromise, null, "f"); + } + }), "f"); + } + } + async _emit(provider, message) { + throw new Error("sub-classes must implemente this; _emit"); + } +} +_SocketSubscriber_provider = new WeakMap(), _SocketSubscriber_filter = new WeakMap(), _SocketSubscriber_filterId = new WeakMap(), _SocketSubscriber_paused = new WeakMap(), _SocketSubscriber_emitPromise = new WeakMap(); +class SocketBlockSubscriber extends SocketSubscriber { + constructor(provider) { + super(provider, ["newHeads"]); + } + async _emit(provider, message) { + provider.emit("block", parseInt(message.number)); + } +} +class SocketPendingSubscriber extends SocketSubscriber { + constructor(provider) { + super(provider, ["newPendingTransactions"]); + } + async _emit(provider, message) { + provider.emit("pending", message); + } +} +class SocketEventSubscriber extends SocketSubscriber { + constructor(provider, filter) { + super(provider, ["logs", filter]); + _SocketEventSubscriber_logFilter.set(this, void 0); + _SocketEventSubscriber_formatter.set(this, void 0); + __classPrivateFieldSet$b(this, _SocketEventSubscriber_logFilter, JSON.stringify(filter), "f"); + __classPrivateFieldSet$b(this, _SocketEventSubscriber_formatter, provider.getNetwork().then((network) => network.formatter), "f"); + } + get logFilter() { return JSON.parse(__classPrivateFieldGet$b(this, _SocketEventSubscriber_logFilter, "f")); } + async _emit(provider, message) { + const formatter = await __classPrivateFieldGet$b(this, _SocketEventSubscriber_formatter, "f"); + provider.emit(__classPrivateFieldGet$b(this, _SocketEventSubscriber_logFilter, "f"), formatter.log(message, provider)); + } +} +_SocketEventSubscriber_logFilter = new WeakMap(), _SocketEventSubscriber_formatter = new WeakMap(); +class SocketProvider extends JsonRpcApiProvider { + constructor(network) { + super(network); + _SocketProvider_callbacks.set(this, void 0); + _SocketProvider_ready.set(this, void 0); + // Maps each filterId to its subscriber + _SocketProvider_subs.set(this, void 0); + // If any events come in before a subscriber has finished + // registering, queue them + _SocketProvider_pending.set(this, void 0); + __classPrivateFieldSet$b(this, _SocketProvider_callbacks, new Map(), "f"); + __classPrivateFieldSet$b(this, _SocketProvider_ready, false, "f"); + __classPrivateFieldSet$b(this, _SocketProvider_subs, new Map(), "f"); + __classPrivateFieldSet$b(this, _SocketProvider_pending, new Map(), "f"); + } + _getSubscriber(sub) { + switch (sub.type) { + case "close": + return new UnmanagedSubscriber("close"); + case "block": + return new SocketBlockSubscriber(this); + case "pending": + return new SocketPendingSubscriber(this); + case "event": + return new SocketEventSubscriber(this, sub.filter); + case "orphan": + // Handled auto-matically within AbstractProvider + // when the log.removed = true + if (sub.filter.orphan === "drop-log") { + return new UnmanagedSubscriber("drop-log"); + } + } + return super._getSubscriber(sub); + } + _register(filterId, subscriber) { + __classPrivateFieldGet$b(this, _SocketProvider_subs, "f").set(filterId, subscriber); + const pending = __classPrivateFieldGet$b(this, _SocketProvider_pending, "f").get(filterId); + if (pending) { + for (const message of pending) { + subscriber._handleMessage(message); + } + __classPrivateFieldGet$b(this, _SocketProvider_pending, "f").delete(filterId); + } + } + async send(method, params) { + const payload = this.prepareRequest(method, params); + const promise = new Promise((resolve, reject) => { + __classPrivateFieldGet$b(this, _SocketProvider_callbacks, "f").set(payload.id, { payload, resolve, reject }); + }); + if (__classPrivateFieldGet$b(this, _SocketProvider_ready, "f")) { + await this._write(JSON.stringify(payload)); + } + return await promise; + } + // Sub-classes must call this once they are connected + async _start() { + if (__classPrivateFieldGet$b(this, _SocketProvider_ready, "f")) { + return; + } + __classPrivateFieldSet$b(this, _SocketProvider_ready, true, "f"); + for (const { payload } of __classPrivateFieldGet$b(this, _SocketProvider_callbacks, "f").values()) { + await this._write(JSON.stringify(payload)); + } + } + // Sub-classes must call this for each message + async _processMessage(message) { + const result = JSON.parse(message); + if ("id" in result) { + const promise = __classPrivateFieldGet$b(this, _SocketProvider_callbacks, "f").get(result.id); + if (!promise) { + console.log("Weird... Response for not a thing we sent"); + return; + } + __classPrivateFieldGet$b(this, _SocketProvider_callbacks, "f").delete(result.id); + if ("error" in result) { + const { message, code, data } = result.error; + const error = logger$5.makeError(message || "unkonwn error", "SERVER_ERROR", { + request: `ws:${JSON.stringify(promise.payload)}`, + info: { code, data } + }); + promise.reject(error); + } + else { + promise.resolve(result.result); + } + } + else if (result.method === "eth_subscription") { + const filterId = result.params.subscription; + const subscriber = __classPrivateFieldGet$b(this, _SocketProvider_subs, "f").get(filterId); + if (subscriber) { + subscriber._handleMessage(result.params.result); + } + else { + let pending = __classPrivateFieldGet$b(this, _SocketProvider_pending, "f").get(filterId); + if (pending == null) { + pending = []; + __classPrivateFieldGet$b(this, _SocketProvider_pending, "f").set(filterId, pending); + } + pending.push(result.params.result); + } + } + } + async _write(message) { + throw new Error("sub-classes must override this"); + } +} +_SocketProvider_callbacks = new WeakMap(), _SocketProvider_ready = new WeakMap(), _SocketProvider_subs = new WeakMap(), _SocketProvider_pending = new WeakMap(); + +var __classPrivateFieldSet$a = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$a = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _WebSocketProvider_websocket; +class WebSocketProvider extends SocketProvider { + constructor(url, network) { + super(network); + _WebSocketProvider_websocket.set(this, void 0); + if (typeof (url) === "string") { + __classPrivateFieldSet$a(this, _WebSocketProvider_websocket, new _WebSocket(url), "f"); + } + else { + __classPrivateFieldSet$a(this, _WebSocketProvider_websocket, url, "f"); + } + this.websocket.onopen = () => { + this._start(); + }; + this.websocket.onmessage = (message) => { + this._processMessage(message.data); + }; + } + get websocket() { return __classPrivateFieldGet$a(this, _WebSocketProvider_websocket, "f"); } + async _write(message) { + this.websocket.send(message); + } +} +_WebSocketProvider_websocket = new WeakMap(); + +// See: https://chainlist.org +function injectCommonNetworks(Network) { + /// Register popular Ethereum networks + function registerEth(name, chainId, options) { + const func = function () { + const network = new Network(name, chainId); + // We use 0 to disable ENS + if (options.ensNetwork != null) { + network.attachPlugin(new EnsPlugin(null, options.ensNetwork)); + } + if (options.priorityFee) { + network.attachPlugin(new MaxPriorityFeePlugin(options.priorityFee)); + } + if (options.etherscan) { + const { url, apiKey } = options.etherscan; + network.attachPlugin(new EtherscanPlugin(url, apiKey)); + } + network.attachPlugin(new GasCostPlugin()); + return network; + }; + // Register the network by name and chain ID + Network.register(name, func); + Network.register(chainId, func); + if (options.altNames) { + options.altNames.forEach((name) => { + Network.register(name, func); + }); + } + } + registerEth("homestead", 1, { ensNetwork: 1, altNames: ["mainnet"] }); + registerEth("ropsten", 3, { ensNetwork: 3 }); + registerEth("rinkeby", 4, { ensNetwork: 4 }); + registerEth("goerli", 5, { ensNetwork: 5 }); + registerEth("kovan", 42, { ensNetwork: 42 }); + registerEth("classic", 61, {}); + registerEth("classicKotti", 6, {}); + registerEth("xdai", 100, { ensNetwork: 1 }); + // Polygon has a 35 gwei maxPriorityFee requirement + registerEth("matic", 137, { + ensNetwork: 1, + priorityFee: 35000000000, + etherscan: { + apiKey: "W6T8DJW654GNTQ34EFEYYP3EZD9DD27CT7", + url: "https:/\/api.polygonscan.com/" + } + }); + registerEth("maticMumbai", 80001, { + priorityFee: 35000000000, + etherscan: { + apiKey: "W6T8DJW654GNTQ34EFEYYP3EZD9DD27CT7", + url: "https:/\/api-testnet.polygonscan.com/" + } + }); + registerEth("bnb", 56, { + ensNetwork: 1, + etherscan: { + apiKey: "EVTS3CU31AATZV72YQ55TPGXGMVIFUQ9M9", + url: "http:/\/api.bscscan.com" + } + }); + registerEth("bnbt", 97, { + etherscan: { + apiKey: "EVTS3CU31AATZV72YQ55TPGXGMVIFUQ9M9", + url: "http:/\/api-testnet.bscscan.com" + } + }); + return Network; +} +const Network = injectCommonNetworks(Network$1); + +const IpcSocketProvider = undefined; + +var __classPrivateFieldSet$9 = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$9 = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _ContractTransactionReceipt_interface, _ContractTransactionResponse_interface; +class EventLog extends Log { + constructor(log, iface, fragment) { + super(log, log.provider); + const args = iface.decodeEventLog(fragment, log.data, log.topics); + defineProperties(this, { args, fragment, interface: iface }); + } + get eventName() { return this.fragment.name; } + get eventSignature() { return this.fragment.format(); } +} +class ContractTransactionReceipt extends TransactionReceipt { + constructor(iface, provider, tx) { + super(tx, provider); + _ContractTransactionReceipt_interface.set(this, void 0); + __classPrivateFieldSet$9(this, _ContractTransactionReceipt_interface, iface, "f"); + } + get logs() { + return super.logs.map((log) => { + const fragment = log.topics.length ? __classPrivateFieldGet$9(this, _ContractTransactionReceipt_interface, "f").getEvent(log.topics[0]) : null; + if (fragment) { + return new EventLog(log, __classPrivateFieldGet$9(this, _ContractTransactionReceipt_interface, "f"), fragment); + } + else { + return log; + } + }); + } +} +_ContractTransactionReceipt_interface = new WeakMap(); +class ContractTransactionResponse extends TransactionResponse { + constructor(iface, provider, tx) { + super(tx, provider); + _ContractTransactionResponse_interface.set(this, void 0); + __classPrivateFieldSet$9(this, _ContractTransactionResponse_interface, iface, "f"); + } + async wait(confirms) { + const receipt = await super.wait(); + if (receipt == null) { + return null; + } + return new ContractTransactionReceipt(__classPrivateFieldGet$9(this, _ContractTransactionResponse_interface, "f"), this.provider, receipt); + } +} +_ContractTransactionResponse_interface = new WeakMap(); +class ContractEventPayload extends EventPayload { + constructor(contract, listener, filter, fragment, _log) { + super(contract, listener, filter); + const log = new EventLog(_log, contract.interface, fragment); + const args = contract.interface.decodeEventLog(fragment, log.data, log.topics); + defineProperties(this, { args, fragment, log }); + } + get eventName() { + return this.fragment.name; + } + get eventSignature() { + return this.fragment.format(); + } + async getBlock() { + return await this.log.getBlock(); + } + async getTransaction() { + return await this.log.getTransaction(); + } + async getTransactionReceipt() { + return await this.log.getTransactionReceipt(); + } +} + +const version$3 = "@ethersproject/contract@6.0.0-beta.1"; + +const logger$2 = new Logger(version$3); + +var __classPrivateFieldSet$8 = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$8 = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _PreparedTopicFilter_filter; +function canEstimate(value) { + return (value && typeof (value.estimateGas) === "function"); +} +function canCall(value) { + return (value && typeof (value.call) === "function"); +} +function canSend(value) { + return (value && typeof (value.sendTransaction) === "function"); +} +function canResolve(value) { + return (value && typeof (value.resolveName) === "function"); +} +function canQuery(value) { + return (value && typeof (value.getLogs) === "function"); +} +function canSubscribe(value) { + return (value && typeof (value.on) === "function" && typeof (value.off) === "function"); +} +function concisify(items) { + items = Array.from((new Set(items)).values()); + items.sort(); + return items; +} +class PreparedTopicFilter { + constructor(contract, fragment, args) { + _PreparedTopicFilter_filter.set(this, void 0); + defineProperties(this, { fragment }); + if (fragment.inputs.length < args.length) { + throw new Error("too many arguments"); + } + // Recursively descend into args and resolve any addresses + const runner = getRunner(contract.runner, "resolveName"); + const resolver = canResolve(runner) ? runner : null; + __classPrivateFieldSet$8(this, _PreparedTopicFilter_filter, (async function () { + const resolvedArgs = await Promise.all(fragment.inputs.map((param, index) => { + return param.walkAsync(args[index], (type, value) => { + if (type === "address") { + return resolveAddress(value, resolver); + } + return value; + }); + })); + return contract.interface.encodeFilterTopics(fragment, resolvedArgs); + })(), "f"); + } + getTopicFilter() { + return __classPrivateFieldGet$8(this, _PreparedTopicFilter_filter, "f"); + } +} +_PreparedTopicFilter_filter = new WeakMap(); +// A = Arguments passed in as a tuple +// R = The result type of the call (i.e. if only one return type, +// the qualified type, otherwise Result) +// D = The type the default call will return (i.e. R for view/pure, +// TransactionResponse otherwise) +//export interface ContractMethod = Array, R = any, D extends R | ContractTransactionResponse = ContractTransactionResponse> { +function _WrappedMethodBase() { + return Function; +} +function getRunner(value, feature) { + if (value == null) { + return null; + } + if (typeof (value[feature]) === "function") { + return value; + } + if (value.provider && typeof (value.provider[feature]) === "function") { + return value.provider; + } + return null; +} +async function copyOverrides(arg) { + // Create a shallow copy (we'll deep-ify anything needed during normalizing) + const overrides = copyRequest$1(Typed.dereference(arg, "overrides")); + // Some sanity checking; these are what these methods adds + //if ((overrides).to) { + if (overrides.to) { + logger$2.throwArgumentError("cannot override to", "overrides.to", overrides.to); + } + else if (overrides.data) { + logger$2.throwArgumentError("cannot override data", "overrides.data", overrides.data); + } + // Resolve any from + if (overrides.from) { + overrides.from = await resolveAddress(overrides.from); + } + return overrides; +} +async function resolveArgs(_runner, inputs, args) { + // Recursively descend into args and resolve any addresses + const runner = getRunner(_runner, "resolveName"); + const resolver = canResolve(runner) ? runner : null; + return await Promise.all(inputs.map((param, index) => { + return param.walkAsync(args[index], (type, value) => { + if (type === "address") { + return resolveAddress(value, resolver); + } + return value; + }); + })); +} +class WrappedMethod extends _WrappedMethodBase() { + constructor(contract, key) { + super(); + defineProperties(this, { + name: contract.interface.getFunctionName(key), + _contract: contract, _key: key + }); + const proxy = new Proxy(this, { + // Perform the default operation for this fragment type + apply: async (target, thisArg, args) => { + const fragment = target.getFragment(...args); + if (fragment.constant) { + return await target.staticCall(...args); + } + return await target.send(...args); + }, + }); + return proxy; + } + // Only works on non-ambiguous keys (refined fragment is always non-ambiguous) + get fragment() { + return this._contract.interface.getFunction(this._key); + } + getFragment(...args) { + return this._contract.interface.getFunction(this._key, args); + } + async populateTransaction(...args) { + const fragment = this.getFragment(...args); + // If an overrides was passed in, copy it and normalize the values + let overrides = {}; + if (fragment.inputs.length + 1 === args.length) { + overrides = await copyOverrides(args.pop()); + } + if (fragment.inputs.length !== args.length) { + throw new Error("internal error: fragment inputs doesn't match arguments; should not happen"); + } + const resolvedArgs = await resolveArgs(this._contract.runner, fragment.inputs, args); + return Object.assign({}, overrides, await resolveProperties({ + to: this._contract.getAddress(), + data: this._contract.interface.encodeFunctionData(fragment, resolvedArgs) + })); + } + async staticCall(...args) { + const result = await this.staticCallResult(...args); + if (result.length === 1) { + return result[0]; + } + return result; + } + async send(...args) { + const runner = getRunner(this._contract.runner, "sendTransaction"); + if (!canSend(runner)) { + return logger$2.throwError("contract runner does not support sending transactions", "UNSUPPORTED_OPERATION", { + operation: "sendTransaction" + }); + } + const tx = await runner.sendTransaction(await this.populateTransaction(...args)); + const provider = getRunner(this._contract.runner, "getLogs"); + return new ContractTransactionResponse(this._contract.interface, provider, tx); + } + async estimateGas(...args) { + const runner = getRunner(this._contract.runner, "estimateGas"); + if (!canEstimate(runner)) { + return logger$2.throwError("contract runner does not support gas estimation", "UNSUPPORTED_OPERATION", { + operation: "estimateGas" + }); + } + return await runner.estimateGas(await this.populateTransaction(...args)); + } + async staticCallResult(...args) { + const runner = getRunner(this._contract.runner, "call"); + if (!canCall(runner)) { + return logger$2.throwError("contract runner does not support calling", "UNSUPPORTED_OPERATION", { + operation: "call" + }); + } + const fragment = this.getFragment(...args); + const tx = await this.populateTransaction(...args); + let result = "0x"; + try { + result = await runner.call(tx); + } + catch (error) { + if (isCallException(error)) { + throw this._contract.interface.makeError(fragment, error.data, tx); + } + throw error; + } + return this._contract.interface.decodeFunctionResult(fragment, result); + } +} +function _WrappedEventBase() { + return Function; +} +class WrappedEvent extends _WrappedEventBase() { + constructor(contract, key) { + super(); + defineProperties(this, { + name: contract.interface.getEventName(key), + _contract: contract, _key: key + }); + return new Proxy(this, { + // Perform the default operation for this fragment type + apply: async (target, thisArg, args) => { + return new PreparedTopicFilter(contract, target.getFragment(...args), args); + }, + }); + } + // Only works on non-ambiguous keys + get fragment() { + return this._contract.interface.getEvent(this._key); + } + getFragment(...args) { + return this._contract.interface.getEvent(this._key, args); + } +} +// The combination of TypeScrype, Private Fields and Proxies makes +// the world go boom; so we hide variables with some trickery keeping +// a symbol attached to each BaseContract which its sub-class (even +// via a Proxy) can reach and use to look up its internal values. +const internal = Symbol.for("_ethersInternal_contract"); +const internalValues = new WeakMap(); +function setInternal(contract, values) { + internalValues.set(contract[internal], values); +} +function getInternal(contract) { + return internalValues.get(contract[internal]); +} +function isDeferred(value) { + return (value && typeof (value) === "object" && ("getTopicFilter" in value) && + (typeof (value.getTopicFilter) === "function") && value.fragment); +} +async function getSubTag(contract, event) { + let fragment; + let topics; + if (Array.isArray(event)) { + // Topics; e.g. `[ "0x1234...89ab" ]` + fragment = contract.interface.getEvent(event[0]); + topics = event; + } + else if (typeof (event) === "string") { + // Event name (name or signature); `"Transfer"` + fragment = contract.interface.getEvent(event); + topics = [contract.interface.getEventTopic(fragment)]; + } + else if (isDeferred(event)) { + // Deferred Topic Filter; e.g. `contract.filter.Transfer(from)` + fragment = event.fragment; + topics = await event.getTopicFilter(); + } + else if ("fragment" in event) { + // ContractEvent; e.g. `contract.filter.Transfer` + fragment = event.fragment; + topics = [contract.interface.getEventTopic(fragment)]; + } + else { + console.log(event); + throw new Error("TODO"); + } + // Normalize topics and sort TopicSets + topics = topics.map((t) => { + if (t == null) { + return null; + } + if (Array.isArray(t)) { + return concisify(t.map((t) => t.toLowerCase())); + } + return t.toLowerCase(); + }); + const tag = topics.map((t) => { + if (t == null) { + return "null"; + } + if (Array.isArray(t)) { + return t.join("|"); + } + return t; + }).join("&"); + return { fragment, tag, topics }; +} +async function hasSub(contract, event) { + const { subs } = getInternal(contract); + return subs.get((await getSubTag(contract, event)).tag) || null; +} +async function getSub(contract, event) { + // Make sure our runner can actually subscribe to events + const runner = getRunner(contract.runner, "on"); + const runnerOff = getRunner(contract.runner, "off"); + if (!runner || runner !== runnerOff || !canSubscribe(runner)) { + return logger$2.throwError("contract runner does not support subscribing", "UNSUPPORTED_OPERATION", { + operation: "on" + }); + } + const { fragment, tag, topics } = await getSubTag(contract, event); + const { addr, subs } = getInternal(contract); + let sub = subs.get(tag); + if (!sub) { + const address = (addr ? addr : contract); + const filter = { address, topics }; + const listener = (log) => { + const payload = new ContractEventPayload(contract, null, event, fragment, log); + emit(contract, event, payload.args, payload); + }; + let started = false; + const start = () => { + if (started) { + return; + } + runner.on(filter, listener); + started = true; + }; + const stop = () => { + if (!started) { + return; + } + runner.off(filter, listener); + started = false; + }; + sub = { tag, listeners: [], start, stop }; + subs.set(tag, sub); + } + return sub; +} +async function _emit(contract, event, args, payload) { + await lastEmit; + const sub = await hasSub(contract, event); + if (!sub) { + return false; + } + const count = sub.listeners.length; + sub.listeners = sub.listeners.filter(({ listener, once }) => { + const passArgs = args.slice(); + if (payload) { + passArgs.push(new ContractEventPayload(contract, (once ? null : listener), event, payload.fragment, payload.log)); + } + setTimeout(() => { listener.call(contract, ...passArgs); }, 0); + return !once; + }); + return (count > 0); +} +// We use this to ensure one emit resolves before firing the next to +// ensure correct ordering (note this cannot throw and just adds the +// notice to the event queu using setTimeout). +let lastEmit = Promise.resolve(); +async function emit(contract, event, args, payload) { + try { + await lastEmit; + } + catch (error) { } + const resultPromise = _emit(contract, event, args, payload); + lastEmit = resultPromise; + return await resultPromise; +} +const passProperties = ["then"]; +class BaseContract { + constructor(target, abi, runner = null, _deployTx) { + const iface = Interface.from(abi); + defineProperties(this, { target, runner, interface: iface }); + Object.defineProperty(this, internal, { value: {} }); + let addrPromise; + let addr = null; + let deployTx = null; + if (_deployTx) { + const provider = getRunner(runner, "getLogs"); + deployTx = new ContractTransactionResponse(this.interface, provider, _deployTx); + } + let subs = new Map(); + // Resolve the target as the address + if (typeof (target) === "string") { + if (isHexString(target)) { + addr = target; + addrPromise = Promise.resolve(target); + } + else { + const resolver = getRunner(runner, "resolveName"); + if (!canResolve(resolver)) { + throw logger$2.makeError("contract runner does not support name resolution", "UNSUPPORTED_OPERATION", { + operation: "resolveName" + }); + } + addrPromise = resolver.resolveName(target).then((addr) => { + if (addr == null) { + throw new Error("TODO"); + } + getInternal(this).addr = addr; + return addr; + }); + } + } + else { + addrPromise = target.getAddress().then((addr) => { + if (addr == null) { + throw new Error("TODO"); + } + getInternal(this).addr = addr; + return addr; + }); + } + // Set our private values + setInternal(this, { addrPromise, addr, deployTx, subs }); + // Add the event filters + const filters = new Proxy({}, { + get: (target, _prop, receiver) => { + // Pass important checks (like `then` for Promise) through + if (passProperties.indexOf(_prop) >= 0) { + return Reflect.get(target, _prop, receiver); + } + const prop = String(_prop); + const result = this.getEvent(prop); + if (result) { + return result; + } + throw new Error(`unknown contract event: ${prop}`); + } + }); + defineProperties(this, { filters }); + // Return a Proxy that will respond to functions + return new Proxy(this, { + get: (target, _prop, receiver) => { + if (_prop in target || passProperties.indexOf(_prop) >= 0) { + return Reflect.get(target, _prop, receiver); + } + const prop = String(_prop); + const result = target.getFunction(prop); + if (result) { + return result; + } + throw new Error(`unknown contract method: ${prop}`); + } + }); + } + async getAddress() { return await getInternal(this).addrPromise; } + deploymentTransaction() { + return getInternal(this).deployTx; + } + getFunction(key) { + if (typeof (key) !== "string") { + key = key.format(); + } + return (new WrappedMethod(this, key)); + } + getEvent(key) { + if (typeof (key) !== "string") { + key = key.format(); + } + return (new WrappedEvent(this, key)); + } + async queryFilter(event, fromBlock = 0, toBlock = "latest") { + const { addr, addrPromise } = getInternal(this); + const address = (addr ? addr : (await addrPromise)); + const { fragment, topics } = await getSubTag(this, event); + const filter = { address, topics, fromBlock, toBlock }; + const runner = getRunner(this.runner, "getLogs"); + if (!canQuery(runner)) { + return logger$2.throwError("contract runner does not support querying", "UNSUPPORTED_OPERATION", { + operation: "getLogs" + }); + } + return (await runner.getLogs(filter)).map((log) => { + return new EventLog(log, this.interface, fragment); + }); + } + async on(event, listener) { + const sub = await getSub(this, event); + sub.listeners.push({ listener, once: false }); + sub.start(); + return this; + } + async once(event, listener) { + const sub = await getSub(this, event); + sub.listeners.push({ listener, once: true }); + sub.start(); + return this; + } + async emit(event, ...args) { + return await emit(this, event, args, null); + } + async listenerCount(event) { + if (event) { + const sub = await hasSub(this, event); + if (!sub) { + return 0; + } + return sub.listeners.length; + } + const { subs } = getInternal(this); + let total = 0; + for (const { listeners } of subs.values()) { + total += listeners.length; + } + return total; + } + async listeners(event) { + if (event) { + const sub = await hasSub(this, event); + if (!sub) { + return []; + } + return sub.listeners.map(({ listener }) => listener); + } + const { subs } = getInternal(this); + let result = []; + for (const { listeners } of subs.values()) { + result = result.concat(listeners.map(({ listener }) => listener)); + } + return result; + } + async off(event, listener) { + const sub = await hasSub(this, event); + if (!sub) { + return this; + } + if (listener) { + const index = sub.listeners.map(({ listener }) => listener).indexOf(listener); + if (index >= 0) { + sub.listeners.splice(index, 1); + } + } + if (listener == null || sub.listeners.length === 0) { + sub.stop(); + getInternal(this).subs.delete(sub.tag); + } + return this; + } + async removeAllListeners(event) { + if (event) { + const sub = await hasSub(this, event); + if (!sub) { + return this; + } + sub.stop(); + getInternal(this).subs.delete(sub.tag); + } + else { + const { subs } = getInternal(this); + for (const { tag, stop } of subs.values()) { + stop(); + subs.delete(tag); + } + } + return this; + } + // Alias for "on" + async addListener(event, listener) { + return await this.on(event, listener); + } + // Alias for "off" + async removeListener(event, listener) { + return await this.off(event, listener); + } + static buildClass(abi) { + class CustomContract extends BaseContract { + constructor(address, runner = null) { + super(address, abi, runner); + } + } + return CustomContract; + } + ; + static from(target, abi, runner = null) { + const contract = new this(target, abi, runner); + return contract; + } +} +function _ContractBase() { + return BaseContract; +} +class Contract extends _ContractBase() { +} + +function computeAddress(key) { + const publicKey = SigningKey.computePublicKey(key, false); + return getAddress(keccak256("0x" + publicKey.substring(4)).substring(26)); +} + +const subsChrs = " !#$%&'()*+,-./<=>?@[]^_`{|}~"; +const Word = /^[a-z]*$/i; +function unfold(words, sep) { + let initial = 97; + return words.reduce((accum, word) => { + if (word === sep) { + initial++; + } + else if (word.match(Word)) { + accum.push(String.fromCharCode(initial) + word); + } + else { + initial = 97; + accum.push(word); + } + return accum; + }, []); +} +function decode(data, subs) { + // Replace all the substitutions with their expanded form + for (let i = subsChrs.length - 1; i >= 0; i--) { + data = data.split(subsChrs[i]).join(subs.substring(2 * i, 2 * i + 2)); + } + // Get all tle clumps; each suffix, first-increment and second-increment + const clumps = []; + const leftover = data.replace(/(:|([0-9])|([A-Z][a-z]*))/g, (all, item, semi, word) => { + if (semi) { + for (let i = parseInt(semi); i >= 0; i--) { + clumps.push(";"); + } + } + else { + clumps.push(item.toLowerCase()); + } + return ""; + }); + if (leftover) { + throw new Error(`leftovers: ${JSON.stringify(leftover)}`); + } + return unfold(unfold(clumps, ";"), ":"); +} +function decodeOwl(data) { + if (data[0] !== "0") { + throw TypeError("unsupported auwl data"); + } + return decode(data.substring(1 + 2 * subsChrs.length), data.substring(1, 1 + 2 * subsChrs.length)); +} + +const version$2 = "@ethersproject/wordlists@6.0.0-beta.1"; + +const logger$1 = new Logger(version$2); + +class Wordlist { + constructor(locale) { + defineProperties(this, { locale }); + } + // Subclasses may override this + split(mnemonic) { + return mnemonic.toLowerCase().split(/ +/g); + } + // Subclasses may override this + join(words) { + return words.join(" "); + } +} + +// Use the encode-latin.js script to create the necessary +// data files to be consumed by this class +var __classPrivateFieldSet$7 = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$7 = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _WordlistOwl_instances, _WordlistOwl_data, _WordlistOwl_checksum, _WordlistOwl_words, _WordlistOwl_loadWords; +class WordlistOwl extends Wordlist { + constructor(locale, data, checksum) { + super(locale); + _WordlistOwl_instances.add(this); + _WordlistOwl_data.set(this, void 0); + _WordlistOwl_checksum.set(this, void 0); + _WordlistOwl_words.set(this, void 0); + __classPrivateFieldSet$7(this, _WordlistOwl_data, data, "f"); + __classPrivateFieldSet$7(this, _WordlistOwl_checksum, checksum, "f"); + __classPrivateFieldSet$7(this, _WordlistOwl_words, null, "f"); + } + get _data() { return __classPrivateFieldGet$7(this, _WordlistOwl_data, "f"); } + _decodeWords() { + return decodeOwl(__classPrivateFieldGet$7(this, _WordlistOwl_data, "f")); + } + getWord(index) { + const words = __classPrivateFieldGet$7(this, _WordlistOwl_instances, "m", _WordlistOwl_loadWords).call(this); + if (index < 0 || index >= words.length) { + logger$1.throwArgumentError(`invalid word index: ${index}`, "index", index); + } + return words[index]; + } + getWordIndex(word) { + return __classPrivateFieldGet$7(this, _WordlistOwl_instances, "m", _WordlistOwl_loadWords).call(this).indexOf(word); + } +} +_WordlistOwl_data = new WeakMap(), _WordlistOwl_checksum = new WeakMap(), _WordlistOwl_words = new WeakMap(), _WordlistOwl_instances = new WeakSet(), _WordlistOwl_loadWords = function _WordlistOwl_loadWords() { + if (__classPrivateFieldGet$7(this, _WordlistOwl_words, "f") == null) { + const words = this._decodeWords(); + // Verify the computed list matches the official list + const checksum = id(words.join("\n") + "\n"); + /* c8 ignore start */ + if (checksum !== __classPrivateFieldGet$7(this, _WordlistOwl_checksum, "f")) { + throw new Error(`BIP39 Wordlist for ${this.locale} FAILED`); + } + /* c8 ignore stop */ + __classPrivateFieldSet$7(this, _WordlistOwl_words, words, "f"); + } + return __classPrivateFieldGet$7(this, _WordlistOwl_words, "f"); +}; + +const words = "0erleonalorenseinceregesticitStanvetearctssi#ch2Athck&tneLl0And#Il.yLeOutO=S|S%b/ra@SurdU'0Ce[Cid|CountCu'Hie=IdOu,-Qui*Ro[TT]T%T*[Tu$0AptDD-tD*[Ju,M.UltV<)Vi)0Rob-0FairF%dRaid0A(EEntRee0Ead0MRRp%tS!_rmBumCoholErtI&LLeyLowMo,O}PhaReadySoT Ways0A>urAz(gOngOuntU'd0Aly,Ch%Ci|G G!GryIm$K!Noun)Nu$O` Sw T&naTiqueXietyY1ArtOlogyPe?P!Pro=Ril1ChCt-EaEnaGueMMedM%MyOundR<+Re,Ri=RowTTefa@Ti,Tw%k0KPe@SaultSetSi,SumeThma0H!>OmTa{T&dT.udeTra@0Ct]D.Gu,NtTh%ToTumn0Era+OcadoOid0AkeA*AyEsomeFulKw?d0Is:ByChel%C#D+GL<)Lc#y~MbooN_{Ad!AftAmA}AshAt AwlAzyEamEd.EekEwI{etImeIspIt-OpO[Ou^OwdUci$UelUi'Umb!Un^UshYY,$2BeLtu*PPbo?dRiousRr|Rta(R=Sh]/omTe3C!:DMa+MpN)Ng R(gShUght WnY3AlBa>BrisCadeCemb CideCl(eC%a>C*a'ErF&'F(eFyG*eLayLiv M3AgramAlAm#dAryCeE'lEtFf G.$Gn.yLemmaNn NosaurRe@RtSag*eScov Sea'ShSmi[S%d Splay/<)V tVideV%)Zzy5Ct%Cum|G~Lph(Ma(Na>NkeyN%OrSeUb!Ve_ftAg#AmaA,-AwEamE[IftIllInkIpI=OpUmY2CkMbNeR(g/T^Ty1Arf1Nam-:G G!RlyRnR`Sily/Sy1HoOlogyOnomy0GeItUca>1F%t0G1GhtTh 2BowD E@r-EgSe0B?kBodyBra)Er+Ot]PloyPow Pty0Ab!A@DD![D%'EmyErgyF%)Ga+G(eH<)JoyLi,OughR-hRollSu*T Ti*TryVelope1Isode0U$Uip0AA'OdeOs]R%Upt0CapeSayS&)Ta>0Ern$H-s1Id&)IlOkeOl=1A@Amp!Ce[Ch<+C.eCludeCu'Ecu>Erci'Hau,Hib.I!I,ItOt-PM&'Mu}Pa@Po'Pro=Pul'0ChCludeComeC*a'DexD-a>Do%Du,ryFN Noc|PutQuirySSue0Em1Ory:CketGu?RZz3AlousAns~yWel9BInKeUr}yY5D+I)MpNg!Ni%Nk/:Ng?oo3EnEpT^upY3CkDD}yNdNgdomSsTT^&TeTt&Wi4EeIfeO{Ow:BBelB%Dd DyKeMpNgua+PtopR+T T(UghUndryVaWWnWsu.Y Zy3Ad AfArnA=Ctu*FtGG$G&dIsu*M#NdNg`NsOp?dSs#Tt Vel3ArB tyBr?yC&'FeFtGhtKeMbM.NkOnQuid/Tt!VeZ?d5AdAnB, C$CkG-NelyNgOpTt yUdUn+VeY$5CkyGga+Mb N?N^Xury3R-s:Ch(eDG-G}tIdIlInJ%KeMm$NNa+Nda>NgoNs]Nu$P!Rb!R^Rg(R(eRketRria+SkSs/ T^T i$ThTrixTt XimumZe3AdowAnAsu*AtCh<-D$DiaLodyLtMb M%yNt]NuRcyR+R.RryShSsa+T$Thod3Dd!DnightLk~]M-NdNimumN%Nu>Rac!Rr%S ySs/akeXXedXtu*5Bi!DelDifyMM|N.%NkeyN, N`OnR$ReRn(gSqu.oTh T]T%Unta(U'VeVie5ChFf(LeLtiplySc!SeumShroomS-/Tu$3Self/ yTh:I=MePk(Rrow/yT]Tu*3ArCkEdGati=G!@I` PhewR=/TTw%kUtr$V WsXt3CeGht5B!I'M(eeOd!Rm$R`SeTab!TeTh(gTi)VelW5C!?Mb R'T:K0EyJe@Li+Scu*S =Ta(Vious0CurEAyEa'Ed+U{UgUn+2EmEtIntL?LeLi)NdNyOlPul?Rt]S.]Ssib!/TatoTt yV tyWd W _@i)Ai'Ed-tEf Epa*Es|EttyEv|I)IdeIm?yIntI%.yIs#Iva>IzeOb!mO)[Odu)Of.OgramOje@Omo>OofOp tyOsp O>@OudOvide2Bl-Dd(g~LpL'Mpk(N^PilPpyR^a'R.yRpo'R'ShTZz!3Ramid:99Al.yAntumArt E,]I{ItIzO>:Bb.Cco#CeCkD?DioIlInI'~yMpN^NdomN+PidReTeTh V&WZ%3AdyAlAs#BelBuildC$lCei=CipeC%dCyc!Du)F!@F%mFu'G]G*tGul?Je@LaxLea'LiefLyMa(Memb M(dMo=Nd NewNtOp&PairPeatPla)P%tQui*ScueSemb!Si,Sour)Sp#'SultTi*T*atTurnUn]Ve$ViewW?d2Y`m0BBb#CeChDeD+F!GhtGidNgOtPp!SkTu$V$V 5AdA,BotBu,CketM<)OfOkieOmSeTa>UghUndU>Y$5Bb DeGLeNNwayR$:DDd!D}[FeIlLadLm#L#LtLu>MeMp!NdTisfyToshiU)Usa+VeY1A!AnA*Att E}HemeHoolI&)I[%sOrp]OutRapRe&RiptRub1AAr^As#AtC#dC*tCt]Cur.yEdEkGm|Le@~M(?Ni%N'Nt&)RiesRvi)Ss]Tt!TupV&_dowAftAllowA*EdEllEriffIeldIftI}IpIv O{OeOotOpOrtOuld O=RimpRugUff!Y0Bl(gCkDeE+GhtGnL|Lk~yLv Mil?Mp!N)NgR&/ Tua>XZe1A>Et^IIllInIrtUll0AbAmEepEnd I)IdeIghtImOgAyEakEelEmEpE*oI{IllIngO{Oma^O}OolOryO=Ra>gyReetRikeR#gRugg!Ud|UffUmb!Y!0Bje@Bm.BwayC)[ChDd&Ff G?G+,ItMm NNnyN'tP PplyP*meReRfa)R+Rpri'RroundR=ySpe@/a(1AllowAmpApArmE?EetIftImIngIt^Ord1MbolMptomRup/em:B!Ck!GIlL|LkNkPeR+tSk/eTtooXi3A^Am~NNGradeHoldOnP Set1BOng::Rd3Ar~ow9UUngU`:3BraRo9NeO"; +const checksum = "0x3c8acc1e7b08d8e76f9fda015ef48dc8c710a73cb7e0f77b2c18a9b5a7adde60"; +class LangEn extends WordlistOwl { + constructor() { super("en", words, checksum); } +} +const langEn = new LangEn(); + +const version$1 = "@ethersproject/wallet@6.0.0-beta.1"; + +const logger = new Logger(version$1); + +const wordlists = Object.freeze({ + en: langEn +}); + +const Base64 = ")!@#$%^&*(ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_"; +function decodeBits(width, data) { + const maxValue = (1 << width) - 1; + const result = []; + let accum = 0, bits = 0, flood = 0; + for (let i = 0; i < data.length; i++) { + // Accumulate 6 bits of data + accum = ((accum << 6) | Base64.indexOf(data[i])); + bits += 6; + // While we have enough for a word... + while (bits >= width) { + // ...read the word + const value = (accum >> (bits - width)); + accum &= (1 << (bits - width)) - 1; + bits -= width; + // A value of 0 indicates we exceeded maxValue, it + // floods over into the next value + if (value === 0) { + flood += maxValue; + } + else { + result.push(value + flood); + flood = 0; + } + } + } + return result; +} + +function decodeOwlA(data, accents) { + let words = decodeOwl(data).join(","); + // Inject the accents + accents.split(/,/g).forEach((accent) => { + const match = accent.match(/^([a-z]*)([0-9]+)([0-9])(.*)$/); + if (!match) { + throw new Error("internal error parsing accents"); + } + let posOffset = 0; + const positions = decodeBits(parseInt(match[3]), match[4]); + const charCode = parseInt(match[2]); + const regex = new RegExp(`([${match[1]}])`, "g"); + words = words.replace(regex, (all, letter) => { + const rem = --positions[posOffset]; + if (rem === 0) { + letter = String.fromCharCode(letter.charCodeAt(0), charCode); + posOffset++; + } + return letter; + }); + }); + return words.split(","); +} + +var __classPrivateFieldSet$6 = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$6 = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _WordlistOwlA_accent; +class WordlistOwlA extends WordlistOwl { + constructor(locale, data, accent, checksum) { + super(locale, data, checksum); + _WordlistOwlA_accent.set(this, void 0); + __classPrivateFieldSet$6(this, _WordlistOwlA_accent, accent, "f"); + } + get _accent() { return __classPrivateFieldGet$6(this, _WordlistOwlA_accent, "f"); } + _decodeWords() { + return decodeOwlA(this._data, this._accent); + } +} +_WordlistOwlA_accent = new WeakMap(); + +// Returns a byte with the MSB bits set +function getUpperMask(bits) { + return ((1 << bits) - 1) << (8 - bits) & 0xff; +} +// Returns a byte with the LSB bits set +function getLowerMask(bits) { + return ((1 << bits) - 1) & 0xff; +} +function mnemonicToEntropy(mnemonic, wordlist = langEn) { + logger.assertNormalize("NFKD"); + if (wordlist == null) { + wordlist = langEn; + } + const words = wordlist.split(mnemonic); + if ((words.length % 3) !== 0 || words.length < 12 || words.length > 24) { + logger.throwArgumentError("invalid mnemonic length", "mnemonic", "[ REDACTED ]"); + } + const entropy = arrayify(new Uint8Array(Math.ceil(11 * words.length / 8))); + let offset = 0; + for (let i = 0; i < words.length; i++) { + let index = wordlist.getWordIndex(words[i].normalize("NFKD")); + if (index === -1) { + logger.throwArgumentError(`invalid mnemonic word at index ${i}`, "mnemonic", "[ REDACTED ]"); + } + for (let bit = 0; bit < 11; bit++) { + if (index & (1 << (10 - bit))) { + entropy[offset >> 3] |= (1 << (7 - (offset % 8))); + } + offset++; + } + } + const entropyBits = 32 * words.length / 3; + const checksumBits = words.length / 3; + const checksumMask = getUpperMask(checksumBits); + const checksum = arrayify(sha256(entropy.slice(0, entropyBits / 8)))[0] & checksumMask; + if (checksum !== (entropy[entropy.length - 1] & checksumMask)) { + logger.throwArgumentError("invalid mnemonic checksum", "mnemonic", "[ REDACTED ]"); + } + return hexlify(entropy.slice(0, entropyBits / 8)); +} +function entropyToMnemonic(entropy, wordlist = langEn) { + if ((entropy.length % 4) || entropy.length < 16 || entropy.length > 32) { + logger.throwArgumentError("invalid entropy size", "entropy", "[ REDACTED ]"); + } + if (wordlist == null) { + wordlist = langEn; + } + const indices = [0]; + let remainingBits = 11; + for (let i = 0; i < entropy.length; i++) { + // Consume the whole byte (with still more to go) + if (remainingBits > 8) { + indices[indices.length - 1] <<= 8; + indices[indices.length - 1] |= entropy[i]; + remainingBits -= 8; + // This byte will complete an 11-bit index + } + else { + indices[indices.length - 1] <<= remainingBits; + indices[indices.length - 1] |= entropy[i] >> (8 - remainingBits); + // Start the next word + indices.push(entropy[i] & getLowerMask(8 - remainingBits)); + remainingBits += 3; + } + } + // Compute the checksum bits + const checksumBits = entropy.length / 4; + const checksum = parseInt(sha256(entropy).substring(2, 4), 16) & getUpperMask(checksumBits); + // Shift the checksum into the word indices + indices[indices.length - 1] <<= checksumBits; + indices[indices.length - 1] |= (checksum >> (8 - checksumBits)); + return wordlist.join(indices.map((index) => wordlist.getWord(index))); +} +const _guard$1 = {}; +class Mnemonic { + constructor(guard, entropy, phrase, password, wordlist) { + if (password == null) { + password = ""; + } + if (wordlist == null) { + wordlist = langEn; + } + logger.assertPrivate(guard, _guard$1, "Mnemonic"); + defineProperties(this, { phrase, password, wordlist, entropy }); + } + computeSeed() { + const salt = toUtf8Bytes("mnemonic" + this.password, UnicodeNormalizationForm.NFKD); + return pbkdf2(toUtf8Bytes(this.phrase, UnicodeNormalizationForm.NFKD), salt, 2048, 64, "sha512"); + } + static fromPhrase(phrase, password, wordlist) { + // Normalize the case and space; throws if invalid + const entropy = mnemonicToEntropy(phrase, wordlist); + phrase = entropyToMnemonic(logger.getBytes(entropy), wordlist); + return new Mnemonic(_guard$1, entropy, phrase, password, wordlist); + } + static fromEntropy(_entropy, password, wordlist) { + const entropy = logger.getBytes(_entropy, "entropy"); + const phrase = entropyToMnemonic(entropy, wordlist); + return new Mnemonic(_guard$1, hexlify(entropy), phrase, password, wordlist); + } + static entropyToPhrase(_entropy, wordlist) { + const entropy = logger.getBytes(_entropy, "entropy"); + return entropyToMnemonic(entropy, wordlist); + } + static phraseToEntropy(phrase, wordlist) { + return mnemonicToEntropy(phrase, wordlist); + } + static isValidMnemonic(phrase, wordlist) { + try { + mnemonicToEntropy(phrase, wordlist); + return true; + } + catch (error) { } + return false; + } +} + +var __classPrivateFieldSet$5 = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$5 = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _BaseWallet_signingKey; +class BaseWallet extends AbstractSigner { + constructor(privateKey, provider) { + super(provider); + _BaseWallet_signingKey.set(this, void 0); + __classPrivateFieldSet$5(this, _BaseWallet_signingKey, privateKey, "f"); + const address = computeAddress(this.signingKey.publicKey); + defineProperties(this, { address }); + } + // Store these in getters to reduce visibility in console.log + get signingKey() { return __classPrivateFieldGet$5(this, _BaseWallet_signingKey, "f"); } + get privateKey() { return this.signingKey.privateKey; } + async getAddress() { return this.address; } + connect(provider) { + return new BaseWallet(__classPrivateFieldGet$5(this, _BaseWallet_signingKey, "f"), provider); + } + async signTransaction(_tx) { + // Replace any Addressable or ENS name with an address + const tx = Object.assign({}, _tx, await resolveProperties({ + to: (_tx.to ? resolveAddress(_tx.to, this.provider) : undefined), + from: (_tx.from ? resolveAddress(_tx.from, this.provider) : undefined) + })); + if (tx.from != null) { + if (getAddress(tx.from) !== this.address) { + logger.throwArgumentError("transaction from address mismatch", "tx.from", _tx.from); + } + delete tx.from; + } + // Build the transaction + const btx = Transaction.from(tx); + btx.signature = this.signingKey.sign(btx.unsignedHash); + return btx.serialized; + } + async signMessage(message) { + return this.signingKey.sign(hashMessage(message)).serialized; + } + async signTypedData(domain, types, value) { + // Populate any ENS names + const populated = await TypedDataEncoder.resolveNames(domain, types, value, async (name) => { + if (this.provider == null) { + return logger.throwError("cannot resolve ENS names without a provider", "UNSUPPORTED_OPERATION", { + operation: "resolveName", + info: { name } + }); + } + const address = await this.provider.resolveName(name); + if (address == null) { + return logger.throwError("unconfigured ENS name", "UNCONFIGURED_NAME", { + value: name + }); + } + return address; + }); + return this.signingKey.sign(TypedDataEncoder.hash(populated.domain, types, populated.value)).serialized; + } +} +_BaseWallet_signingKey = new WeakMap(); + +var __classPrivateFieldGet$4 = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var __classPrivateFieldSet$4 = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var _a, _HDNodeWallet_fromSeed, _HDNodeWalletManager_root; +const defaultPath$1 = "m/44'/60'/0'/0/0"; +// "Bitcoin seed" +const MasterSecret = new Uint8Array([66, 105, 116, 99, 111, 105, 110, 32, 115, 101, 101, 100]); +const HardenedBit = 0x80000000; +const N = BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"); +const Nibbles = "0123456789abcdef"; +function zpad(value, length) { + let result = ""; + while (value) { + result = Nibbles[value % 16] + result; + value = Math.trunc(value / 16); + } + while (result.length < length * 2) { + result = "0" + result; + } + return "0x" + result; +} +function encodeBase58Check(_value) { + const value = logger.getBytes(_value); + const check = dataSlice(sha256(sha256(value)), 0, 4); + const bytes = concat([value, check]); + return encodeBase58(bytes); +} +const _guard = {}; +function ser_I(index, chainCode, publicKey, privateKey) { + const data = new Uint8Array(37); + if (index & HardenedBit) { + if (privateKey == null) { + return logger.throwError("cannot derive child of neutered node", "UNSUPPORTED_OPERATION", { + operation: "deriveChild" + }); + } + // Data = 0x00 || ser_256(k_par) + data.set(arrayify(privateKey), 1); + } + else { + // Data = ser_p(point(k_par)) + data.set(arrayify(publicKey)); + } + // Data += ser_32(i) + for (let i = 24; i >= 0; i -= 8) { + data[33 + (i >> 3)] = ((index >> (24 - i)) & 0xff); + } + const I = arrayify(computeHmac("sha512", chainCode, data)); + return { IL: I.slice(0, 32), IR: I.slice(32) }; +} +function derivePath(node, path) { + const components = path.split("/"); + if (components.length === 0 || (components[0] === "m" && node.depth !== 0)) { + throw new Error("invalid path - " + path); + } + if (components[0] === "m") { + components.shift(); + } + let result = node; + for (let i = 0; i < components.length; i++) { + const component = components[i]; + if (component.match(/^[0-9]+'$/)) { + const index = parseInt(component.substring(0, component.length - 1)); + if (index >= HardenedBit) { + throw new Error("invalid path index - " + component); + } + result = result.deriveChild(HardenedBit + index); + } + else if (component.match(/^[0-9]+$/)) { + const index = parseInt(component); + if (index >= HardenedBit) { + throw new Error("invalid path index - " + component); + } + result = result.deriveChild(index); + } + else { + throw new Error("invalid path component - " + component); + } + } + return result; +} +class HDNodeWallet extends BaseWallet { + constructor(guard, signingKey, parentFingerprint, chainCode, path, index, depth, mnemonic, provider) { + super(signingKey, provider); + logger.assertPrivate(guard, _guard, "HDNodeWallet"); + defineProperties(this, { publicKey: signingKey.compressedPublicKey }); + const fingerprint = dataSlice(ripemd160(sha256(this.publicKey)), 0, 4); + defineProperties(this, { + parentFingerprint, fingerprint, + chainCode, path, index, depth + }); + defineProperties(this, { mnemonic }); + } + connect(provider) { + return new HDNodeWallet(_guard, this.signingKey, this.parentFingerprint, this.chainCode, this.path, this.index, this.depth, this.mnemonic, provider); + } + get extendedKey() { + // We only support the mainnet values for now, but if anyone needs + // testnet values, let me know. I believe current sentiment is that + // we should always use mainnet, and use BIP-44 to derive the network + // - Mainnet: public=0x0488B21E, private=0x0488ADE4 + // - Testnet: public=0x043587CF, private=0x04358394 + if (this.depth >= 256) { + throw new Error("Depth too large!"); + } + return encodeBase58Check(concat([ + "0x0488ADE4", zpad(this.depth, 1), this.parentFingerprint, + zpad(this.index, 4), this.chainCode, + concat(["0x00", this.privateKey]) + ])); + } + hasPath() { return (this.path != null); } + neuter() { + return new HDNodeVoidWallet(_guard, this.address, this.publicKey, this.parentFingerprint, this.chainCode, this.path, this.index, this.depth, this.provider); + } + deriveChild(_index) { + const index = logger.getNumber(_index, "index"); + if (index > 0xffffffff) { + throw new Error("invalid index - " + String(index)); + } + // Base path + let path = this.path; + if (path) { + path += "/" + (index & ~HardenedBit); + if (index & HardenedBit) { + path += "'"; + } + } + const { IR, IL } = ser_I(index, this.chainCode, this.publicKey, this.privateKey); + const ki = new SigningKey(toHex((toBigInt(IL) + BigInt(this.privateKey)) % N, 32)); + return new HDNodeWallet(_guard, ki, this.fingerprint, hexlify(IR), path, index, this.depth + 1, this.mnemonic, this.provider); + } + derivePath(path) { + return derivePath(this, path); + } + static fromSeed(seed) { + return __classPrivateFieldGet$4(HDNodeWallet, _a, "m", _HDNodeWallet_fromSeed).call(HDNodeWallet, seed, null); + } + static fromPhrase(phrase, password = "", path = defaultPath$1, wordlist = langEn) { + if (!path) { + path = defaultPath$1; + } + const mnemonic = Mnemonic.fromPhrase(phrase, password, wordlist); + return __classPrivateFieldGet$4(HDNodeWallet, _a, "m", _HDNodeWallet_fromSeed).call(HDNodeWallet, mnemonic.computeSeed(), mnemonic).derivePath(path); + } + static fromMnemonic(mnemonic, path = defaultPath$1) { + if (!path) { + path = defaultPath$1; + } + return __classPrivateFieldGet$4(HDNodeWallet, _a, "m", _HDNodeWallet_fromSeed).call(HDNodeWallet, mnemonic.computeSeed(), mnemonic).derivePath(path); + } + static fromExtendedKey(extendedKey) { + const bytes = arrayify(decodeBase58(extendedKey)); // @TODO: redact + if (bytes.length !== 82 || encodeBase58Check(bytes.slice(0, 78)) !== extendedKey) { + logger.throwArgumentError("invalid extended key", "extendedKey", "[ REDACTED ]"); + } + const depth = bytes[4]; + const parentFingerprint = hexlify(bytes.slice(5, 9)); + const index = parseInt(hexlify(bytes.slice(9, 13)).substring(2), 16); + const chainCode = hexlify(bytes.slice(13, 45)); + const key = bytes.slice(45, 78); + switch (hexlify(bytes.slice(0, 4))) { + // Public Key + case "0x0488b21e": + case "0x043587cf": { + const publicKey = hexlify(key); + return new HDNodeVoidWallet(_guard, computeAddress(publicKey), publicKey, parentFingerprint, chainCode, null, index, depth, null); + } + // Private Key + case "0x0488ade4": + case "0x04358394 ": + if (key[0] !== 0) { + break; + } + return new HDNodeWallet(_guard, new SigningKey(key.slice(1)), parentFingerprint, chainCode, null, index, depth, null, null); + } + return logger.throwArgumentError("invalid extended key prefix", "extendedKey", "[ REDACTED ]"); + } + static createRandom(password = "", path = defaultPath$1, wordlist = langEn) { + if (!path) { + path = defaultPath$1; + } + const mnemonic = Mnemonic.fromEntropy(randomBytes(16), password, wordlist); + return __classPrivateFieldGet$4(HDNodeWallet, _a, "m", _HDNodeWallet_fromSeed).call(HDNodeWallet, mnemonic.computeSeed(), mnemonic).derivePath(path); + } +} +_a = HDNodeWallet, _HDNodeWallet_fromSeed = function _HDNodeWallet_fromSeed(_seed, mnemonic) { + const seed = logger.getBytes(_seed, "seed"); + if (seed.length < 16 || seed.length > 64) { + throw new Error("invalid seed"); + } + const I = arrayify(computeHmac("sha512", MasterSecret, seed)); + const signingKey = new SigningKey(hexlify(I.slice(0, 32))); + return new HDNodeWallet(_guard, signingKey, "0x00000000", hexlify(I.slice(32)), "m", 0, 0, mnemonic, null); +}; +class HDNodeVoidWallet extends VoidSigner { + constructor(guard, address, publicKey, parentFingerprint, chainCode, path, index, depth, provider) { + super(address, provider); + logger.assertPrivate(guard, _guard, "HDNodeVoidWallet"); + defineProperties(this, { publicKey }); + const fingerprint = dataSlice(ripemd160(sha256(publicKey)), 0, 4); + defineProperties(this, { + publicKey, fingerprint, parentFingerprint, chainCode, path, index, depth + }); + } + connect(provider) { + return new HDNodeVoidWallet(_guard, this.address, this.publicKey, this.parentFingerprint, this.chainCode, this.path, this.index, this.depth, provider); + } + get extendedKey() { + // We only support the mainnet values for now, but if anyone needs + // testnet values, let me know. I believe current sentiment is that + // we should always use mainnet, and use BIP-44 to derive the network + // - Mainnet: public=0x0488B21E, private=0x0488ADE4 + // - Testnet: public=0x043587CF, private=0x04358394 + if (this.depth >= 256) { + throw new Error("Depth too large!"); + } + return encodeBase58Check(concat([ + "0x0488B21E", + zpad(this.depth, 1), + this.parentFingerprint, + zpad(this.index, 4), + this.chainCode, + this.publicKey, + ])); + } + hasPath() { return (this.path != null); } + deriveChild(_index) { + const index = logger.getNumber(_index, "index"); + if (index > 0xffffffff) { + throw new Error("invalid index - " + String(index)); + } + // Base path + let path = this.path; + if (path) { + path += "/" + (index & ~HardenedBit); + if (index & HardenedBit) { + path += "'"; + } + } + const { IR, IL } = ser_I(index, this.chainCode, this.publicKey, null); + const Ki = SigningKey._addPoints(IL, this.publicKey, true); + const address = computeAddress(Ki); + return new HDNodeVoidWallet(_guard, address, Ki, this.fingerprint, hexlify(IR), path, index, this.depth + 1, this.provider); + } + derivePath(path) { + return derivePath(this, path); + } +} +class HDNodeWalletManager { + constructor(phrase, password = "", path = "m/44'/60'/0'/0", locale = langEn) { + _HDNodeWalletManager_root.set(this, void 0); + __classPrivateFieldSet$4(this, _HDNodeWalletManager_root, HDNodeWallet.fromPhrase(phrase, password, path, locale), "f"); + } + getSigner(index = 0) { + return __classPrivateFieldGet$4(this, _HDNodeWalletManager_root, "f").deriveChild(index); + } +} +_HDNodeWalletManager_root = new WeakMap(); +function getAccountPath(_index) { + const index = logger.getNumber(_index, "index"); + if (index < 0 || index >= HardenedBit) { + logger.throwArgumentError("invalid account index", "index", index); + } + return `m/44'/60'/${index}'/0/0`; +} + +/*! MIT License. Copyright 2015-2022 Richard Moore . See LICENSE.txt. */ +var __classPrivateFieldSet$3 = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$3 = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _AES_key, _AES_Kd, _AES_Ke; +// Number of rounds by keysize +const numberOfRounds = { 16: 10, 24: 12, 32: 14 }; +// Round constant words +const rcon = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91]; +// S-box and Inverse S-box (S is for Substitution) +const S = [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16]; +const Si = [0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d]; +// Transformations for encryption +const T1 = [0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a]; +const T2 = [0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616]; +const T3 = [0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16]; +const T4 = [0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c]; +// Transformations for decryption +const T5 = [0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742]; +const T6 = [0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857]; +const T7 = [0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8]; +const T8 = [0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0]; +// Transformations for decryption key expansion +const U1 = [0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3]; +const U2 = [0x00000000, 0x0b0e090d, 0x161c121a, 0x1d121b17, 0x2c382434, 0x27362d39, 0x3a24362e, 0x312a3f23, 0x58704868, 0x537e4165, 0x4e6c5a72, 0x4562537f, 0x74486c5c, 0x7f466551, 0x62547e46, 0x695a774b, 0xb0e090d0, 0xbbee99dd, 0xa6fc82ca, 0xadf28bc7, 0x9cd8b4e4, 0x97d6bde9, 0x8ac4a6fe, 0x81caaff3, 0xe890d8b8, 0xe39ed1b5, 0xfe8ccaa2, 0xf582c3af, 0xc4a8fc8c, 0xcfa6f581, 0xd2b4ee96, 0xd9bae79b, 0x7bdb3bbb, 0x70d532b6, 0x6dc729a1, 0x66c920ac, 0x57e31f8f, 0x5ced1682, 0x41ff0d95, 0x4af10498, 0x23ab73d3, 0x28a57ade, 0x35b761c9, 0x3eb968c4, 0x0f9357e7, 0x049d5eea, 0x198f45fd, 0x12814cf0, 0xcb3bab6b, 0xc035a266, 0xdd27b971, 0xd629b07c, 0xe7038f5f, 0xec0d8652, 0xf11f9d45, 0xfa119448, 0x934be303, 0x9845ea0e, 0x8557f119, 0x8e59f814, 0xbf73c737, 0xb47dce3a, 0xa96fd52d, 0xa261dc20, 0xf6ad766d, 0xfda37f60, 0xe0b16477, 0xebbf6d7a, 0xda955259, 0xd19b5b54, 0xcc894043, 0xc787494e, 0xaedd3e05, 0xa5d33708, 0xb8c12c1f, 0xb3cf2512, 0x82e51a31, 0x89eb133c, 0x94f9082b, 0x9ff70126, 0x464de6bd, 0x4d43efb0, 0x5051f4a7, 0x5b5ffdaa, 0x6a75c289, 0x617bcb84, 0x7c69d093, 0x7767d99e, 0x1e3daed5, 0x1533a7d8, 0x0821bccf, 0x032fb5c2, 0x32058ae1, 0x390b83ec, 0x241998fb, 0x2f1791f6, 0x8d764dd6, 0x867844db, 0x9b6a5fcc, 0x906456c1, 0xa14e69e2, 0xaa4060ef, 0xb7527bf8, 0xbc5c72f5, 0xd50605be, 0xde080cb3, 0xc31a17a4, 0xc8141ea9, 0xf93e218a, 0xf2302887, 0xef223390, 0xe42c3a9d, 0x3d96dd06, 0x3698d40b, 0x2b8acf1c, 0x2084c611, 0x11aef932, 0x1aa0f03f, 0x07b2eb28, 0x0cbce225, 0x65e6956e, 0x6ee89c63, 0x73fa8774, 0x78f48e79, 0x49deb15a, 0x42d0b857, 0x5fc2a340, 0x54ccaa4d, 0xf741ecda, 0xfc4fe5d7, 0xe15dfec0, 0xea53f7cd, 0xdb79c8ee, 0xd077c1e3, 0xcd65daf4, 0xc66bd3f9, 0xaf31a4b2, 0xa43fadbf, 0xb92db6a8, 0xb223bfa5, 0x83098086, 0x8807898b, 0x9515929c, 0x9e1b9b91, 0x47a17c0a, 0x4caf7507, 0x51bd6e10, 0x5ab3671d, 0x6b99583e, 0x60975133, 0x7d854a24, 0x768b4329, 0x1fd13462, 0x14df3d6f, 0x09cd2678, 0x02c32f75, 0x33e91056, 0x38e7195b, 0x25f5024c, 0x2efb0b41, 0x8c9ad761, 0x8794de6c, 0x9a86c57b, 0x9188cc76, 0xa0a2f355, 0xabacfa58, 0xb6bee14f, 0xbdb0e842, 0xd4ea9f09, 0xdfe49604, 0xc2f68d13, 0xc9f8841e, 0xf8d2bb3d, 0xf3dcb230, 0xeecea927, 0xe5c0a02a, 0x3c7a47b1, 0x37744ebc, 0x2a6655ab, 0x21685ca6, 0x10426385, 0x1b4c6a88, 0x065e719f, 0x0d507892, 0x640a0fd9, 0x6f0406d4, 0x72161dc3, 0x791814ce, 0x48322bed, 0x433c22e0, 0x5e2e39f7, 0x552030fa, 0x01ec9ab7, 0x0ae293ba, 0x17f088ad, 0x1cfe81a0, 0x2dd4be83, 0x26dab78e, 0x3bc8ac99, 0x30c6a594, 0x599cd2df, 0x5292dbd2, 0x4f80c0c5, 0x448ec9c8, 0x75a4f6eb, 0x7eaaffe6, 0x63b8e4f1, 0x68b6edfc, 0xb10c0a67, 0xba02036a, 0xa710187d, 0xac1e1170, 0x9d342e53, 0x963a275e, 0x8b283c49, 0x80263544, 0xe97c420f, 0xe2724b02, 0xff605015, 0xf46e5918, 0xc544663b, 0xce4a6f36, 0xd3587421, 0xd8567d2c, 0x7a37a10c, 0x7139a801, 0x6c2bb316, 0x6725ba1b, 0x560f8538, 0x5d018c35, 0x40139722, 0x4b1d9e2f, 0x2247e964, 0x2949e069, 0x345bfb7e, 0x3f55f273, 0x0e7fcd50, 0x0571c45d, 0x1863df4a, 0x136dd647, 0xcad731dc, 0xc1d938d1, 0xdccb23c6, 0xd7c52acb, 0xe6ef15e8, 0xede11ce5, 0xf0f307f2, 0xfbfd0eff, 0x92a779b4, 0x99a970b9, 0x84bb6bae, 0x8fb562a3, 0xbe9f5d80, 0xb591548d, 0xa8834f9a, 0xa38d4697]; +const U3 = [0x00000000, 0x0d0b0e09, 0x1a161c12, 0x171d121b, 0x342c3824, 0x3927362d, 0x2e3a2436, 0x23312a3f, 0x68587048, 0x65537e41, 0x724e6c5a, 0x7f456253, 0x5c74486c, 0x517f4665, 0x4662547e, 0x4b695a77, 0xd0b0e090, 0xddbbee99, 0xcaa6fc82, 0xc7adf28b, 0xe49cd8b4, 0xe997d6bd, 0xfe8ac4a6, 0xf381caaf, 0xb8e890d8, 0xb5e39ed1, 0xa2fe8cca, 0xaff582c3, 0x8cc4a8fc, 0x81cfa6f5, 0x96d2b4ee, 0x9bd9bae7, 0xbb7bdb3b, 0xb670d532, 0xa16dc729, 0xac66c920, 0x8f57e31f, 0x825ced16, 0x9541ff0d, 0x984af104, 0xd323ab73, 0xde28a57a, 0xc935b761, 0xc43eb968, 0xe70f9357, 0xea049d5e, 0xfd198f45, 0xf012814c, 0x6bcb3bab, 0x66c035a2, 0x71dd27b9, 0x7cd629b0, 0x5fe7038f, 0x52ec0d86, 0x45f11f9d, 0x48fa1194, 0x03934be3, 0x0e9845ea, 0x198557f1, 0x148e59f8, 0x37bf73c7, 0x3ab47dce, 0x2da96fd5, 0x20a261dc, 0x6df6ad76, 0x60fda37f, 0x77e0b164, 0x7aebbf6d, 0x59da9552, 0x54d19b5b, 0x43cc8940, 0x4ec78749, 0x05aedd3e, 0x08a5d337, 0x1fb8c12c, 0x12b3cf25, 0x3182e51a, 0x3c89eb13, 0x2b94f908, 0x269ff701, 0xbd464de6, 0xb04d43ef, 0xa75051f4, 0xaa5b5ffd, 0x896a75c2, 0x84617bcb, 0x937c69d0, 0x9e7767d9, 0xd51e3dae, 0xd81533a7, 0xcf0821bc, 0xc2032fb5, 0xe132058a, 0xec390b83, 0xfb241998, 0xf62f1791, 0xd68d764d, 0xdb867844, 0xcc9b6a5f, 0xc1906456, 0xe2a14e69, 0xefaa4060, 0xf8b7527b, 0xf5bc5c72, 0xbed50605, 0xb3de080c, 0xa4c31a17, 0xa9c8141e, 0x8af93e21, 0x87f23028, 0x90ef2233, 0x9de42c3a, 0x063d96dd, 0x0b3698d4, 0x1c2b8acf, 0x112084c6, 0x3211aef9, 0x3f1aa0f0, 0x2807b2eb, 0x250cbce2, 0x6e65e695, 0x636ee89c, 0x7473fa87, 0x7978f48e, 0x5a49deb1, 0x5742d0b8, 0x405fc2a3, 0x4d54ccaa, 0xdaf741ec, 0xd7fc4fe5, 0xc0e15dfe, 0xcdea53f7, 0xeedb79c8, 0xe3d077c1, 0xf4cd65da, 0xf9c66bd3, 0xb2af31a4, 0xbfa43fad, 0xa8b92db6, 0xa5b223bf, 0x86830980, 0x8b880789, 0x9c951592, 0x919e1b9b, 0x0a47a17c, 0x074caf75, 0x1051bd6e, 0x1d5ab367, 0x3e6b9958, 0x33609751, 0x247d854a, 0x29768b43, 0x621fd134, 0x6f14df3d, 0x7809cd26, 0x7502c32f, 0x5633e910, 0x5b38e719, 0x4c25f502, 0x412efb0b, 0x618c9ad7, 0x6c8794de, 0x7b9a86c5, 0x769188cc, 0x55a0a2f3, 0x58abacfa, 0x4fb6bee1, 0x42bdb0e8, 0x09d4ea9f, 0x04dfe496, 0x13c2f68d, 0x1ec9f884, 0x3df8d2bb, 0x30f3dcb2, 0x27eecea9, 0x2ae5c0a0, 0xb13c7a47, 0xbc37744e, 0xab2a6655, 0xa621685c, 0x85104263, 0x881b4c6a, 0x9f065e71, 0x920d5078, 0xd9640a0f, 0xd46f0406, 0xc372161d, 0xce791814, 0xed48322b, 0xe0433c22, 0xf75e2e39, 0xfa552030, 0xb701ec9a, 0xba0ae293, 0xad17f088, 0xa01cfe81, 0x832dd4be, 0x8e26dab7, 0x993bc8ac, 0x9430c6a5, 0xdf599cd2, 0xd25292db, 0xc54f80c0, 0xc8448ec9, 0xeb75a4f6, 0xe67eaaff, 0xf163b8e4, 0xfc68b6ed, 0x67b10c0a, 0x6aba0203, 0x7da71018, 0x70ac1e11, 0x539d342e, 0x5e963a27, 0x498b283c, 0x44802635, 0x0fe97c42, 0x02e2724b, 0x15ff6050, 0x18f46e59, 0x3bc54466, 0x36ce4a6f, 0x21d35874, 0x2cd8567d, 0x0c7a37a1, 0x017139a8, 0x166c2bb3, 0x1b6725ba, 0x38560f85, 0x355d018c, 0x22401397, 0x2f4b1d9e, 0x642247e9, 0x692949e0, 0x7e345bfb, 0x733f55f2, 0x500e7fcd, 0x5d0571c4, 0x4a1863df, 0x47136dd6, 0xdccad731, 0xd1c1d938, 0xc6dccb23, 0xcbd7c52a, 0xe8e6ef15, 0xe5ede11c, 0xf2f0f307, 0xfffbfd0e, 0xb492a779, 0xb999a970, 0xae84bb6b, 0xa38fb562, 0x80be9f5d, 0x8db59154, 0x9aa8834f, 0x97a38d46]; +const U4 = [0x00000000, 0x090d0b0e, 0x121a161c, 0x1b171d12, 0x24342c38, 0x2d392736, 0x362e3a24, 0x3f23312a, 0x48685870, 0x4165537e, 0x5a724e6c, 0x537f4562, 0x6c5c7448, 0x65517f46, 0x7e466254, 0x774b695a, 0x90d0b0e0, 0x99ddbbee, 0x82caa6fc, 0x8bc7adf2, 0xb4e49cd8, 0xbde997d6, 0xa6fe8ac4, 0xaff381ca, 0xd8b8e890, 0xd1b5e39e, 0xcaa2fe8c, 0xc3aff582, 0xfc8cc4a8, 0xf581cfa6, 0xee96d2b4, 0xe79bd9ba, 0x3bbb7bdb, 0x32b670d5, 0x29a16dc7, 0x20ac66c9, 0x1f8f57e3, 0x16825ced, 0x0d9541ff, 0x04984af1, 0x73d323ab, 0x7ade28a5, 0x61c935b7, 0x68c43eb9, 0x57e70f93, 0x5eea049d, 0x45fd198f, 0x4cf01281, 0xab6bcb3b, 0xa266c035, 0xb971dd27, 0xb07cd629, 0x8f5fe703, 0x8652ec0d, 0x9d45f11f, 0x9448fa11, 0xe303934b, 0xea0e9845, 0xf1198557, 0xf8148e59, 0xc737bf73, 0xce3ab47d, 0xd52da96f, 0xdc20a261, 0x766df6ad, 0x7f60fda3, 0x6477e0b1, 0x6d7aebbf, 0x5259da95, 0x5b54d19b, 0x4043cc89, 0x494ec787, 0x3e05aedd, 0x3708a5d3, 0x2c1fb8c1, 0x2512b3cf, 0x1a3182e5, 0x133c89eb, 0x082b94f9, 0x01269ff7, 0xe6bd464d, 0xefb04d43, 0xf4a75051, 0xfdaa5b5f, 0xc2896a75, 0xcb84617b, 0xd0937c69, 0xd99e7767, 0xaed51e3d, 0xa7d81533, 0xbccf0821, 0xb5c2032f, 0x8ae13205, 0x83ec390b, 0x98fb2419, 0x91f62f17, 0x4dd68d76, 0x44db8678, 0x5fcc9b6a, 0x56c19064, 0x69e2a14e, 0x60efaa40, 0x7bf8b752, 0x72f5bc5c, 0x05bed506, 0x0cb3de08, 0x17a4c31a, 0x1ea9c814, 0x218af93e, 0x2887f230, 0x3390ef22, 0x3a9de42c, 0xdd063d96, 0xd40b3698, 0xcf1c2b8a, 0xc6112084, 0xf93211ae, 0xf03f1aa0, 0xeb2807b2, 0xe2250cbc, 0x956e65e6, 0x9c636ee8, 0x877473fa, 0x8e7978f4, 0xb15a49de, 0xb85742d0, 0xa3405fc2, 0xaa4d54cc, 0xecdaf741, 0xe5d7fc4f, 0xfec0e15d, 0xf7cdea53, 0xc8eedb79, 0xc1e3d077, 0xdaf4cd65, 0xd3f9c66b, 0xa4b2af31, 0xadbfa43f, 0xb6a8b92d, 0xbfa5b223, 0x80868309, 0x898b8807, 0x929c9515, 0x9b919e1b, 0x7c0a47a1, 0x75074caf, 0x6e1051bd, 0x671d5ab3, 0x583e6b99, 0x51336097, 0x4a247d85, 0x4329768b, 0x34621fd1, 0x3d6f14df, 0x267809cd, 0x2f7502c3, 0x105633e9, 0x195b38e7, 0x024c25f5, 0x0b412efb, 0xd7618c9a, 0xde6c8794, 0xc57b9a86, 0xcc769188, 0xf355a0a2, 0xfa58abac, 0xe14fb6be, 0xe842bdb0, 0x9f09d4ea, 0x9604dfe4, 0x8d13c2f6, 0x841ec9f8, 0xbb3df8d2, 0xb230f3dc, 0xa927eece, 0xa02ae5c0, 0x47b13c7a, 0x4ebc3774, 0x55ab2a66, 0x5ca62168, 0x63851042, 0x6a881b4c, 0x719f065e, 0x78920d50, 0x0fd9640a, 0x06d46f04, 0x1dc37216, 0x14ce7918, 0x2bed4832, 0x22e0433c, 0x39f75e2e, 0x30fa5520, 0x9ab701ec, 0x93ba0ae2, 0x88ad17f0, 0x81a01cfe, 0xbe832dd4, 0xb78e26da, 0xac993bc8, 0xa59430c6, 0xd2df599c, 0xdbd25292, 0xc0c54f80, 0xc9c8448e, 0xf6eb75a4, 0xffe67eaa, 0xe4f163b8, 0xedfc68b6, 0x0a67b10c, 0x036aba02, 0x187da710, 0x1170ac1e, 0x2e539d34, 0x275e963a, 0x3c498b28, 0x35448026, 0x420fe97c, 0x4b02e272, 0x5015ff60, 0x5918f46e, 0x663bc544, 0x6f36ce4a, 0x7421d358, 0x7d2cd856, 0xa10c7a37, 0xa8017139, 0xb3166c2b, 0xba1b6725, 0x8538560f, 0x8c355d01, 0x97224013, 0x9e2f4b1d, 0xe9642247, 0xe0692949, 0xfb7e345b, 0xf2733f55, 0xcd500e7f, 0xc45d0571, 0xdf4a1863, 0xd647136d, 0x31dccad7, 0x38d1c1d9, 0x23c6dccb, 0x2acbd7c5, 0x15e8e6ef, 0x1ce5ede1, 0x07f2f0f3, 0x0efffbfd, 0x79b492a7, 0x70b999a9, 0x6bae84bb, 0x62a38fb5, 0x5d80be9f, 0x548db591, 0x4f9aa883, 0x4697a38d]; +function convertToInt32(bytes) { + const result = []; + for (let i = 0; i < bytes.length; i += 4) { + result.push((bytes[i] << 24) | (bytes[i + 1] << 16) | (bytes[i + 2] << 8) | bytes[i + 3]); + } + return result; +} +class AES { + constructor(key) { + _AES_key.set(this, void 0); + _AES_Kd.set(this, void 0); + _AES_Ke.set(this, void 0); + if (!(this instanceof AES)) { + throw Error('AES must be instanitated with `new`'); + } + __classPrivateFieldSet$3(this, _AES_key, new Uint8Array(key), "f"); + const rounds = numberOfRounds[this.key.length]; + if (rounds == null) { + throw new TypeError('invalid key size (must be 16, 24 or 32 bytes)'); + } + // encryption round keys + __classPrivateFieldSet$3(this, _AES_Ke, [], "f"); + // decryption round keys + __classPrivateFieldSet$3(this, _AES_Kd, [], "f"); + for (let i = 0; i <= rounds; i++) { + __classPrivateFieldGet$3(this, _AES_Ke, "f").push([0, 0, 0, 0]); + __classPrivateFieldGet$3(this, _AES_Kd, "f").push([0, 0, 0, 0]); + } + const roundKeyCount = (rounds + 1) * 4; + const KC = this.key.length / 4; + // convert the key into ints + const tk = convertToInt32(this.key); + // copy values into round key arrays + let index; + for (let i = 0; i < KC; i++) { + index = i >> 2; + __classPrivateFieldGet$3(this, _AES_Ke, "f")[index][i % 4] = tk[i]; + __classPrivateFieldGet$3(this, _AES_Kd, "f")[rounds - index][i % 4] = tk[i]; + } + // key expansion (fips-197 section 5.2) + let rconpointer = 0; + let t = KC, tt; + while (t < roundKeyCount) { + tt = tk[KC - 1]; + tk[0] ^= ((S[(tt >> 16) & 0xFF] << 24) ^ + (S[(tt >> 8) & 0xFF] << 16) ^ + (S[tt & 0xFF] << 8) ^ + S[(tt >> 24) & 0xFF] ^ + (rcon[rconpointer] << 24)); + rconpointer += 1; + // key expansion (for non-256 bit) + if (KC != 8) { + for (let i = 1; i < KC; i++) { + tk[i] ^= tk[i - 1]; + } + // key expansion for 256-bit keys is "slightly different" (fips-197) + } + else { + for (let i = 1; i < (KC / 2); i++) { + tk[i] ^= tk[i - 1]; + } + tt = tk[(KC / 2) - 1]; + tk[KC / 2] ^= (S[tt & 0xFF] ^ + (S[(tt >> 8) & 0xFF] << 8) ^ + (S[(tt >> 16) & 0xFF] << 16) ^ + (S[(tt >> 24) & 0xFF] << 24)); + for (let i = (KC / 2) + 1; i < KC; i++) { + tk[i] ^= tk[i - 1]; + } + } + // copy values into round key arrays + let i = 0, r, c; + while (i < KC && t < roundKeyCount) { + r = t >> 2; + c = t % 4; + __classPrivateFieldGet$3(this, _AES_Ke, "f")[r][c] = tk[i]; + __classPrivateFieldGet$3(this, _AES_Kd, "f")[rounds - r][c] = tk[i++]; + t++; + } + } + // inverse-cipher-ify the decryption round key (fips-197 section 5.3) + for (let r = 1; r < rounds; r++) { + for (let c = 0; c < 4; c++) { + tt = __classPrivateFieldGet$3(this, _AES_Kd, "f")[r][c]; + __classPrivateFieldGet$3(this, _AES_Kd, "f")[r][c] = (U1[(tt >> 24) & 0xFF] ^ + U2[(tt >> 16) & 0xFF] ^ + U3[(tt >> 8) & 0xFF] ^ + U4[tt & 0xFF]); + } + } + } + get key() { return __classPrivateFieldGet$3(this, _AES_key, "f").slice(); } + encrypt(plaintext) { + if (plaintext.length != 16) { + throw new TypeError('invalid plaintext size (must be 16 bytes)'); + } + const rounds = __classPrivateFieldGet$3(this, _AES_Ke, "f").length - 1; + const a = [0, 0, 0, 0]; + // convert plaintext to (ints ^ key) + let t = convertToInt32(plaintext); + for (let i = 0; i < 4; i++) { + t[i] ^= __classPrivateFieldGet$3(this, _AES_Ke, "f")[0][i]; + } + // apply round transforms + for (let r = 1; r < rounds; r++) { + for (let i = 0; i < 4; i++) { + a[i] = (T1[(t[i] >> 24) & 0xff] ^ + T2[(t[(i + 1) % 4] >> 16) & 0xff] ^ + T3[(t[(i + 2) % 4] >> 8) & 0xff] ^ + T4[t[(i + 3) % 4] & 0xff] ^ + __classPrivateFieldGet$3(this, _AES_Ke, "f")[r][i]); + } + t = a.slice(); + } + // the last round is special + const result = new Uint8Array(16); + let tt = 0; + for (let i = 0; i < 4; i++) { + tt = __classPrivateFieldGet$3(this, _AES_Ke, "f")[rounds][i]; + result[4 * i] = (S[(t[i] >> 24) & 0xff] ^ (tt >> 24)) & 0xff; + result[4 * i + 1] = (S[(t[(i + 1) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff; + result[4 * i + 2] = (S[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff; + result[4 * i + 3] = (S[t[(i + 3) % 4] & 0xff] ^ tt) & 0xff; + } + return result; + } + decrypt(ciphertext) { + if (ciphertext.length != 16) { + throw new TypeError('invalid ciphertext size (must be 16 bytes)'); + } + const rounds = __classPrivateFieldGet$3(this, _AES_Kd, "f").length - 1; + const a = [0, 0, 0, 0]; + // convert plaintext to (ints ^ key) + let t = convertToInt32(ciphertext); + for (let i = 0; i < 4; i++) { + t[i] ^= __classPrivateFieldGet$3(this, _AES_Kd, "f")[0][i]; + } + // apply round transforms + for (let r = 1; r < rounds; r++) { + for (let i = 0; i < 4; i++) { + a[i] = (T5[(t[i] >> 24) & 0xff] ^ + T6[(t[(i + 3) % 4] >> 16) & 0xff] ^ + T7[(t[(i + 2) % 4] >> 8) & 0xff] ^ + T8[t[(i + 1) % 4] & 0xff] ^ + __classPrivateFieldGet$3(this, _AES_Kd, "f")[r][i]); + } + t = a.slice(); + } + // the last round is special + const result = new Uint8Array(16); + let tt = 0; + for (let i = 0; i < 4; i++) { + tt = __classPrivateFieldGet$3(this, _AES_Kd, "f")[rounds][i]; + result[4 * i] = (Si[(t[i] >> 24) & 0xff] ^ (tt >> 24)) & 0xff; + result[4 * i + 1] = (Si[(t[(i + 3) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff; + result[4 * i + 2] = (Si[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff; + result[4 * i + 3] = (Si[t[(i + 1) % 4] & 0xff] ^ tt) & 0xff; + } + return result; + } +} +_AES_key = new WeakMap(), _AES_Kd = new WeakMap(), _AES_Ke = new WeakMap(); + +class ModeOfOperation { + constructor(name, key, cls) { + if (cls && !(this instanceof cls)) { + throw new Error(`${name} must be instantiated with "new"`); + } + Object.defineProperties(this, { + aes: { enumerable: true, value: new AES(key) }, + name: { enumerable: true, value: name } + }); + } +} + +// Cipher Block Chaining +var __classPrivateFieldSet$2 = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$2 = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _CBC_iv, _CBC_lastBlock; +class CBC extends ModeOfOperation { + constructor(key, iv) { + super("ECC", key, CBC); + _CBC_iv.set(this, void 0); + _CBC_lastBlock.set(this, void 0); + if (iv) { + if (iv.length % 16) { + throw new TypeError("invalid iv size (must be 16 bytes)"); + } + __classPrivateFieldSet$2(this, _CBC_iv, new Uint8Array(iv), "f"); + } + else { + __classPrivateFieldSet$2(this, _CBC_iv, new Uint8Array(16), "f"); + } + __classPrivateFieldSet$2(this, _CBC_lastBlock, this.iv, "f"); + } + get iv() { return new Uint8Array(__classPrivateFieldGet$2(this, _CBC_iv, "f")); } + encrypt(plaintext) { + if (plaintext.length % 16) { + throw new TypeError("invalid plaintext size (must be multiple of 16 bytes)"); + } + const ciphertext = new Uint8Array(plaintext.length); + for (let i = 0; i < plaintext.length; i += 16) { + for (let j = 0; j < 16; j++) { + __classPrivateFieldGet$2(this, _CBC_lastBlock, "f")[j] ^= plaintext[i + j]; + } + __classPrivateFieldSet$2(this, _CBC_lastBlock, this.aes.encrypt(__classPrivateFieldGet$2(this, _CBC_lastBlock, "f")), "f"); + ciphertext.set(__classPrivateFieldGet$2(this, _CBC_lastBlock, "f"), i); + } + return ciphertext; + } + decrypt(ciphertext) { + if (ciphertext.length % 16) { + throw new TypeError("invalid ciphertext size (must be multiple of 16 bytes)"); + } + const plaintext = new Uint8Array(ciphertext.length); + for (let i = 0; i < ciphertext.length; i += 16) { + const block = this.aes.decrypt(ciphertext.subarray(i, i + 16)); + for (let j = 0; j < 16; j++) { + plaintext[i + j] = block[j] ^ __classPrivateFieldGet$2(this, _CBC_lastBlock, "f")[j]; + __classPrivateFieldGet$2(this, _CBC_lastBlock, "f")[j] = ciphertext[i + j]; + } + } + return plaintext; + } +} +_CBC_iv = new WeakMap(), _CBC_lastBlock = new WeakMap(); + +// Cipher Feedback +(window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +(window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; + +// Counter Mode +var __classPrivateFieldSet$1 = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet$1 = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _CTR_remaining, _CTR_remainingIndex, _CTR_counter; +class CTR extends ModeOfOperation { + constructor(key, initialValue) { + super("CTR", key, CTR); + // Remaining bytes for the one-time pad + _CTR_remaining.set(this, void 0); + _CTR_remainingIndex.set(this, void 0); + // The current counter + _CTR_counter.set(this, void 0); + __classPrivateFieldSet$1(this, _CTR_counter, new Uint8Array(16), "f"); + __classPrivateFieldGet$1(this, _CTR_counter, "f").fill(0); + __classPrivateFieldSet$1(this, _CTR_remaining, __classPrivateFieldGet$1(this, _CTR_counter, "f"), "f"); // This will be discarded immediately + __classPrivateFieldSet$1(this, _CTR_remainingIndex, 16, "f"); + if (initialValue == null) { + initialValue = 1; + } + if (typeof (initialValue) === "number") { + this.setCounterValue(initialValue); + } + else { + this.setCounterBytes(initialValue); + } + } + get counter() { return new Uint8Array(__classPrivateFieldGet$1(this, _CTR_counter, "f")); } + setCounterValue(value) { + if (!Number.isInteger(value) || value < 0 || value > Number.MAX_SAFE_INTEGER) { + throw new TypeError("invalid counter initial integer value"); + } + for (let index = 15; index >= 0; --index) { + __classPrivateFieldGet$1(this, _CTR_counter, "f")[index] = value % 256; + value = Math.floor(value / 256); + } + } + setCounterBytes(value) { + if (value.length !== 16) { + throw new TypeError("invalid counter initial Uint8Array value length"); + } + __classPrivateFieldGet$1(this, _CTR_counter, "f").set(value); + } + increment() { + for (let i = 15; i >= 0; i--) { + if (__classPrivateFieldGet$1(this, _CTR_counter, "f")[i] === 255) { + __classPrivateFieldGet$1(this, _CTR_counter, "f")[i] = 0; + } + else { + __classPrivateFieldGet$1(this, _CTR_counter, "f")[i]++; + break; + } + } + } + encrypt(plaintext) { + var _a, _b; + const crypttext = new Uint8Array(plaintext); + for (let i = 0; i < crypttext.length; i++) { + if (__classPrivateFieldGet$1(this, _CTR_remainingIndex, "f") === 16) { + __classPrivateFieldSet$1(this, _CTR_remaining, this.aes.encrypt(__classPrivateFieldGet$1(this, _CTR_counter, "f")), "f"); + __classPrivateFieldSet$1(this, _CTR_remainingIndex, 0, "f"); + this.increment(); + } + crypttext[i] ^= __classPrivateFieldGet$1(this, _CTR_remaining, "f")[__classPrivateFieldSet$1(this, _CTR_remainingIndex, (_b = __classPrivateFieldGet$1(this, _CTR_remainingIndex, "f"), _a = _b++, _b), "f"), _a]; + } + return crypttext; + } + decrypt(ciphertext) { + return this.encrypt(ciphertext); + } +} +_CTR_remaining = new WeakMap(), _CTR_remainingIndex = new WeakMap(), _CTR_counter = new WeakMap(); + +// Output Feedback +(window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +(window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; + +function pkcs7Strip(data) { + if (data.length < 16) { + throw new TypeError('PKCS#7 invalid length'); + } + const padder = data[data.length - 1]; + if (padder > 16) { + throw new TypeError('PKCS#7 padding byte out of range'); + } + const length = data.length - padder; + for (let i = 0; i < padder; i++) { + if (data[length + i] !== padder) { + throw new TypeError('PKCS#7 invalid padding byte'); + } + } + return new Uint8Array(data.subarray(0, length)); +} + +function looseArrayify(hexString) { + if (typeof (hexString) === 'string' && hexString.substring(0, 2) !== '0x') { + hexString = '0x' + hexString; + } + return arrayify(hexString); +} +function getPassword(password) { + if (typeof (password) === 'string') { + return toUtf8Bytes(password, UnicodeNormalizationForm.NFKC); + } + return arrayify(password); +} +function spelunk(object, _path) { + const match = _path.match(/^([a-z0-9$_.-]*)(:([a-z]+))?(!)?$/i); + if (match == null) { + return logger.throwArgumentError("invalid path", "path", _path); + } + const path = match[1]; + const type = match[3]; + const reqd = (match[4] === "!"); + let cur = object; + for (const comp of path.toLowerCase().split('.')) { + // Search for a child object with a case-insensitive matching key + if (Array.isArray(cur)) { + if (!comp.match(/^[0-9]+$/)) { + break; + } + cur = cur[parseInt(comp)]; + } + else if (typeof (cur) === "object") { + let found = null; + for (const key in cur) { + if (key.toLowerCase() === comp) { + found = cur[key]; + break; + } + } + cur = found; + } + else { + cur = null; + } + if (cur == null) { + break; + } + } + if (reqd && cur == null) { + logger.throwArgumentError("missing required value", "path", path); + } + if (type && cur != null) { + if (type === "int") { + if (typeof (cur) === "string" && cur.match(/^-?[0-9]+$/)) { + return parseInt(cur); + } + else if (Number.isSafeInteger(cur)) { + return cur; + } + } + if (type === "number") { + if (typeof (cur) === "string" && cur.match(/^-?[0-9.]*$/)) { + return parseFloat(cur); + } + } + if (type === "data") { + if (typeof (cur) === "string") { + return looseArrayify(cur); + } + } + if (type === "array" && Array.isArray(cur)) { + return cur; + } + if (type === typeof (cur)) { + return cur; + } + logger.throwArgumentError(`wrong type found for ${type} `, "path", path); + } + return cur; +} + +function isCrowdsaleJson(json) { + try { + const data = JSON.parse(json); + if (data.encseed) { + return true; + } + } + catch (error) { } + return false; +} +// See: https://github.com/ethereum/pyethsaletool +function decryptCrowdsaleJson(json, _password) { + const data = JSON.parse(json); + const password = getPassword(_password); + // Ethereum Address + const address = getAddress(spelunk(data, "ethaddr:string!")); + // Encrypted Seed + const encseed = looseArrayify(spelunk(data, "encseed:string!")); + if (!encseed || (encseed.length % 16) !== 0) { + logger.throwArgumentError("invalid encseed", "json", json); + } + const key = arrayify(pbkdf2(password, password, 2000, 32, "sha256")).slice(0, 16); + const iv = encseed.slice(0, 16); + const encryptedSeed = encseed.slice(16); + // Decrypt the seed + const aesCbc = new CBC(key, iv); + const seed = pkcs7Strip(arrayify(aesCbc.decrypt(encryptedSeed))); + // This wallet format is weird... Convert the binary encoded hex to a string. + let seedHex = ""; + for (let i = 0; i < seed.length; i++) { + seedHex += String.fromCharCode(seed[i]); + } + return { address, privateKey: id(seedHex) }; +} + +const defaultPath = "m/44'/60'/0'/0/0"; +function isKeystoreJson(json) { + try { + const data = JSON.parse(json); + const version = ((data.version != null) ? parseInt(data.version) : 0); + if (version === 3) { + return true; + } + } + catch (error) { } + return false; +} +function decrypt(data, key, ciphertext) { + const cipher = spelunk(data, "crypto.cipher:string"); + if (cipher === "aes-128-ctr") { + const iv = spelunk(data, "crypto.cipherparams.iv:data!"); + const aesCtr = new CTR(key, iv); + return hexlify(aesCtr.decrypt(ciphertext)); + } + return logger.throwError("unsupported cipher", "UNSUPPORTED_OPERATION", { + operation: "decrypt" + }); +} +function getAccount(data, _key) { + const key = logger.getBytes(_key); + const ciphertext = spelunk(data, "crypto.ciphertext:data!"); + const computedMAC = hexlify(keccak256(concat([key.slice(16, 32), ciphertext]))).substring(2); + if (computedMAC !== spelunk(data, "crypto.mac:string!").toLowerCase()) { + return logger.throwArgumentError("incorrect password", "password", "[ REDACTED ]"); + } + const privateKey = decrypt(data, key.slice(0, 16), ciphertext); + const address = computeAddress(privateKey); + if (data.address) { + let check = data.address.toLowerCase(); + if (check.substring(0, 2) !== "0x") { + check = "0x" + check; + } + if (getAddress(check) !== address) { + logger.throwArgumentError("keystore address/privateKey mismatch", "address", data.address); + } + } + const account = { address, privateKey }; + // Version 0.1 x-ethers metadata must contain an encrypted mnemonic phrase + const version = spelunk(data, "x-ethers.version:string"); + if (version === "0.1") { + const mnemonicKey = key.slice(32, 64); + const mnemonicCiphertext = spelunk(data, "x-ethers.mnemonicCiphertext:data!"); + const mnemonicIv = spelunk(data, "x-ethers.mnemonicCounter:data!"); + const mnemonicAesCtr = new CTR(mnemonicKey, mnemonicIv); + account.mnemonic = { + path: (spelunk(data, "x-ethers.path:string") || defaultPath), + locale: (spelunk(data, "x-ethers.locale:string") || "en"), + entropy: hexlify(arrayify(mnemonicAesCtr.decrypt(mnemonicCiphertext))) + }; + } + return account; +} +function getKdfParams(data) { + const kdf = spelunk(data, "crypto.kdf:string"); + if (kdf && typeof (kdf) === "string") { + const throwError = function (name, value) { + return logger.throwArgumentError("invalid key-derivation function parameters", name, value); + }; + if (kdf.toLowerCase() === "scrypt") { + const salt = spelunk(data, "crypto.kdfparams.salt:data!"); + const N = spelunk(data, "crypto.kdfparams.n:int!"); + const r = spelunk(data, "crypto.kdfparams.r:int!"); + const p = spelunk(data, "crypto.kdfparams.p:int!"); + // Check for all required parameters + if (!N || !r || !p) { + return throwError("kdf", kdf); + } + // Make sure N is a power of 2 + if ((N & (N - 1)) !== 0) { + return throwError("N", N); + } + const dkLen = spelunk(data, "crypto.kdfparams.dklen:int!"); + if (dkLen !== 32) { + return throwError("dklen", dkLen); + } + return { name: "scrypt", salt, N, r, p, dkLen: 64 }; + } + else if (kdf.toLowerCase() === "pbkdf2") { + const salt = spelunk(data, "crypto.kdfparams.salt:data!"); + const prf = spelunk(data, "crypto.kdfparams.prf:string!"); + const algorithm = prf.split("-").pop(); + if (algorithm !== "sha256" && algorithm !== "sha512") { + return throwError("prf", prf); + } + const count = spelunk(data, "crypto.kdfparams.c:int!"); + const dkLen = spelunk(data, "crypto.kdfparams.dklen:int!"); + if (dkLen !== 32) { + throwError("dklen", dkLen); + } + return { name: "pbkdf2", salt, count, dkLen, algorithm }; + } + } + return logger.throwArgumentError("unsupported key-derivation function", "kdf", kdf); +} +function decryptKeystoreJsonSync(json, _password) { + const data = JSON.parse(json); + const password = getPassword(_password); + const params = getKdfParams(data); + if (params.name === "pbkdf2") { + const { salt, count, dkLen, algorithm } = params; + const key = pbkdf2(password, salt, count, dkLen, algorithm); + return getAccount(data, key); + } + else if (params.name === "scrypt") { + const { salt, N, r, p, dkLen } = params; + const key = scryptSync(password, salt, N, r, p, dkLen); + return getAccount(data, key); + } + throw new Error("unreachable"); +} +function stall$1(duration) { + return new Promise((resolve) => { setTimeout(() => { resolve(); }, duration); }); +} +async function decryptKeystoreJson(json, _password, progress) { + const data = JSON.parse(json); + const password = getPassword(_password); + const params = getKdfParams(data); + if (params.name === "pbkdf2") { + if (progress) { + progress(0); + await stall$1(0); + } + const { salt, count, dkLen, algorithm } = params; + const key = pbkdf2(password, salt, count, dkLen, algorithm); + if (progress) { + progress(1); + await stall$1(0); + } + return getAccount(data, key); + } + else if (params.name === "scrypt") { + const { salt, N, r, p, dkLen } = params; + const key = await scrypt(password, salt, N, r, p, dkLen, progress); + return getAccount(data, key); + } + throw new Error("unreachable"); +} + +var __classPrivateFieldSet = (window && window.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet = (window && window.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _Wallet_mnemonic; +function tryWallet(value) { + try { + if (!value || !value.signingKey) { + return null; + } + const key = trySigningKey(value.signingKey); + if (key == null || computeAddress(key.publicKey) !== value.address) { + return null; + } + if (value.mnemonic) { + const wallet = HDNodeWallet.fromMnemonic(value.mnemonic); + if (wallet.privateKey !== key.privateKey) { + return null; + } + } + return value; + } + catch (e) { + console.log(e); + } + return null; +} +// Try using value as mnemonic to derive the defaultPath HDodeWallet +function tryMnemonic(value) { + try { + if (value == null || typeof (value.phrase) !== "string" || + typeof (value.password) !== "string" || + value.wordlist == null) { + return null; + } + return HDNodeWallet.fromPhrase(value.phrase, value.password, null, value.wordlist); + } + catch (error) { + console.log(error); + } + return null; +} +function trySigningKey(value) { + try { + if (!value || !isHexString(value.privateKey, 32)) { + return null; + } + const key = value.privateKey; + if (SigningKey.computePublicKey(key) !== value.publicKey) { + return null; + } + return new SigningKey(key); + } + catch (e) { + console.log(e); + } + return null; +} +function stall(duration) { + return new Promise((resolve) => { setTimeout(() => { resolve(); }, duration); }); +} +class Wallet extends BaseWallet { + constructor(key, provider) { + let signingKey = null; + let mnemonic = null; + // A normal private key + if (typeof (key) === "string") { + signingKey = new SigningKey(key); + } + // Try Wallet + if (signingKey == null) { + const wallet = tryWallet(key); + if (wallet) { + signingKey = wallet.signingKey; + mnemonic = wallet.mnemonic || null; + } + } + // Try Mnemonic, with the defaultPath wallet + if (signingKey == null) { + const wallet = tryMnemonic(key); + if (wallet) { + signingKey = wallet.signingKey; + mnemonic = wallet.mnemonic || null; + } + } + // A signing key + if (signingKey == null) { + signingKey = trySigningKey(key); + } + if (signingKey == null) { + logger.throwArgumentError("invalid key", "key", "[ REDACTED ]"); + } + super(signingKey, provider); + _Wallet_mnemonic.set(this, void 0); + __classPrivateFieldSet(this, _Wallet_mnemonic, mnemonic, "f"); + } + // Store this in a getter to reduce visibility in console.log + get mnemonic() { return __classPrivateFieldGet(this, _Wallet_mnemonic, "f"); } + connect(provider) { + return new Wallet(this, provider); + } + async encrypt(password, options, progressCallback) { + throw new Error("TODO"); + } + encryptSync(password, options) { + throw new Error("TODO"); + } + static async fromEncryptedJson(json, password, progress) { + let account = null; + if (isKeystoreJson(json)) { + account = await decryptKeystoreJson(json, password, progress); + } + else if (isCrowdsaleJson(json)) { + if (progress) { + progress(0); + await stall(0); + } + account = decryptCrowdsaleJson(json, password); + if (progress) { + progress(1); + await stall(0); + } + } + else { + return logger.throwArgumentError("invalid JSON wallet", "json", "[ REDACTED ]"); + } + const wallet = new Wallet(account.privateKey); + if (wallet.address !== account.address) { + logger.throwArgumentError("address/privateKey mismatch", "json", "[ REDACTED ]"); + } + // @TODO: mnemonic + return wallet; + } + static fromEncryptedJsonSync(json, password) { + let account = null; + if (isKeystoreJson(json)) { + account = decryptKeystoreJsonSync(json, password); + } + else if (isCrowdsaleJson(json)) { + account = decryptCrowdsaleJson(json, password); + } + else { + return logger.throwArgumentError("invalid JSON wallet", "json", "[ REDACTED ]"); + } + const wallet = new Wallet(account.privateKey); + if (wallet.address !== account.address) { + logger.throwArgumentError("address/privateKey mismatch", "json", "[ REDACTED ]"); + } + // @TODO: mnemonic + return wallet; + } + static createRandom(provider, password, wordlist) { + return new Wallet(Mnemonic.fromEntropy(randomBytes(16), password, wordlist), provider); + } + static fromMnemonic(mnemonic, provider) { + return new Wallet(mnemonic, provider); + } + static fromPhrase(phrase, provider, password = "", wordlist) { + return new Wallet(Mnemonic.fromPhrase(phrase, password, wordlist), provider); + } +} +_Wallet_mnemonic = new WeakMap(); + +const version = "ethers@6.0.0-beta.1"; + +var ethers = /*#__PURE__*/Object.freeze({ + __proto__: null, + Interface: Interface, + getAddress: getAddress, + getIcapAddress: getIcapAddress, + getCreateAddress: getCreateAddress, + getCreate2Address: getCreate2Address, + isAddressable: isAddressable, + isAddress: isAddress, + resolveAddress: resolveAddress, + arrayify: arrayify, + decodeBase64: decodeBase64, + encodeBase64: encodeBase64, + isHexString: isHexString, + isBytesLike: isBytesLike, + concat: concat, + dataLength: dataLength, + dataSlice: dataSlice, + stripZerosLeft: stripZerosLeft, + hexlify: hexlify, + quantity: quantity, + zeroPadLeft: zeroPadLeft, + zeroPadRight: zeroPadRight, + BaseContract: BaseContract, + Contract: Contract, + ContractEventPayload: ContractEventPayload, + ContractTransactionReceipt: ContractTransactionReceipt, + ContractTransactionResponse: ContractTransactionResponse, + EventLog: EventLog, + computeHmac: computeHmac, + keccak256: keccak256, + ripemd160: ripemd160, + sha256: sha256, + sha512: sha512, + pbkdf2: pbkdf2, + scrypt: scrypt, + scryptSync: scryptSync, + randomBytes: randomBytes, + lock: lock, + id: id, + isValidName: isValidName, + namehash: namehash, + dnsEncode: dnsEncode, + messagePrefix: messagePrefix, + hashMessage: hashMessage, + TypedDataEncoder: TypedDataEncoder, + FixedFormat: FixedFormat, + FixedNumber: FixedNumber, + formatFixed: formatFixed, + parseFixed: parseFixed, + fromTwos: fromTwos, + toTwos: toTwos, + mask: mask, + toArray: toArray, + toBigInt: toBigInt, + toHex: toHex, + toNumber: toNumber, + decodeBase58: decodeBase58, + encodeBase58: encodeBase58, + defineProperties: defineProperties, + resolveProperties: resolveProperties, + getStore: getStore, + setStore: setStore, + AbstractProvider: AbstractProvider, + UnmanagedSubscriber: UnmanagedSubscriber, + AbstractSigner: AbstractSigner, + VoidSigner: VoidSigner, + WrappedSigner: WrappedSigner, + showThrottleMessage: showThrottleMessage, + EnsResolver: EnsResolver, + Formatter: Formatter, + NetworkPlugin: NetworkPlugin, + GasCostPlugin: GasCostPlugin, + EnsPlugin: EnsPlugin, + MaxPriorityFeePlugin: MaxPriorityFeePlugin, + Network: Network, + Block: Block, + FeeData: FeeData, + Log: Log, + TransactionReceipt: TransactionReceipt, + TransactionResponse: TransactionResponse, + dummyProvider: dummyProvider, + FallbackProvider: FallbackProvider, + JsonRpcProvider: JsonRpcProvider, + JsonRpcSigner: JsonRpcSigner, + StaticJsonRpcProvider: StaticJsonRpcProvider, + AlchemyProvider: AlchemyProvider, + AnkrProvider: AnkrProvider, + CloudflareProvider: CloudflareProvider, + EtherscanProvider: EtherscanProvider, + InfuraProvider: InfuraProvider, + PocketProvider: PocketProvider, + IpcSocketProvider: IpcSocketProvider, + SocketProvider: SocketProvider, + WebSocketProvider: WebSocketProvider, + encodeRlp: encodeRlp, + decodeRlp: decodeRlp, + Signature: Signature$1, + SigningKey: SigningKey, + formatBytes32String: formatBytes32String, + parseBytes32String: parseBytes32String, + nameprep: nameprep, + _toEscapedUtf8String: _toEscapedUtf8String, + toUtf8Bytes: toUtf8Bytes, + toUtf8CodePoints: toUtf8CodePoints, + toUtf8String: toUtf8String, + get UnicodeNormalizationForm () { return UnicodeNormalizationForm; }, + Utf8ErrorFuncs: Utf8ErrorFuncs, + get Utf8ErrorReason () { return Utf8ErrorReason; }, + Transaction: Transaction, + computeAddress: computeAddress, + defaultPath: defaultPath$1, + getAccountPath: getAccountPath, + HDNodeWallet: HDNodeWallet, + HDNodeVoidWallet: HDNodeVoidWallet, + HDNodeWalletManager: HDNodeWalletManager, + Mnemonic: Mnemonic, + Wallet: Wallet, + fetchData: fetchData, + FetchRequest: FetchRequest, + FetchResponse: FetchResponse, + Wordlist: Wordlist, + WordlistOwl: WordlistOwl, + WordlistOwlA: WordlistOwlA, + wordlists: wordlists, + version: version +}); + +export { AbstractProvider, AbstractSigner, AlchemyProvider, AnkrProvider, BaseContract, Block, CloudflareProvider, Contract, ContractEventPayload, ContractTransactionReceipt, ContractTransactionResponse, EnsPlugin, EnsResolver, EtherscanProvider, EventLog, FallbackProvider, FeeData, FetchRequest, FetchResponse, FixedFormat, FixedNumber, Formatter, GasCostPlugin, HDNodeVoidWallet, HDNodeWallet, HDNodeWalletManager, InfuraProvider, Interface, IpcSocketProvider, JsonRpcProvider, JsonRpcSigner, Log, MaxPriorityFeePlugin, Mnemonic, Network, NetworkPlugin, PocketProvider, Signature$1 as Signature, SigningKey, SocketProvider, StaticJsonRpcProvider, Transaction, TransactionReceipt, TransactionResponse, TypedDataEncoder, UnicodeNormalizationForm, UnmanagedSubscriber, Utf8ErrorFuncs, Utf8ErrorReason, VoidSigner, Wallet, WebSocketProvider, Wordlist, WordlistOwl, WordlistOwlA, WrappedSigner, _toEscapedUtf8String, arrayify, computeAddress, computeHmac, concat, dataLength, dataSlice, decodeBase58, decodeBase64, decodeRlp, defaultPath$1 as defaultPath, defineProperties, dnsEncode, dummyProvider, encodeBase58, encodeBase64, encodeRlp, ethers, fetchData, formatBytes32String, formatFixed, fromTwos, getAccountPath, getAddress, getCreate2Address, getCreateAddress, getIcapAddress, getStore, hashMessage, hexlify, id, isAddress, isAddressable, isBytesLike, isHexString, isValidName, keccak256, lock, mask, messagePrefix, namehash, nameprep, parseBytes32String, parseFixed, pbkdf2, quantity, randomBytes, resolveAddress, resolveProperties, ripemd160, scrypt, scryptSync, setStore, sha256, sha512, showThrottleMessage, stripZerosLeft, toArray, toBigInt, toHex, toNumber, toTwos, toUtf8Bytes, toUtf8CodePoints, toUtf8String, version, wordlists, zeroPadLeft, zeroPadRight }; +//# sourceMappingURL=ethers.js.map diff --git a/packages/ethers/dist/ethers.js.map b/packages/ethers/dist/ethers.js.map new file mode 100644 index 000000000..fa0cab7f0 --- /dev/null +++ b/packages/ethers/dist/ethers.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ethers.js","sources":["../../properties/lib/properties.js","../../properties/lib/events.js","../../properties/lib/storage.js","../../logger/lib/errors.js","../../logger/lib/_version.js","../../logger/lib/logger.js","../../abi/lib/_version.js","../../abi/lib/logger.js","../../abi/lib/fragments.js","../../math/lib/_version.js","../../math/lib/logger.js","../../math/lib/convert.js","../../math/lib/maths.js","../../math/lib/fixednumber.js","../../math/lib/base58.js","../../bytes/lib/check.js","../../bytes/lib/_version.js","../../bytes/lib/logger.js","../../bytes/lib/array.js","../../bytes/lib/base64.js","../../bytes/lib/hex.js","../../bytes/lib/data.js","../../bytes/lib/pad.js","../../abi/lib/coders/abstract-coder.js","../../../node_modules/@noble/hashes/esm/utils.js","../../../node_modules/@noble/hashes/esm/hmac.js","../../../node_modules/@noble/hashes/esm/pbkdf2.js","../../../node_modules/@noble/hashes/esm/_sha2.js","../../../node_modules/@noble/hashes/esm/sha256.js","../../../node_modules/@noble/hashes/esm/_u64.js","../../../node_modules/@noble/hashes/esm/sha512.js","../../crypto/lib/_version.js","../../crypto/lib/logger.js","../../crypto/lib/crypto-browser.js","../../crypto/lib/hmac.js","../../../node_modules/@noble/hashes/esm/sha3.js","../../crypto/lib/keccak.js","../../../node_modules/@noble/hashes/esm/ripemd160.js","../../crypto/lib/ripemd160.js","../../crypto/lib/pbkdf2.js","../../crypto/lib/random.js","../../../node_modules/@noble/hashes/esm/scrypt.js","../../crypto/lib/scrypt.js","../../crypto/lib/sha2.js","../../crypto/lib/index.js","../../address/lib/_version.js","../../address/lib/logger.js","../../address/lib/address.js","../../rlp/lib/_version.js","../../rlp/lib/logger.js","../../rlp/lib/encode.js","../../rlp/lib/decode.js","../../address/lib/contract-address.js","../../address/lib/checks.js","../../abi/lib/typed.js","../../abi/lib/coders/address.js","../../abi/lib/coders/anonymous.js","../../abi/lib/coders/array.js","../../abi/lib/coders/boolean.js","../../abi/lib/coders/bytes.js","../../abi/lib/coders/fixed-bytes.js","../../abi/lib/coders/null.js","../../abi/lib/coders/number.js","../../strings/lib/_version.js","../../strings/lib/logger.js","../../strings/lib/utf8.js","../../strings/lib/bytes32.js","../../strings/lib/idna.js","../../abi/lib/coders/string.js","../../abi/lib/coders/tuple.js","../../abi/lib/abi-coder.js","../../hash/lib/id.js","../../hash/lib/_version.js","../../hash/lib/logger.js","../../hash/lib/namehash.js","../../hash/lib/message.js","../../hash/lib/typed-data.js","../../abi/lib/interface.js","../../web/lib/_version.js","../../web/lib/logger.js","../../web/lib/response.js","../../web/lib/get-url-browser.js","../../web/lib/request.js","../../web/lib/fetch-data.js","../../providers/lib/_version.js","../../providers/lib/logger.js","../../providers/lib/ens-resolver.js","../../signing-key/lib/_version.js","../../signing-key/lib/logger.js","../../signing-key/lib/signature.js","../../../node_modules/@noble/secp256k1/lib/esm/index.js","../../signing-key/lib/signing-key.js","../../transactions/lib/accesslist.js","../../transactions/lib/_version.js","../../transactions/lib/logger.js","../../transactions/lib/transaction.js","../../providers/lib/provider.js","../../providers/lib/formatter.js","../../providers/lib/plugins-network.js","../../providers/lib/network.js","../../providers/lib/subscriber-polling.js","../../providers/lib/abstract-provider.js","../../providers/lib/abstract-signer.js","../../providers/lib/community.js","../../providers/lib/subscriber-filterid.js","../../providers/lib/provider-jsonrpc.js","../../providers/lib/provider-ankr.js","../../providers/lib/provider-alchemy.js","../../providers/lib/provider-cloudflare.js","../../providers/lib/provider-etherscan.js","../../providers/lib/provider-infura.js","../../providers/lib/provider-pocket.js","../../providers/lib/shuffle.js","../../providers/lib/provider-fallback.js","../../providers/lib/ws-browser.js","../../providers/lib/provider-socket.js","../../providers/lib/provider-websocket.js","../../providers/lib/common-networks.js","../../providers/lib/provider-ipcsocket-browser.js","../../contract/lib/wrappers.js","../../contract/lib/_version.js","../../contract/lib/logger.js","../../contract/lib/contract.js","../../wallet/lib/address.js","../../wordlists/lib/decode-owl.js","../../wordlists/lib/_version.js","../../wordlists/lib/logger.js","../../wordlists/lib/wordlist.js","../../wordlists/lib/wordlist-owl.js","../../wordlists/lib/lang-en.js","../../wallet/lib/_version.js","../../wallet/lib/logger.js","../../wordlists/lib/wordlists-en.js","../../wordlists/lib/bit-reader.js","../../wordlists/lib/decode-owla.js","../../wordlists/lib/wordlist-owla.js","../../wallet/lib/mnemonic.js","../../wallet/lib/base-wallet.js","../../wallet/lib/hdwallet.js","../../../node_modules/aes-js/lib/aes.js","../../../node_modules/aes-js/lib/mode.js","../../../node_modules/aes-js/lib/mode-cbc.js","../../../node_modules/aes-js/lib/mode-cfb.js","../../../node_modules/aes-js/lib/mode-ctr.js","../../../node_modules/aes-js/lib/mode-ofb.js","../../../node_modules/aes-js/lib/padding.js","../../wallet/lib/utils.js","../../wallet/lib/json-crowdsale.js","../../wallet/lib/json-keystore.js","../../wallet/lib/wallet.js","../lib/_version.js"],"sourcesContent":["//import type { BigNumber, BigNumberish } from \"./big-number\";\n//import type { Bytes, BytesLike } from \"./bytes\";\n//import type { Signature, SignatureLike } from \"./signature\";\n/*\nexport type Loose = T extends BigNumber ? BigNumberish:\n T extends number ? BigNumberish:\n T extends Bytes ? BytesLike:\n T extends Signature ? SignatureLike:\n T;\nexport type LooseObject = { [P in keyof T]?: Loose; };\n*/\n//export type Deferrable = T | Promise;\n/*\nexport type DeferrableObject = {\n [ P in keyof T ]: Deferrable\n};\n*/\n/*\nexport type Frozen = Readonly<{\n [ P in keyof T ]: T[P] extends Freezable ? Frozen: T[P];\n}>;\n\nexport interface Freezable {\n clone(): T;\n freeze(): Frozen;\n isFrozen(): boolean;\n}\n*/\n/*\nconst _data: WeakMap = new WeakMap();\n\nexport class Data implements Freezable {\n #props: {\n data: Uint8Array\n };\n\n [ index: number ]: number;\n\n constructor(lengthOrData: number | Uint8Array) {\n if (typeof(lengthOrData) === \"number\") {\n _data[this] = new Uint8Array(lengthOrData);\n } else {\n _data[this] = lengthOrData;\n }\n\n return new Proxy(this, {\n get: (target, prop, receiver) => {\n const index = parseInt(String(prop));\n if (String(index) !== prop) { return Reflect.get(target, prop, receiver); }\n\n const data = _data[this];\n if (index < 0 || index > data.length || index % 1) {\n throw new Error(\"\");\n }\n return data[index];\n },\n\n set: (target, prop, value, receiver) => {\n const index = parseInt(String(prop));\n if (String(index) !== prop) { return false; }\n\n if (value < 0 || value > 255 || value % 1) { return false; }\n\n const data = _data[this];\n if (index < 0 || index > data.length || index % 1) {\n return false;\n }\n\n data[index] = value;\n\n return true;\n },\n });\n }\n\n toString(): string {\n return this.slice().toString();\n }\n\n slice(): Uint8Array {\n return _data.get(this).slice();\n }\n\n clone(): Data {\n return new Data(this.slice());\n }\n\n freeze(): Frozen {\n //Object.freeze(this.#props);\n return this;\n }\n\n isFrozen(): boolean {\n return Object.isFrozen(this.#props);\n }\n}\nconst d = new Data(4);\nconsole.log(d.toString());\nd[0] = 45;\nconsole.log(d.toString());\n*/\n/*\nexport type DeferrableObject = {\n [ P in keyof T ]: Deferrable\n};\n*/\nexport async function resolveProperties(value) {\n const keys = Object.keys(value);\n const results = await Promise.all(keys.map((k) => Promise.resolve(value[k])));\n return results.reduce((accum, v, index) => {\n accum[keys[index]] = v;\n return accum;\n }, {});\n}\nexport function defineReadOnly(object, name, value) {\n Object.defineProperty(object, name, {\n enumerable: true,\n value: value,\n writable: false,\n });\n}\n/*\nexport type IsCancelled = () => Promise;\n\nexport function createPromise(resolve: (isCancelled: IsCancelled, (result: T) => void) => void, reject: (error: Error) => void, isCancelled: IsCancelled): CancellablePromise {\n let cancelled = false;\n\n const promise = new Promise((resolve, reject) => {\n \n });\n\n (>promise).cancel = function() {\n cancelled = true;\n };\n\n return (>promise);\n}\n*/\n/*\nexport class A implements Freezable {\n foo: number;\n constructor(foo: number) {\n this.foo = foo;\n }\n freeze(): Frozen {\n Object.freeze(this);\n return this;\n }\n clone(): A {\n return new A(this.foo);\n }\n}\n\nexport class B implements Freezable {\n a: A;\n constructor(a: A) {\n this.a = a;\n }\n freeze(): Frozen {\n this.a.freeze();\n Object.freeze(this);\n return this;\n }\n clone(): B {\n return new B(this.a);\n }\n}\n\nexport function test() {\n const a = new A(123);\n const b = new B(a);\n b.a = new A(234);\n const b2 = b.freeze();\n b2.a.foo = 123; // = a;\n}\n*/\nfunction checkType(value, type) {\n const types = type.split(\"|\").map(t => t.trim());\n for (let i = 0; i < types.length; i++) {\n switch (type) {\n case \"any\":\n return;\n case \"boolean\":\n case \"number\":\n case \"string\":\n if (typeof (value) === type) {\n return;\n }\n }\n }\n throw new Error(\"invalid value for type\");\n}\nexport function defineProperties(target, values, types, defaults) {\n for (let key in values) {\n let value = values[key];\n const fallback = (defaults ? defaults[key] : undefined);\n if (fallback !== undefined) {\n value = fallback;\n }\n else {\n const type = (types ? types[key] : null);\n if (type) {\n checkType(value, type);\n }\n }\n Object.defineProperty(target, key, { enumerable: true, value, writable: false });\n }\n}\n//# sourceMappingURL=properties.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _EventPayload_listener;\nimport { defineProperties } from \"./properties.js\";\nexport class EventPayload {\n constructor(emitter, listener, filter) {\n _EventPayload_listener.set(this, void 0);\n __classPrivateFieldSet(this, _EventPayload_listener, listener, \"f\");\n defineProperties(this, { emitter, filter });\n }\n async removeListener() {\n if (__classPrivateFieldGet(this, _EventPayload_listener, \"f\") == null) {\n return;\n }\n await this.emitter.off(this.filter, __classPrivateFieldGet(this, _EventPayload_listener, \"f\"));\n }\n}\n_EventPayload_listener = new WeakMap();\n//# sourceMappingURL=events.js.map","export function getStore(store, key) {\n return store[key];\n}\nexport function setStore(store, key, value) {\n if (Object.isFrozen(store)) {\n throw new Error(\"frozen object is immuatable; cannot set \" + key);\n }\n store[key] = value;\n}\n//# sourceMappingURL=storage.js.map","//export type TransactionReceipt {\n//}\n/**\n * try {\n * // code....\n * } catch (e) {\n * if (isError(e, errors.CALL_EXCEPTION)) {\n * console.log(e.data);\n * }\n * }\n */\nexport function isError(error, code) {\n return (error && error.code === code);\n}\nexport function isCallException(error) {\n return isError(error, \"CALL_EXCEPTION\");\n}\n/*\nexport function isContractCallException(error: any): error is ContractCallExceptionError {\n return isError(error, \"CALL_EXCEPTION\") && (error).method;\n}\n*/\n//# sourceMappingURL=errors.js.map","export const version = \"@ethersproject/logger@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Logger_instances, _Logger_assertIntRange, _Logger_getBytes, _Logger_log;\nimport { version } from \"./_version.js\";\nexport var LogLevel;\n(function (LogLevel) {\n LogLevel[\"DEBUG\"] = \"DEBUG\";\n LogLevel[\"INFO\"] = \"INFO\";\n LogLevel[\"WARNING\"] = \"WARNING\";\n LogLevel[\"ERROR\"] = \"ERROR\";\n LogLevel[\"OFF\"] = \"OFF\";\n})(LogLevel || (LogLevel = {}));\n;\nconst LogLevels = { debug: 1, \"default\": 2, info: 2, warning: 3, error: 4, off: 5 };\nlet _logLevel = LogLevels[\"default\"];\nlet _globalLogger = null;\nconst _normalizeForms = [\"NFD\", \"NFC\", \"NFKD\", \"NFKC\"].reduce((accum, form) => {\n try {\n // General test for normalize\n /* c8 ignore start */\n if (\"test\".normalize(form) !== \"test\") {\n throw new Error(\"bad\");\n }\n ;\n /* c8 ignore stop */\n if (form === \"NFD\") {\n const check = String.fromCharCode(0xe9).normalize(\"NFD\");\n const expected = String.fromCharCode(0x65, 0x0301);\n /* c8 ignore start */\n if (check !== expected) {\n throw new Error(\"broken\");\n }\n /* c8 ignore stop */\n }\n accum.push(form);\n }\n catch (error) { }\n return accum;\n}, []);\nfunction defineReadOnly(object, name, value) {\n Object.defineProperty(object, name, {\n enumerable: true, writable: false, value,\n });\n}\n/*\nenum Censor {\n OFF = 0,\n ON = 1,\n PERMANENT = 2\n};\nlet _censor = Censor.OFF;\n*/\n// IEEE 754 support 53-bits of mantissa\nconst maxValue = 0x1fffffffffffff;\n// The type of error to use for various error codes\nconst ErrorConstructors = {};\nErrorConstructors.INVALID_ARGUMENT = TypeError;\nErrorConstructors.NUMERIC_FAULT = RangeError;\nErrorConstructors.BUFFER_OVERRUN = RangeError;\nexport class Logger {\n constructor(version) {\n _Logger_instances.add(this);\n defineReadOnly(this, \"version\", version || \"_\");\n }\n makeError(message, code, info) {\n // Errors are being censored\n //if (_censor === Censor.ON || _censor === Censor.PERMANENT) {\n // return this.makeError(\"censored error\", code, { });\n //}\n {\n const details = [];\n if (info) {\n for (const key in info) {\n const value = (info[key]);\n try {\n details.push(key + \"=\" + JSON.stringify(value));\n }\n catch (error) {\n details.push(key + \"=[could not serialize object]\");\n }\n }\n }\n details.push(`code=${code}`);\n details.push(`version=${this.version}`);\n if (details.length) {\n message += \" (\" + details.join(\", \") + \")\";\n }\n }\n const create = ErrorConstructors[code] || Error;\n const error = (new create(message));\n defineReadOnly(error, \"code\", code);\n if (info) {\n for (const key in info) {\n defineReadOnly(error, key, (info[key]));\n }\n }\n return error;\n }\n throwError(message, code, info) {\n throw this.makeError(message, code, info);\n }\n throwArgumentError(message, name, value) {\n return this.throwError(message, \"INVALID_ARGUMENT\", {\n argument: name,\n value: value\n });\n }\n assert(condition, message, code, info) {\n if (!!condition) {\n return;\n }\n this.throwError(message, code || \"UNKNOWN_ERROR\", info);\n }\n assertArgument(condition, message, name, value) {\n return this.assert(condition, message, \"INVALID_ARGUMENT\", {\n argument: name,\n value\n });\n }\n assertIntegerArgument(name, value, lower, upper) {\n let message = null;\n if (typeof (value) !== \"number\") {\n message = \"expected a number\";\n }\n else if (!Number.isInteger(value)) {\n message = \"invalid integer\";\n }\n else if ((lower != null && value < lower) || (upper != null && value > upper)) {\n message = \"value is out of range\";\n }\n if (message) {\n this.throwArgumentError(message, name, value);\n }\n }\n assertSafeUint53(value, message) {\n this.assertArgument((typeof (value) === \"number\"), \"invalid number\", \"value\", value);\n if (message == null) {\n message = \"value not safe\";\n }\n const operation = \"assertSafeInteger\";\n this.assert((value >= 0 && value < 0x1fffffffffffff), message, \"NUMERIC_FAULT\", {\n operation, fault: \"out-of-safe-range\", value\n });\n this.assert((value % 1) === 0, message, \"NUMERIC_FAULT\", {\n operation, fault: \"non-integer\", value\n });\n }\n assertNormalize(form) {\n if (_normalizeForms.indexOf(form) === -1) {\n this.throwError(\"platform missing String.prototype.normalize\", \"UNSUPPORTED_OPERATION\", {\n operation: \"String.prototype.normalize\", info: { form }\n });\n }\n }\n assertPrivate(givenGuard, guard, className = \"\") {\n if (givenGuard !== guard) {\n let method = className, operation = \"new\";\n if (className) {\n method += \".\";\n operation += \" \" + className;\n }\n this.throwError(`private constructor; use ${method}from* methods`, \"UNSUPPORTED_OPERATION\", {\n operation\n });\n }\n }\n assertArgumentCount(count, expectedCount, message = \"\") {\n if (message) {\n message = \": \" + message;\n }\n this.assert((count >= expectedCount), \"missing arguemnt\" + message, \"MISSING_ARGUMENT\", {\n count: count,\n expectedCount: expectedCount\n });\n this.assert((count >= expectedCount), \"too many arguemnts\" + message, \"UNEXPECTED_ARGUMENT\", {\n count: count,\n expectedCount: expectedCount\n });\n }\n assertInt53(value, operation) {\n __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_assertIntRange).call(this, \"Int53\", value, operation || \"unknown\", -maxValue);\n }\n assertUint53(value, operation) {\n __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_assertIntRange).call(this, \"Int53\", value, operation || \"unknown\", 0);\n }\n assertInteger(value, operation = \"unknown\", min = 0, max = maxValue) {\n //this.#assertIntRange(\"Int53\", value, operation || \"unknown\", 0);\n }\n getBytes(value, name) {\n return __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_getBytes).call(this, value, name, false);\n }\n getBytesCopy(value, name) {\n return __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_getBytes).call(this, value, name, true);\n }\n getNumber(value, name) {\n switch (typeof (value)) {\n case \"bigint\":\n if (value < -maxValue || value > maxValue) {\n this.throwArgumentError(\"overflow\", name || \"value\", value);\n }\n return Number(value);\n case \"number\":\n if (!Number.isInteger(value)) {\n this.throwArgumentError(\"underflow\", name || \"value\", value);\n }\n else if (value < -maxValue || value > maxValue) {\n this.throwArgumentError(\"overflow\", name || \"value\", value);\n }\n return value;\n case \"string\":\n try {\n return this.getNumber(BigInt(value), name);\n }\n catch (e) {\n this.throwArgumentError(`invalid numeric string: ${e.message}`, name || \"value\", value);\n }\n }\n return this.throwArgumentError(\"invalid numeric value\", name || \"value\", value);\n }\n getBigInt(value, name) {\n switch (typeof (value)) {\n case \"bigint\": return value;\n case \"number\":\n if (!Number.isInteger(value)) {\n this.throwArgumentError(\"underflow\", name || \"value\", value);\n }\n else if (value < -maxValue || value > maxValue) {\n this.throwArgumentError(\"overflow\", name || \"value\", value);\n }\n return BigInt(value);\n case \"string\":\n try {\n return BigInt(value);\n }\n catch (e) {\n this.throwArgumentError(`invalid BigNumberish string: ${e.message}`, name || \"value\", value);\n }\n }\n return this.throwArgumentError(\"invalid BigNumberish value\", name || \"value\", value);\n }\n debug(...args) {\n __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_log).call(this, LogLevel.DEBUG, args);\n }\n info(...args) {\n __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_log).call(this, LogLevel.INFO, args);\n }\n warn(...args) {\n __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_log).call(this, LogLevel.WARNING, args);\n }\n static globalLogger() {\n if (!_globalLogger) {\n _globalLogger = new Logger(version);\n }\n return _globalLogger;\n }\n static setLogLevel(logLevel) {\n const level = LogLevels[logLevel.toLowerCase()];\n if (level == null) {\n Logger.globalLogger().warn(\"invalid log level - \" + logLevel);\n return;\n }\n _logLevel = level;\n }\n}\n_Logger_instances = new WeakSet(), _Logger_assertIntRange = function _Logger_assertIntRange(name, value, operation, minValue) {\n if (typeof (value) !== \"number\" || isNaN(value)) {\n this.throwArgumentError(`invalid ${name}`, \"INVALID_ARGUMENT\", {\n name: \"value\", value\n });\n }\n let message = `invalid ${name} value`;\n let fault = null;\n if (isNaN(value)) {\n fault = \"not-a-number\";\n }\n else if (value < minValue || value > maxValue) {\n message = `unsafe ${name} value`;\n fault = \"overflow\";\n }\n else if (Math.floor(value) !== value) {\n fault = \"underflow\";\n }\n if (fault) {\n this.throwError(message, \"NUMERIC_FAULT\", {\n operation, fault, value\n });\n }\n}, _Logger_getBytes = function _Logger_getBytes(value, name, copy) {\n if (value instanceof Uint8Array) {\n if (copy) {\n return new Uint8Array(value);\n }\n return value;\n }\n if (typeof (value) === \"string\" && value.match(/^0x([0-9a-f][0-9a-f])*$/i)) {\n const result = new Uint8Array((value.length - 2) / 2);\n let offset = 2;\n for (let i = 0; i < result.length; i++) {\n result[i] = parseInt(value.substring(offset, offset + 2), 16);\n offset += 2;\n }\n return result;\n }\n return this.throwArgumentError(\"invalid BytesLike value\", name || \"value\", value);\n}, _Logger_log = function _Logger_log(logLevel, args) {\n const level = logLevel.toLowerCase();\n if (LogLevels[level] == null) {\n this.throwArgumentError(\"invalid log level name\", \"logLevel\", logLevel);\n }\n if (_logLevel > LogLevels[level]) {\n return;\n }\n console.log.apply(console, args);\n};\n//static readonly Errors = ErrorCode;\nLogger.LogLevels = LogLevel;\n//const l = new Logger();\n//l.makeError(\"foo\", Logger.Errors.NUMERIC_FAULT, { fault: \"foo\", operation: \"bar\", value: 3 });\n//l.makeError(\"foo\", Logger.Errors.UNPREDICTABLE_GAS_LIMIT, { transaction: null });\n//l.makeError(\"foo\", ErrorCode.NUMERIC_FAULT, { fault: \"foo\", operation: \"bar\" });\n//l.makeError(\"foo\", ErrorCode.NUMERIC_FAULT, { fault: \"foo\", operation: \"bar\", gii: \"5\" });\n//console.log(LogLevel);\n//# sourceMappingURL=logger.js.map","export const version = \"@ethersproject/abi@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _TokenString_instances, _TokenString_offset, _TokenString_tokens, _TokenString_subTokenString, _ParamType_instances, _ParamType_walkAsync;\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { logger } from \"./logger.js\";\n;\nexport var FormatType;\n(function (FormatType) {\n // Bare formatting, as is needed for computing a sighash of an event or function\n FormatType[\"sighash\"] = \"sighash\";\n // Human-Readable with Minimal spacing and without names (compact human-readable)\n FormatType[\"minimal\"] = \"minimal\";\n // Human-Readable with nice spacing, including all names\n FormatType[\"full\"] = \"full\";\n // JSON-format a la Solidity\n FormatType[\"json\"] = \"json\";\n})(FormatType || (FormatType = {}));\n;\n// [ \"a\", \"b\" ] => { \"a\": 1, \"b\": 1 }\nfunction setify(items) {\n const result = new Set();\n items.forEach((k) => result.add(k));\n return Object.freeze(result);\n}\n// Visibility Keywords\nconst _kwVisib = \"constant external internal payable private public pure view\";\nconst KwVisib = setify(_kwVisib.split(\" \"));\nconst _kwTypes = \"constructor error event function struct\";\nconst KwTypes = setify(_kwTypes.split(\" \"));\nconst _kwModifiers = \"calldata memory storage payable indexed\";\nconst KwModifiers = setify(_kwModifiers.split(\" \"));\nconst _kwOther = \"tuple returns\";\n// All Keywords\nconst _keywords = [_kwTypes, _kwModifiers, _kwOther, _kwVisib].join(\" \");\nconst Keywords = setify(_keywords.split(\" \"));\n// Single character tokens\nconst SimpleTokens = {\n \"(\": \"OPEN_PAREN\", \")\": \"CLOSE_PAREN\",\n \"[\": \"OPEN_BRACKET\", \"]\": \"CLOSE_BRACKET\",\n \",\": \"COMMA\", \"@\": \"AT\"\n};\n// Parser regexes to consume the next token\nconst regexWhitespace = new RegExp(\"^(\\\\s*)\");\nconst regexNumber = new RegExp(\"^([0-9]+)\");\nconst regexIdentifier = new RegExp(\"^([a-zA-Z$_][a-zA-Z0-9$_]*)\");\nconst regexType = new RegExp(\"^(address|bool|bytes(0-9*)|string|u?int([0-9]*))\");\nexport class TokenString {\n constructor(tokens) {\n _TokenString_instances.add(this);\n _TokenString_offset.set(this, void 0);\n _TokenString_tokens.set(this, void 0);\n __classPrivateFieldSet(this, _TokenString_offset, 0, \"f\");\n __classPrivateFieldSet(this, _TokenString_tokens, tokens.slice(), \"f\");\n }\n get offset() { return __classPrivateFieldGet(this, _TokenString_offset, \"f\"); }\n get length() { return __classPrivateFieldGet(this, _TokenString_tokens, \"f\").length - __classPrivateFieldGet(this, _TokenString_offset, \"f\"); }\n clone() { return new TokenString(__classPrivateFieldGet(this, _TokenString_tokens, \"f\")); }\n reset() { __classPrivateFieldSet(this, _TokenString_offset, 0, \"f\"); }\n // Pops and returns the value of the next token, if it is a keyword in allowed; throws if out of tokens\n popKeyword(allowed) {\n const top = this.peek();\n if (top.type !== \"KEYWORD\" || !allowed.has(top.text)) {\n throw new Error(`expected keyword ${top.text}`);\n }\n return this.pop().text;\n }\n // Pops and returns the value of the next token if it is `type`; throws if out of tokens\n popType(type) {\n if (this.peek().type !== type) {\n throw new Error(`expected ${type}; got ${JSON.stringify(this.peek())}`);\n }\n return this.pop().text;\n }\n // Pops and returns a \"(\" TOKENS \")\"\n popParen() {\n const top = this.peek();\n if (top.type !== \"OPEN_PAREN\") {\n throw new Error(\"bad start\");\n }\n const result = __classPrivateFieldGet(this, _TokenString_instances, \"m\", _TokenString_subTokenString).call(this, __classPrivateFieldGet(this, _TokenString_offset, \"f\") + 1, top.match + 1);\n __classPrivateFieldSet(this, _TokenString_offset, top.match + 1, \"f\");\n return result;\n }\n // Pops and returns the items within \"(\" ITEM1 \",\" ITEM2 \",\" ... \")\"\n popParams() {\n const top = this.peek();\n if (top.type !== \"OPEN_PAREN\") {\n throw new Error(\"bad start\");\n }\n const result = [];\n while (__classPrivateFieldGet(this, _TokenString_offset, \"f\") < top.match - 1) {\n const link = this.peek().linkNext;\n result.push(__classPrivateFieldGet(this, _TokenString_instances, \"m\", _TokenString_subTokenString).call(this, __classPrivateFieldGet(this, _TokenString_offset, \"f\") + 1, link));\n __classPrivateFieldSet(this, _TokenString_offset, link, \"f\");\n }\n __classPrivateFieldSet(this, _TokenString_offset, top.match + 1, \"f\");\n return result;\n }\n // Returns the top Token, throwing if out of tokens\n peek() {\n if (__classPrivateFieldGet(this, _TokenString_offset, \"f\") >= __classPrivateFieldGet(this, _TokenString_tokens, \"f\").length) {\n throw new Error(\"out-of-bounds\");\n }\n return __classPrivateFieldGet(this, _TokenString_tokens, \"f\")[__classPrivateFieldGet(this, _TokenString_offset, \"f\")];\n }\n // Returns the next value, if it is a keyword in `allowed`\n peekKeyword(allowed) {\n const top = this.peekType(\"KEYWORD\");\n return (top != null && allowed.has(top)) ? top : null;\n }\n // Returns the value of the next token if it is `type`\n peekType(type) {\n if (this.length === 0) {\n return null;\n }\n const top = this.peek();\n return (top.type === type) ? top.text : null;\n }\n // Returns the next token; throws if out of tokens\n pop() {\n var _a;\n const result = this.peek();\n __classPrivateFieldSet(this, _TokenString_offset, (_a = __classPrivateFieldGet(this, _TokenString_offset, \"f\"), _a++, _a), \"f\");\n return result;\n }\n toString() {\n const tokens = [];\n for (let i = __classPrivateFieldGet(this, _TokenString_offset, \"f\"); i < __classPrivateFieldGet(this, _TokenString_tokens, \"f\").length; i++) {\n const token = __classPrivateFieldGet(this, _TokenString_tokens, \"f\")[i];\n tokens.push(`${token.type}:${token.text}`);\n }\n return ``;\n }\n}\n_TokenString_offset = new WeakMap(), _TokenString_tokens = new WeakMap(), _TokenString_instances = new WeakSet(), _TokenString_subTokenString = function _TokenString_subTokenString(from = 0, to = 0) {\n return new TokenString(__classPrivateFieldGet(this, _TokenString_tokens, \"f\").slice(from, to).map((t) => {\n return Object.freeze(Object.assign({}, t, {\n match: (t.match - from),\n linkBack: (t.linkBack - from),\n linkNext: (t.linkNext - from),\n }));\n return t;\n }));\n};\nexport function lex(text) {\n const tokens = [];\n const throwError = (message) => {\n const token = (offset < text.length) ? JSON.stringify(text[offset]) : \"$EOI\";\n throw new Error(`invalid token ${token} at ${offset}: ${message}`);\n };\n let brackets = [];\n let commas = [];\n let offset = 0;\n while (offset < text.length) {\n // Strip off any leading whitespace\n let cur = text.substring(offset);\n let match = cur.match(regexWhitespace);\n if (match) {\n offset += match[1].length;\n cur = text.substring(offset);\n }\n const token = { depth: brackets.length, linkBack: -1, linkNext: -1, match: -1, type: \"\", text: \"\", offset, value: -1 };\n tokens.push(token);\n let type = (SimpleTokens[cur[0]] || \"\");\n if (type) {\n token.type = type;\n token.text = cur[0];\n offset++;\n if (type === \"OPEN_PAREN\") {\n brackets.push(tokens.length - 1);\n commas.push(tokens.length - 1);\n }\n else if (type == \"CLOSE_PAREN\") {\n if (brackets.length === 0) {\n throwError(\"no matching open bracket\");\n }\n token.match = brackets.pop();\n (tokens[token.match]).match = tokens.length - 1;\n token.depth--;\n token.linkBack = commas.pop();\n (tokens[token.linkBack]).linkNext = tokens.length - 1;\n }\n else if (type === \"COMMA\") {\n token.linkBack = commas.pop();\n (tokens[token.linkBack]).linkNext = tokens.length - 1;\n commas.push(tokens.length - 1);\n }\n else if (type === \"OPEN_BRACKET\") {\n token.type = \"BRACKET\";\n }\n else if (type === \"CLOSE_BRACKET\") {\n // Remove the CLOSE_BRACKET\n let suffix = tokens.pop().text;\n if (tokens.length > 0 && tokens[tokens.length - 1].type === \"NUMBER\") {\n const value = tokens.pop().text;\n suffix = value + suffix;\n (tokens[tokens.length - 1]).value = logger.getNumber(value);\n }\n if (tokens.length === 0 || tokens[tokens.length - 1].type !== \"BRACKET\") {\n throw new Error(\"missing opening bracket\");\n }\n (tokens[tokens.length - 1]).text += suffix;\n }\n continue;\n }\n match = cur.match(regexIdentifier);\n if (match) {\n token.text = match[1];\n offset += token.text.length;\n if (Keywords.has(token.text)) {\n token.type = \"KEYWORD\";\n continue;\n }\n if (token.text.match(regexType)) {\n token.type = \"TYPE\";\n continue;\n }\n token.type = \"ID\";\n continue;\n }\n match = cur.match(regexNumber);\n if (match) {\n token.text = match[1];\n token.type = \"NUMBER\";\n offset += token.text.length;\n continue;\n }\n throw new Error(`unexpected token ${JSON.stringify(cur[0])} at position ${offset}`);\n }\n return new TokenString(tokens.map((t) => Object.freeze(t)));\n}\n// Check only one of `allowed` is in `set`\nfunction allowSingle(set, allowed) {\n let included = [];\n for (const key in allowed.keys()) {\n if (set.has(key)) {\n included.push(key);\n }\n }\n if (included.length > 1) {\n throw new Error(`conflicting types: ${included.join(\", \")}`);\n }\n}\n// Functions to process a Solidity Signature TokenString from left-to-right for...\n// ...the name with an optional type, returning the name\nfunction consumeName(type, tokens) {\n if (tokens.peekKeyword(KwTypes)) {\n const keyword = tokens.pop().text;\n if (keyword !== type) {\n throw new Error(`expected ${type}, got ${keyword}`);\n }\n }\n return tokens.popType(\"ID\");\n}\n// ...all keywords matching allowed, returning the keywords\nfunction consumeKeywords(tokens, allowed) {\n const keywords = new Set();\n while (true) {\n const keyword = tokens.peekType(\"KEYWORD\");\n if (keyword == null || (allowed && !allowed.has(keyword))) {\n break;\n }\n tokens.pop();\n if (keywords.has(keyword)) {\n throw new Error(`duplicate keywords: ${JSON.stringify(keyword)}`);\n }\n keywords.add(keyword);\n }\n return Object.freeze(keywords);\n}\n// ...all visibility keywords, returning the coalesced mutability\nfunction consumeMutability(tokens) {\n let modifiers = consumeKeywords(tokens, KwVisib);\n // Detect conflicting modifiers\n allowSingle(modifiers, setify(\"constant payable nonpayable\".split(\" \")));\n allowSingle(modifiers, setify(\"pure view payable nonpayable\".split(\" \")));\n // Process mutability states\n if (modifiers.has(\"view\")) {\n return \"view\";\n }\n if (modifiers.has(\"pure\")) {\n return \"pure\";\n }\n if (modifiers.has(\"payable\")) {\n return \"payable\";\n }\n if (modifiers.has(\"nonpayable\")) {\n return \"nonpayable\";\n }\n // Process legacy `constant` last\n if (modifiers.has(\"constant\")) {\n return \"view\";\n }\n return \"nonpayable\";\n}\n// ...a parameter list, returning the ParamType list\nfunction consumeParams(tokens, allowIndexed) {\n return tokens.popParams().map((t) => ParamType.fromTokens(t, allowIndexed));\n}\n// ...a gas limit, returning a BigNumber or null if none\nfunction consumeGas(tokens) {\n if (tokens.peekType(\"AT\")) {\n tokens.pop();\n if (tokens.peekType(\"NUMBER\")) {\n return logger.getBigInt(tokens.pop().text);\n }\n throw new Error(\"invalid gas\");\n }\n return null;\n}\nfunction consumeEoi(tokens) {\n if (tokens.length) {\n throw new Error(`unexpected tokens: ${tokens.toString()}`);\n }\n}\nconst regexArrayType = new RegExp(/^(.*)\\[([0-9]*)\\]$/);\nfunction verifyBasicType(type) {\n const match = type.match(regexType);\n if (!match) {\n return logger.throwArgumentError(\"invalid type\", \"type\", type);\n }\n if (type === \"uint\") {\n return \"uint256\";\n }\n if (type === \"int\") {\n return \"int256\";\n }\n if (match[2]) {\n // bytesXX\n const length = parseInt(match[2]);\n if (length === 0 || length > 32) {\n logger.throwArgumentError(\"invalid bytes length\", \"type\", type);\n }\n }\n else if (match[3]) {\n // intXX or uintXX\n const size = parseInt(match[3]);\n if (size === 0 || size > 256 || size % 8) {\n logger.throwArgumentError(\"invalid numeric width\", \"type\", type);\n }\n }\n return type;\n}\n// Make the Fragment constructors effectively private\nconst _guard = {};\nconst internal = Symbol.for(\"_ethers_internal\");\nconst ParamTypeInternal = \"_ParamTypeInternal\";\nexport class ParamType {\n constructor(guard, name, type, baseType, indexed, components, arrayLength, arrayChildren) {\n _ParamType_instances.add(this);\n logger.assertPrivate(guard, _guard, \"ParamType\");\n Object.defineProperty(this, internal, { value: ParamTypeInternal });\n if (components) {\n components = Object.freeze(components.slice());\n }\n if (baseType === \"array\") {\n if (arrayLength == null || arrayChildren == null) {\n throw new Error(\"\");\n }\n }\n else if (arrayLength != null || arrayChildren != null) {\n throw new Error(\"\");\n }\n if (baseType === \"tuple\") {\n if (components == null) {\n throw new Error(\"\");\n }\n }\n else if (components != null) {\n throw new Error(\"\");\n }\n defineProperties(this, {\n name, type, baseType, indexed, components, arrayLength, arrayChildren\n });\n }\n // Format the parameter fragment\n // - sighash: \"(uint256,address)\"\n // - minimal: \"tuple(uint256,address) indexed\"\n // - full: \"tuple(uint256 foo, address bar) indexed baz\"\n format(format = FormatType.sighash) {\n if (!FormatType[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatType.json) {\n let result = {\n type: ((this.baseType === \"tuple\") ? \"tuple\" : this.type),\n name: (this.name || undefined)\n };\n if (typeof (this.indexed) === \"boolean\") {\n result.indexed = this.indexed;\n }\n if (this.isTuple()) {\n result.components = this.components.map((c) => JSON.parse(c.format(format)));\n }\n return JSON.stringify(result);\n }\n let result = \"\";\n // Array\n if (this.isArray()) {\n result += this.arrayChildren.format(format);\n result += `[${(this.arrayLength < 0 ? \"\" : String(this.arrayLength))}]`;\n }\n else {\n if (this.isTuple()) {\n if (format !== FormatType.sighash) {\n result += this.type;\n }\n result += \"(\" + this.components.map((comp) => comp.format(format)).join((format === FormatType.full) ? \", \" : \",\") + \")\";\n }\n else {\n result += this.type;\n }\n }\n if (format !== FormatType.sighash) {\n if (this.indexed === true) {\n result += \" indexed\";\n }\n if (format === FormatType.full && this.name) {\n result += \" \" + this.name;\n }\n }\n return result;\n }\n static isArray(value) {\n return value && (value.baseType === \"array\");\n }\n isArray() {\n return (this.baseType === \"array\");\n }\n isTuple() {\n return (this.baseType === \"tuple\");\n }\n isIndexable() {\n return (this.indexed != null);\n }\n walk(value, process) {\n if (this.isArray()) {\n if (!Array.isArray(value)) {\n throw new Error(\"invlaid array value\");\n }\n if (this.arrayLength !== -1 && value.length !== this.arrayLength) {\n throw new Error(\"array is wrong length\");\n }\n return value.map((v) => (this.arrayChildren.walk(v, process)));\n }\n if (this.isTuple()) {\n if (!Array.isArray(value)) {\n throw new Error(\"invlaid tuple value\");\n }\n if (value.length !== this.components.length) {\n throw new Error(\"array is wrong length\");\n }\n return value.map((v, i) => (this.components[i].walk(v, process)));\n }\n return process(this.type, value);\n }\n async walkAsync(value, process) {\n const promises = [];\n const result = [value];\n __classPrivateFieldGet(this, _ParamType_instances, \"m\", _ParamType_walkAsync).call(this, promises, value, process, (value) => {\n result[0] = value;\n });\n if (promises.length) {\n await Promise.all(promises);\n }\n return result[0];\n }\n static from(obj, allowIndexed) {\n if (ParamType.isParamType(obj)) {\n return obj;\n }\n if (typeof (obj) === \"string\") {\n return ParamType.fromTokens(lex(obj), allowIndexed);\n }\n if (obj instanceof TokenString) {\n return ParamType.fromTokens(obj, allowIndexed);\n }\n const name = obj.name;\n if (name && (typeof (name) !== \"string\" || !name.match(regexIdentifier))) {\n logger.throwArgumentError(\"invalid name\", \"obj.name\", name);\n }\n let indexed = obj.indexed;\n if (indexed != null) {\n if (!allowIndexed) {\n logger.throwArgumentError(\"parameter cannot be indexed\", \"obj.indexed\", obj.indexed);\n }\n indexed = !!indexed;\n }\n let type = obj.type;\n let arrayMatch = type.match(regexArrayType);\n if (arrayMatch) {\n const arrayLength = arrayMatch[2];\n const arrayChildren = ParamType.from({\n type: arrayMatch[1],\n components: obj.components\n });\n return new ParamType(_guard, name, type, \"array\", indexed, null, arrayLength, arrayChildren);\n }\n if (type.substring(0, 5) === \"tuple(\" || type[0] === \"(\") {\n const comps = (obj.components != null) ? obj.components.map((c) => ParamType.from(c)) : null;\n const tuple = new ParamType(_guard, name, type, \"tuple\", indexed, comps, null, null);\n // @TODO: use lexer to validate and normalize type\n return tuple;\n }\n type = verifyBasicType(obj.type);\n return new ParamType(_guard, name, type, type, indexed, null, null, null);\n }\n static fromObject(obj, allowIndexed) {\n throw new Error(\"@TODO\");\n }\n static fromTokens(tokens, allowIndexed) {\n let type = \"\", baseType = \"\";\n let comps = null;\n if (consumeKeywords(tokens, setify([\"tuple\"])).has(\"tuple\") || tokens.peekType(\"OPEN_PAREN\")) {\n // Tuple\n baseType = \"tuple\";\n comps = tokens.popParams().map((t) => ParamType.from(t));\n type = `tuple(${comps.map((c) => c.format()).join(\",\")})`;\n }\n else {\n // Normal\n type = verifyBasicType(tokens.popType(\"TYPE\"));\n baseType = type;\n }\n // Check for Array\n let arrayChildren = null;\n let arrayLength = null;\n while (tokens.length && tokens.peekType(\"BRACKET\")) {\n const bracket = tokens.pop(); //arrays[i];\n arrayChildren = new ParamType(_guard, \"\", type, baseType, null, comps, arrayLength, arrayChildren);\n arrayLength = bracket.value;\n type += bracket.text;\n baseType = \"array\";\n comps = null;\n }\n let indexed = null;\n const keywords = consumeKeywords(tokens, KwModifiers);\n if (keywords.has(\"indexed\")) {\n if (!allowIndexed) {\n throw new Error(\"\");\n }\n indexed = true;\n }\n const name = (tokens.peekType(\"ID\") ? tokens.pop().text : \"\");\n if (tokens.length) {\n throw new Error(\"leftover tokens\");\n }\n return new ParamType(_guard, name, type, baseType, indexed, comps, arrayLength, arrayChildren);\n }\n static isParamType(value) {\n return (value && value[internal] === ParamTypeInternal);\n }\n}\n_ParamType_instances = new WeakSet(), _ParamType_walkAsync = function _ParamType_walkAsync(promises, value, process, setValue) {\n if (this.isArray()) {\n if (!Array.isArray(value)) {\n throw new Error(\"invlaid array value\");\n }\n if (this.arrayLength !== -1 && value.length !== this.arrayLength) {\n throw new Error(\"array is wrong length\");\n }\n const childType = this.arrayChildren;\n const result = value.slice();\n result.forEach((value, index) => {\n __classPrivateFieldGet(childType, _ParamType_instances, \"m\", _ParamType_walkAsync).call(childType, promises, value, process, (value) => {\n result[index] = value;\n });\n });\n setValue(result);\n return;\n }\n if (this.isTuple()) {\n const components = this.components;\n // Convert the object into an array\n let result;\n if (Array.isArray(value)) {\n result = value.slice();\n }\n else {\n if (value == null || typeof (value) !== \"object\") {\n throw new Error(\"invlaid tuple value\");\n }\n result = components.map((param) => {\n if (!param.name) {\n throw new Error(\"cannot use object value with unnamed components\");\n }\n if (!(param.name in value)) {\n throw new Error(`missing value for component ${param.name}`);\n }\n return value[param.name];\n });\n }\n if (value.length !== this.components.length) {\n throw new Error(\"array is wrong length\");\n }\n result.forEach((value, index) => {\n var _a;\n __classPrivateFieldGet((_a = components[index]), _ParamType_instances, \"m\", _ParamType_walkAsync).call(_a, promises, value, process, (value) => {\n result[index] = value;\n });\n });\n setValue(result);\n return;\n }\n const result = process(this.type, value);\n if (result.then) {\n promises.push((async function () { setValue(await result); })());\n }\n else {\n setValue(result);\n }\n};\nexport var FragmentType;\n(function (FragmentType) {\n FragmentType[\"constructor\"] = \"constructor\";\n FragmentType[\"error\"] = \"error\";\n FragmentType[\"event\"] = \"event\";\n FragmentType[\"function\"] = \"function\";\n FragmentType[\"struct\"] = \"struct\";\n})(FragmentType || (FragmentType = {}));\n;\nexport class Fragment {\n constructor(guard, type, inputs) {\n logger.assertPrivate(guard, _guard, \"Fragment\");\n inputs = Object.freeze(inputs.slice());\n defineProperties(this, { type, inputs });\n }\n static from(obj) {\n if (typeof (obj) === \"string\") {\n return this.fromString(obj);\n }\n if (obj instanceof TokenString) {\n return this.fromTokens(obj);\n }\n if (typeof (obj) === \"object\") {\n return this.fromObject(obj);\n }\n throw new Error(`unsupported type: ${obj}`);\n }\n static fromObject(obj) {\n switch (obj.type) {\n case \"constructor\": return ConstructorFragment.fromObject(obj);\n case \"error\": return ErrorFragment.fromObject(obj);\n case \"event\": return EventFragment.fromObject(obj);\n case \"function\": return FunctionFragment.fromObject(obj);\n case \"struct\": return StructFragment.fromObject(obj);\n }\n throw new Error(\"not implemented yet\");\n }\n static fromString(text) {\n try {\n Fragment.from(JSON.parse(text));\n }\n catch (e) { }\n return Fragment.fromTokens(lex(text));\n }\n static fromTokens(tokens) {\n const type = tokens.popKeyword(KwTypes);\n switch (type) {\n case \"constructor\": return ConstructorFragment.fromTokens(tokens);\n case \"error\": return ErrorFragment.fromTokens(tokens);\n case \"event\": return EventFragment.fromTokens(tokens);\n case \"function\": return FunctionFragment.fromTokens(tokens);\n case \"struct\": return StructFragment.fromTokens(tokens);\n }\n throw new Error(`unsupported type: ${type}`);\n }\n /*\n static fromTokens(tokens: TokenString): Fragment {\n const assertDone = () => {\n if (tokens.length) { throw new Error(`unexpected tokens: ${ tokens.toString() }`); }\n });\n\n const type = (tokens.length && tokens.peek().type === \"KEYWORD\") ? tokens.peek().text: \"unknown\";\n\n const name = consumeName(\"error\", tokens);\n const inputs = consumeParams(tokens, type === \"event\");\n\n switch (type) {\n case \"event\": case \"struct\":\n assertDone();\n }\n\n }\n */\n static isConstructor(value) {\n return (value && value.type === \"constructor\");\n }\n static isError(value) {\n return (value && value.type === \"error\");\n }\n static isEvent(value) {\n return (value && value.type === \"event\");\n }\n static isFunction(value) {\n return (value && value.type === \"function\");\n }\n static isStruct(value) {\n return (value && value.type === \"struct\");\n }\n}\nexport class NamedFragment extends Fragment {\n constructor(guard, type, name, inputs) {\n super(guard, type, inputs);\n inputs = Object.freeze(inputs.slice());\n defineProperties(this, { name });\n }\n}\nfunction joinParams(format, params) {\n return \"(\" + params.map((p) => p.format(format)).join((format === FormatType.full) ? \", \" : \",\") + \")\";\n}\nexport class ErrorFragment extends NamedFragment {\n constructor(guard, name, inputs) {\n super(guard, FragmentType.error, name, inputs);\n }\n format(format = FormatType.sighash) {\n if (!FormatType[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatType.json) {\n return JSON.stringify({\n type: \"error\",\n name: this.name,\n inputs: this.inputs.map((input) => JSON.parse(input.format(format))),\n });\n }\n const result = [];\n if (format !== FormatType.sighash) {\n result.push(\"error\");\n }\n result.push(this.name + joinParams(format, this.inputs));\n return result.join(\" \");\n }\n static fromString(text) {\n return ErrorFragment.fromTokens(lex(text));\n }\n static fromTokens(tokens) {\n const name = consumeName(\"error\", tokens);\n const inputs = consumeParams(tokens);\n consumeEoi(tokens);\n return new ErrorFragment(_guard, name, inputs);\n }\n}\nexport class EventFragment extends NamedFragment {\n constructor(guard, name, inputs, anonymous) {\n super(guard, FragmentType.event, name, inputs);\n defineProperties(this, { anonymous });\n }\n format(format = FormatType.sighash) {\n if (!FormatType[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatType.json) {\n return JSON.stringify({\n type: \"event\",\n anonymous: this.anonymous,\n name: this.name,\n inputs: this.inputs.map((i) => JSON.parse(i.format(format)))\n });\n }\n const result = [];\n if (format !== FormatType.sighash) {\n result.push(\"event\");\n }\n result.push(this.name + joinParams(format, this.inputs));\n if (format !== FormatType.sighash && this.anonymous) {\n result.push(\"anonymous\");\n }\n return result.join(\" \");\n }\n static fromString(text) {\n return EventFragment.fromTokens(lex(text));\n }\n static fromTokens(tokens) {\n const name = consumeName(\"event\", tokens);\n const inputs = consumeParams(tokens, true);\n const anonymous = !!consumeKeywords(tokens, setify([\"anonymous\"])).has(\"anonymous\");\n consumeEoi(tokens);\n return new EventFragment(_guard, name, inputs, anonymous);\n }\n}\nexport class ConstructorFragment extends Fragment {\n constructor(guard, type, inputs, payable, gas) {\n super(guard, type, inputs);\n defineProperties(this, { payable, gas });\n }\n format(format = FormatType.sighash) {\n if (!FormatType[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatType.sighash) {\n logger.throwError(\"cannot format a constructor for sighash\", \"UNSUPPORTED_OPERATION\", {\n operation: \"format(sighash)\"\n });\n }\n if (format === FormatType.json) {\n return JSON.stringify({\n type: \"constructor\",\n stateMutability: (this.payable ? \"payable\" : \"undefined\"),\n payable: this.payable,\n gas: ((this.gas != null) ? this.gas : undefined),\n inputs: this.inputs.map((i) => JSON.parse(i.format(format)))\n });\n }\n const result = [`constructor${joinParams(format, this.inputs)}`];\n result.push((this.payable) ? \"payable\" : \"nonpayable\");\n if (this.gas != null) {\n result.push(`@${this.gas.toString()}`);\n }\n return result.join(\" \");\n }\n static fromString(text) {\n return ConstructorFragment.fromTokens(lex(text));\n }\n static fromObject(obj) {\n throw new Error(\"TODO\");\n }\n static fromTokens(tokens) {\n consumeKeywords(tokens, setify([\"constructor\"]));\n const inputs = consumeParams(tokens);\n const payable = !!consumeKeywords(tokens, setify([\"payable\"])).has(\"payable\");\n const gas = consumeGas(tokens);\n consumeEoi(tokens);\n return new ConstructorFragment(_guard, FragmentType.constructor, inputs, payable, gas);\n }\n}\nexport class FunctionFragment extends NamedFragment {\n constructor(guard, name, stateMutability, inputs, outputs, gas) {\n super(guard, FragmentType.function, name, inputs);\n outputs = Object.freeze(outputs.slice());\n const constant = (stateMutability === \"view\" || stateMutability === \"pure\");\n const payable = (stateMutability === \"payable\");\n defineProperties(this, { constant, gas, outputs, payable, stateMutability });\n }\n format(format = FormatType.sighash) {\n if (!FormatType[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatType.json) {\n return JSON.stringify({\n type: \"function\",\n name: this.name,\n constant: this.constant,\n stateMutability: ((this.stateMutability !== \"nonpayable\") ? this.stateMutability : undefined),\n payable: this.payable,\n gas: ((this.gas != null) ? this.gas : undefined),\n inputs: this.inputs.map((i) => JSON.parse(i.format(format))),\n outputs: this.outputs.map((o) => JSON.parse(o.format(format))),\n });\n }\n const result = [];\n if (format !== FormatType.sighash) {\n result.push(\"function\");\n }\n result.push(this.name + joinParams(format, this.inputs));\n if (format !== FormatType.sighash) {\n if (this.stateMutability !== \"nonpayable\") {\n result.push(this.stateMutability);\n }\n if (this.outputs && this.outputs.length) {\n result.push(\"returns\");\n result.push(joinParams(format, this.outputs));\n }\n if (this.gas != null) {\n result.push(`@${this.gas.toString()}`);\n }\n }\n return result.join(\" \");\n }\n static fromString(text) {\n return FunctionFragment.fromTokens(lex(text));\n }\n static fromTokens(tokens) {\n const name = consumeName(\"function\", tokens);\n const inputs = consumeParams(tokens);\n const mutability = consumeMutability(tokens);\n let outputs = [];\n if (consumeKeywords(tokens, setify([\"returns\"])).has(\"returns\")) {\n outputs = consumeParams(tokens);\n }\n const gas = consumeGas(tokens);\n consumeEoi(tokens);\n return new FunctionFragment(_guard, name, mutability, inputs, outputs, gas);\n }\n}\nexport class StructFragment extends NamedFragment {\n format() {\n throw new Error(\"@TODO\");\n }\n static fromString(text) {\n return StructFragment.fromTokens(lex(text));\n }\n static fromTokens(tokens) {\n const name = consumeName(\"struct\", tokens);\n const inputs = consumeParams(tokens);\n consumeEoi(tokens);\n return new StructFragment(_guard, FragmentType.struct, name, inputs);\n }\n}\n//# sourceMappingURL=fragments.js.map","export const version = \"@ethersproject/math@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { logger } from \"./logger.js\";\n// IEEE 754 support 53-bits of mantissa\nconst maxValue = 0x1fffffffffffff;\nconst nibbles = \"0123456789abcdef\";\nconst BN_0 = BigInt(0);\n// Converts a value to a BigInt, including big endian data\nexport function toBigInt(_value) {\n if (_value instanceof Uint8Array) {\n let result = \"0x0\";\n for (const v of _value) {\n result += nibbles[v >> 4];\n result += nibbles[v & 0x0f];\n }\n return BigInt(result);\n }\n return logger.getBigInt(_value, \"value\");\n}\nexport function toNumber(_value) {\n const value = toBigInt(_value);\n if (value < -maxValue || value > maxValue) {\n logger.throwArgumentError(\"overflow\", \"value\", _value);\n }\n return Number(value);\n}\n// Converts value to hex, optionally padding on the left to width bytes\nexport function toHex(_value, _width) {\n const value = logger.getBigInt(_value, \"value\");\n if (value < 0) {\n throw new Error(\"cannot convert negative value to hex\");\n }\n let result = value.toString(16);\n if (_width == null) {\n // Ensure the value is of even length\n if (result.length % 2) {\n result = \"0\" + result;\n }\n }\n else {\n const width = logger.getNumber(_width, \"width\");\n if (width * 2 < result.length) {\n throw new Error(`value ${value} exceeds width ${width}`);\n }\n // Pad the value to the required width\n while (result.length < (width * 2)) {\n result = \"0\" + result;\n }\n }\n return \"0x\" + result;\n}\nexport function toArray(_value) {\n const value = logger.getBigInt(_value, \"value\");\n if (value < 0) {\n throw new Error(\"cannot convert negative value to hex\");\n }\n if (value === BN_0) {\n return new Uint8Array([]);\n }\n let hex = value.toString(16);\n if (hex.length % 2) {\n hex = \"0\" + hex;\n }\n const result = new Uint8Array(hex.length / 2);\n for (let i = 0; i < result.length; i++) {\n const offset = i * 2;\n result[i] = parseInt(hex.substring(offset, offset + 2), 16);\n }\n return result;\n}\n//# sourceMappingURL=convert.js.map","import { logger } from \"./logger.js\";\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\n// Convert a value from a twos-compliment value\nexport function fromTwos(_value, _width) {\n const value = logger.getBigInt(_value, \"value\");\n const width = BigInt(logger.getNumber(_width, \"width\"));\n // Top bit set; treat as a negative value\n if (value >> (width - BN_1)) {\n const mask = (BN_1 << width) - BN_1;\n return -(((~value) & mask) + BN_1);\n }\n return value;\n}\n// Convert value to a twos-compliment value\nexport function toTwos(_value, _width) {\n const value = logger.getBigInt(_value, \"value\");\n const width = BigInt(logger.getNumber(_width, \"width\"));\n if (value < BN_0) {\n const mask = (BN_1 << width) - BN_1;\n return ((~(-value)) & mask) + BN_1;\n }\n return value;\n}\nexport function mask(_value, _bits) {\n const value = logger.getBigInt(_value, \"value\");\n const bits = logger.getBigInt(_bits, \"bits\");\n return value & ((BN_1 << bits) - BN_1);\n}\n//# sourceMappingURL=maths.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _FixedNumber_instances, _FixedNumber_value, _FixedNumber_checkFormat;\nimport { toBigInt, toHex } from \"./convert.js\";\nimport { logger } from \"./logger.js\";\nimport { fromTwos, toTwos } from \"./maths.js\";\nconst _constructorGuard = {};\n//const Zero = BigInt(0);\nconst NegativeOne = BigInt(-1);\nfunction throwFault(message, fault, operation, value) {\n const params = { fault: fault, operation: operation };\n if (value !== undefined) {\n params.value = value;\n }\n return logger.throwError(message, \"NUMERIC_FAULT\", params);\n}\n// Constant to pull zeros from for multipliers\nlet zeros = \"0\";\nwhile (zeros.length < 256) {\n zeros += zeros;\n}\n// Returns a string \"1\" followed by decimal \"0\"s\nfunction getMultiplier(decimals) {\n if (typeof (decimals) !== \"number\" || decimals < 0 || decimals > 256 || decimals % 1) {\n logger.throwArgumentError(\"invalid decimal length\", \"decimals\", decimals);\n }\n return BigInt(\"1\" + zeros.substring(0, decimals));\n}\nexport function formatFixed(_value, _decimals = 0) {\n let value = logger.getBigInt(_value, \"value\");\n const decimals = logger.getNumber(_decimals, \"decimals\");\n const multiplier = getMultiplier(decimals);\n const multiplierStr = String(multiplier);\n const negative = (value < 0);\n if (negative) {\n value *= NegativeOne;\n }\n let fraction = String(value % multiplier);\n // Make sure there are enough place-holders\n while (fraction.length < multiplierStr.length - 1) {\n fraction = \"0\" + fraction;\n }\n // Strip training 0\n while (fraction.length > 1 && fraction.substring(fraction.length - 1) === \"0\") {\n fraction = fraction.substring(0, fraction.length - 1);\n }\n let result = String(value / multiplier);\n if (multiplierStr.length !== 1) {\n result += \".\" + fraction;\n }\n if (negative) {\n result = \"-\" + result;\n }\n return result;\n}\nexport function parseFixed(value, _decimals = 0) {\n const decimals = logger.getNumber(_decimals, \"decimals\");\n const multiplier = getMultiplier(decimals);\n if (typeof (value) !== \"string\" || !value.match(/^-?[0-9.]+$/)) {\n logger.throwArgumentError(\"invalid decimal value\", \"value\", value);\n }\n // Is it negative?\n const negative = (value.substring(0, 1) === \"-\");\n if (negative) {\n value = value.substring(1);\n }\n if (value === \".\") {\n logger.throwArgumentError(\"missing value\", \"value\", value);\n }\n // Split it into a whole and fractional part\n const comps = value.split(\".\");\n if (comps.length > 2) {\n logger.throwArgumentError(\"too many decimal points\", \"value\", value);\n }\n let whole = (comps[0] || \"0\"), fraction = (comps[1] || \"0\");\n // Trim trialing zeros\n while (fraction[fraction.length - 1] === \"0\") {\n fraction = fraction.substring(0, fraction.length - 1);\n }\n // Check the fraction doesn't exceed our decimals size\n if (fraction.length > String(multiplier).length - 1) {\n throwFault(\"fractional component exceeds decimals\", \"underflow\", \"parseFixed\");\n }\n // If decimals is 0, we have an empty string for fraction\n if (fraction === \"\") {\n fraction = \"0\";\n }\n // Fully pad the string with zeros to get to wei\n while (fraction.length < String(multiplier).length - 1) {\n fraction += \"0\";\n }\n const wholeValue = BigInt(whole);\n const fractionValue = BigInt(fraction);\n let wei = (wholeValue * multiplier) + fractionValue;\n if (negative) {\n wei *= NegativeOne;\n }\n return wei;\n}\nexport class FixedFormat {\n constructor(constructorGuard, signed, width, decimals) {\n if (constructorGuard !== _constructorGuard) {\n logger.throwError(\"cannot use FixedFormat constructor; use FixedFormat.from\", \"UNSUPPORTED_OPERATION\", {\n operation: \"new FixedFormat\"\n });\n }\n this.signed = signed;\n this.width = width;\n this.decimals = decimals;\n this.name = (signed ? \"\" : \"u\") + \"fixed\" + String(width) + \"x\" + String(decimals);\n this._multiplier = getMultiplier(decimals);\n Object.freeze(this);\n }\n static from(value) {\n if (value instanceof FixedFormat) {\n return value;\n }\n if (typeof (value) === \"number\") {\n value = `fixed128x${value}`;\n }\n let signed = true;\n let width = 128;\n let decimals = 18;\n if (typeof (value) === \"string\") {\n if (value === \"fixed\") {\n // defaults...\n }\n else if (value === \"ufixed\") {\n signed = false;\n }\n else {\n const match = value.match(/^(u?)fixed([0-9]+)x([0-9]+)$/);\n if (!match) {\n return logger.throwArgumentError(\"invalid fixed format\", \"format\", value);\n }\n signed = (match[1] !== \"u\");\n width = parseInt(match[2]);\n decimals = parseInt(match[3]);\n }\n }\n else if (value) {\n const check = (key, type, defaultValue) => {\n if (value[key] == null) {\n return defaultValue;\n }\n if (typeof (value[key]) !== type) {\n logger.throwArgumentError(\"invalid fixed format (\" + key + \" not \" + type + \")\", \"format.\" + key, value[key]);\n }\n return value[key];\n };\n signed = check(\"signed\", \"boolean\", signed);\n width = check(\"width\", \"number\", width);\n decimals = check(\"decimals\", \"number\", decimals);\n }\n if (width % 8) {\n logger.throwArgumentError(\"invalid fixed format width (not byte aligned)\", \"format.width\", width);\n }\n if (decimals > 80) {\n logger.throwArgumentError(\"invalid fixed format (decimals too large)\", \"format.decimals\", decimals);\n }\n return new FixedFormat(_constructorGuard, signed, width, decimals);\n }\n}\nexport class FixedNumber {\n constructor(constructorGuard, hex, value, format) {\n _FixedNumber_instances.add(this);\n //#hex: string;\n _FixedNumber_value.set(this, void 0);\n if (constructorGuard !== _constructorGuard) {\n logger.throwError(\"cannot use FixedNumber constructor; use FixedNumber.from\", \"UNSUPPORTED_OPERATION\", {\n operation: \"new FixedFormat\"\n });\n }\n this.format = FixedFormat.from(format);\n //this.#hex = hex;\n __classPrivateFieldSet(this, _FixedNumber_value, value, \"f\");\n this._isFixedNumber = true;\n Object.freeze(this);\n }\n addUnsafe(other) {\n __classPrivateFieldGet(this, _FixedNumber_instances, \"m\", _FixedNumber_checkFormat).call(this, other);\n const a = parseFixed(__classPrivateFieldGet(this, _FixedNumber_value, \"f\"), this.format.decimals);\n const b = parseFixed(__classPrivateFieldGet(other, _FixedNumber_value, \"f\"), other.format.decimals);\n return FixedNumber.fromValue(a + b, this.format.decimals, this.format);\n }\n subUnsafe(other) {\n __classPrivateFieldGet(this, _FixedNumber_instances, \"m\", _FixedNumber_checkFormat).call(this, other);\n const a = parseFixed(__classPrivateFieldGet(this, _FixedNumber_value, \"f\"), this.format.decimals);\n const b = parseFixed(__classPrivateFieldGet(other, _FixedNumber_value, \"f\"), other.format.decimals);\n return FixedNumber.fromValue(a - b, this.format.decimals, this.format);\n }\n mulUnsafe(other) {\n __classPrivateFieldGet(this, _FixedNumber_instances, \"m\", _FixedNumber_checkFormat).call(this, other);\n const a = parseFixed(__classPrivateFieldGet(this, _FixedNumber_value, \"f\"), this.format.decimals);\n const b = parseFixed(__classPrivateFieldGet(other, _FixedNumber_value, \"f\"), other.format.decimals);\n return FixedNumber.fromValue((a * b) / this.format._multiplier, this.format.decimals, this.format);\n }\n divUnsafe(other) {\n __classPrivateFieldGet(this, _FixedNumber_instances, \"m\", _FixedNumber_checkFormat).call(this, other);\n const a = parseFixed(__classPrivateFieldGet(this, _FixedNumber_value, \"f\"), this.format.decimals);\n const b = parseFixed(__classPrivateFieldGet(other, _FixedNumber_value, \"f\"), other.format.decimals);\n return FixedNumber.fromValue((a * this.format._multiplier) / b, this.format.decimals, this.format);\n }\n floor() {\n const comps = this.toString().split(\".\");\n if (comps.length === 1) {\n comps.push(\"0\");\n }\n let result = FixedNumber.from(comps[0], this.format);\n const hasFraction = !comps[1].match(/^(0*)$/);\n if (this.isNegative() && hasFraction) {\n result = result.subUnsafe(ONE.toFormat(result.format));\n }\n return result;\n }\n ceiling() {\n const comps = this.toString().split(\".\");\n if (comps.length === 1) {\n comps.push(\"0\");\n }\n let result = FixedNumber.from(comps[0], this.format);\n const hasFraction = !comps[1].match(/^(0*)$/);\n if (!this.isNegative() && hasFraction) {\n result = result.addUnsafe(ONE.toFormat(result.format));\n }\n return result;\n }\n // @TODO: Support other rounding algorithms\n round(decimals) {\n if (decimals == null) {\n decimals = 0;\n }\n // If we are already in range, we're done\n const comps = this.toString().split(\".\");\n if (comps.length === 1) {\n comps.push(\"0\");\n }\n if (decimals < 0 || decimals > 80 || (decimals % 1)) {\n logger.throwArgumentError(\"invalid decimal count\", \"decimals\", decimals);\n }\n if (comps[1].length <= decimals) {\n return this;\n }\n const factor = FixedNumber.from(\"1\" + zeros.substring(0, decimals), this.format);\n const bump = BUMP.toFormat(this.format);\n return this.mulUnsafe(factor).addUnsafe(bump).floor().divUnsafe(factor);\n }\n isZero() {\n return (__classPrivateFieldGet(this, _FixedNumber_value, \"f\") === \"0.0\" || __classPrivateFieldGet(this, _FixedNumber_value, \"f\") === \"0\");\n }\n isNegative() {\n return (__classPrivateFieldGet(this, _FixedNumber_value, \"f\")[0] === \"-\");\n }\n toString() { return __classPrivateFieldGet(this, _FixedNumber_value, \"f\"); }\n toHexString(_width) {\n throw new Error(\"TODO\");\n /*\n return toHex();\n if (width == null) { return this.#hex; }\n\n const width = logger.getNumeric(_width);\n if (width % 8) { logger.throwArgumentError(\"invalid byte width\", \"width\", width); }\n\n const hex = BigNumber.from(this.#hex).fromTwos(this.format.width).toTwos(width).toHexString();\n return zeroPadLeft(hex, width / 8);\n */\n }\n toUnsafeFloat() { return parseFloat(this.toString()); }\n toFormat(format) {\n return FixedNumber.fromString(__classPrivateFieldGet(this, _FixedNumber_value, \"f\"), format);\n }\n static fromValue(value, decimals = 0, format = \"fixed\") {\n return FixedNumber.fromString(formatFixed(value, decimals), FixedFormat.from(format));\n }\n static fromString(value, format = \"fixed\") {\n const fixedFormat = FixedFormat.from(format);\n const numeric = parseFixed(value, fixedFormat.decimals);\n if (!fixedFormat.signed && numeric < 0) {\n throwFault(\"unsigned value cannot be negative\", \"overflow\", \"value\", value);\n }\n const hex = (function () {\n if (fixedFormat.signed) {\n return toHex(toTwos(numeric, fixedFormat.width));\n }\n return toHex(numeric, fixedFormat.width / 8);\n })();\n const decimal = formatFixed(numeric, fixedFormat.decimals);\n return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat);\n }\n static fromBytes(_value, format = \"fixed\") {\n const value = logger.getBytes(_value, \"value\");\n const fixedFormat = FixedFormat.from(format);\n if (value.length > fixedFormat.width / 8) {\n throw new Error(\"overflow\");\n }\n let numeric = toBigInt(value);\n if (fixedFormat.signed) {\n numeric = fromTwos(numeric, fixedFormat.width);\n }\n const hex = toHex(toTwos(numeric, (fixedFormat.signed ? 0 : 1) + fixedFormat.width));\n const decimal = formatFixed(numeric, fixedFormat.decimals);\n return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat);\n }\n static from(value, format) {\n if (typeof (value) === \"string\") {\n return FixedNumber.fromString(value, format);\n }\n if (value instanceof Uint8Array) {\n return FixedNumber.fromBytes(value, format);\n }\n try {\n return FixedNumber.fromValue(value, 0, format);\n }\n catch (error) {\n // Allow NUMERIC_FAULT to bubble up\n if (error.code !== \"INVALID_ARGUMENT\") {\n throw error;\n }\n }\n return logger.throwArgumentError(\"invalid FixedNumber value\", \"value\", value);\n }\n static isFixedNumber(value) {\n return !!(value && value._isFixedNumber);\n }\n}\n_FixedNumber_value = new WeakMap(), _FixedNumber_instances = new WeakSet(), _FixedNumber_checkFormat = function _FixedNumber_checkFormat(other) {\n if (this.format.name !== other.format.name) {\n logger.throwArgumentError(\"incompatible format; use fixedNumber.toFormat\", \"other\", other);\n }\n};\nconst ONE = FixedNumber.from(1);\nconst BUMP = FixedNumber.from(\"0.5\");\n//# sourceMappingURL=fixednumber.js.map","import { toBigInt, toHex } from \"./convert.js\";\nimport { logger } from \"./logger.js\";\nconst Alphabet = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\";\nlet Lookup = null;\nfunction getAlpha(letter) {\n if (Lookup == null) {\n Lookup = {};\n for (let i = 0; i < Alphabet.length; i++) {\n Lookup[Alphabet[i]] = BigInt(i);\n }\n }\n const result = Lookup[letter];\n if (result == null) {\n logger.throwArgumentError(`invalid base58 value`, \"letter\", letter);\n }\n return result;\n}\nconst BN_0 = BigInt(0);\nconst BN_58 = BigInt(58);\nexport function encodeBase58(_value) {\n let value = toBigInt(logger.getBytes(_value));\n let result = \"\";\n while (value) {\n result = Alphabet[Number(value % BN_58)] + result;\n value /= BN_58;\n }\n return result;\n}\nexport function decodeBase58(value) {\n let result = BN_0;\n for (let i = 0; i < value.length; i++) {\n result *= BN_58;\n result += getAlpha(value[i]);\n }\n return toHex(result);\n}\n//# sourceMappingURL=base58.js.map","export function isHexString(value, length) {\n if (typeof (value) !== \"string\" || !value.match(/^0x[0-9A-Fa-f]*$/)) {\n return false;\n }\n if (typeof (length) === \"number\" && value.length !== 2 + 2 * length) {\n return false;\n }\n if (length === true && (value.length % 2) !== 0) {\n return false;\n }\n return true;\n}\n/*\nfunction _isByte(value: number): boolean {\n return (typeof(value) === \"number\" && value >= 0 && value < 256 && Math.floor(value) === value);\n}\nexport function isBytes(value: any): value is Bytes {\n if (value == null) { return false; }\n\n if (value instanceof Uint8Array) { return true; }\n if (typeof(value) === \"string\") { return false; }\n\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n if (!_isByte(value[i])) { return false; }\n }\n return true;\n }\n\n return false;\n}\n*/\nexport function isBytesLike(value) {\n return (isHexString(value, true) || (value instanceof Uint8Array));\n}\n//# sourceMappingURL=check.js.map","export const version = \"@ethersproject/bytes@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { version } from \"./_version.js\";\nimport { Logger } from \"@ethersproject/logger\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { isBytesLike } from \"./check.js\";\nimport { logger } from \"./logger.js\";\nlet BN_8 = null;\nlet BN_255 = null;\ntry {\n BN_8 = BigInt(\"8\");\n BN_255 = BigInt(\"255\");\n}\ncatch (error) {\n console.log(\"Unsupported bigint\", error);\n}\nfunction isHexable(value) {\n return (value && typeof (value.toHexString) === \"function\");\n}\nexport function arrayify(data) {\n if (data == null) {\n logger.throwArgumentError(\"cannot arrayify nullish\", \"data\", data);\n }\n if (typeof (data) === \"number\") {\n logger.assertUint53(data);\n const result = [];\n while (data) {\n result.unshift(data & 0xff);\n data = parseInt(String(data / 256));\n }\n if (result.length === 0) {\n result.push(0);\n }\n return new Uint8Array(result);\n }\n if (BN_8 && typeof (data) === \"bigint\") {\n const result = [];\n while (data) {\n result.unshift(Number(data & BN_255));\n data >>= BN_8;\n }\n if (result.length === 0) {\n result.push(0);\n }\n return new Uint8Array(result);\n }\n if (isHexable(data)) {\n return arrayify(data.toHexString());\n }\n if (typeof (data) === \"string\") {\n let hex = data;\n //if (options.allowMissingPrefix && hex.substring(0, 2) !== \"0x\") {\n // hex = \"0x\" + hex;\n //}\n if (!hex.match(/^0x[0-9a-f]*$/i)) {\n throw new RangeError(`invalid hex data string (${JSON.stringify(data)})`);\n }\n const result = [];\n for (let i = 2; i < hex.length; i += 2) {\n result.push(parseInt(hex.substring(i, i + 2), 16));\n }\n return new Uint8Array(result);\n }\n if (data instanceof Uint8Array) {\n return new Uint8Array(data);\n }\n throw new TypeError(`cannot arrayify ${JSON.stringify(data)}`);\n}\nexport function _noCopyArrayify(data) {\n if (!isBytesLike(data)) {\n logger.throwArgumentError(\"invalid BytesLike value\", \"data\", data);\n } // @TODO: ArgumentE>\n if (data instanceof Uint8Array) {\n return data;\n }\n return arrayify(data);\n}\n//# sourceMappingURL=array.js.map","import { logger } from \"./logger.js\";\nexport function decodeBase64(textData) {\n return new Uint8Array(Buffer.from(textData, \"base64\"));\n}\n;\nexport function encodeBase64(data) {\n return Buffer.from(logger.getBytes(data, \"data\")).toString(\"base64\");\n}\n//# sourceMappingURL=base64.js.map","import { arrayify, _noCopyArrayify } from \"./array.js\";\nconst HexCharacters = \"0123456789abcdef\";\nexport function hexlify(data) {\n const bytes = _noCopyArrayify(data);\n let result = \"0x\";\n for (let i = 0; i < bytes.length; i++) {\n const v = bytes[i];\n result += HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f];\n }\n return result;\n}\nexport function quantity(value) {\n let result = hexlify(arrayify(value)).substring(2);\n while (result.substring(0, 1) === \"0\") {\n result = result.substring(1);\n }\n if (result === \"\") {\n result = \"0\";\n }\n return \"0x\" + result;\n}\n//# sourceMappingURL=hex.js.map","import { _noCopyArrayify } from \"./array.js\";\nimport { isHexString } from \"./check.js\";\nimport { hexlify } from \"./hex.js\";\nimport { logger } from \"./logger.js\";\nexport function concat(datas) {\n return \"0x\" + datas.map((d) => hexlify(d).substring(2)).join(\"\");\n}\nexport function dataLength(data) {\n if (isHexString(data, true)) {\n return (data.length - 2) / 2;\n }\n return _noCopyArrayify(data).length;\n}\nexport function dataSlice(data, start, end) {\n const bytes = _noCopyArrayify(data);\n if (end != null && end > bytes.length) {\n logger.throwError(\"cannot slice beyond data bounds\", \"BUFFER_OVERRUN\", {\n buffer: bytes, length: bytes.length, offset: end\n });\n }\n return hexlify(bytes.slice((start == null) ? 0 : start, (end == null) ? bytes.length : end));\n}\nexport function stripZerosLeft(data) {\n let bytes = hexlify(data).substring(2);\n while (bytes.substring(0, 2) == \"00\") {\n bytes = bytes.substring(2);\n }\n return \"0x\" + bytes;\n}\n//# sourceMappingURL=data.js.map","import { _noCopyArrayify } from \"./array.js\";\nimport { hexlify } from \"./hex.js\";\nimport { logger } from \"./logger.js\";\nfunction zeroPad(data, length, left) {\n const bytes = _noCopyArrayify(data);\n if (length < bytes.length) {\n logger.throwError(\"padding exceeds data length\", \"BUFFER_OVERRUN\", {\n buffer: new Uint8Array(bytes),\n length: length,\n offset: length + 1\n });\n }\n const result = new Uint8Array(length);\n result.fill(0);\n if (left) {\n result.set(bytes, length - bytes.length);\n }\n else {\n result.set(bytes, 0);\n }\n return hexlify(result);\n}\nexport function zeroPadLeft(data, length) {\n return zeroPad(data, length, true);\n}\nexport function zeroPadRight(data, length) {\n return zeroPad(data, length, false);\n}\n//# sourceMappingURL=pad.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Result_instances, _Result_indices, _Result_throwError, _Writer_instances, _Writer_data, _Writer_dataLength, _Writer_writeData, _Reader_instances, _Reader_data, _Reader_offset, _Reader_coerceFunc, _Reader_peekBytes;\nimport { toArray, toBigInt, toNumber } from \"@ethersproject/math\";\nimport { arrayify, concat, hexlify } from \"@ethersproject/bytes\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { logger } from \"../logger.js\";\nexport const WordSize = 32;\nconst Padding = new Uint8Array(WordSize);\n// Properties used to immediate pass through to the underlying object\n// - `then` is used to detect if an object is a Promise for await\nconst passProperties = [\"then\"];\nconst _guard = {};\nexport class Result extends Array {\n constructor(guard, items, keys) {\n logger.assertPrivate(guard, _guard, \"Result\");\n super(...items);\n _Result_instances.add(this);\n _Result_indices.set(this, void 0);\n // Name lookup table\n __classPrivateFieldSet(this, _Result_indices, new Map(), \"f\");\n if (keys) {\n keys.forEach((key, index) => {\n if (key == null) {\n return;\n }\n if (__classPrivateFieldGet(this, _Result_indices, \"f\").has(key)) {\n (__classPrivateFieldGet(this, _Result_indices, \"f\").get(key)).push(index);\n }\n else {\n __classPrivateFieldGet(this, _Result_indices, \"f\").set(key, [index]);\n }\n });\n }\n Object.freeze(this);\n return new Proxy(this, {\n get: (target, prop, receiver) => {\n if (typeof (prop) === \"string\") {\n if (prop.match(/^[0-9]+$/)) {\n const index = logger.getNumber(prop, \"%index\");\n if (index < 0 || index >= this.length) {\n throw new RangeError(\"out of result range\");\n }\n const item = target[index];\n if (item instanceof Error) {\n __classPrivateFieldGet(this, _Result_instances, \"m\", _Result_throwError).call(this, `index ${index}`, item);\n }\n return item;\n }\n // Pass important checks (like `then` for Promise) through\n if (prop in target || passProperties.indexOf(prop) >= 0) {\n return Reflect.get(target, prop, receiver);\n }\n // Something that could be a result keyword value\n if (!(prop in target)) {\n return target.getValue(prop);\n }\n }\n return Reflect.get(target, prop, receiver);\n }\n });\n }\n slice(start, end) {\n if (start == null) {\n start = 0;\n }\n if (end == null) {\n end = this.length;\n }\n const result = [];\n for (let i = start; i < end; i++) {\n let value;\n try {\n value = this[i];\n }\n catch (error) {\n value = error.error;\n }\n result.push(value);\n }\n return result;\n }\n getValue(name) {\n const index = __classPrivateFieldGet(this, _Result_indices, \"f\").get(name);\n if (index != null && index.length === 1) {\n const item = this[index[0]];\n if (item instanceof Error) {\n __classPrivateFieldGet(this, _Result_instances, \"m\", _Result_throwError).call(this, `property ${JSON.stringify(name)}`, item);\n }\n return item;\n }\n throw new Error(`no named parameter: ${JSON.stringify(name)}`);\n }\n static fromItems(items, keys) {\n return new Result(_guard, items, keys);\n }\n}\n_Result_indices = new WeakMap(), _Result_instances = new WeakSet(), _Result_throwError = function _Result_throwError(name, error) {\n const wrapped = new Error(`deferred error during ABI decoding triggered accessing ${name}`);\n wrapped.error = error;\n throw wrapped;\n};\nexport function checkResultErrors(result) {\n // Find the first error (if any)\n const errors = [];\n const checkErrors = function (path, object) {\n if (!Array.isArray(object)) {\n return;\n }\n for (let key in object) {\n const childPath = path.slice();\n childPath.push(key);\n try {\n checkErrors(childPath, object[key]);\n }\n catch (error) {\n errors.push({ path: childPath, error: error });\n }\n }\n };\n checkErrors([], result);\n return errors;\n}\nfunction getValue(value) {\n let bytes = toArray(value);\n if (bytes.length > WordSize) {\n logger.throwError(\"value out-of-bounds\", \"BUFFER_OVERRUN\", {\n buffer: bytes,\n length: WordSize,\n offset: bytes.length\n });\n }\n if (bytes.length % WordSize) {\n bytes = arrayify(concat([Padding.slice(bytes.length % WordSize), bytes]));\n }\n return bytes;\n}\nexport class Coder {\n constructor(name, type, localName, dynamic) {\n defineProperties(this, { name, type, localName, dynamic }, {\n name: \"string\", type: \"string\", localName: \"string\", dynamic: \"boolean\"\n });\n }\n _throwError(message, value) {\n return logger.throwArgumentError(message, this.localName, value);\n }\n}\nexport class Writer {\n constructor() {\n _Writer_instances.add(this);\n // An array of WordSize lengthed objects to concatenation\n _Writer_data.set(this, void 0);\n _Writer_dataLength.set(this, void 0);\n __classPrivateFieldSet(this, _Writer_data, [], \"f\");\n __classPrivateFieldSet(this, _Writer_dataLength, 0, \"f\");\n }\n get data() {\n return concat(__classPrivateFieldGet(this, _Writer_data, \"f\"));\n }\n get length() { return __classPrivateFieldGet(this, _Writer_dataLength, \"f\"); }\n appendWriter(writer) {\n return __classPrivateFieldGet(this, _Writer_instances, \"m\", _Writer_writeData).call(this, arrayify(writer.data));\n }\n // Arrayish item; pad on the right to *nearest* WordSize\n writeBytes(value) {\n let bytes = arrayify(value);\n const paddingOffset = bytes.length % WordSize;\n if (paddingOffset) {\n bytes = arrayify(concat([bytes, Padding.slice(paddingOffset)]));\n }\n return __classPrivateFieldGet(this, _Writer_instances, \"m\", _Writer_writeData).call(this, bytes);\n }\n // Numeric item; pad on the left *to* WordSize\n writeValue(value) {\n return __classPrivateFieldGet(this, _Writer_instances, \"m\", _Writer_writeData).call(this, getValue(value));\n }\n // Inserts a numeric place-holder, returning a callback that can\n // be used to asjust the value later\n writeUpdatableValue() {\n const offset = __classPrivateFieldGet(this, _Writer_data, \"f\").length;\n __classPrivateFieldGet(this, _Writer_data, \"f\").push(Padding);\n __classPrivateFieldSet(this, _Writer_dataLength, __classPrivateFieldGet(this, _Writer_dataLength, \"f\") + WordSize, \"f\");\n return (value) => {\n __classPrivateFieldGet(this, _Writer_data, \"f\")[offset] = getValue(value);\n };\n }\n}\n_Writer_data = new WeakMap(), _Writer_dataLength = new WeakMap(), _Writer_instances = new WeakSet(), _Writer_writeData = function _Writer_writeData(data) {\n __classPrivateFieldGet(this, _Writer_data, \"f\").push(data);\n __classPrivateFieldSet(this, _Writer_dataLength, __classPrivateFieldGet(this, _Writer_dataLength, \"f\") + data.length, \"f\");\n return data.length;\n};\nexport class Reader {\n constructor(data, coerceFunc, allowLoose) {\n _Reader_instances.add(this);\n _Reader_data.set(this, void 0);\n _Reader_offset.set(this, void 0);\n _Reader_coerceFunc.set(this, void 0);\n defineProperties(this, { allowLoose: !!allowLoose });\n __classPrivateFieldSet(this, _Reader_data, arrayify(data), \"f\");\n __classPrivateFieldSet(this, _Reader_coerceFunc, coerceFunc || Reader.coerce, \"f\");\n __classPrivateFieldSet(this, _Reader_offset, 0, \"f\");\n }\n get data() { return hexlify(__classPrivateFieldGet(this, _Reader_data, \"f\")); }\n get dataLength() { return __classPrivateFieldGet(this, _Reader_data, \"f\").length; }\n get consumed() { return __classPrivateFieldGet(this, _Reader_offset, \"f\"); }\n get bytes() { return new Uint8Array(__classPrivateFieldGet(this, _Reader_data, \"f\")); }\n // The default Coerce function\n static coerce(type, value) {\n let match = type.match(\"^u?int([0-9]+)$\");\n if (match && parseInt(match[1]) <= 48) {\n value = value.toNumber();\n }\n return value;\n }\n coerce(type, value) {\n return __classPrivateFieldGet(this, _Reader_coerceFunc, \"f\").call(this, type, value);\n }\n // Create a sub-reader with the same underlying data, but offset\n subReader(offset) {\n return new Reader(__classPrivateFieldGet(this, _Reader_data, \"f\").slice(__classPrivateFieldGet(this, _Reader_offset, \"f\") + offset), __classPrivateFieldGet(this, _Reader_coerceFunc, \"f\"), this.allowLoose);\n }\n // Read bytes\n readBytes(length, loose) {\n let bytes = __classPrivateFieldGet(this, _Reader_instances, \"m\", _Reader_peekBytes).call(this, 0, length, !!loose);\n __classPrivateFieldSet(this, _Reader_offset, __classPrivateFieldGet(this, _Reader_offset, \"f\") + bytes.length, \"f\");\n // @TODO: Make sure the length..end bytes are all 0?\n return bytes.slice(0, length);\n }\n // Read a numeric values\n readValue() {\n return toBigInt(this.readBytes(WordSize));\n }\n readIndex() {\n return toNumber(this.readBytes(WordSize));\n }\n}\n_Reader_data = new WeakMap(), _Reader_offset = new WeakMap(), _Reader_coerceFunc = new WeakMap(), _Reader_instances = new WeakSet(), _Reader_peekBytes = function _Reader_peekBytes(offset, length, loose) {\n let alignedLength = Math.ceil(length / WordSize) * WordSize;\n if (__classPrivateFieldGet(this, _Reader_offset, \"f\") + alignedLength > __classPrivateFieldGet(this, _Reader_data, \"f\").length) {\n if (this.allowLoose && loose && __classPrivateFieldGet(this, _Reader_offset, \"f\") + length <= __classPrivateFieldGet(this, _Reader_data, \"f\").length) {\n alignedLength = length;\n }\n else {\n logger.throwError(\"data out-of-bounds\", \"BUFFER_OVERRUN\", {\n buffer: arrayify(__classPrivateFieldGet(this, _Reader_data, \"f\")),\n length: __classPrivateFieldGet(this, _Reader_data, \"f\").length,\n offset: __classPrivateFieldGet(this, _Reader_offset, \"f\") + alignedLength\n });\n }\n }\n return __classPrivateFieldGet(this, _Reader_data, \"f\").slice(__classPrivateFieldGet(this, _Reader_offset, \"f\"), __classPrivateFieldGet(this, _Reader_offset, \"f\") + alignedLength);\n};\n//# sourceMappingURL=abstract-coder.js.map","/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// The import here is via the package name. This is to ensure\n// that exports mapping/resolution does fall into place.\nimport { crypto } from '@noble/hashes/crypto';\n// Cast array to different type\nexport const u8 = (arr) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr) => new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n// Cast array to view\nexport const createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word, shift) => (word << (32 - shift)) | (word >>> shift);\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\n// There is almost no big endian hardware, but js typed arrays uses platform specific endianess.\n// So, just to be sure not to corrupt anything.\nif (!isLE)\n throw new Error('Non little-endian hardware is not supported');\nconst hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xde, 0xad, 0xbe, 0xef]))\n */\nexport function bytesToHex(uint8a) {\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < uint8a.length; i++) {\n hex += hexes[uint8a[i]];\n }\n return hex;\n}\n/**\n * @example hexToBytes('deadbeef')\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string') {\n throw new TypeError('hexToBytes: expected string, got ' + typeof hex);\n }\n if (hex.length % 2)\n throw new Error('hexToBytes: received invalid unpadded hex');\n const array = new Uint8Array(hex.length / 2);\n for (let i = 0; i < array.length; i++) {\n const j = i * 2;\n const hexByte = hex.slice(j, j + 2);\n const byte = Number.parseInt(hexByte, 16);\n if (Number.isNaN(byte))\n throw new Error('Invalid byte sequence');\n array[i] = byte;\n }\n return array;\n}\n// Currently avoid insertion of polyfills with packers (browserify/webpack/etc)\n// But setTimeout is pretty slow, maybe worth to investigate howto do minimal polyfill here\nexport const nextTick = (() => {\n const nodeRequire = typeof module !== 'undefined' &&\n typeof module.require === 'function' &&\n module.require.bind(module);\n try {\n if (nodeRequire) {\n const { setImmediate } = nodeRequire('timers');\n return () => new Promise((resolve) => setImmediate(resolve));\n }\n }\n catch (e) { }\n return () => new Promise((resolve) => setTimeout(resolve, 0));\n})();\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await nextTick();\n ts += diff;\n }\n}\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string') {\n throw new TypeError(`utf8ToBytes expected string, got ${typeof str}`);\n }\n return new TextEncoder().encode(str);\n}\nexport function toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n if (!(data instanceof Uint8Array))\n throw new TypeError(`Expected input type is Uint8Array (got ${typeof data})`);\n return data;\n}\n/**\n * Concats Uint8Array-s into one; like `Buffer.concat([buf1, buf2])`\n * @example concatBytes(buf1, buf2)\n */\nexport function concatBytes(...arrays) {\n if (!arrays.every((a) => a instanceof Uint8Array))\n throw new Error('Uint8Array list expected');\n if (arrays.length === 1)\n return arrays[0];\n const length = arrays.reduce((a, arr) => a + arr.length, 0);\n const result = new Uint8Array(length);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const arr = arrays[i];\n result.set(arr, pad);\n pad += arr.length;\n }\n return result;\n}\nexport function assertNumber(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error(`Wrong positive integer: ${n}`);\n}\nexport function assertBool(b) {\n if (typeof b !== 'boolean') {\n throw new Error(`Expected boolean, not ${b}`);\n }\n}\nexport function assertBytes(bytes, ...lengths) {\n if (bytes instanceof Uint8Array && (!lengths.length || lengths.includes(bytes.length))) {\n return;\n }\n throw new TypeError(`Expected ${lengths} bytes, not ${typeof bytes} with length=${bytes.length}`);\n}\nexport function assertHash(hash) {\n if (typeof hash !== 'function' || typeof hash.create !== 'function')\n throw new Error('Hash should be wrapped by utils.wrapConstructor');\n assertNumber(hash.outputLen);\n assertNumber(hash.blockLen);\n}\n// For runtime check if class implements interface\nexport class Hash {\n // Safe version that clones internal state\n clone() {\n return this._cloneInto();\n }\n}\n// Check if object doens't have custom constructor (like Uint8Array/Array)\nconst isPlainObject = (obj) => Object.prototype.toString.call(obj) === '[object Object]' && obj.constructor === Object;\nexport function checkOpts(def, _opts) {\n if (_opts !== undefined && (typeof _opts !== 'object' || !isPlainObject(_opts)))\n throw new TypeError('Options should be object or undefined');\n const opts = Object.assign(def, _opts);\n return opts;\n}\nexport function wrapConstructor(hashConstructor) {\n const hashC = (message) => hashConstructor().update(toBytes(message)).digest();\n const tmp = hashConstructor();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashConstructor();\n return hashC;\n}\nexport function wrapConstructorWithOpts(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\n/**\n * Secure PRNG\n */\nexport function randomBytes(bytesLength = 32) {\n if (crypto.web) {\n return crypto.web.getRandomValues(new Uint8Array(bytesLength));\n }\n else if (crypto.node) {\n return new Uint8Array(crypto.node.randomBytes(bytesLength).buffer);\n }\n else {\n throw new Error(\"The environment doesn't have randomBytes function\");\n }\n}\n","import { assertHash, Hash, toBytes } from './utils.js';\n// HMAC (RFC 2104)\nclass HMAC extends Hash {\n constructor(hash, _key) {\n super();\n this.finished = false;\n this.destroyed = false;\n assertHash(hash);\n const key = toBytes(_key);\n this.iHash = hash.create();\n if (!(this.iHash instanceof Hash))\n throw new TypeError('Expected instance of class which extends utils.Hash');\n const blockLen = (this.blockLen = this.iHash.blockLen);\n this.outputLen = this.iHash.outputLen;\n const pad = new Uint8Array(blockLen);\n // blockLen can be bigger than outputLen\n pad.set(key.length > this.iHash.blockLen ? hash.create().update(key).digest() : key);\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 0x36;\n this.iHash.update(pad);\n // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n this.oHash = hash.create();\n // Undo internal XOR && apply outer XOR\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 0x36 ^ 0x5c;\n this.oHash.update(pad);\n pad.fill(0);\n }\n update(buf) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n this.iHash.update(buf);\n return this;\n }\n digestInto(out) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n if (!(out instanceof Uint8Array) || out.length !== this.outputLen)\n throw new Error('HMAC: Invalid output buffer');\n if (this.finished)\n throw new Error('digest() was already called');\n this.finished = true;\n this.iHash.digestInto(out);\n this.oHash.update(out);\n this.oHash.digestInto(out);\n this.destroy();\n }\n digest() {\n const out = new Uint8Array(this.oHash.outputLen);\n this.digestInto(out);\n return out;\n }\n _cloneInto(to) {\n // Create new instance without calling constructor since key already in state and we don't know it.\n to || (to = Object.create(Object.getPrototypeOf(this), {}));\n const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n to = to;\n to.finished = finished;\n to.destroyed = destroyed;\n to.blockLen = blockLen;\n to.outputLen = outputLen;\n to.oHash = oHash._cloneInto(to.oHash);\n to.iHash = iHash._cloneInto(to.iHash);\n return to;\n }\n destroy() {\n this.destroyed = true;\n this.oHash.destroy();\n this.iHash.destroy();\n }\n}\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n */\nexport const hmac = (hash, key, message) => new HMAC(hash, key).update(message).digest();\nhmac.create = (hash, key) => new HMAC(hash, key);\n","import { hmac } from './hmac.js';\n// prettier-ignore\nimport { createView, toBytes, assertNumber, assertHash, checkOpts, asyncLoop } from './utils.js';\n// Common prologue and epilogue for sync/async functions\nfunction pbkdf2Init(hash, _password, _salt, _opts) {\n assertHash(hash);\n const opts = checkOpts({ dkLen: 32, asyncTick: 10 }, _opts);\n const { c, dkLen, asyncTick } = opts;\n assertNumber(c);\n assertNumber(dkLen);\n assertNumber(asyncTick);\n if (c < 1)\n throw new Error('PBKDF2: iterations (c) should be >= 1');\n const password = toBytes(_password);\n const salt = toBytes(_salt);\n // DK = PBKDF2(PRF, Password, Salt, c, dkLen);\n const DK = new Uint8Array(dkLen);\n // U1 = PRF(Password, Salt + INT_32_BE(i))\n const PRF = hmac.create(hash, password);\n const PRFSalt = PRF._cloneInto().update(salt);\n return { c, dkLen, asyncTick, DK, PRF, PRFSalt };\n}\nfunction pbkdf2Output(PRF, PRFSalt, DK, prfW, u) {\n PRF.destroy();\n PRFSalt.destroy();\n if (prfW)\n prfW.destroy();\n u.fill(0);\n return DK;\n}\n/**\n * PBKDF2-HMAC: RFC 2898 key derivation function\n * @param hash - hash function that would be used e.g. sha256\n * @param password - password from which a derived key is generated\n * @param salt - cryptographic salt\n * @param opts - {c, dkLen} where c is work factor and dkLen is output message size\n */\nexport function pbkdf2(hash, password, salt, opts) {\n const { c, dkLen, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts);\n let prfW; // Working copy\n const arr = new Uint8Array(4);\n const view = createView(arr);\n const u = new Uint8Array(PRF.outputLen);\n // DK = T1 + T2 + ⋯ + Tdklen/hlen\n for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) {\n // Ti = F(Password, Salt, c, i)\n const Ti = DK.subarray(pos, pos + PRF.outputLen);\n view.setInt32(0, ti, false);\n // F(Password, Salt, c, i) = U1 ^ U2 ^ ⋯ ^ Uc\n // U1 = PRF(Password, Salt + INT_32_BE(i))\n (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u);\n Ti.set(u.subarray(0, Ti.length));\n for (let ui = 1; ui < c; ui++) {\n // Uc = PRF(Password, Uc−1)\n PRF._cloneInto(prfW).update(u).digestInto(u);\n for (let i = 0; i < Ti.length; i++)\n Ti[i] ^= u[i];\n }\n }\n return pbkdf2Output(PRF, PRFSalt, DK, prfW, u);\n}\nexport async function pbkdf2Async(hash, password, salt, opts) {\n const { c, dkLen, asyncTick, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts);\n let prfW; // Working copy\n const arr = new Uint8Array(4);\n const view = createView(arr);\n const u = new Uint8Array(PRF.outputLen);\n // DK = T1 + T2 + ⋯ + Tdklen/hlen\n for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) {\n // Ti = F(Password, Salt, c, i)\n const Ti = DK.subarray(pos, pos + PRF.outputLen);\n view.setInt32(0, ti, false);\n // F(Password, Salt, c, i) = U1 ^ U2 ^ ⋯ ^ Uc\n // U1 = PRF(Password, Salt + INT_32_BE(i))\n (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u);\n Ti.set(u.subarray(0, Ti.length));\n await asyncLoop(c - 1, asyncTick, (i) => {\n // Uc = PRF(Password, Uc−1)\n PRF._cloneInto(prfW).update(u).digestInto(u);\n for (let i = 0; i < Ti.length; i++)\n Ti[i] ^= u[i];\n });\n }\n return pbkdf2Output(PRF, PRFSalt, DK, prfW, u);\n}\n","import { Hash, createView, toBytes } from './utils.js';\n// Polyfill for Safari 14\nfunction setBigUint64(view, byteOffset, value, isLE) {\n if (typeof view.setBigUint64 === 'function')\n return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number((value >> _32n) & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n// Base SHA2 class (RFC 6234)\nexport class SHA2 extends Hash {\n constructor(blockLen, outputLen, padOffset, isLE) {\n super();\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.finished = false;\n this.length = 0;\n this.pos = 0;\n this.destroyed = false;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n const { view, buffer, blockLen, finished } = this;\n if (finished)\n throw new Error('digest() was already called');\n data = toBytes(data);\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen)\n this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n if (!(out instanceof Uint8Array) || out.length < this.outputLen)\n throw new Error('_Sha2: Invalid output buffer');\n if (this.finished)\n throw new Error('digest() was already called');\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n this.buffer.subarray(pos).fill(0);\n // we have less than padOffset left in buffer, so we cannot put length in current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++)\n buffer[i] = 0;\n // NOTE: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64bit of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n this.get().forEach((v, i) => oview.setUint32(4 * i, v, isLE));\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to) {\n to || (to = new this.constructor());\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.length = length;\n to.pos = pos;\n to.finished = finished;\n to.destroyed = destroyed;\n if (length % blockLen)\n to.buffer.set(buffer);\n return to;\n }\n}\n","import { SHA2 } from './_sha2.js';\nimport { rotr, wrapConstructor } from './utils.js';\n// Choice: a ? b : c\nconst Chi = (a, b, c) => (a & b) ^ (~a & c);\n// Majority function, true if any two inpust is true\nconst Maj = (a, b, c) => (a & b) ^ (a & c) ^ (b & c);\n// Round constants:\n// first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311)\n// prettier-ignore\nconst SHA256_K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n// Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):\n// prettier-ignore\nconst IV = new Uint32Array([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n]);\n// Temporary buffer, not used to store anything between runs\n// Named this way because it matches specification.\nconst SHA256_W = new Uint32Array(64);\nclass SHA256 extends SHA2 {\n constructor() {\n super(64, 32, 8, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n this.A = IV[0] | 0;\n this.B = IV[1] | 0;\n this.C = IV[2] | 0;\n this.D = IV[3] | 0;\n this.E = IV[4] | 0;\n this.F = IV[5] | 0;\n this.G = IV[6] | 0;\n this.H = IV[7] | 0;\n }\n get() {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n set(A, B, C, D, E, F, G, H) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4)\n SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = (sigma0 + Maj(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n roundClean() {\n SHA256_W.fill(0);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n this.buffer.fill(0);\n }\n}\n/**\n * SHA2-256 hash function\n * @param message - data that would be hashed\n */\nexport const sha256 = wrapConstructor(() => new SHA256());\n","const U32_MASK64 = BigInt(2 ** 32 - 1);\nconst _32n = BigInt(32);\nexport function fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\nexport function split(lst, le = false) {\n let Ah = new Uint32Array(lst.length);\n let Al = new Uint32Array(lst.length);\n for (let i = 0; i < lst.length; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nexport const toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nexport const shrSH = (h, l, s) => h >>> s;\nexport const shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nexport const rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\nexport const rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nexport const rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\nexport const rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nexport const rotr32H = (h, l) => l;\nexport const rotr32L = (h, l) => h;\n// Left rotate for Shift in [1, 32)\nexport const rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\nexport const rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nexport const rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\nexport const rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nexport function add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nexport const add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nexport const add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nexport const add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nexport const add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nexport const add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nexport const add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n","import { SHA2 } from './_sha2.js';\nimport * as u64 from './_u64.js';\nimport { wrapConstructor } from './utils.js';\n// Round contants (first 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409):\n// prettier-ignore\nconst [SHA512_Kh, SHA512_Kl] = u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n)));\n// Temporary buffer, not used to store anything between runs\nconst SHA512_W_H = new Uint32Array(80);\nconst SHA512_W_L = new Uint32Array(80);\nexport class SHA512 extends SHA2 {\n constructor() {\n super(128, 64, 16, false);\n // We cannot use array here since array allows indexing by variable which means optimizer/compiler cannot use registers.\n // Also looks cleaner and easier to verify with spec.\n // Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = 0x6a09e667 | 0;\n this.Al = 0xf3bcc908 | 0;\n this.Bh = 0xbb67ae85 | 0;\n this.Bl = 0x84caa73b | 0;\n this.Ch = 0x3c6ef372 | 0;\n this.Cl = 0xfe94f82b | 0;\n this.Dh = 0xa54ff53a | 0;\n this.Dl = 0x5f1d36f1 | 0;\n this.Eh = 0x510e527f | 0;\n this.El = 0xade682d1 | 0;\n this.Fh = 0x9b05688c | 0;\n this.Fl = 0x2b3e6c1f | 0;\n this.Gh = 0x1f83d9ab | 0;\n this.Gl = 0xfb41bd6b | 0;\n this.Hh = 0x5be0cd19 | 0;\n this.Hl = 0x137e2179 | 0;\n }\n // prettier-ignore\n get() {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl) {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n roundClean() {\n SHA512_W_H.fill(0);\n SHA512_W_L.fill(0);\n }\n destroy() {\n this.buffer.fill(0);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\nclass SHA512_256 extends SHA512 {\n constructor() {\n super();\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = 0x22312194 | 0;\n this.Al = 0xfc2bf72c | 0;\n this.Bh = 0x9f555fa3 | 0;\n this.Bl = 0xc84c64c2 | 0;\n this.Ch = 0x2393b86b | 0;\n this.Cl = 0x6f53b151 | 0;\n this.Dh = 0x96387719 | 0;\n this.Dl = 0x5940eabd | 0;\n this.Eh = 0x96283ee2 | 0;\n this.El = 0xa88effe3 | 0;\n this.Fh = 0xbe5e1e25 | 0;\n this.Fl = 0x53863992 | 0;\n this.Gh = 0x2b0199fc | 0;\n this.Gl = 0x2c85b8aa | 0;\n this.Hh = 0x0eb72ddc | 0;\n this.Hl = 0x81c52ca2 | 0;\n this.outputLen = 32;\n }\n}\nclass SHA384 extends SHA512 {\n constructor() {\n super();\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = 0xcbbb9d5d | 0;\n this.Al = 0xc1059ed8 | 0;\n this.Bh = 0x629a292a | 0;\n this.Bl = 0x367cd507 | 0;\n this.Ch = 0x9159015a | 0;\n this.Cl = 0x3070dd17 | 0;\n this.Dh = 0x152fecd8 | 0;\n this.Dl = 0xf70e5939 | 0;\n this.Eh = 0x67332667 | 0;\n this.El = 0xffc00b31 | 0;\n this.Fh = 0x8eb44a87 | 0;\n this.Fl = 0x68581511 | 0;\n this.Gh = 0xdb0c2e0d | 0;\n this.Gl = 0x64f98fa7 | 0;\n this.Hh = 0x47b5481d | 0;\n this.Hl = 0xbefa4fa4 | 0;\n this.outputLen = 48;\n }\n}\nexport const sha512 = wrapConstructor(() => new SHA512());\nexport const sha512_256 = wrapConstructor(() => new SHA512_256());\nexport const sha384 = wrapConstructor(() => new SHA384());\n","export const version = \"@ethersproject/crypto@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","/* Browser Crypto Shims */\nimport { hmac } from \"@noble/hashes/hmac\";\nimport { pbkdf2 } from \"@noble/hashes/pbkdf2\";\nimport { sha256 } from \"@noble/hashes/sha256\";\nimport { sha512 } from \"@noble/hashes/sha512\";\nimport { logger } from \"./logger.js\";\nfunction getGlobal() {\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n throw new Error('unable to locate global object');\n}\n;\nconst anyGlobal = getGlobal();\nlet crypto = anyGlobal.crypto || anyGlobal.msCrypto;\nexport function createHash(algo) {\n switch (algo) {\n case \"sha256\": return sha256.create();\n case \"sha512\": return sha512.create();\n }\n return logger.throwArgumentError(\"invalid hashing algorithm name\", \"algorithm\", algo);\n}\nexport function createHmac(_algo, key) {\n const algo = ({ sha256, sha512 }[_algo]);\n if (algo == null) {\n return logger.throwArgumentError(\"invalid hmac algorithm\", \"algorithm\", _algo);\n }\n return hmac.create(algo, key);\n}\nexport function pbkdf2Sync(password, salt, iterations, keylen, _algo) {\n const algo = ({ sha256, sha512 }[_algo]);\n if (algo == null) {\n return logger.throwArgumentError(\"invalid pbkdf2 algorithm\", \"algorithm\", _algo);\n }\n return pbkdf2(algo, password, salt, { c: iterations, dkLen: keylen });\n}\nexport function randomBytes(length) {\n if (crypto == null) {\n return logger.throwError(\"platform does not support secure random numbers\", \"UNSUPPORTED_OPERATION\", {\n operation: \"randomBytes\"\n });\n }\n if (length <= 0 || length > 1024 || (length % 1) || length != length) {\n logger.throwArgumentError(\"invalid length\", \"length\", length);\n }\n const result = new Uint8Array(length);\n crypto.getRandomValues(result);\n return result;\n}\n//# sourceMappingURL=crypto-browser.js.map","import { createHmac } from \"crypto\"; /*-browser*/\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nlet locked = false;\nconst _computeHmac = function (algorithm, key, data) {\n return \"0x\" + createHmac(algorithm, key).update(data).digest(\"hex\");\n};\nlet __computeHmac = _computeHmac;\nexport function computeHmac(algorithm, _key, _data) {\n const key = logger.getBytes(_key, \"key\");\n const data = logger.getBytes(_data, \"data\");\n return hexlify(__computeHmac(algorithm, key, data));\n}\ncomputeHmac._ = _computeHmac;\ncomputeHmac.lock = function () { locked = true; };\ncomputeHmac.register = function (func) {\n if (locked) {\n throw new Error(\"computeHmac is locked\");\n }\n __computeHmac = func;\n};\nObject.freeze(computeHmac);\n//# sourceMappingURL=hmac.js.map","import * as u64 from './_u64.js';\nimport { Hash, u32, toBytes, wrapConstructor, wrapConstructorWithOpts, assertNumber, } from './utils.js';\n// Various per round constants calculations\nconst [SHA3_PI, SHA3_ROTL, _SHA3_IOTA] = [[], [], []];\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _7n = BigInt(7);\nconst _256n = BigInt(256);\nconst _0x71n = BigInt(0x71);\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n // Pi\n [x, y] = [y, (2 * x + 3 * y) % 5];\n SHA3_PI.push(2 * (5 * y + x));\n // Rotational\n SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n // Iota\n let t = _0n;\n for (let j = 0; j < 7; j++) {\n R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n if (R & _2n)\n t ^= _1n << ((_1n << BigInt(j)) - _1n);\n }\n _SHA3_IOTA.push(t);\n}\nconst [SHA3_IOTA_H, SHA3_IOTA_L] = u64.split(_SHA3_IOTA, true);\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h, l, s) => s > 32 ? u64.rotlBH(h, l, s) : u64.rotlSH(h, l, s);\nconst rotlL = (h, l, s) => s > 32 ? u64.rotlBL(h, l, s) : u64.rotlSL(h, l, s);\n// Same as keccakf1600, but allows to skip some rounds\nexport function keccakP(s, rounds = 24) {\n const B = new Uint32Array(5 * 2);\n // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n for (let round = 24 - rounds; round < 24; round++) {\n // Theta θ\n for (let x = 0; x < 10; x++)\n B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n for (let x = 0; x < 10; x += 2) {\n const idx1 = (x + 8) % 10;\n const idx0 = (x + 2) % 10;\n const B0 = B[idx0];\n const B1 = B[idx0 + 1];\n const Th = rotlH(B0, B1, 1) ^ B[idx1];\n const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n for (let y = 0; y < 50; y += 10) {\n s[x + y] ^= Th;\n s[x + y + 1] ^= Tl;\n }\n }\n // Rho (ρ) and Pi (π)\n let curH = s[2];\n let curL = s[3];\n for (let t = 0; t < 24; t++) {\n const shift = SHA3_ROTL[t];\n const Th = rotlH(curH, curL, shift);\n const Tl = rotlL(curH, curL, shift);\n const PI = SHA3_PI[t];\n curH = s[PI];\n curL = s[PI + 1];\n s[PI] = Th;\n s[PI + 1] = Tl;\n }\n // Chi (χ)\n for (let y = 0; y < 50; y += 10) {\n for (let x = 0; x < 10; x++)\n B[x] = s[y + x];\n for (let x = 0; x < 10; x++)\n s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n }\n // Iota (ι)\n s[0] ^= SHA3_IOTA_H[round];\n s[1] ^= SHA3_IOTA_L[round];\n }\n B.fill(0);\n}\nexport class Keccak extends Hash {\n // NOTE: we accept arguments in bytes instead of bits here.\n constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24) {\n super();\n this.blockLen = blockLen;\n this.suffix = suffix;\n this.outputLen = outputLen;\n this.enableXOF = enableXOF;\n this.rounds = rounds;\n this.pos = 0;\n this.posOut = 0;\n this.finished = false;\n this.destroyed = false;\n // Can be passed from user as dkLen\n assertNumber(outputLen);\n // 1600 = 5x5 matrix of 64bit. 1600 bits === 200 bytes\n if (0 >= this.blockLen || this.blockLen >= 200)\n throw new Error('Sha3 supports only keccak-f1600 function');\n this.state = new Uint8Array(200);\n this.state32 = u32(this.state);\n }\n keccak() {\n keccakP(this.state32, this.rounds);\n this.posOut = 0;\n this.pos = 0;\n }\n update(data) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n if (this.finished)\n throw new Error('digest() was already called');\n const { blockLen, state } = this;\n data = toBytes(data);\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n for (let i = 0; i < take; i++)\n state[this.pos++] ^= data[pos++];\n if (this.pos === blockLen)\n this.keccak();\n }\n return this;\n }\n finish() {\n if (this.finished)\n return;\n this.finished = true;\n const { state, suffix, pos, blockLen } = this;\n // Do the padding\n state[pos] ^= suffix;\n if ((suffix & 0x80) !== 0 && pos === blockLen - 1)\n this.keccak();\n state[blockLen - 1] ^= 0x80;\n this.keccak();\n }\n writeInto(out) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n if (!(out instanceof Uint8Array))\n throw new Error('Keccak: invalid output buffer');\n this.finish();\n for (let pos = 0, len = out.length; pos < len;) {\n if (this.posOut >= this.blockLen)\n this.keccak();\n const take = Math.min(this.blockLen - this.posOut, len - pos);\n out.set(this.state.subarray(this.posOut, this.posOut + take), pos);\n this.posOut += take;\n pos += take;\n }\n return out;\n }\n xofInto(out) {\n // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n if (!this.enableXOF)\n throw new Error('XOF is not possible for this instance');\n return this.writeInto(out);\n }\n xof(bytes) {\n assertNumber(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out) {\n if (out.length < this.outputLen)\n throw new Error('Keccak: invalid output buffer');\n if (this.finished)\n throw new Error('digest() was already called');\n this.finish();\n this.writeInto(out);\n this.destroy();\n return out;\n }\n digest() {\n return this.digestInto(new Uint8Array(this.outputLen));\n }\n destroy() {\n this.destroyed = true;\n this.state.fill(0);\n }\n _cloneInto(to) {\n const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n to || (to = new Keccak(blockLen, suffix, outputLen, enableXOF, rounds));\n to.state32.set(this.state32);\n to.pos = this.pos;\n to.posOut = this.posOut;\n to.finished = this.finished;\n to.rounds = rounds;\n // Suffix can change in cSHAKE\n to.suffix = suffix;\n to.outputLen = outputLen;\n to.enableXOF = enableXOF;\n to.destroyed = this.destroyed;\n return to;\n }\n}\nconst gen = (suffix, blockLen, outputLen) => wrapConstructor(() => new Keccak(blockLen, suffix, outputLen));\nexport const sha3_224 = gen(0x06, 144, 224 / 8);\n/**\n * SHA3-256 hash function\n * @param message - that would be hashed\n */\nexport const sha3_256 = gen(0x06, 136, 256 / 8);\nexport const sha3_384 = gen(0x06, 104, 384 / 8);\nexport const sha3_512 = gen(0x06, 72, 512 / 8);\nexport const keccak_224 = gen(0x01, 144, 224 / 8);\n/**\n * keccak-256 hash function. Different from SHA3-256.\n * @param message - that would be hashed\n */\nexport const keccak_256 = gen(0x01, 136, 256 / 8);\nexport const keccak_384 = gen(0x01, 104, 384 / 8);\nexport const keccak_512 = gen(0x01, 72, 512 / 8);\nconst genShake = (suffix, blockLen, outputLen) => wrapConstructorWithOpts((opts = {}) => new Keccak(blockLen, suffix, opts.dkLen !== undefined ? opts.dkLen : outputLen, true));\nexport const shake128 = genShake(0x1f, 168, 128 / 8);\nexport const shake256 = genShake(0x1f, 136, 256 / 8);\n","import { keccak_256 } from \"@noble/hashes/sha3\";\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nlet locked = false;\nconst _keccak256 = function (data) {\n return keccak_256(data);\n};\nlet __keccak256 = _keccak256;\nexport function keccak256(_data) {\n const data = logger.getBytes(_data, \"data\");\n return hexlify(__keccak256(data));\n}\nkeccak256._ = _keccak256;\nkeccak256.lock = function () { locked = true; };\nkeccak256.register = function (func) {\n if (locked) {\n throw new TypeError(\"keccak256 is locked\");\n }\n __keccak256 = func;\n};\nObject.freeze(keccak256);\n//# sourceMappingURL=keccak.js.map","import { SHA2 } from './_sha2.js';\nimport { wrapConstructor } from './utils.js';\n// https://homes.esat.kuleuven.be/~bosselae/ripemd160.html\n// https://homes.esat.kuleuven.be/~bosselae/ripemd160/pdf/AB-9601/AB-9601.pdf\nconst Rho = new Uint8Array([7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8]);\nconst Id = Uint8Array.from({ length: 16 }, (_, i) => i);\nconst Pi = Id.map((i) => (9 * i + 5) % 16);\nlet idxL = [Id];\nlet idxR = [Pi];\nfor (let i = 0; i < 4; i++)\n for (let j of [idxL, idxR])\n j.push(j[i].map((k) => Rho[k]));\nconst shifts = [\n [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8],\n [12, 13, 11, 15, 6, 9, 9, 7, 12, 15, 11, 13, 7, 8, 7, 7],\n [13, 15, 14, 11, 7, 7, 6, 8, 13, 14, 13, 12, 5, 5, 6, 9],\n [14, 11, 12, 14, 8, 6, 5, 5, 15, 12, 15, 14, 9, 9, 8, 6],\n [15, 12, 13, 13, 9, 5, 8, 6, 14, 11, 12, 11, 8, 6, 5, 5],\n].map((i) => new Uint8Array(i));\nconst shiftsL = idxL.map((idx, i) => idx.map((j) => shifts[i][j]));\nconst shiftsR = idxR.map((idx, i) => idx.map((j) => shifts[i][j]));\nconst Kl = new Uint32Array([0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]);\nconst Kr = new Uint32Array([0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]);\n// The rotate left (circular left shift) operation for uint32\nconst rotl = (word, shift) => (word << shift) | (word >>> (32 - shift));\n// It's called f() in spec.\nfunction f(group, x, y, z) {\n if (group === 0)\n return x ^ y ^ z;\n else if (group === 1)\n return (x & y) | (~x & z);\n else if (group === 2)\n return (x | ~y) ^ z;\n else if (group === 3)\n return (x & z) | (y & ~z);\n else\n return x ^ (y | ~z);\n}\n// Temporary buffer, not used to store anything between runs\nconst BUF = new Uint32Array(16);\nexport class RIPEMD160 extends SHA2 {\n constructor() {\n super(64, 20, 8, true);\n this.h0 = 0x67452301 | 0;\n this.h1 = 0xefcdab89 | 0;\n this.h2 = 0x98badcfe | 0;\n this.h3 = 0x10325476 | 0;\n this.h4 = 0xc3d2e1f0 | 0;\n }\n get() {\n const { h0, h1, h2, h3, h4 } = this;\n return [h0, h1, h2, h3, h4];\n }\n set(h0, h1, h2, h3, h4) {\n this.h0 = h0 | 0;\n this.h1 = h1 | 0;\n this.h2 = h2 | 0;\n this.h3 = h3 | 0;\n this.h4 = h4 | 0;\n }\n process(view, offset) {\n for (let i = 0; i < 16; i++, offset += 4)\n BUF[i] = view.getUint32(offset, true);\n // prettier-ignore\n let al = this.h0 | 0, ar = al, bl = this.h1 | 0, br = bl, cl = this.h2 | 0, cr = cl, dl = this.h3 | 0, dr = dl, el = this.h4 | 0, er = el;\n // Instead of iterating 0 to 80, we split it into 5 groups\n // And use the groups in constants, functions, etc. Much simpler\n for (let group = 0; group < 5; group++) {\n const rGroup = 4 - group;\n const hbl = Kl[group], hbr = Kr[group]; // prettier-ignore\n const rl = idxL[group], rr = idxR[group]; // prettier-ignore\n const sl = shiftsL[group], sr = shiftsR[group]; // prettier-ignore\n for (let i = 0; i < 16; i++) {\n const tl = (rotl(al + f(group, bl, cl, dl) + BUF[rl[i]] + hbl, sl[i]) + el) | 0;\n al = el, el = dl, dl = rotl(cl, 10) | 0, cl = bl, bl = tl; // prettier-ignore\n }\n // 2 loops are 10% faster\n for (let i = 0; i < 16; i++) {\n const tr = (rotl(ar + f(rGroup, br, cr, dr) + BUF[rr[i]] + hbr, sr[i]) + er) | 0;\n ar = er, er = dr, dr = rotl(cr, 10) | 0, cr = br, br = tr; // prettier-ignore\n }\n }\n // Add the compressed chunk to the current hash value\n this.set((this.h1 + cl + dr) | 0, (this.h2 + dl + er) | 0, (this.h3 + el + ar) | 0, (this.h4 + al + br) | 0, (this.h0 + bl + cr) | 0);\n }\n roundClean() {\n BUF.fill(0);\n }\n destroy() {\n this.destroyed = true;\n this.buffer.fill(0);\n this.set(0, 0, 0, 0, 0);\n }\n}\n/**\n * RIPEMD-160 - a hash function from 1990s.\n * @param message - msg that would be hashed\n */\nexport const ripemd160 = wrapConstructor(() => new RIPEMD160());\n","import { ripemd160 as noble_ripemd160 } from \"@noble/hashes/ripemd160\";\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nlet locked = false;\nconst _ripemd160 = function (data) {\n return noble_ripemd160(data);\n};\nlet __ripemd160 = _ripemd160;\nexport function ripemd160(_data) {\n const data = logger.getBytes(_data, \"data\");\n return hexlify(__ripemd160(data));\n}\nripemd160._ = _ripemd160;\nripemd160.lock = function () { locked = true; };\nripemd160.register = function (func) {\n if (locked) {\n throw new TypeError(\"ripemd160 is locked\");\n }\n __ripemd160 = func;\n};\nObject.freeze(ripemd160);\n//# sourceMappingURL=ripemd160.js.map","import { pbkdf2Sync } from \"crypto\"; /*-browser*/\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nlet locked = false;\nconst _pbkdf2 = function (password, salt, iterations, keylen, algo) {\n return pbkdf2Sync(password, salt, iterations, keylen, algo);\n};\nlet __pbkdf2 = _pbkdf2;\nexport function pbkdf2(_password, _salt, iterations, keylen, algo) {\n const password = logger.getBytes(_password, \"password\");\n const salt = logger.getBytes(_salt, \"salt\");\n return hexlify(__pbkdf2(password, salt, iterations, keylen, algo));\n}\npbkdf2._ = _pbkdf2;\npbkdf2.lock = function () { locked = true; };\npbkdf2.register = function (func) {\n if (locked) {\n throw new Error(\"pbkdf2 is locked\");\n }\n __pbkdf2 = func;\n};\nObject.freeze(pbkdf2);\n//# sourceMappingURL=pbkdf2.js.map","import { randomBytes as crypto_random } from \"crypto\"; /*-browser*/\nlet locked = false;\nconst _randomBytes = function (length) {\n return new Uint8Array(crypto_random(length));\n};\nlet __randomBytes = _randomBytes;\nexport function randomBytes(length) {\n return __randomBytes(length);\n}\nrandomBytes._ = _randomBytes;\nrandomBytes.lock = function () { locked = true; };\nrandomBytes.register = function (func) {\n if (locked) {\n throw new Error(\"random is locked\");\n }\n __randomBytes = func;\n};\nObject.freeze(randomBytes);\n//# sourceMappingURL=random.js.map","import { sha256 } from './sha256.js';\nimport { pbkdf2 } from './pbkdf2.js';\nimport { assertNumber, asyncLoop, checkOpts, u32 } from './utils.js';\n// RFC 7914 Scrypt KDF\n// Left rotate for uint32\nconst rotl = (a, b) => (a << b) | (a >>> (32 - b));\n// The main Scrypt loop: uses Salsa extensively.\n// Six versions of the function were tried, this is the fastest one.\n// prettier-ignore\nfunction XorAndSalsa(prev, pi, input, ii, out, oi) {\n // Based on https://cr.yp.to/salsa20.html\n // Xor blocks\n let y00 = prev[pi++] ^ input[ii++], y01 = prev[pi++] ^ input[ii++];\n let y02 = prev[pi++] ^ input[ii++], y03 = prev[pi++] ^ input[ii++];\n let y04 = prev[pi++] ^ input[ii++], y05 = prev[pi++] ^ input[ii++];\n let y06 = prev[pi++] ^ input[ii++], y07 = prev[pi++] ^ input[ii++];\n let y08 = prev[pi++] ^ input[ii++], y09 = prev[pi++] ^ input[ii++];\n let y10 = prev[pi++] ^ input[ii++], y11 = prev[pi++] ^ input[ii++];\n let y12 = prev[pi++] ^ input[ii++], y13 = prev[pi++] ^ input[ii++];\n let y14 = prev[pi++] ^ input[ii++], y15 = prev[pi++] ^ input[ii++];\n // Save state to temporary variables (salsa)\n let x00 = y00, x01 = y01, x02 = y02, x03 = y03, x04 = y04, x05 = y05, x06 = y06, x07 = y07, x08 = y08, x09 = y09, x10 = y10, x11 = y11, x12 = y12, x13 = y13, x14 = y14, x15 = y15;\n // Main loop (salsa)\n for (let i = 0; i < 8; i += 2) {\n x04 ^= rotl(x00 + x12 | 0, 7);\n x08 ^= rotl(x04 + x00 | 0, 9);\n x12 ^= rotl(x08 + x04 | 0, 13);\n x00 ^= rotl(x12 + x08 | 0, 18);\n x09 ^= rotl(x05 + x01 | 0, 7);\n x13 ^= rotl(x09 + x05 | 0, 9);\n x01 ^= rotl(x13 + x09 | 0, 13);\n x05 ^= rotl(x01 + x13 | 0, 18);\n x14 ^= rotl(x10 + x06 | 0, 7);\n x02 ^= rotl(x14 + x10 | 0, 9);\n x06 ^= rotl(x02 + x14 | 0, 13);\n x10 ^= rotl(x06 + x02 | 0, 18);\n x03 ^= rotl(x15 + x11 | 0, 7);\n x07 ^= rotl(x03 + x15 | 0, 9);\n x11 ^= rotl(x07 + x03 | 0, 13);\n x15 ^= rotl(x11 + x07 | 0, 18);\n x01 ^= rotl(x00 + x03 | 0, 7);\n x02 ^= rotl(x01 + x00 | 0, 9);\n x03 ^= rotl(x02 + x01 | 0, 13);\n x00 ^= rotl(x03 + x02 | 0, 18);\n x06 ^= rotl(x05 + x04 | 0, 7);\n x07 ^= rotl(x06 + x05 | 0, 9);\n x04 ^= rotl(x07 + x06 | 0, 13);\n x05 ^= rotl(x04 + x07 | 0, 18);\n x11 ^= rotl(x10 + x09 | 0, 7);\n x08 ^= rotl(x11 + x10 | 0, 9);\n x09 ^= rotl(x08 + x11 | 0, 13);\n x10 ^= rotl(x09 + x08 | 0, 18);\n x12 ^= rotl(x15 + x14 | 0, 7);\n x13 ^= rotl(x12 + x15 | 0, 9);\n x14 ^= rotl(x13 + x12 | 0, 13);\n x15 ^= rotl(x14 + x13 | 0, 18);\n }\n // Write output (salsa)\n out[oi++] = (y00 + x00) | 0;\n out[oi++] = (y01 + x01) | 0;\n out[oi++] = (y02 + x02) | 0;\n out[oi++] = (y03 + x03) | 0;\n out[oi++] = (y04 + x04) | 0;\n out[oi++] = (y05 + x05) | 0;\n out[oi++] = (y06 + x06) | 0;\n out[oi++] = (y07 + x07) | 0;\n out[oi++] = (y08 + x08) | 0;\n out[oi++] = (y09 + x09) | 0;\n out[oi++] = (y10 + x10) | 0;\n out[oi++] = (y11 + x11) | 0;\n out[oi++] = (y12 + x12) | 0;\n out[oi++] = (y13 + x13) | 0;\n out[oi++] = (y14 + x14) | 0;\n out[oi++] = (y15 + x15) | 0;\n}\nfunction BlockMix(input, ii, out, oi, r) {\n // The block B is r 128-byte chunks (which is equivalent of 2r 64-byte chunks)\n let head = oi + 0;\n let tail = oi + 16 * r;\n for (let i = 0; i < 16; i++)\n out[tail + i] = input[ii + (2 * r - 1) * 16 + i]; // X ← B[2r−1]\n for (let i = 0; i < r; i++, head += 16, ii += 16) {\n // We write odd & even Yi at same time. Even: 0bXXXXX0 Odd: 0bXXXXX1\n XorAndSalsa(out, tail, input, ii, out, head); // head[i] = Salsa(blockIn[2*i] ^ tail[i-1])\n if (i > 0)\n tail += 16; // First iteration overwrites tmp value in tail\n XorAndSalsa(out, head, input, (ii += 16), out, tail); // tail[i] = Salsa(blockIn[2*i+1] ^ head[i])\n }\n}\n// Common prologue and epilogue for sync/async functions\nfunction scryptInit(password, salt, _opts) {\n // Maxmem - 1GB+1KB by default\n const opts = checkOpts({\n dkLen: 32,\n asyncTick: 10,\n maxmem: 1024 ** 3 + 1024,\n }, _opts);\n const { N, r, p, dkLen, asyncTick, maxmem, onProgress } = opts;\n assertNumber(N);\n assertNumber(r);\n assertNumber(p);\n assertNumber(dkLen);\n assertNumber(asyncTick);\n assertNumber(maxmem);\n if (onProgress !== undefined && typeof onProgress !== 'function')\n throw new Error('progressCb should be function');\n const blockSize = 128 * r;\n const blockSize32 = blockSize / 4;\n if (N <= 1 || (N & (N - 1)) !== 0 || N >= 2 ** (blockSize / 8) || N > 2 ** 32) {\n // NOTE: we limit N to be less than 2**32 because of 32 bit variant of Integrify function\n // There is no JS engines that allows alocate more than 4GB per single Uint8Array for now, but can change in future.\n throw new Error('Scrypt: N must be larger than 1, a power of 2, less than 2^(128 * r / 8) and less than 2^32');\n }\n if (p < 0 || p > ((2 ** 32 - 1) * 32) / blockSize) {\n throw new Error('Scrypt: p must be a positive integer less than or equal to ((2^32 - 1) * 32) / (128 * r)');\n }\n if (dkLen < 0 || dkLen > (2 ** 32 - 1) * 32) {\n throw new Error('Scrypt: dkLen should be positive integer less than or equal to (2^32 - 1) * 32');\n }\n const memUsed = blockSize * (N + p);\n if (memUsed > maxmem) {\n throw new Error(`Scrypt: parameters too large, ${memUsed} (128 * r * (N + p)) > ${maxmem} (maxmem)`);\n }\n // [B0...Bp−1] ← PBKDF2HMAC-SHA256(Passphrase, Salt, 1, blockSize*ParallelizationFactor)\n // Since it has only one iteration there is no reason to use async variant\n const B = pbkdf2(sha256, password, salt, { c: 1, dkLen: blockSize * p });\n const B32 = u32(B);\n // Re-used between parallel iterations. Array(iterations) of B\n const V = u32(new Uint8Array(blockSize * N));\n const tmp = u32(new Uint8Array(blockSize));\n let blockMixCb = () => { };\n if (onProgress) {\n const totalBlockMix = 2 * N * p;\n // Invoke callback if progress changes from 10.01 to 10.02\n // Allows to draw smooth progress bar on up to 8K screen\n const callbackPer = Math.max(Math.floor(totalBlockMix / 10000), 1);\n let blockMixCnt = 0;\n blockMixCb = () => {\n blockMixCnt++;\n if (onProgress && (!(blockMixCnt % callbackPer) || blockMixCnt === totalBlockMix))\n onProgress(blockMixCnt / totalBlockMix);\n };\n }\n return { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb, asyncTick };\n}\nfunction scryptOutput(password, dkLen, B, V, tmp) {\n const res = pbkdf2(sha256, password, B, { c: 1, dkLen });\n B.fill(0);\n V.fill(0);\n tmp.fill(0);\n return res;\n}\n/**\n * Scrypt KDF from RFC 7914.\n * @param password - pass\n * @param salt - salt\n * @param opts - parameters\n * - `N` is cpu/mem work factor (power of 2 e.g. 2**18)\n * - `r` is block size (8 is common), fine-tunes sequential memory read size and performance\n * - `p` is parallelization factor (1 is common)\n * - `dkLen` is output key length in bytes e.g. 32.\n * - `asyncTick` - (default: 10) max time in ms for which async function can block execution\n * - `maxmem` - (default: `1024 ** 3 + 1024` aka 1GB+1KB). A limit that the app could use for scrypt\n * - `onProgress` - callback function that would be executed for progress report\n * @returns Derived key\n */\nexport function scrypt(password, salt, opts) {\n const { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb } = scryptInit(password, salt, opts);\n for (let pi = 0; pi < p; pi++) {\n const Pi = blockSize32 * pi;\n for (let i = 0; i < blockSize32; i++)\n V[i] = B32[Pi + i]; // V[0] = B[i]\n for (let i = 0, pos = 0; i < N - 1; i++) {\n BlockMix(V, pos, V, (pos += blockSize32), r); // V[i] = BlockMix(V[i-1]);\n blockMixCb();\n }\n BlockMix(V, (N - 1) * blockSize32, B32, Pi, r); // Process last element\n blockMixCb();\n for (let i = 0; i < N; i++) {\n // First u32 of the last 64-byte block (u32 is LE)\n const j = B32[Pi + blockSize32 - 16] % N; // j = Integrify(X) % iterations\n for (let k = 0; k < blockSize32; k++)\n tmp[k] = B32[Pi + k] ^ V[j * blockSize32 + k]; // tmp = B ^ V[j]\n BlockMix(tmp, 0, B32, Pi, r); // B = BlockMix(B ^ V[j])\n blockMixCb();\n }\n }\n return scryptOutput(password, dkLen, B, V, tmp);\n}\n/**\n * Scrypt KDF from RFC 7914.\n */\nexport async function scryptAsync(password, salt, opts) {\n const { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb, asyncTick } = scryptInit(password, salt, opts);\n for (let pi = 0; pi < p; pi++) {\n const Pi = blockSize32 * pi;\n for (let i = 0; i < blockSize32; i++)\n V[i] = B32[Pi + i]; // V[0] = B[i]\n let pos = 0;\n await asyncLoop(N - 1, asyncTick, (i) => {\n BlockMix(V, pos, V, (pos += blockSize32), r); // V[i] = BlockMix(V[i-1]);\n blockMixCb();\n });\n BlockMix(V, (N - 1) * blockSize32, B32, Pi, r); // Process last element\n blockMixCb();\n await asyncLoop(N, asyncTick, (i) => {\n // First u32 of the last 64-byte block (u32 is LE)\n const j = B32[Pi + blockSize32 - 16] % N; // j = Integrify(X) % iterations\n for (let k = 0; k < blockSize32; k++)\n tmp[k] = B32[Pi + k] ^ V[j * blockSize32 + k]; // tmp = B ^ V[j]\n BlockMix(tmp, 0, B32, Pi, r); // B = BlockMix(B ^ V[j])\n blockMixCb();\n });\n }\n return scryptOutput(password, dkLen, B, V, tmp);\n}\n","import { scrypt as _nobleSync, scryptAsync as _nobleAsync } from \"@noble/hashes/scrypt\";\nimport { hexlify as H } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nlet lockedSync = false, lockedAsync = false;\nconst _scryptAsync = async function (passwd, salt, N, r, p, dkLen, onProgress) {\n return await _nobleAsync(passwd, salt, { N, r, p, dkLen, onProgress });\n};\nconst _scryptSync = function (passwd, salt, N, r, p, dkLen) {\n return _nobleSync(passwd, salt, { N, r, p, dkLen });\n};\nlet __scryptAsync = _scryptAsync;\nlet __scryptSync = _scryptSync;\nexport async function scrypt(_passwd, _salt, N, r, p, dkLen, progress) {\n const passwd = logger.getBytes(_passwd, \"passwd\");\n const salt = logger.getBytes(_salt, \"salt\");\n return H(await __scryptAsync(passwd, salt, N, r, p, dkLen, progress));\n}\nscrypt._ = _scryptAsync;\nscrypt.lock = function () { lockedAsync = true; };\nscrypt.register = function (func) {\n if (lockedAsync) {\n throw new Error(\"scrypt is locked\");\n }\n __scryptAsync = func;\n};\nObject.freeze(scrypt);\nexport function scryptSync(_passwd, _salt, N, r, p, dkLen) {\n const passwd = logger.getBytes(_passwd, \"passwd\");\n const salt = logger.getBytes(_salt, \"salt\");\n return H(__scryptSync(passwd, salt, N, r, p, dkLen));\n}\nscryptSync._ = _scryptSync;\nscryptSync.lock = function () { lockedSync = true; };\nscryptSync.register = function (func) {\n if (lockedSync) {\n throw new Error(\"scryptSync is locked\");\n }\n __scryptSync = func;\n};\nObject.freeze(scryptSync);\n//# sourceMappingURL=scrypt.js.map","import { createHash } from \"crypto\"; /*-browser*/\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nconst _sha256 = function (data) {\n return createHash(\"sha256\").update(data).digest();\n};\nconst _sha512 = function (data) {\n return createHash(\"sha512\").update(data).digest();\n};\nlet __sha256 = _sha256;\nlet __sha512 = _sha512;\nlet locked256 = false, locked512 = false;\nexport function sha256(_data) {\n const data = logger.getBytes(_data, \"data\");\n return hexlify(__sha256(data));\n}\nsha256._ = _sha256;\nsha256.lock = function () { locked256 = true; };\nsha256.register = function (func) {\n if (locked256) {\n throw new Error(\"sha256 is locked\");\n }\n __sha256 = func;\n};\nObject.freeze(sha256);\nexport function sha512(_data) {\n const data = logger.getBytes(_data, \"data\");\n return hexlify(__sha512(data));\n}\nsha512._ = _sha512;\nsha512.lock = function () { locked512 = true; };\nsha512.register = function (func) {\n if (locked512) {\n throw new Error(\"sha512 is locked\");\n }\n __sha512 = func;\n};\nObject.freeze(sha256);\n//# sourceMappingURL=sha2.js.map","// We import all these so we can export lock()\nimport { computeHmac } from \"./hmac.js\";\nimport { keccak256 } from \"./keccak.js\";\nimport { ripemd160 } from \"./ripemd160.js\";\nimport { pbkdf2 } from \"./pbkdf2.js\";\nimport { randomBytes } from \"./random.js\";\nimport { scrypt, scryptSync } from \"./scrypt.js\";\nimport { sha256, sha512 } from \"./sha2.js\";\nexport { computeHmac, randomBytes, keccak256, ripemd160, sha256, sha512, pbkdf2, scrypt, scryptSync };\nexport function lock() {\n computeHmac.lock();\n keccak256.lock();\n pbkdf2.lock();\n randomBytes.lock();\n ripemd160.lock();\n scrypt.lock();\n scryptSync.lock();\n sha256.lock();\n sha512.lock();\n}\n//# sourceMappingURL=index.js.map","export const version = \"@ethersproject/address@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { arrayify } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { logger } from \"./logger.js\";\nconst BN_0 = BigInt(0);\nconst BN_36 = BigInt(36);\nfunction getChecksumAddress(address) {\n // if (!isHexString(address, 20)) {\n // logger.throwArgumentError(\"invalid address\", \"address\", address);\n // }\n address = address.toLowerCase();\n const chars = address.substring(2).split(\"\");\n const expanded = new Uint8Array(40);\n for (let i = 0; i < 40; i++) {\n expanded[i] = chars[i].charCodeAt(0);\n }\n const hashed = arrayify(keccak256(expanded));\n for (let i = 0; i < 40; i += 2) {\n if ((hashed[i >> 1] >> 4) >= 8) {\n chars[i] = chars[i].toUpperCase();\n }\n if ((hashed[i >> 1] & 0x0f) >= 8) {\n chars[i + 1] = chars[i + 1].toUpperCase();\n }\n }\n return \"0x\" + chars.join(\"\");\n}\n// See: https://en.wikipedia.org/wiki/International_Bank_Account_Number\n// Create lookup table\nconst ibanLookup = {};\nfor (let i = 0; i < 10; i++) {\n ibanLookup[String(i)] = String(i);\n}\nfor (let i = 0; i < 26; i++) {\n ibanLookup[String.fromCharCode(65 + i)] = String(10 + i);\n}\n// How many decimal digits can we process? (for 64-bit float, this is 15)\n// i.e. Math.floor(Math.log10(Number.MAX_SAFE_INTEGER));\nconst safeDigits = 15;\nfunction ibanChecksum(address) {\n address = address.toUpperCase();\n address = address.substring(4) + address.substring(0, 2) + \"00\";\n let expanded = address.split(\"\").map((c) => { return ibanLookup[c]; }).join(\"\");\n // Javascript can handle integers safely up to 15 (decimal) digits\n while (expanded.length >= safeDigits) {\n let block = expanded.substring(0, safeDigits);\n expanded = parseInt(block, 10) % 97 + expanded.substring(block.length);\n }\n let checksum = String(98 - (parseInt(expanded, 10) % 97));\n while (checksum.length < 2) {\n checksum = \"0\" + checksum;\n }\n return checksum;\n}\n;\nconst Base36 = (function () {\n ;\n const result = {};\n for (let i = 0; i < 36; i++) {\n const key = \"0123456789abcdefghijklmnopqrstuvwxyz\"[i];\n result[key] = BigInt(i);\n }\n return result;\n})();\nfunction fromBase36(value) {\n value = value.toLowerCase();\n let result = BN_0;\n for (let i = 0; i < value.length; i++) {\n result = result * BN_36 + Base36[value[i]];\n }\n return result;\n}\nexport function getAddress(address) {\n if (typeof (address) !== \"string\") {\n logger.throwArgumentError(\"invalid address\", \"address\", address);\n }\n if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) {\n // Missing the 0x prefix\n if (address.substring(0, 2) !== \"0x\") {\n address = \"0x\" + address;\n }\n const result = getChecksumAddress(address);\n // It is a checksummed address with a bad checksum\n if (address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) && result !== address) {\n logger.throwArgumentError(\"bad address checksum\", \"address\", address);\n }\n return result;\n }\n // Maybe ICAP? (we only support direct mode)\n if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) {\n // It is an ICAP address with a bad checksum\n if (address.substring(2, 4) !== ibanChecksum(address)) {\n logger.throwArgumentError(\"bad icap checksum\", \"address\", address);\n }\n let result = fromBase36(address.substring(4)).toString(16);\n while (result.length < 40) {\n result = \"0\" + result;\n }\n return getChecksumAddress(\"0x\" + result);\n }\n return logger.throwArgumentError(\"invalid address\", \"address\", address);\n}\nexport function getIcapAddress(address) {\n //let base36 = _base16To36(getAddress(address).substring(2)).toUpperCase();\n let base36 = BigInt(getAddress(address)).toString(36).toUpperCase();\n while (base36.length < 30) {\n base36 = \"0\" + base36;\n }\n return \"XE\" + ibanChecksum(\"XE00\" + base36) + base36;\n}\n//# sourceMappingURL=address.js.map","export const version = \"@ethersproject/rlp@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","//See: https://github.com/ethereum/wiki/wiki/RLP\nimport { logger } from \"./logger.js\";\nfunction arrayifyInteger(value) {\n const result = [];\n while (value) {\n result.unshift(value & 0xff);\n value >>= 8;\n }\n return result;\n}\nfunction _encode(object) {\n if (Array.isArray(object)) {\n let payload = [];\n object.forEach(function (child) {\n payload = payload.concat(_encode(child));\n });\n if (payload.length <= 55) {\n payload.unshift(0xc0 + payload.length);\n return payload;\n }\n const length = arrayifyInteger(payload.length);\n length.unshift(0xf7 + length.length);\n return length.concat(payload);\n }\n const data = Array.prototype.slice.call(logger.getBytes(object, \"object\"));\n if (data.length === 1 && data[0] <= 0x7f) {\n return data;\n }\n else if (data.length <= 55) {\n data.unshift(0x80 + data.length);\n return data;\n }\n const length = arrayifyInteger(data.length);\n length.unshift(0xb7 + length.length);\n return length.concat(data);\n}\nconst nibbles = \"0123456789abcdef\";\nexport function encodeRlp(object) {\n let result = \"0x\";\n for (const v of _encode(object)) {\n result += nibbles[v >> 4];\n result += nibbles[v & 0xf];\n }\n return result;\n}\n//# sourceMappingURL=encode.js.map","//See: https://github.com/ethereum/wiki/wiki/RLP\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nfunction hexlifyByte(value) {\n let result = value.toString(16);\n while (result.length < 2) {\n result = \"0\" + result;\n }\n return \"0x\" + result;\n}\nfunction unarrayifyInteger(data, offset, length) {\n let result = 0;\n for (let i = 0; i < length; i++) {\n result = (result * 256) + data[offset + i];\n }\n return result;\n}\nfunction _decodeChildren(data, offset, childOffset, length) {\n const result = [];\n while (childOffset < offset + 1 + length) {\n const decoded = _decode(data, childOffset);\n result.push(decoded.result);\n childOffset += decoded.consumed;\n if (childOffset > offset + 1 + length) {\n logger.throwError(\"child data too short\", \"BUFFER_OVERRUN\", {\n buffer: data, length, offset\n });\n }\n }\n return { consumed: (1 + length), result: result };\n}\n// returns { consumed: number, result: Object }\nfunction _decode(data, offset) {\n if (data.length === 0) {\n logger.throwError(\"data too short\", \"BUFFER_OVERRUN\", {\n buffer: data, length: 0, offset: 1\n });\n }\n const checkOffset = (offset) => {\n if (offset > data.length) {\n logger.throwError(\"data short segment too short\", \"BUFFER_OVERRUN\", {\n buffer: data, length: data.length, offset\n });\n }\n };\n // Array with extra length prefix\n if (data[offset] >= 0xf8) {\n const lengthLength = data[offset] - 0xf7;\n checkOffset(offset + 1 + lengthLength);\n const length = unarrayifyInteger(data, offset + 1, lengthLength);\n checkOffset(offset + 1 + lengthLength + length);\n return _decodeChildren(data, offset, offset + 1 + lengthLength, lengthLength + length);\n }\n else if (data[offset] >= 0xc0) {\n const length = data[offset] - 0xc0;\n checkOffset(offset + 1 + length);\n return _decodeChildren(data, offset, offset + 1, length);\n }\n else if (data[offset] >= 0xb8) {\n const lengthLength = data[offset] - 0xb7;\n checkOffset(offset + 1 + lengthLength);\n const length = unarrayifyInteger(data, offset + 1, lengthLength);\n checkOffset(offset + 1 + lengthLength + length);\n const result = hexlify(data.slice(offset + 1 + lengthLength, offset + 1 + lengthLength + length));\n return { consumed: (1 + lengthLength + length), result: result };\n }\n else if (data[offset] >= 0x80) {\n const length = data[offset] - 0x80;\n checkOffset(offset + 1 + length);\n const result = hexlify(data.slice(offset + 1, offset + 1 + length));\n return { consumed: (1 + length), result: result };\n }\n return { consumed: 1, result: hexlifyByte(data[offset]) };\n}\nexport function decodeRlp(_data) {\n const data = logger.getBytes(_data, \"data\");\n const decoded = _decode(data, 0);\n if (decoded.consumed !== data.length) {\n logger.throwArgumentError(\"unexpected junk after rlp payload\", \"data\", _data);\n }\n return decoded.result;\n}\n//# sourceMappingURL=decode.js.map","import { concat, dataSlice } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { encodeRlp } from \"@ethersproject/rlp\";\nimport { getAddress } from \"./address.js\";\nimport { logger } from \"./logger.js\";\n// http://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed\nexport function getCreateAddress(tx) {\n const from = getAddress(tx.from);\n const nonce = logger.getBigInt(tx.nonce, \"tx.nonce\");\n let nonceHex = nonce.toString(16);\n if (nonceHex === \"0\") {\n nonceHex = \"0x\";\n }\n else if (nonceHex.length % 2) {\n nonceHex = \"0x0\" + nonceHex;\n }\n else {\n nonceHex = \"0x\" + nonceHex;\n }\n return getAddress(dataSlice(keccak256(encodeRlp([from, nonceHex])), 12));\n}\nexport function getCreate2Address(_from, _salt, _initCodeHash) {\n const from = getAddress(_from);\n const salt = logger.getBytes(_salt, \"salt\");\n const initCodeHash = logger.getBytes(_initCodeHash, \"initCodeHash\");\n if (salt.length !== 32) {\n logger.throwArgumentError(\"salt must be 32 bytes\", \"salt\", _salt);\n }\n if (initCodeHash.length !== 32) {\n logger.throwArgumentError(\"initCodeHash must be 32 bytes\", \"initCodeHash\", _initCodeHash);\n }\n return getAddress(dataSlice(keccak256(concat([\"0xff\", from, salt, initCodeHash])), 12));\n}\n//# sourceMappingURL=contract-address.js.map","import { getAddress } from \"./address.js\";\nimport { logger } from \"./logger.js\";\nexport function isAddressable(value) {\n return (value && typeof (value.getAddress) === \"function\");\n}\nexport function isAddress(value) {\n try {\n getAddress(value);\n return true;\n }\n catch (error) { }\n return false;\n}\n// Resolves an Ethereum address, ENS name or Addressable object,\n// throwing if the result is null; an explicit null returns null\n//export async function resolveAddress(target?: null, resolver?: null | NameResolver): Promise;\n//export async function resolveAddress(target: string | Addressable, resolver?: null | NameResolver): Promise;\n//export async function resolveAddress(target: null | undefined | string | Addressable, resolver?: null | NameResolver) {\nexport async function resolveAddress(target, resolver) {\n //if (target == null) { return null; }\n if (typeof (target) === \"string\") {\n if (target.match(/^0x[0-9a-f]{40}$/i)) {\n return getAddress(target);\n }\n if (resolver == null) {\n return logger.throwError(\"ENS resolution requires a provider\", \"UNSUPPORTED_OPERATION\", {\n operation: \"resolveName\",\n });\n }\n const result = await resolver.resolveName(target);\n if (result == null || result === \"0x0000000000000000000000000000000000000000\") {\n return logger.throwError(\"unconfigured name\", \"UNCONFIGURED_NAME\", { value: target });\n }\n return getAddress(result);\n }\n else if (isAddressable(target)) {\n const result = await target.getAddress();\n if (result == null) {\n logger.throwArgumentError(\"addressable resolved to null\", \"target\", target);\n }\n return getAddress(result);\n }\n return logger.throwArgumentError(\"unsupported addressable value\", \"target\", target);\n}\n//# sourceMappingURL=checks.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Typed_options;\nimport { defineProperties } from \"@ethersproject/properties\";\nconst _gaurd = {};\nfunction n(value, width) {\n let signed = false;\n if (width < 0) {\n signed = true;\n width *= -1;\n }\n // @TODO: Check range is valid for value\n return new Typed(_gaurd, `${signed ? \"\" : \"u\"}int${width}`, value, { signed, width });\n}\nfunction b(value, size) {\n // @TODO: Check range is valid for value\n return new Typed(_gaurd, `bytes${(size) ? size : \"\"}`, value, { size });\n}\nconst _typedSymbol = Symbol.for(\"_ethers_typed\");\nexport class Typed {\n constructor(gaurd, type, value, options = null) {\n _Typed_options.set(this, void 0);\n if (gaurd !== _gaurd) {\n throw new Error(\"private constructor\");\n }\n defineProperties(this, { _typedSymbol, type, value });\n __classPrivateFieldSet(this, _Typed_options, options, \"f\");\n // Check the value is valid\n this.format();\n }\n format() {\n if (this.type === \"array\") {\n throw new Error(\"\");\n }\n else if (this.type === \"dynamicArray\") {\n throw new Error(\"\");\n }\n else if (this.type === \"tuple\") {\n return `tuple(${this.value.map((v) => v.format()).join(\",\")})`;\n }\n return this.type;\n }\n defaultValue() {\n return 0;\n }\n minValue() {\n return 0;\n }\n maxValue() {\n return 0;\n }\n isBigInt() {\n return !!(this.type.match(/^u?int[0-9]+$/));\n }\n isData() {\n return (this.type.substring(0, 5) === \"bytes\");\n }\n isString() {\n return (this.type === \"string\");\n }\n get tupleName() {\n if (this.type !== \"tuple\") {\n throw TypeError(\"not a tuple\");\n }\n return __classPrivateFieldGet(this, _Typed_options, \"f\");\n }\n // Returns the length of this type as an array\n // - `null` indicates the length is unforced, it could be dynamic\n // - `-1` indicates the length is dynamic\n // - any other value indicates it is a static array and is its length\n get arrayLength() {\n if (this.type !== \"array\") {\n throw TypeError(\"not an array\");\n }\n if (__classPrivateFieldGet(this, _Typed_options, \"f\") === true) {\n return -1;\n }\n if (__classPrivateFieldGet(this, _Typed_options, \"f\") === false) {\n return (this.value).length;\n }\n return null;\n }\n static from(type, value) {\n return new Typed(_gaurd, type, value);\n }\n static uint8(v) { return n(v, 8); }\n static uint16(v) { return n(v, 16); }\n static uint24(v) { return n(v, 24); }\n static uint32(v) { return n(v, 32); }\n static uint40(v) { return n(v, 40); }\n static uint48(v) { return n(v, 46); }\n static uint56(v) { return n(v, 56); }\n static uint64(v) { return n(v, 64); }\n static uint72(v) { return n(v, 72); }\n static uint80(v) { return n(v, 80); }\n static uint88(v) { return n(v, 88); }\n static uint96(v) { return n(v, 96); }\n static uint104(v) { return n(v, 104); }\n static uint112(v) { return n(v, 112); }\n static uint120(v) { return n(v, 120); }\n static uint128(v) { return n(v, 128); }\n static uint136(v) { return n(v, 136); }\n static uint144(v) { return n(v, 144); }\n static uint152(v) { return n(v, 152); }\n static uint160(v) { return n(v, 160); }\n static uint168(v) { return n(v, 168); }\n static uint176(v) { return n(v, 176); }\n static uint184(v) { return n(v, 184); }\n static uint192(v) { return n(v, 192); }\n static uint200(v) { return n(v, 200); }\n static uint208(v) { return n(v, 208); }\n static uint216(v) { return n(v, 216); }\n static uint224(v) { return n(v, 224); }\n static uint232(v) { return n(v, 232); }\n static uint240(v) { return n(v, 240); }\n static uint248(v) { return n(v, 248); }\n static uint256(v) { return n(v, 256); }\n static uint(v) { return n(v, 256); }\n static int8(v) { return n(v, -8); }\n static int16(v) { return n(v, -16); }\n static int24(v) { return n(v, -24); }\n static int32(v) { return n(v, -32); }\n static int40(v) { return n(v, -40); }\n static int48(v) { return n(v, -46); }\n static int56(v) { return n(v, -56); }\n static int64(v) { return n(v, -64); }\n static int72(v) { return n(v, -72); }\n static int80(v) { return n(v, -80); }\n static int88(v) { return n(v, -88); }\n static int96(v) { return n(v, -96); }\n static int104(v) { return n(v, -104); }\n static int112(v) { return n(v, -112); }\n static int120(v) { return n(v, -120); }\n static int128(v) { return n(v, -128); }\n static int136(v) { return n(v, -136); }\n static int144(v) { return n(v, -144); }\n static int152(v) { return n(v, -152); }\n static int160(v) { return n(v, -160); }\n static int168(v) { return n(v, -168); }\n static int176(v) { return n(v, -176); }\n static int184(v) { return n(v, -184); }\n static int192(v) { return n(v, -192); }\n static int200(v) { return n(v, -200); }\n static int208(v) { return n(v, -208); }\n static int216(v) { return n(v, -216); }\n static int224(v) { return n(v, -224); }\n static int232(v) { return n(v, -232); }\n static int240(v) { return n(v, -240); }\n static int248(v) { return n(v, -248); }\n static int256(v) { return n(v, -256); }\n static int(v) { return n(v, -256); }\n static bytes(v) { return b(v); }\n static bytes1(v) { return b(v, 1); }\n static bytes2(v) { return b(v, 2); }\n static bytes3(v) { return b(v, 3); }\n static bytes4(v) { return b(v, 4); }\n static bytes5(v) { return b(v, 5); }\n static bytes6(v) { return b(v, 6); }\n static bytes7(v) { return b(v, 7); }\n static bytes8(v) { return b(v, 8); }\n static bytes9(v) { return b(v, 9); }\n static bytes10(v) { return b(v, 10); }\n static bytes11(v) { return b(v, 11); }\n static bytes12(v) { return b(v, 12); }\n static bytes13(v) { return b(v, 13); }\n static bytes14(v) { return b(v, 14); }\n static bytes15(v) { return b(v, 15); }\n static bytes16(v) { return b(v, 16); }\n static bytes17(v) { return b(v, 17); }\n static bytes18(v) { return b(v, 18); }\n static bytes19(v) { return b(v, 19); }\n static bytes20(v) { return b(v, 20); }\n static bytes21(v) { return b(v, 21); }\n static bytes22(v) { return b(v, 22); }\n static bytes23(v) { return b(v, 23); }\n static bytes24(v) { return b(v, 24); }\n static bytes25(v) { return b(v, 25); }\n static bytes26(v) { return b(v, 26); }\n static bytes27(v) { return b(v, 27); }\n static bytes28(v) { return b(v, 28); }\n static bytes29(v) { return b(v, 29); }\n static bytes30(v) { return b(v, 30); }\n static bytes31(v) { return b(v, 31); }\n static bytes32(v) { return b(v, 32); }\n static address(v) { return new Typed(_gaurd, \"address\", v); }\n static bool(v) { return new Typed(_gaurd, \"bool\", !!v); }\n static string(v) { return new Typed(_gaurd, \"string\", v); }\n static array(v, dynamic) {\n throw new Error(\"not implemented yet\");\n return new Typed(_gaurd, \"array\", v, dynamic);\n }\n static tuple(v, name) {\n throw new Error(\"not implemented yet\");\n return new Typed(_gaurd, \"tuple\", v, name);\n }\n static overrides(v) {\n return new Typed(_gaurd, \"overrides\", Object.assign({}, v));\n }\n static isTyped(value) {\n return (value && value._typedSymbol === _typedSymbol);\n }\n static dereference(value, type) {\n if (Typed.isTyped(value)) {\n if (value.type !== type) {\n throw new Error(`invalid type: expecetd ${type}, got ${value.type}`);\n }\n return value.value;\n }\n return value;\n }\n}\n_Typed_options = new WeakMap();\n//# sourceMappingURL=typed.js.map","import { getAddress } from \"@ethersproject/address\";\nimport { toHex } from \"@ethersproject/math\";\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\nexport class AddressCoder extends Coder {\n constructor(localName) {\n super(\"address\", \"address\", localName, false);\n }\n defaultValue() {\n return \"0x0000000000000000000000000000000000000000\";\n }\n encode(writer, _value) {\n let value = Typed.dereference(_value, \"string\");\n try {\n value = getAddress(value);\n }\n catch (error) {\n return this._throwError(error.message, _value);\n }\n return writer.writeValue(value);\n }\n decode(reader) {\n return getAddress(toHex(reader.readValue(), 20));\n }\n}\n//# sourceMappingURL=address.js.map","import { Coder } from \"./abstract-coder.js\";\n// Clones the functionality of an existing Coder, but without a localName\nexport class AnonymousCoder extends Coder {\n constructor(coder) {\n super(coder.name, coder.type, \"_\", coder.dynamic);\n this.coder = coder;\n }\n defaultValue() {\n return this.coder.defaultValue();\n }\n encode(writer, value) {\n return this.coder.encode(writer, value);\n }\n decode(reader) {\n return this.coder.decode(reader);\n }\n}\n//# sourceMappingURL=anonymous.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { isError } from \"@ethersproject/logger\";\nimport { logger } from \"../logger.js\";\nimport { Typed } from \"../typed.js\";\nimport { Coder, Result, WordSize, Writer } from \"./abstract-coder.js\";\nimport { AnonymousCoder } from \"./anonymous.js\";\nexport function pack(writer, coders, values) {\n let arrayValues = [];\n if (Array.isArray(values)) {\n arrayValues = values;\n }\n else if (values && typeof (values) === \"object\") {\n let unique = {};\n arrayValues = coders.map((coder) => {\n const name = coder.localName;\n if (!name) {\n logger.throwError(\"cannot encode object for signature with missing names\", \"INVALID_ARGUMENT\", {\n argument: \"values\",\n info: { coder },\n value: values\n });\n }\n if (unique[name]) {\n logger.throwError(\"cannot encode object for signature with duplicate names\", \"INVALID_ARGUMENT\", {\n argument: \"values\",\n info: { coder },\n value: values\n });\n }\n unique[name] = true;\n return values[name];\n });\n }\n else {\n logger.throwArgumentError(\"invalid tuple value\", \"tuple\", values);\n }\n if (coders.length !== arrayValues.length) {\n logger.throwArgumentError(\"types/value length mismatch\", \"tuple\", values);\n }\n let staticWriter = new Writer();\n let dynamicWriter = new Writer();\n let updateFuncs = [];\n coders.forEach((coder, index) => {\n let value = arrayValues[index];\n if (coder.dynamic) {\n // Get current dynamic offset (for the future pointer)\n let dynamicOffset = dynamicWriter.length;\n // Encode the dynamic value into the dynamicWriter\n coder.encode(dynamicWriter, value);\n // Prepare to populate the correct offset once we are done\n let updateFunc = staticWriter.writeUpdatableValue();\n updateFuncs.push((baseOffset) => {\n updateFunc(baseOffset + dynamicOffset);\n });\n }\n else {\n coder.encode(staticWriter, value);\n }\n });\n // Backfill all the dynamic offsets, now that we know the static length\n updateFuncs.forEach((func) => { func(staticWriter.length); });\n let length = writer.appendWriter(staticWriter);\n length += writer.appendWriter(dynamicWriter);\n return length;\n}\nexport function unpack(reader, coders) {\n let values = [];\n let keys = [];\n // A reader anchored to this base\n let baseReader = reader.subReader(0);\n coders.forEach((coder) => {\n let value = null;\n if (coder.dynamic) {\n let offset = reader.readIndex();\n let offsetReader = baseReader.subReader(offset);\n try {\n value = coder.decode(offsetReader);\n }\n catch (error) {\n // Cannot recover from this\n if (isError(error, \"BUFFER_OVERRUN\")) {\n throw error;\n }\n value = error;\n value.baseType = coder.name;\n value.name = coder.localName;\n value.type = coder.type;\n }\n }\n else {\n try {\n value = coder.decode(reader);\n }\n catch (error) {\n // Cannot recover from this\n if (isError(error, \"BUFFER_OVERRUN\")) {\n throw error;\n }\n value = error;\n value.baseType = coder.name;\n value.name = coder.localName;\n value.type = coder.type;\n }\n }\n if (value == undefined) {\n throw new Error(\"investigate\");\n }\n values.push(value);\n keys.push(coder.localName || null);\n });\n return Result.fromItems(values, keys);\n}\nexport class ArrayCoder extends Coder {\n constructor(coder, length, localName) {\n const type = (coder.type + \"[\" + (length >= 0 ? length : \"\") + \"]\");\n const dynamic = (length === -1 || coder.dynamic);\n super(\"array\", type, localName, dynamic);\n defineProperties(this, { coder, length });\n }\n defaultValue() {\n // Verifies the child coder is valid (even if the array is dynamic or 0-length)\n const defaultChild = this.coder.defaultValue();\n const result = [];\n for (let i = 0; i < this.length; i++) {\n result.push(defaultChild);\n }\n return result;\n }\n encode(writer, _value) {\n const value = Typed.dereference(_value, \"array\");\n if (!Array.isArray(value)) {\n this._throwError(\"expected array value\", value);\n }\n let count = this.length;\n if (count === -1) {\n count = value.length;\n writer.writeValue(value.length);\n }\n logger.assertArgumentCount(value.length, count, \"coder array\" + (this.localName ? (\" \" + this.localName) : \"\"));\n let coders = [];\n for (let i = 0; i < value.length; i++) {\n coders.push(this.coder);\n }\n return pack(writer, coders, value);\n }\n decode(reader) {\n let count = this.length;\n if (count === -1) {\n count = reader.readIndex();\n // Check that there is *roughly* enough data to ensure\n // stray random data is not being read as a length. Each\n // slot requires at least 32 bytes for their value (or 32\n // bytes as a link to the data). This could use a much\n // tighter bound, but we are erroring on the side of safety.\n if (count * WordSize > reader.dataLength) {\n logger.throwError(\"insufficient data length\", \"BUFFER_OVERRUN\", {\n buffer: reader.bytes,\n offset: count * WordSize,\n length: reader.dataLength\n });\n }\n }\n let coders = [];\n for (let i = 0; i < count; i++) {\n coders.push(new AnonymousCoder(this.coder));\n }\n return reader.coerce(this.name, unpack(reader, coders));\n }\n}\n//# sourceMappingURL=array.js.map","import { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\nexport class BooleanCoder extends Coder {\n constructor(localName) {\n super(\"bool\", \"bool\", localName, false);\n }\n defaultValue() {\n return false;\n }\n encode(writer, _value) {\n const value = Typed.dereference(_value, \"bool\");\n return writer.writeValue(value ? 1 : 0);\n }\n decode(reader) {\n return reader.coerce(this.type, !reader.readValue());\n }\n}\n//# sourceMappingURL=boolean.js.map","import { arrayify, hexlify } from \"@ethersproject/bytes\";\nimport { Coder } from \"./abstract-coder.js\";\nexport class DynamicBytesCoder extends Coder {\n constructor(type, localName) {\n super(type, type, localName, true);\n }\n defaultValue() {\n return \"0x\";\n }\n encode(writer, value) {\n value = arrayify(value);\n let length = writer.writeValue(value.length);\n length += writer.writeBytes(value);\n return length;\n }\n decode(reader) {\n return reader.readBytes(reader.readIndex(), true);\n }\n}\nexport class BytesCoder extends DynamicBytesCoder {\n constructor(localName) {\n super(\"bytes\", localName);\n }\n decode(reader) {\n return reader.coerce(this.name, hexlify(super.decode(reader)));\n }\n}\n//# sourceMappingURL=bytes.js.map","import { arrayify, hexlify } from \"@ethersproject/bytes\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\nexport class FixedBytesCoder extends Coder {\n constructor(size, localName) {\n let name = \"bytes\" + String(size);\n super(name, name, localName, false);\n defineProperties(this, { size }, { size: \"number\" });\n }\n defaultValue() {\n return (\"0x0000000000000000000000000000000000000000000000000000000000000000\").substring(0, 2 + this.size * 2);\n }\n encode(writer, _value) {\n let data = arrayify(Typed.dereference(_value, this.type));\n if (data.length !== this.size) {\n this._throwError(\"incorrect data length\", _value);\n }\n return writer.writeBytes(data);\n }\n decode(reader) {\n return reader.coerce(this.name, hexlify(reader.readBytes(this.size)));\n }\n}\n//# sourceMappingURL=fixed-bytes.js.map","import { Coder } from \"./abstract-coder.js\";\nconst Empty = new Uint8Array([]);\nexport class NullCoder extends Coder {\n constructor(localName) {\n super(\"null\", \"\", localName, false);\n }\n defaultValue() {\n return null;\n }\n encode(writer, value) {\n if (value != null) {\n this._throwError(\"not null\", value);\n }\n return writer.writeBytes(Empty);\n }\n decode(reader) {\n reader.readBytes(0);\n return reader.coerce(this.name, null);\n }\n}\n//# sourceMappingURL=null.js.map","import { fromTwos, mask, toTwos } from \"@ethersproject/math\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { logger } from \"../logger.js\";\nimport { Typed } from \"../typed.js\";\nimport { Coder, WordSize } from \"./abstract-coder.js\";\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_MAX_UINT256 = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\nexport class NumberCoder extends Coder {\n constructor(size, signed, localName) {\n const name = ((signed ? \"int\" : \"uint\") + (size * 8));\n super(name, name, localName, false);\n defineProperties(this, { size, signed }, { size: \"number\", signed: \"boolean\" });\n }\n defaultValue() {\n return 0;\n }\n encode(writer, _value) {\n let value = logger.getBigInt(Typed.dereference(_value, this.type));\n // Check bounds are safe for encoding\n let maxUintValue = mask(BN_MAX_UINT256, WordSize * 8);\n if (this.signed) {\n let bounds = mask(maxUintValue, (this.size * 8) - 1);\n if (value > bounds || value < -(bounds + BN_1)) {\n this._throwError(\"value out-of-bounds\", _value);\n }\n }\n else if (value < BN_0 || value > mask(maxUintValue, this.size * 8)) {\n this._throwError(\"value out-of-bounds\", _value);\n }\n value = mask(toTwos(value, this.size * 8), this.size * 8);\n if (this.signed) {\n value = toTwos(fromTwos(value, this.size * 8), 8 * WordSize);\n }\n return writer.writeValue(value);\n }\n decode(reader) {\n let value = mask(reader.readValue(), this.size * 8);\n if (this.signed) {\n value = fromTwos(value, this.size * 8);\n }\n return reader.coerce(this.name, value);\n }\n}\n//# sourceMappingURL=number.js.map","export const version = \"@ethersproject/strings@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { logger } from \"./logger.js\";\n///////////////////////////////\nexport var UnicodeNormalizationForm;\n(function (UnicodeNormalizationForm) {\n UnicodeNormalizationForm[\"current\"] = \"\";\n UnicodeNormalizationForm[\"NFC\"] = \"NFC\";\n UnicodeNormalizationForm[\"NFD\"] = \"NFD\";\n UnicodeNormalizationForm[\"NFKC\"] = \"NFKC\";\n UnicodeNormalizationForm[\"NFKD\"] = \"NFKD\";\n})(UnicodeNormalizationForm || (UnicodeNormalizationForm = {}));\n;\nexport var Utf8ErrorReason;\n(function (Utf8ErrorReason) {\n // A continuation byte was present where there was nothing to continue\n // - offset = the index the codepoint began in\n Utf8ErrorReason[\"UNEXPECTED_CONTINUE\"] = \"unexpected continuation byte\";\n // An invalid (non-continuation) byte to start a UTF-8 codepoint was found\n // - offset = the index the codepoint began in\n Utf8ErrorReason[\"BAD_PREFIX\"] = \"bad codepoint prefix\";\n // The string is too short to process the expected codepoint\n // - offset = the index the codepoint began in\n Utf8ErrorReason[\"OVERRUN\"] = \"string overrun\";\n // A missing continuation byte was expected but not found\n // - offset = the index the continuation byte was expected at\n Utf8ErrorReason[\"MISSING_CONTINUE\"] = \"missing continuation byte\";\n // The computed code point is outside the range for UTF-8\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; outside the UTF-8 range\n Utf8ErrorReason[\"OUT_OF_RANGE\"] = \"out of UTF-8 range\";\n // UTF-8 strings may not contain UTF-16 surrogate pairs\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; inside the UTF-16 surrogate range\n Utf8ErrorReason[\"UTF16_SURROGATE\"] = \"UTF-16 surrogate\";\n // The string is an overlong representation\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; already bounds checked\n Utf8ErrorReason[\"OVERLONG\"] = \"overlong representation\";\n})(Utf8ErrorReason || (Utf8ErrorReason = {}));\n;\nfunction errorFunc(reason, offset, bytes, output, badCodepoint) {\n return logger.throwArgumentError(`invalid codepoint at offset ${offset}; ${reason}`, \"bytes\", bytes);\n}\nfunction ignoreFunc(reason, offset, bytes, output, badCodepoint) {\n // If there is an invalid prefix (including stray continuation), skip any additional continuation bytes\n if (reason === Utf8ErrorReason.BAD_PREFIX || reason === Utf8ErrorReason.UNEXPECTED_CONTINUE) {\n let i = 0;\n for (let o = offset + 1; o < bytes.length; o++) {\n if (bytes[o] >> 6 !== 0x02) {\n break;\n }\n i++;\n }\n return i;\n }\n // This byte runs us past the end of the string, so just jump to the end\n // (but the first byte was read already read and therefore skipped)\n if (reason === Utf8ErrorReason.OVERRUN) {\n return bytes.length - offset - 1;\n }\n // Nothing to skip\n return 0;\n}\nfunction replaceFunc(reason, offset, bytes, output, badCodepoint) {\n // Overlong representations are otherwise \"valid\" code points; just non-deistingtished\n if (reason === Utf8ErrorReason.OVERLONG) {\n output.push((badCodepoint != null) ? badCodepoint : -1);\n return 0;\n }\n // Put the replacement character into the output\n output.push(0xfffd);\n // Otherwise, process as if ignoring errors\n return ignoreFunc(reason, offset, bytes, output, badCodepoint);\n}\n// Common error handing strategies\nexport const Utf8ErrorFuncs = Object.freeze({\n error: errorFunc,\n ignore: ignoreFunc,\n replace: replaceFunc\n});\n// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499\nfunction getUtf8CodePoints(_bytes, onError) {\n if (onError == null) {\n onError = Utf8ErrorFuncs.error;\n }\n const bytes = logger.getBytes(_bytes, \"bytes\");\n const result = [];\n let i = 0;\n // Invalid bytes are ignored\n while (i < bytes.length) {\n const c = bytes[i++];\n // 0xxx xxxx\n if (c >> 7 === 0) {\n result.push(c);\n continue;\n }\n // Multibyte; how many bytes left for this character?\n let extraLength = null;\n let overlongMask = null;\n // 110x xxxx 10xx xxxx\n if ((c & 0xe0) === 0xc0) {\n extraLength = 1;\n overlongMask = 0x7f;\n // 1110 xxxx 10xx xxxx 10xx xxxx\n }\n else if ((c & 0xf0) === 0xe0) {\n extraLength = 2;\n overlongMask = 0x7ff;\n // 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx\n }\n else if ((c & 0xf8) === 0xf0) {\n extraLength = 3;\n overlongMask = 0xffff;\n }\n else {\n if ((c & 0xc0) === 0x80) {\n i += onError(Utf8ErrorReason.UNEXPECTED_CONTINUE, i - 1, bytes, result);\n }\n else {\n i += onError(Utf8ErrorReason.BAD_PREFIX, i - 1, bytes, result);\n }\n continue;\n }\n // Do we have enough bytes in our data?\n if (i - 1 + extraLength >= bytes.length) {\n i += onError(Utf8ErrorReason.OVERRUN, i - 1, bytes, result);\n continue;\n }\n // Remove the length prefix from the char\n let res = c & ((1 << (8 - extraLength - 1)) - 1);\n for (let j = 0; j < extraLength; j++) {\n let nextChar = bytes[i];\n // Invalid continuation byte\n if ((nextChar & 0xc0) != 0x80) {\n i += onError(Utf8ErrorReason.MISSING_CONTINUE, i, bytes, result);\n res = null;\n break;\n }\n ;\n res = (res << 6) | (nextChar & 0x3f);\n i++;\n }\n // See above loop for invalid continuation byte\n if (res === null) {\n continue;\n }\n // Maximum code point\n if (res > 0x10ffff) {\n i += onError(Utf8ErrorReason.OUT_OF_RANGE, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n // Reserved for UTF-16 surrogate halves\n if (res >= 0xd800 && res <= 0xdfff) {\n i += onError(Utf8ErrorReason.UTF16_SURROGATE, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n // Check for overlong sequences (more bytes than needed)\n if (res <= overlongMask) {\n i += onError(Utf8ErrorReason.OVERLONG, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n result.push(res);\n }\n return result;\n}\n// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\nexport function toUtf8Bytes(str, form = UnicodeNormalizationForm.current) {\n if (form != UnicodeNormalizationForm.current) {\n logger.assertNormalize(form);\n str = str.normalize(form);\n }\n let result = [];\n for (let i = 0; i < str.length; i++) {\n const c = str.charCodeAt(i);\n if (c < 0x80) {\n result.push(c);\n }\n else if (c < 0x800) {\n result.push((c >> 6) | 0xc0);\n result.push((c & 0x3f) | 0x80);\n }\n else if ((c & 0xfc00) == 0xd800) {\n i++;\n const c2 = str.charCodeAt(i);\n if (i >= str.length || (c2 & 0xfc00) !== 0xdc00) {\n throw new Error(\"invalid utf-8 string\");\n }\n // Surrogate Pair\n const pair = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);\n result.push((pair >> 18) | 0xf0);\n result.push(((pair >> 12) & 0x3f) | 0x80);\n result.push(((pair >> 6) & 0x3f) | 0x80);\n result.push((pair & 0x3f) | 0x80);\n }\n else {\n result.push((c >> 12) | 0xe0);\n result.push(((c >> 6) & 0x3f) | 0x80);\n result.push((c & 0x3f) | 0x80);\n }\n }\n return new Uint8Array(result);\n}\n;\nfunction escapeChar(value) {\n const hex = (\"0000\" + value.toString(16));\n return \"\\\\u\" + hex.substring(hex.length - 4);\n}\nexport function _toEscapedUtf8String(bytes, onError) {\n return '\"' + getUtf8CodePoints(bytes, onError).map((codePoint) => {\n if (codePoint < 256) {\n switch (codePoint) {\n case 8: return \"\\\\b\";\n case 9: return \"\\\\t\";\n case 10: return \"\\\\n\";\n case 13: return \"\\\\r\";\n case 34: return \"\\\\\\\"\";\n case 92: return \"\\\\\\\\\";\n }\n if (codePoint >= 32 && codePoint < 127) {\n return String.fromCharCode(codePoint);\n }\n }\n if (codePoint <= 0xffff) {\n return escapeChar(codePoint);\n }\n codePoint -= 0x10000;\n return escapeChar(((codePoint >> 10) & 0x3ff) + 0xd800) + escapeChar((codePoint & 0x3ff) + 0xdc00);\n }).join(\"\") + '\"';\n}\nexport function _toUtf8String(codePoints) {\n return codePoints.map((codePoint) => {\n if (codePoint <= 0xffff) {\n return String.fromCharCode(codePoint);\n }\n codePoint -= 0x10000;\n return String.fromCharCode((((codePoint >> 10) & 0x3ff) + 0xd800), ((codePoint & 0x3ff) + 0xdc00));\n }).join(\"\");\n}\nexport function toUtf8String(bytes, onError) {\n return _toUtf8String(getUtf8CodePoints(bytes, onError));\n}\nexport function toUtf8CodePoints(str, form = UnicodeNormalizationForm.current) {\n return getUtf8CodePoints(toUtf8Bytes(str, form));\n}\n//# sourceMappingURL=utf8.js.map","import { zeroPadRight } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nimport { toUtf8Bytes, toUtf8String } from \"./utf8.js\";\nexport function formatBytes32String(text) {\n // Get the bytes\n const bytes = toUtf8Bytes(text);\n // Check we have room for null-termination\n if (bytes.length > 31) {\n throw new Error(\"bytes32 string must be less than 32 bytes\");\n }\n // Zero-pad (implicitly null-terminates)\n return zeroPadRight(bytes, 32);\n}\nexport function parseBytes32String(_bytes) {\n const data = logger.getBytes(_bytes, \"bytes\");\n // Must be 32 bytes with a null-termination\n if (data.length !== 32) {\n throw new Error(\"invalid bytes32 - not 32 bytes long\");\n }\n if (data[31] !== 0) {\n throw new Error(\"invalid bytes32 string - no null terminator\");\n }\n // Find the null termination\n let length = 31;\n while (data[length - 1] === 0) {\n length--;\n }\n // Determine the string value\n return toUtf8String(data.slice(0, length));\n}\n//# sourceMappingURL=bytes32.js.map","import { logger } from \"./logger.js\";\nimport { toUtf8CodePoints, _toUtf8String, UnicodeNormalizationForm } from \"./utf8.js\";\nfunction bytes2(data) {\n if ((data.length % 4) !== 0) {\n throw new Error(\"should not happen; bad data\");\n }\n let result = [];\n for (let i = 0; i < data.length; i += 4) {\n result.push(parseInt(data.substring(i, i + 4), 16));\n }\n return result;\n}\nfunction createTable(data, _func) {\n const func = _func || function (value) { return [parseInt(value, 16)]; };\n let lo = 0;\n let result = {};\n data.split(\",\").forEach((pair) => {\n let comps = pair.split(\":\");\n lo += parseInt(comps[0], 16);\n result[lo] = func(comps[1]);\n });\n return result;\n}\nfunction createRangeTable(data) {\n let hi = 0;\n return data.split(\",\").map((v) => {\n let comps = v.split(\"-\");\n if (comps.length === 1) {\n comps[1] = \"0\";\n }\n else if (comps[1] === \"\") {\n comps[1] = \"1\";\n }\n let lo = hi + parseInt(comps[0], 16);\n hi = parseInt(comps[1], 16);\n return { l: lo, h: hi };\n });\n}\nfunction matchMap(value, ranges) {\n let lo = 0;\n for (let i = 0; i < ranges.length; i++) {\n let range = ranges[i];\n lo += range.l;\n if (value >= lo && value <= lo + range.h && ((value - lo) % (range.d || 1)) === 0) {\n if (range.e && range.e.indexOf(value - lo) !== -1) {\n continue;\n }\n return range;\n }\n }\n return null;\n}\nconst Table_A_1_ranges = createRangeTable(\"221,13-1b,5f-,40-10,51-f,11-3,3-3,2-2,2-4,8,2,15,2d,28-8,88,48,27-,3-5,11-20,27-,8,28,3-5,12,18,b-a,1c-4,6-16,2-d,2-2,2,1b-4,17-9,8f-,10,f,1f-2,1c-34,33-14e,4,36-,13-,6-2,1a-f,4,9-,3-,17,8,2-2,5-,2,8-,3-,4-8,2-3,3,6-,16-6,2-,7-3,3-,17,8,3,3,3-,2,6-3,3-,4-a,5,2-6,10-b,4,8,2,4,17,8,3,6-,b,4,4-,2-e,2-4,b-10,4,9-,3-,17,8,3-,5-,9-2,3-,4-7,3-3,3,4-3,c-10,3,7-2,4,5-2,3,2,3-2,3-2,4-2,9,4-3,6-2,4,5-8,2-e,d-d,4,9,4,18,b,6-3,8,4,5-6,3-8,3-3,b-11,3,9,4,18,b,6-3,8,4,5-6,3-6,2,3-3,b-11,3,9,4,18,11-3,7-,4,5-8,2-7,3-3,b-11,3,13-2,19,a,2-,8-2,2-3,7,2,9-11,4-b,3b-3,1e-24,3,2-,3,2-,2-5,5,8,4,2,2-,3,e,4-,6,2,7-,b-,3-21,49,23-5,1c-3,9,25,10-,2-2f,23,6,3,8-2,5-5,1b-45,27-9,2a-,2-3,5b-4,45-4,53-5,8,40,2,5-,8,2,5-,28,2,5-,20,2,5-,8,2,5-,8,8,18,20,2,5-,8,28,14-5,1d-22,56-b,277-8,1e-2,52-e,e,8-a,18-8,15-b,e,4,3-b,5e-2,b-15,10,b-5,59-7,2b-555,9d-3,5b-5,17-,7-,27-,7-,9,2,2,2,20-,36,10,f-,7,14-,4,a,54-3,2-6,6-5,9-,1c-10,13-1d,1c-14,3c-,10-6,32-b,240-30,28-18,c-14,a0,115-,3,66-,b-76,5,5-,1d,24,2,5-2,2,8-,35-2,19,f-10,1d-3,311-37f,1b,5a-b,d7-19,d-3,41,57-,68-4,29-3,5f,29-37,2e-2,25-c,2c-2,4e-3,30,78-3,64-,20,19b7-49,51a7-59,48e-2,38-738,2ba5-5b,222f-,3c-94,8-b,6-4,1b,6,2,3,3,6d-20,16e-f,41-,37-7,2e-2,11-f,5-b,18-,b,14,5-3,6,88-,2,bf-2,7-,7-,7-,4-2,8,8-9,8-2ff,20,5-b,1c-b4,27-,27-cbb1,f7-9,28-2,b5-221,56,48,3-,2-,3-,5,d,2,5,3,42,5-,9,8,1d,5,6,2-2,8,153-3,123-3,33-27fd,a6da-5128,21f-5df,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3,2-1d,61-ff7d\");\n// @TODO: Make this relative...\nconst Table_B_1_flags = \"ad,34f,1806,180b,180c,180d,200b,200c,200d,2060,feff\".split(\",\").map((v) => parseInt(v, 16));\nconst Table_B_2_ranges = [\n { h: 25, s: 32, l: 65 },\n { h: 30, s: 32, e: [23], l: 127 },\n { h: 54, s: 1, e: [48], l: 64, d: 2 },\n { h: 14, s: 1, l: 57, d: 2 },\n { h: 44, s: 1, l: 17, d: 2 },\n { h: 10, s: 1, e: [2, 6, 8], l: 61, d: 2 },\n { h: 16, s: 1, l: 68, d: 2 },\n { h: 84, s: 1, e: [18, 24, 66], l: 19, d: 2 },\n { h: 26, s: 32, e: [17], l: 435 },\n { h: 22, s: 1, l: 71, d: 2 },\n { h: 15, s: 80, l: 40 },\n { h: 31, s: 32, l: 16 },\n { h: 32, s: 1, l: 80, d: 2 },\n { h: 52, s: 1, l: 42, d: 2 },\n { h: 12, s: 1, l: 55, d: 2 },\n { h: 40, s: 1, e: [38], l: 15, d: 2 },\n { h: 14, s: 1, l: 48, d: 2 },\n { h: 37, s: 48, l: 49 },\n { h: 148, s: 1, l: 6351, d: 2 },\n { h: 88, s: 1, l: 160, d: 2 },\n { h: 15, s: 16, l: 704 },\n { h: 25, s: 26, l: 854 },\n { h: 25, s: 32, l: 55915 },\n { h: 37, s: 40, l: 1247 },\n { h: 25, s: -119711, l: 53248 },\n { h: 25, s: -119763, l: 52 },\n { h: 25, s: -119815, l: 52 },\n { h: 25, s: -119867, e: [1, 4, 5, 7, 8, 11, 12, 17], l: 52 },\n { h: 25, s: -119919, l: 52 },\n { h: 24, s: -119971, e: [2, 7, 8, 17], l: 52 },\n { h: 24, s: -120023, e: [2, 7, 13, 15, 16, 17], l: 52 },\n { h: 25, s: -120075, l: 52 },\n { h: 25, s: -120127, l: 52 },\n { h: 25, s: -120179, l: 52 },\n { h: 25, s: -120231, l: 52 },\n { h: 25, s: -120283, l: 52 },\n { h: 25, s: -120335, l: 52 },\n { h: 24, s: -119543, e: [17], l: 56 },\n { h: 24, s: -119601, e: [17], l: 58 },\n { h: 24, s: -119659, e: [17], l: 58 },\n { h: 24, s: -119717, e: [17], l: 58 },\n { h: 24, s: -119775, e: [17], l: 58 }\n];\nconst Table_B_2_lut_abs = createTable(\"b5:3bc,c3:ff,7:73,2:253,5:254,3:256,1:257,5:259,1:25b,3:260,1:263,2:269,1:268,5:26f,1:272,2:275,7:280,3:283,5:288,3:28a,1:28b,5:292,3f:195,1:1bf,29:19e,125:3b9,8b:3b2,1:3b8,1:3c5,3:3c6,1:3c0,1a:3ba,1:3c1,1:3c3,2:3b8,1:3b5,1bc9:3b9,1c:1f76,1:1f77,f:1f7a,1:1f7b,d:1f78,1:1f79,1:1f7c,1:1f7d,107:63,5:25b,4:68,1:68,1:68,3:69,1:69,1:6c,3:6e,4:70,1:71,1:72,1:72,1:72,7:7a,2:3c9,2:7a,2:6b,1:e5,1:62,1:63,3:65,1:66,2:6d,b:3b3,1:3c0,6:64,1b574:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3\");\nconst Table_B_2_lut_rel = createTable(\"179:1,2:1,2:1,5:1,2:1,a:4f,a:1,8:1,2:1,2:1,3:1,5:1,3:1,4:1,2:1,3:1,4:1,8:2,1:1,2:2,1:1,2:2,27:2,195:26,2:25,1:25,1:25,2:40,2:3f,1:3f,33:1,11:-6,1:-9,1ac7:-3a,6d:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,b:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,c:-8,2:-8,2:-8,2:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,49:-8,1:-8,1:-4a,1:-4a,d:-56,1:-56,1:-56,1:-56,d:-8,1:-8,f:-8,1:-8,3:-7\");\nconst Table_B_2_complex = createTable(\"df:00730073,51:00690307,19:02BC006E,a7:006A030C,18a:002003B9,16:03B903080301,20:03C503080301,1d7:05650582,190f:00680331,1:00740308,1:0077030A,1:0079030A,1:006102BE,b6:03C50313,2:03C503130300,2:03C503130301,2:03C503130342,2a:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,3:1F7003B9,1:03B103B9,1:03AC03B9,2:03B10342,1:03B1034203B9,5:03B103B9,6:1F7403B9,1:03B703B9,1:03AE03B9,2:03B70342,1:03B7034203B9,5:03B703B9,6:03B903080300,1:03B903080301,3:03B90342,1:03B903080342,b:03C503080300,1:03C503080301,1:03C10313,2:03C50342,1:03C503080342,b:1F7C03B9,1:03C903B9,1:03CE03B9,2:03C90342,1:03C9034203B9,5:03C903B9,ac:00720073,5b:00B00063,6:00B00066,d:006E006F,a:0073006D,1:00740065006C,1:0074006D,124f:006800700061,2:00610075,2:006F0076,b:00700061,1:006E0061,1:03BC0061,1:006D0061,1:006B0061,1:006B0062,1:006D0062,1:00670062,3:00700066,1:006E0066,1:03BC0066,4:0068007A,1:006B0068007A,1:006D0068007A,1:00670068007A,1:00740068007A,15:00700061,1:006B00700061,1:006D00700061,1:006700700061,8:00700076,1:006E0076,1:03BC0076,1:006D0076,1:006B0076,1:006D0076,1:00700077,1:006E0077,1:03BC0077,1:006D0077,1:006B0077,1:006D0077,1:006B03C9,1:006D03C9,2:00620071,3:00632215006B0067,1:0063006F002E,1:00640062,1:00670079,2:00680070,2:006B006B,1:006B006D,9:00700068,2:00700070006D,1:00700072,2:00730076,1:00770062,c723:00660066,1:00660069,1:0066006C,1:006600660069,1:00660066006C,1:00730074,1:00730074,d:05740576,1:05740565,1:0574056B,1:057E0576,1:0574056D\", bytes2);\nconst Table_C_ranges = createRangeTable(\"80-20,2a0-,39c,32,f71,18e,7f2-f,19-7,30-4,7-5,f81-b,5,a800-20ff,4d1-1f,110,fa-6,d174-7,2e84-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,2,1f-5f,ff7f-20001\");\nfunction flatten(values) {\n return values.reduce((accum, value) => {\n value.forEach((value) => { accum.push(value); });\n return accum;\n }, []);\n}\nexport function _nameprepTableA1(codepoint) {\n return !!matchMap(codepoint, Table_A_1_ranges);\n}\nexport function _nameprepTableB2(codepoint) {\n const range = matchMap(codepoint, Table_B_2_ranges);\n if (range) {\n if (range.s == null) {\n throw new Error(\"should not happenl bad range\");\n }\n return [codepoint + range.s];\n }\n const codes = Table_B_2_lut_abs[codepoint];\n if (codes) {\n return codes;\n }\n const shift = Table_B_2_lut_rel[codepoint];\n if (shift) {\n return [codepoint + shift[0]];\n }\n const complex = Table_B_2_complex[codepoint];\n if (complex) {\n return complex;\n }\n return null;\n}\nexport function _nameprepTableC(codepoint) {\n return !!matchMap(codepoint, Table_C_ranges);\n}\nexport function nameprep(value) {\n // This allows platforms with incomplete normalize to bypass\n // it for very basic names which the built-in toLowerCase\n // will certainly handle correctly\n if (value.match(/^[a-z0-9-]*$/i) && value.length <= 59) {\n return value.toLowerCase();\n }\n // Get the code points (keeping the current normalization)\n let codes = toUtf8CodePoints(value);\n codes = flatten(codes.map((code) => {\n // Substitute Table B.1 (Maps to Nothing)\n if (Table_B_1_flags.indexOf(code) >= 0) {\n return [];\n }\n if (code >= 0xfe00 && code <= 0xfe0f) {\n return [];\n }\n // Substitute Table B.2 (Case Folding)\n let codesTableB2 = _nameprepTableB2(code);\n if (codesTableB2) {\n return codesTableB2;\n }\n // No Substitution\n return [code];\n }));\n // Normalize using form KC\n codes = toUtf8CodePoints(_toUtf8String(codes), UnicodeNormalizationForm.NFKC);\n // Prohibit Tables C.1.2, C.2.2, C.3, C.4, C.5, C.6, C.7, C.8, C.9\n codes.forEach((code) => {\n if (_nameprepTableC(code)) {\n logger.throwArgumentError(\"STRINGPREP_CONTAINS_PROHIBITED\", \"value\", value);\n }\n });\n // Prohibit Unassigned Code Points (Table A.1)\n codes.forEach((code) => {\n if (_nameprepTableA1(code)) {\n logger.throwArgumentError(\"STRINGPREP_CONTAINS_UNASSIGNED\", \"value\", value);\n }\n });\n // IDNA extras\n let name = _toUtf8String(codes);\n // IDNA: 4.2.3.1\n if (name.substring(0, 1) === \"-\" || name.substring(2, 4) === \"--\" || name.substring(name.length - 1) === \"-\") {\n logger.throwArgumentError(\"invalid hyphen\", \"value\", value);\n }\n // IDNA: 4.2.4\n if (name.length > 63) {\n logger.throwArgumentError(\"too long\", \"value\", value);\n }\n return name;\n}\n//# sourceMappingURL=idna.js.map","import { toUtf8Bytes, toUtf8String } from \"@ethersproject/strings\";\nimport { Typed } from \"../typed.js\";\nimport { DynamicBytesCoder } from \"./bytes.js\";\nexport class StringCoder extends DynamicBytesCoder {\n constructor(localName) {\n super(\"string\", localName);\n }\n defaultValue() {\n return \"\";\n }\n encode(writer, _value) {\n return super.encode(writer, toUtf8Bytes(Typed.dereference(_value, \"string\")));\n }\n decode(reader) {\n return toUtf8String(super.decode(reader));\n }\n}\n//# sourceMappingURL=string.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\nimport { pack, unpack } from \"./array.js\";\nexport class TupleCoder extends Coder {\n constructor(coders, localName) {\n let dynamic = false;\n const types = [];\n coders.forEach((coder) => {\n if (coder.dynamic) {\n dynamic = true;\n }\n types.push(coder.type);\n });\n const type = (\"tuple(\" + types.join(\",\") + \")\");\n super(\"tuple\", type, localName, dynamic);\n defineProperties(this, { coders: Object.freeze(coders.slice()) });\n }\n defaultValue() {\n const values = [];\n this.coders.forEach((coder) => {\n values.push(coder.defaultValue());\n });\n // We only output named properties for uniquely named coders\n const uniqueNames = this.coders.reduce((accum, coder) => {\n const name = coder.localName;\n if (name) {\n if (!accum[name]) {\n accum[name] = 0;\n }\n accum[name]++;\n }\n return accum;\n }, {});\n // Add named values\n this.coders.forEach((coder, index) => {\n let name = coder.localName;\n if (!name || uniqueNames[name] !== 1) {\n return;\n }\n if (name === \"length\") {\n name = \"_length\";\n }\n if (values[name] != null) {\n return;\n }\n values[name] = values[index];\n });\n return Object.freeze(values);\n }\n encode(writer, _value) {\n const value = Typed.dereference(_value, \"tuple\");\n return pack(writer, this.coders, value);\n }\n decode(reader) {\n return reader.coerce(this.name, unpack(reader, this.coders));\n }\n}\n//# sourceMappingURL=tuple.js.map","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _AbiCoder_instances, _AbiCoder_getCoder;\n// See: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI\n//import { arrayify } from \"@ethersproject/bytes\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { logger } from \"./logger.js\";\nimport { Reader, Writer } from \"./coders/abstract-coder.js\";\nimport { AddressCoder } from \"./coders/address.js\";\nimport { ArrayCoder } from \"./coders/array.js\";\nimport { BooleanCoder } from \"./coders/boolean.js\";\nimport { BytesCoder } from \"./coders/bytes.js\";\nimport { FixedBytesCoder } from \"./coders/fixed-bytes.js\";\nimport { NullCoder } from \"./coders/null.js\";\nimport { NumberCoder } from \"./coders/number.js\";\nimport { StringCoder } from \"./coders/string.js\";\nimport { TupleCoder } from \"./coders/tuple.js\";\nimport { ParamType } from \"./fragments.js\";\nconst paramTypeBytes = new RegExp(/^bytes([0-9]*)$/);\nconst paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/);\nexport class AbiCoder {\n constructor(coerceFunc) {\n _AbiCoder_instances.add(this);\n defineProperties(this, { coerceFunc }, {}, { coerceFunc: null });\n }\n getDefaultValue(types) {\n const coders = types.map((type) => __classPrivateFieldGet(this, _AbiCoder_instances, \"m\", _AbiCoder_getCoder).call(this, ParamType.from(type)));\n const coder = new TupleCoder(coders, \"_\");\n return coder.defaultValue();\n }\n encode(types, values) {\n logger.assertArgumentCount(values.length, types.length, \"types/values length mismatch\");\n const coders = types.map((type) => __classPrivateFieldGet(this, _AbiCoder_instances, \"m\", _AbiCoder_getCoder).call(this, ParamType.from(type)));\n const coder = (new TupleCoder(coders, \"_\"));\n const writer = new Writer();\n coder.encode(writer, values);\n return writer.data;\n }\n decode(types, data, loose) {\n const coders = types.map((type) => __classPrivateFieldGet(this, _AbiCoder_instances, \"m\", _AbiCoder_getCoder).call(this, ParamType.from(type)));\n const coder = new TupleCoder(coders, \"_\");\n return coder.decode(new Reader(data, this.coerceFunc, loose));\n }\n}\n_AbiCoder_instances = new WeakSet(), _AbiCoder_getCoder = function _AbiCoder_getCoder(param) {\n if (param.isArray()) {\n return new ArrayCoder(__classPrivateFieldGet(this, _AbiCoder_instances, \"m\", _AbiCoder_getCoder).call(this, param.arrayChildren), param.arrayLength, param.name);\n }\n if (param.isTuple()) {\n return new TupleCoder(param.components.map((c) => __classPrivateFieldGet(this, _AbiCoder_instances, \"m\", _AbiCoder_getCoder).call(this, c)), param.name);\n }\n switch (param.baseType) {\n case \"address\":\n return new AddressCoder(param.name);\n case \"bool\":\n return new BooleanCoder(param.name);\n case \"string\":\n return new StringCoder(param.name);\n case \"bytes\":\n return new BytesCoder(param.name);\n case \"\":\n return new NullCoder(param.name);\n }\n // u?int[0-9]*\n let match = param.type.match(paramTypeNumber);\n if (match) {\n let size = parseInt(match[2] || \"256\");\n if (size === 0 || size > 256 || (size % 8) !== 0) {\n logger.throwArgumentError(\"invalid \" + match[1] + \" bit length\", \"param\", param);\n }\n return new NumberCoder(size / 8, (match[1] === \"int\"), param.name);\n }\n // bytes[0-9]+\n match = param.type.match(paramTypeBytes);\n if (match) {\n let size = parseInt(match[1]);\n if (size === 0 || size > 32) {\n logger.throwArgumentError(\"invalid bytes length\", \"param\", param);\n }\n return new FixedBytesCoder(size, param.name);\n }\n return logger.throwArgumentError(\"invalid type\", \"type\", param.type);\n};\nexport const defaultAbiCoder = new AbiCoder();\n//# sourceMappingURL=abi-coder.js.map","import { keccak256 } from \"@ethersproject/crypto\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nexport function id(value) {\n return keccak256(toUtf8Bytes(value));\n}\n//# sourceMappingURL=id.js.map","export const version = \"@ethersproject/hash@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { concat, hexlify } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { nameprep, toUtf8Bytes } from \"@ethersproject/strings\";\nimport { logger } from \"./logger.js\";\nconst Zeros = new Uint8Array(32);\nZeros.fill(0);\nconst Partition = new RegExp(\"^((.*)\\\\.)?([^.]+)$\");\nexport function isValidName(name) {\n try {\n const comps = name.split(\".\");\n for (let i = 0; i < comps.length; i++) {\n if (nameprep(comps[i]).length === 0) {\n throw new Error(\"empty\");\n }\n }\n return true;\n }\n catch (error) { }\n return false;\n}\nexport function namehash(name) {\n if (typeof (name) !== \"string\") {\n logger.throwArgumentError(\"invalid ENS name; not a string\", \"name\", name);\n }\n let current = name;\n let result = Zeros;\n while (current.length) {\n const partition = current.match(Partition);\n if (partition == null || partition[2] === \"\") {\n return logger.throwArgumentError(\"invalid ENS name; missing component\", \"name\", name);\n }\n const label = toUtf8Bytes(nameprep(partition[3]));\n result = keccak256(concat([result, keccak256(label)]));\n current = partition[2] || \"\";\n }\n return hexlify(result);\n}\nexport function dnsEncode(name) {\n if (typeof (name) !== \"string\") {\n logger.throwArgumentError(\"invalid DNS name; not a string\", \"name\", name);\n }\n if (name === \"\") {\n return \"0x00\";\n }\n // @TODO: should we enforce the 255 octet limit?\n return concat(name.split(\".\").map((comp) => {\n if (comp === \"\") {\n logger.throwArgumentError(\"invalid DNS name; missing component\", \"name\", name);\n }\n // We jam in an _ prefix to fill in with the length later\n // Note: Nameprep throws if the component is over 63 bytes\n const bytes = toUtf8Bytes(\"_\" + nameprep(comp));\n bytes[0] = bytes.length - 1;\n return bytes;\n })) + \"00\";\n}\n//# sourceMappingURL=namehash.js.map","import { concat } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nexport const messagePrefix = \"\\x19Ethereum Signed Message:\\n\";\nexport function hashMessage(message) {\n if (typeof (message) === \"string\") {\n message = toUtf8Bytes(message);\n }\n return keccak256(concat([\n toUtf8Bytes(messagePrefix),\n toUtf8Bytes(String(message.length)),\n message\n ]));\n}\n//# sourceMappingURL=message.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _TypedDataEncoder_instances, _TypedDataEncoder_types, _TypedDataEncoder_fullTypes, _TypedDataEncoder_encoderCache, _TypedDataEncoder_getEncoder;\n//import { TypedDataDomain, TypedDataField } from \"@ethersproject/providerabstract-signer\";\nimport { getAddress } from \"@ethersproject/address\";\nimport { arrayify, concat, hexlify, zeroPadLeft, isHexString } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { mask, toHex, toTwos } from \"@ethersproject/math\";\nimport { id } from \"./id.js\";\nimport { logger } from \"./logger.js\";\nconst padding = new Uint8Array(32);\npadding.fill(0);\nconst BN__1 = BigInt(-1);\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_MAX_UINT256 = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\n;\n;\nfunction hexPadRight(value) {\n const bytes = arrayify(value);\n const padOffset = bytes.length % 32;\n if (padOffset) {\n return concat([bytes, padding.slice(padOffset)]);\n }\n return hexlify(bytes);\n}\nconst hexTrue = toHex(BN_1, 32);\nconst hexFalse = toHex(BN_0, 32);\nconst domainFieldTypes = {\n name: \"string\",\n version: \"string\",\n chainId: \"uint256\",\n verifyingContract: \"address\",\n salt: \"bytes32\"\n};\nconst domainFieldNames = [\n \"name\", \"version\", \"chainId\", \"verifyingContract\", \"salt\"\n];\nfunction checkString(key) {\n return function (value) {\n if (typeof (value) !== \"string\") {\n logger.throwArgumentError(`invalid domain value for ${JSON.stringify(key)}`, `domain.${key}`, value);\n }\n return value;\n };\n}\nconst domainChecks = {\n name: checkString(\"name\"),\n version: checkString(\"version\"),\n chainId: function (value) {\n return logger.getBigInt(value, \"domain.chainId\");\n },\n verifyingContract: function (value) {\n try {\n return getAddress(value).toLowerCase();\n }\n catch (error) { }\n return logger.throwArgumentError(`invalid domain value \"verifyingContract\"`, \"domain.verifyingContract\", value);\n },\n salt: function (value) {\n const bytes = logger.getBytes(value, \"domain.salt\");\n if (bytes.length !== 32) {\n logger.throwArgumentError(`invalid domain value \"salt\"`, \"domain.salt\", value);\n }\n return hexlify(bytes);\n }\n};\nfunction getBaseEncoder(type) {\n // intXX and uintXX\n {\n const match = type.match(/^(u?)int(\\d*)$/);\n if (match) {\n const signed = (match[1] === \"\");\n const width = parseInt(match[2] || \"256\");\n if (width % 8 !== 0 || width > 256 || (match[2] && match[2] !== String(width))) {\n logger.throwArgumentError(\"invalid numeric width\", \"type\", type);\n }\n const boundsUpper = mask(BN_MAX_UINT256, signed ? (width - 1) : width);\n const boundsLower = signed ? ((boundsUpper + BN_1) * BN__1) : BN_0;\n return function (_value) {\n const value = logger.getBigInt(_value, \"value\");\n if (value < boundsLower || value > boundsUpper) {\n logger.throwArgumentError(`value out-of-bounds for ${type}`, \"value\", value);\n }\n return toHex(toTwos(value, 256), 32);\n };\n }\n }\n // bytesXX\n {\n const match = type.match(/^bytes(\\d+)$/);\n if (match) {\n const width = parseInt(match[1]);\n if (width === 0 || width > 32 || match[1] !== String(width)) {\n logger.throwArgumentError(\"invalid bytes width\", \"type\", type);\n }\n return function (value) {\n const bytes = arrayify(value);\n if (bytes.length !== width) {\n logger.throwArgumentError(`invalid length for ${type}`, \"value\", value);\n }\n return hexPadRight(value);\n };\n }\n }\n switch (type) {\n case \"address\": return function (value) {\n return zeroPadLeft(getAddress(value), 32);\n };\n case \"bool\": return function (value) {\n return ((!value) ? hexFalse : hexTrue);\n };\n case \"bytes\": return function (value) {\n return keccak256(value);\n };\n case \"string\": return function (value) {\n return id(value);\n };\n }\n return null;\n}\nfunction encodeType(name, fields) {\n return `${name}(${fields.map(({ name, type }) => (type + \" \" + name)).join(\",\")})`;\n}\nexport class TypedDataEncoder {\n constructor(types) {\n _TypedDataEncoder_instances.add(this);\n _TypedDataEncoder_types.set(this, void 0);\n _TypedDataEncoder_fullTypes.set(this, void 0);\n _TypedDataEncoder_encoderCache.set(this, void 0);\n __classPrivateFieldSet(this, _TypedDataEncoder_types, JSON.stringify(types), \"f\");\n __classPrivateFieldSet(this, _TypedDataEncoder_fullTypes, new Map(), \"f\");\n __classPrivateFieldSet(this, _TypedDataEncoder_encoderCache, new Map(), \"f\");\n // Link struct types to their direct child structs\n const links = new Map();\n // Link structs to structs which contain them as a child\n const parents = new Map();\n // Link all subtypes within a given struct\n const subtypes = new Map();\n Object.keys(types).forEach((type) => {\n links.set(type, new Set());\n parents.set(type, []);\n subtypes.set(type, new Set());\n });\n for (const name in types) {\n const uniqueNames = new Set();\n for (const field of types[name]) {\n // Check each field has a unique name\n if (uniqueNames.has(field.name)) {\n logger.throwArgumentError(`duplicate variable name ${JSON.stringify(field.name)} in ${JSON.stringify(name)}`, \"types\", types);\n }\n uniqueNames.add(field.name);\n // Get the base type (drop any array specifiers)\n const baseType = (field.type.match(/^([^\\x5b]*)(\\x5b|$)/))[1] || null;\n if (baseType === name) {\n logger.throwArgumentError(`circular type reference to ${JSON.stringify(baseType)}`, \"types\", types);\n }\n // Is this a base encoding type?\n const encoder = getBaseEncoder(baseType);\n if (encoder) {\n continue;\n }\n if (!parents.has(baseType)) {\n logger.throwArgumentError(`unknown type ${JSON.stringify(baseType)}`, \"types\", types);\n }\n // Add linkage\n parents.get(baseType).push(name);\n links.get(name).add(baseType);\n }\n }\n // Deduce the primary type\n const primaryTypes = Array.from(parents.keys()).filter((n) => (parents.get(n).length === 0));\n if (primaryTypes.length === 0) {\n logger.throwArgumentError(\"missing primary type\", \"types\", types);\n }\n else if (primaryTypes.length > 1) {\n logger.throwArgumentError(`ambiguous primary types or unused types: ${primaryTypes.map((t) => (JSON.stringify(t))).join(\", \")}`, \"types\", types);\n }\n defineProperties(this, { primaryType: primaryTypes[0] });\n // Check for circular type references\n function checkCircular(type, found) {\n if (found.has(type)) {\n logger.throwArgumentError(`circular type reference to ${JSON.stringify(type)}`, \"types\", types);\n }\n found.add(type);\n for (const child of links.get(type)) {\n if (!parents.has(child)) {\n continue;\n }\n // Recursively check children\n checkCircular(child, found);\n // Mark all ancestors as having this decendant\n for (const subtype of found) {\n subtypes.get(subtype).add(child);\n }\n }\n found.delete(type);\n }\n checkCircular(this.primaryType, new Set());\n // Compute each fully describe type\n for (const [name, set] of subtypes) {\n const st = Array.from(set);\n st.sort();\n __classPrivateFieldGet(this, _TypedDataEncoder_fullTypes, \"f\").set(name, encodeType(name, types[name]) + st.map((t) => encodeType(t, types[t])).join(\"\"));\n }\n }\n get types() {\n return JSON.parse(__classPrivateFieldGet(this, _TypedDataEncoder_types, \"f\"));\n }\n getEncoder(type) {\n let encoder = __classPrivateFieldGet(this, _TypedDataEncoder_encoderCache, \"f\").get(type);\n if (!encoder) {\n encoder = __classPrivateFieldGet(this, _TypedDataEncoder_instances, \"m\", _TypedDataEncoder_getEncoder).call(this, type);\n __classPrivateFieldGet(this, _TypedDataEncoder_encoderCache, \"f\").set(type, encoder);\n }\n return encoder;\n }\n encodeType(name) {\n const result = __classPrivateFieldGet(this, _TypedDataEncoder_fullTypes, \"f\").get(name);\n if (!result) {\n return logger.throwArgumentError(`unknown type: ${JSON.stringify(name)}`, \"name\", name);\n }\n return result;\n }\n encodeData(type, value) {\n return this.getEncoder(type)(value);\n }\n hashStruct(name, value) {\n return keccak256(this.encodeData(name, value));\n }\n encode(value) {\n return this.encodeData(this.primaryType, value);\n }\n hash(value) {\n return this.hashStruct(this.primaryType, value);\n }\n _visit(type, value, callback) {\n // Basic encoder type (address, bool, uint256, etc)\n {\n const encoder = getBaseEncoder(type);\n if (encoder) {\n return callback(type, value);\n }\n }\n // Array\n const match = type.match(/^(.*)(\\x5b(\\d*)\\x5d)$/);\n if (match) {\n const subtype = match[1];\n const length = parseInt(match[3]);\n if (length >= 0 && value.length !== length) {\n logger.throwArgumentError(\"array length mismatch; expected length ${ arrayLength }\", \"value\", value);\n }\n return value.map((v) => this._visit(subtype, v, callback));\n }\n // Struct\n const fields = this.types[type];\n if (fields) {\n return fields.reduce((accum, { name, type }) => {\n accum[name] = this._visit(type, value[name], callback);\n return accum;\n }, {});\n }\n return logger.throwArgumentError(`unknown type: ${type}`, \"type\", type);\n }\n visit(value, callback) {\n return this._visit(this.primaryType, value, callback);\n }\n static from(types) {\n return new TypedDataEncoder(types);\n }\n static getPrimaryType(types) {\n return TypedDataEncoder.from(types).primaryType;\n }\n static hashStruct(name, types, value) {\n return TypedDataEncoder.from(types).hashStruct(name, value);\n }\n static hashDomain(domain) {\n const domainFields = [];\n for (const name in domain) {\n const type = domainFieldTypes[name];\n if (!type) {\n logger.throwArgumentError(`invalid typed-data domain key: ${JSON.stringify(name)}`, \"domain\", domain);\n }\n domainFields.push({ name, type });\n }\n domainFields.sort((a, b) => {\n return domainFieldNames.indexOf(a.name) - domainFieldNames.indexOf(b.name);\n });\n return TypedDataEncoder.hashStruct(\"EIP712Domain\", { EIP712Domain: domainFields }, domain);\n }\n static encode(domain, types, value) {\n return concat([\n \"0x1901\",\n TypedDataEncoder.hashDomain(domain),\n TypedDataEncoder.from(types).hash(value)\n ]);\n }\n static hash(domain, types, value) {\n return keccak256(TypedDataEncoder.encode(domain, types, value));\n }\n // Replaces all address types with ENS names with their looked up address\n static async resolveNames(domain, types, value, resolveName) {\n // Make a copy to isolate it from the object passed in\n domain = Object.assign({}, domain);\n // Look up all ENS names\n const ensCache = {};\n // Do we need to look up the domain's verifyingContract?\n if (domain.verifyingContract && !isHexString(domain.verifyingContract, 20)) {\n ensCache[domain.verifyingContract] = \"0x\";\n }\n // We are going to use the encoder to visit all the base values\n const encoder = TypedDataEncoder.from(types);\n // Get a list of all the addresses\n encoder.visit(value, (type, value) => {\n if (type === \"address\" && !isHexString(value, 20)) {\n ensCache[value] = \"0x\";\n }\n return value;\n });\n // Lookup each name\n for (const name in ensCache) {\n ensCache[name] = await resolveName(name);\n }\n // Replace the domain verifyingContract if needed\n if (domain.verifyingContract && ensCache[domain.verifyingContract]) {\n domain.verifyingContract = ensCache[domain.verifyingContract];\n }\n // Replace all ENS names with their address\n value = encoder.visit(value, (type, value) => {\n if (type === \"address\" && ensCache[value]) {\n return ensCache[value];\n }\n return value;\n });\n return { domain, value };\n }\n static getPayload(domain, types, value) {\n // Validate the domain fields\n TypedDataEncoder.hashDomain(domain);\n // Derive the EIP712Domain Struct reference type\n const domainValues = {};\n const domainTypes = [];\n domainFieldNames.forEach((name) => {\n const value = domain[name];\n if (value == null) {\n return;\n }\n domainValues[name] = domainChecks[name](value);\n domainTypes.push({ name, type: domainFieldTypes[name] });\n });\n const encoder = TypedDataEncoder.from(types);\n const typesWithDomain = Object.assign({}, types);\n if (typesWithDomain.EIP712Domain) {\n logger.throwArgumentError(\"types must not contain EIP712Domain type\", \"types.EIP712Domain\", types);\n }\n else {\n typesWithDomain.EIP712Domain = domainTypes;\n }\n // Validate the data structures and types\n encoder.encode(value);\n return {\n types: typesWithDomain,\n domain: domainValues,\n primaryType: encoder.primaryType,\n message: encoder.visit(value, (type, value) => {\n // bytes\n if (type.match(/^bytes(\\d*)/)) {\n return hexlify(logger.getBytes(value));\n }\n // uint or int\n if (type.match(/^u?int/)) {\n return logger.getBigInt(value).toString();\n }\n switch (type) {\n case \"address\":\n return value.toLowerCase();\n case \"bool\":\n return !!value;\n case \"string\":\n if (typeof (value) !== \"string\") {\n logger.throwArgumentError(`invalid string`, \"value\", value);\n }\n return value;\n }\n return logger.throwArgumentError(\"unsupported type\", \"type\", type);\n })\n };\n }\n}\n_TypedDataEncoder_types = new WeakMap(), _TypedDataEncoder_fullTypes = new WeakMap(), _TypedDataEncoder_encoderCache = new WeakMap(), _TypedDataEncoder_instances = new WeakSet(), _TypedDataEncoder_getEncoder = function _TypedDataEncoder_getEncoder(type) {\n // Basic encoder type (address, bool, uint256, etc)\n {\n const encoder = getBaseEncoder(type);\n if (encoder) {\n return encoder;\n }\n }\n // Array\n const match = type.match(/^(.*)(\\x5b(\\d*)\\x5d)$/);\n if (match) {\n const subtype = match[1];\n const subEncoder = this.getEncoder(subtype);\n const length = parseInt(match[3]);\n return (value) => {\n if (length >= 0 && value.length !== length) {\n logger.throwArgumentError(\"array length mismatch; expected length ${ arrayLength }\", \"value\", value);\n }\n let result = value.map(subEncoder);\n if (__classPrivateFieldGet(this, _TypedDataEncoder_fullTypes, \"f\").has(subtype)) {\n result = result.map(keccak256);\n }\n return keccak256(concat(result));\n };\n }\n // Struct\n const fields = this.types[type];\n if (fields) {\n const encodedType = id(__classPrivateFieldGet(this, _TypedDataEncoder_fullTypes, \"f\").get(type));\n return (value) => {\n const values = fields.map(({ name, type }) => {\n const result = this.getEncoder(type)(value[name]);\n if (__classPrivateFieldGet(this, _TypedDataEncoder_fullTypes, \"f\").has(type)) {\n return keccak256(result);\n }\n return result;\n });\n values.unshift(encodedType);\n return concat(values);\n };\n }\n return logger.throwArgumentError(`unknown type: ${type}`, \"type\", type);\n};\n//# sourceMappingURL=typed-data.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Interface_instances, _Interface_errors, _Interface_events, _Interface_functions, _Interface_abiCoder, _Interface_getFunction, _Interface_getEvent;\nimport { arrayify, concat, dataSlice, hexlify, zeroPadLeft, isHexString } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { id } from \"@ethersproject/hash\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { defaultAbiCoder } from \"./abi-coder.js\";\nimport { checkResultErrors, Result } from \"./coders/abstract-coder.js\";\nimport { ConstructorFragment, ErrorFragment, EventFragment, FormatType, Fragment, FunctionFragment, ParamType } from \"./fragments.js\";\nimport { logger } from \"./logger.js\";\nimport { Typed } from \"./typed.js\";\nexport { checkResultErrors, Result };\nexport class LogDescription {\n constructor(fragment, topic, args) {\n const name = fragment.name, signature = fragment.format();\n defineProperties(this, {\n fragment, name, signature, topic, args\n });\n }\n}\nexport class TransactionDescription {\n constructor(fragment, selector, args, value) {\n const name = fragment.name, signature = fragment.format();\n defineProperties(this, {\n fragment, name, args, signature, selector, value\n });\n }\n}\nexport class ErrorDescription {\n constructor(fragment, selector, args) {\n const name = fragment.name, signature = fragment.format();\n defineProperties(this, {\n fragment, name, args, signature, selector\n });\n }\n}\nexport class Indexed {\n constructor(hash) {\n defineProperties(this, { hash, _isIndexed: true });\n }\n static isIndexed(value) {\n return !!(value && value._isIndexed);\n }\n}\n// https://docs.soliditylang.org/en/v0.8.13/control-structures.html?highlight=panic#panic-via-assert-and-error-via-require\nconst PanicReasons = {\n \"0\": \"generic panic\",\n \"1\": \"assert(false)\",\n \"17\": \"arithmetic overflow\",\n \"18\": \"division or modulo by zero\",\n \"33\": \"enum overflow\",\n \"34\": \"invalid encoded storage byte array accessed\",\n \"49\": \"out-of-bounds array access; popping on an empty array\",\n \"50\": \"out-of-bounds access of an array or bytesN\",\n \"65\": \"out of memory\",\n \"81\": \"uninitialized function\",\n};\nconst BuiltinErrors = {\n \"0x08c379a0\": {\n signature: \"Error(string)\",\n name: \"Error\",\n inputs: [\"string\"],\n reason: (message) => {\n return `reverted with reason string ${JSON.stringify(message)}`;\n }\n },\n \"0x4e487b71\": {\n signature: \"Panic(uint256)\",\n name: \"Panic\",\n inputs: [\"uint256\"],\n reason: (code) => {\n let reason = \"unknown panic code\";\n if (code >= 0 && code <= 0xff && PanicReasons[code.toString()]) {\n reason = PanicReasons[code.toString()];\n }\n return `reverted with panic code 0x${code.toString(16)} (${reason})`;\n }\n }\n};\nexport class Interface {\n constructor(fragments) {\n _Interface_instances.add(this);\n _Interface_errors.set(this, void 0);\n _Interface_events.set(this, void 0);\n _Interface_functions.set(this, void 0);\n // #structs: Map;\n _Interface_abiCoder.set(this, void 0);\n let abi = [];\n if (typeof (fragments) === \"string\") {\n abi = JSON.parse(fragments);\n }\n else {\n abi = fragments;\n }\n __classPrivateFieldSet(this, _Interface_functions, new Map(), \"f\");\n __classPrivateFieldSet(this, _Interface_errors, new Map(), \"f\");\n __classPrivateFieldSet(this, _Interface_events, new Map(), \"f\");\n // this.#structs = new Map();\n defineProperties(this, {\n fragments: Object.freeze(abi.map((f) => Fragment.from(f)).filter((f) => (f != null))),\n });\n __classPrivateFieldSet(this, _Interface_abiCoder, this.getAbiCoder(), \"f\");\n // Add all fragments by their signature\n this.fragments.forEach((fragment) => {\n let bucket;\n switch (fragment.type) {\n case \"constructor\":\n if (this.deploy) {\n logger.warn(\"duplicate definition - constructor\");\n return;\n }\n //checkNames(fragment, \"input\", fragment.inputs);\n defineProperties(this, { deploy: fragment });\n return;\n case \"function\":\n //checkNames(fragment, \"input\", fragment.inputs);\n //checkNames(fragment, \"output\", (fragment).outputs);\n bucket = __classPrivateFieldGet(this, _Interface_functions, \"f\");\n break;\n case \"event\":\n //checkNames(fragment, \"input\", fragment.inputs);\n bucket = __classPrivateFieldGet(this, _Interface_events, \"f\");\n break;\n case \"error\":\n bucket = __classPrivateFieldGet(this, _Interface_errors, \"f\");\n break;\n default:\n return;\n }\n const signature = fragment.format();\n if (bucket.has(signature)) {\n logger.warn(\"duplicate definition - \" + signature);\n return;\n }\n bucket.set(signature, fragment);\n });\n // If we do not have a constructor add a default\n if (!this.deploy) {\n defineProperties(this, {\n deploy: ConstructorFragment.fromString(\"constructor()\")\n });\n }\n }\n // @TODO: multi sig?\n format(format) {\n if (!format) {\n format = FormatType.full;\n }\n if (format === FormatType.sighash) {\n logger.throwArgumentError(\"interface does not support formatting sighash\", \"format\", format);\n }\n const abi = this.fragments.map((f) => f.format(format));\n // We need to re-bundle the JSON fragments a bit\n if (format === FormatType.json) {\n return JSON.stringify(abi.map((j) => JSON.parse(j)));\n }\n return abi;\n }\n getAbiCoder() {\n return defaultAbiCoder;\n }\n getFunctionName(key) {\n return (__classPrivateFieldGet(this, _Interface_instances, \"m\", _Interface_getFunction).call(this, key, null, false)).name;\n }\n getFunction(key, values) {\n return __classPrivateFieldGet(this, _Interface_instances, \"m\", _Interface_getFunction).call(this, key, values || null, true);\n }\n getEventName(key) {\n return (__classPrivateFieldGet(this, _Interface_instances, \"m\", _Interface_getEvent).call(this, key, null, false)).name;\n }\n getEvent(key, values) {\n return __classPrivateFieldGet(this, _Interface_instances, \"m\", _Interface_getEvent).call(this, key, values || null, true);\n }\n // Find a function definition by any means necessary (unless it is ambiguous)\n getError(key, values) {\n if (isHexString(key)) {\n const selector = key.toLowerCase();\n for (const fragment of __classPrivateFieldGet(this, _Interface_errors, \"f\").values()) {\n if (selector === this.getSelector(fragment)) {\n return fragment;\n }\n }\n logger.throwArgumentError(\"no matching error\", \"selector\", key);\n }\n // It is a bare name, look up the function (will return null if ambiguous)\n if (key.indexOf(\"(\") === -1) {\n const matching = [];\n for (const [name, fragment] of __classPrivateFieldGet(this, _Interface_errors, \"f\")) {\n if (name.split(\"(\" /* fix:) */)[0] === key) {\n matching.push(fragment);\n }\n }\n if (matching.length === 0) {\n logger.throwArgumentError(\"no matching error\", \"name\", key);\n }\n else if (matching.length > 1) {\n // @TODO: refine by Typed\n logger.throwArgumentError(\"multiple matching errors\", \"name\", key);\n }\n return matching[0];\n }\n // Normalize the signature and lookup the function\n const result = __classPrivateFieldGet(this, _Interface_errors, \"f\").get(ErrorFragment.fromString(key).format());\n if (result) {\n return result;\n }\n return logger.throwArgumentError(\"no matching error\", \"signature\", key);\n }\n // Get the 4-byte selector used by Solidity to identify a function\n getSelector(fragment) {\n /*\n if (typeof(fragment) === \"string\") {\n const matches: Array = [ ];\n\n try { matches.push(this.getFunction(fragment)); } catch (error) { }\n try { matches.push(this.getError(fragment)); } catch (_) { }\n\n if (matches.length === 0) {\n logger.throwArgumentError(\"unknown fragment\", \"key\", fragment);\n } else if (matches.length > 1) {\n logger.throwArgumentError(\"ambiguous fragment matches function and error\", \"key\", fragment);\n }\n\n fragment = matches[0];\n }\n */\n return dataSlice(id(fragment.format()), 0, 4);\n }\n // Get the 32-byte topic hash used by Solidity to identify an event\n getEventTopic(fragment) {\n //if (typeof(fragment) === \"string\") { fragment = this.getEvent(eventFragment); }\n return id(fragment.format());\n }\n _decodeParams(params, data) {\n return __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(params, data);\n }\n _encodeParams(params, values) {\n return __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").encode(params, values);\n }\n encodeDeploy(values) {\n return this._encodeParams(this.deploy.inputs, values || []);\n }\n decodeErrorResult(fragment, data) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getError(fragment);\n }\n if (dataSlice(data, 0, 4) !== this.getSelector(fragment)) {\n logger.throwArgumentError(`data signature does not match error ${fragment.name}.`, \"data\", data);\n }\n return this._decodeParams(fragment.inputs, dataSlice(data, 4));\n }\n encodeErrorResult(fragment, values) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getError(fragment);\n }\n return concat([\n this.getSelector(fragment),\n this._encodeParams(fragment.inputs, values || [])\n ]);\n }\n // Decode the data for a function call (e.g. tx.data)\n decodeFunctionData(fragment, data) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getFunction(fragment);\n }\n if (dataSlice(data, 0, 4) !== this.getSelector(fragment)) {\n logger.throwArgumentError(`data signature does not match function ${fragment.name}.`, \"data\", data);\n }\n return this._decodeParams(fragment.inputs, dataSlice(data, 4));\n }\n // Encode the data for a function call (e.g. tx.data)\n encodeFunctionData(fragment, values) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getFunction(fragment);\n }\n return concat([\n this.getSelector(fragment),\n this._encodeParams(fragment.inputs, values || [])\n ]);\n }\n // Decode the result from a function call (e.g. from eth_call)\n decodeFunctionResult(fragment, data) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getFunction(fragment);\n }\n let message = \"invalid length for result data\";\n const bytes = arrayify(data);\n if ((bytes.length % 32) === 0) {\n try {\n return __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(fragment.outputs, bytes);\n }\n catch (error) {\n message = \"could not decode result data\";\n }\n }\n // Call returned data with no error, but the data is junk\n return logger.throwError(message, \"BAD_DATA\", {\n value: hexlify(bytes),\n info: { method: fragment.name, signature: fragment.format() }\n });\n }\n makeError(fragment, _data, tx) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getFunction(fragment);\n }\n const data = logger.getBytes(_data);\n let args = undefined;\n if (tx) {\n try {\n args = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(fragment.inputs, tx.data || \"0x\");\n }\n catch (error) {\n console.log(error);\n }\n }\n let errorArgs = undefined;\n let errorName = undefined;\n let errorSignature = undefined;\n let reason = \"unknown reason\";\n if (data.length === 0) {\n reason = \"missing error reason\";\n }\n else if ((data.length % 32) === 4) {\n const selector = hexlify(data.slice(0, 4));\n const builtin = BuiltinErrors[selector];\n if (builtin) {\n try {\n errorName = builtin.name;\n errorSignature = builtin.signature;\n errorArgs = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(builtin.inputs, data.slice(4));\n reason = builtin.reason(...errorArgs);\n }\n catch (error) {\n console.log(error); // @TODO: remove\n }\n }\n else {\n reason = \"unknown custom error\";\n try {\n const error = this.getError(selector);\n errorName = error.name;\n errorSignature = error.format();\n reason = `custom error: ${errorSignature}`;\n try {\n errorArgs = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(error.inputs, data.slice(4));\n }\n catch (error) {\n reason = `custom error: ${errorSignature} (coult not decode error data)`;\n }\n }\n catch (error) {\n console.log(error); // @TODO: remove\n }\n }\n }\n return logger.makeError(\"call revert exception\", \"CALL_EXCEPTION\", {\n data: hexlify(data), transaction: null,\n method: fragment.name, signature: fragment.format(), args,\n errorArgs, errorName, errorSignature, reason\n });\n }\n // Encode the result for a function call (e.g. for eth_call)\n encodeFunctionResult(functionFragment, values) {\n if (typeof (functionFragment) === \"string\") {\n functionFragment = this.getFunction(functionFragment);\n }\n return hexlify(__classPrivateFieldGet(this, _Interface_abiCoder, \"f\").encode(functionFragment.outputs, values || []));\n }\n /*\n spelunk(inputs: Array, values: ReadonlyArray, processfunc: (type: string, value: any) => Promise): Promise> {\n const promises: Array> = [ ];\n const process = function(type: ParamType, value: any): any {\n if (type.baseType === \"array\") {\n return descend(type.child\n }\n if (type. === \"address\") {\n }\n };\n \n const descend = function (inputs: Array, values: ReadonlyArray) {\n if (inputs.length !== values.length) { throw new Error(\"length mismatch\"); }\n \n };\n \n const result: Array = [ ];\n values.forEach((value, index) => {\n if (value == null) {\n topics.push(null);\n } else if (param.baseType === \"array\" || param.baseType === \"tuple\") {\n logger.throwArgumentError(\"filtering with tuples or arrays not supported\", (\"contract.\" + param.name), value);\n } else if (Array.isArray(value)) {\n topics.push(value.map((value) => encodeTopic(param, value)));\n } else {\n topics.push(encodeTopic(param, value));\n }\n });\n }\n */\n // Create the filter for the event with search criteria (e.g. for eth_filterLog)\n encodeFilterTopics(eventFragment, values) {\n if (typeof (eventFragment) === \"string\") {\n eventFragment = this.getEvent(eventFragment);\n }\n if (values.length > eventFragment.inputs.length) {\n logger.throwError(\"too many arguments for \" + eventFragment.format(), \"UNEXPECTED_ARGUMENT\", {\n count: values.length,\n expectedCount: eventFragment.inputs.length\n });\n }\n const topics = [];\n if (!eventFragment.anonymous) {\n topics.push(this.getEventTopic(eventFragment));\n }\n const encodeTopic = (param, value) => {\n if (param.type === \"string\") {\n return id(value);\n }\n else if (param.type === \"bytes\") {\n return keccak256(hexlify(value));\n }\n // Check addresses are valid\n if (param.type === \"address\") {\n __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").encode([\"address\"], [value]);\n }\n return zeroPadLeft(hexlify(value), 32);\n //@TOOD should probably be return toHex(value, 32)\n };\n values.forEach((value, index) => {\n const param = eventFragment.inputs[index];\n if (!param.indexed) {\n if (value != null) {\n logger.throwArgumentError(\"cannot filter non-indexed parameters; must be null\", (\"contract.\" + param.name), value);\n }\n return;\n }\n if (value == null) {\n topics.push(null);\n }\n else if (param.baseType === \"array\" || param.baseType === \"tuple\") {\n logger.throwArgumentError(\"filtering with tuples or arrays not supported\", (\"contract.\" + param.name), value);\n }\n else if (Array.isArray(value)) {\n topics.push(value.map((value) => encodeTopic(param, value)));\n }\n else {\n topics.push(encodeTopic(param, value));\n }\n });\n // Trim off trailing nulls\n while (topics.length && topics[topics.length - 1] === null) {\n topics.pop();\n }\n return topics;\n }\n encodeEventLog(eventFragment, values) {\n if (typeof (eventFragment) === \"string\") {\n eventFragment = this.getEvent(eventFragment);\n }\n const topics = [];\n const dataTypes = [];\n const dataValues = [];\n if (!eventFragment.anonymous) {\n topics.push(this.getEventTopic(eventFragment));\n }\n if (values.length !== eventFragment.inputs.length) {\n logger.throwArgumentError(\"event arguments/values mismatch\", \"values\", values);\n }\n eventFragment.inputs.forEach((param, index) => {\n const value = values[index];\n if (param.indexed) {\n if (param.type === \"string\") {\n topics.push(id(value));\n }\n else if (param.type === \"bytes\") {\n topics.push(keccak256(value));\n }\n else if (param.baseType === \"tuple\" || param.baseType === \"array\") {\n // @TODO\n throw new Error(\"not implemented\");\n }\n else {\n topics.push(__classPrivateFieldGet(this, _Interface_abiCoder, \"f\").encode([param.type], [value]));\n }\n }\n else {\n dataTypes.push(param);\n dataValues.push(value);\n }\n });\n return {\n data: __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").encode(dataTypes, dataValues),\n topics: topics\n };\n }\n // Decode a filter for the event and the search criteria\n decodeEventLog(eventFragment, data, topics) {\n if (typeof (eventFragment) === \"string\") {\n eventFragment = this.getEvent(eventFragment);\n }\n if (topics != null && !eventFragment.anonymous) {\n const eventTopic = this.getEventTopic(eventFragment);\n if (!isHexString(topics[0], 32) || topics[0].toLowerCase() !== eventTopic) {\n logger.throwArgumentError(\"fragment/topic mismatch\", \"topics[0]\", topics[0]);\n }\n topics = topics.slice(1);\n }\n const indexed = [];\n const nonIndexed = [];\n const dynamic = [];\n eventFragment.inputs.forEach((param, index) => {\n if (param.indexed) {\n if (param.type === \"string\" || param.type === \"bytes\" || param.baseType === \"tuple\" || param.baseType === \"array\") {\n indexed.push(ParamType.fromObject({ type: \"bytes32\", name: param.name }));\n dynamic.push(true);\n }\n else {\n indexed.push(param);\n dynamic.push(false);\n }\n }\n else {\n nonIndexed.push(param);\n dynamic.push(false);\n }\n });\n const resultIndexed = (topics != null) ? __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(indexed, concat(topics)) : null;\n const resultNonIndexed = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(nonIndexed, data, true);\n //const result: (Array & { [ key: string ]: any }) = [ ];\n const values = [];\n const keys = [];\n let nonIndexedIndex = 0, indexedIndex = 0;\n eventFragment.inputs.forEach((param, index) => {\n let value = null;\n if (param.indexed) {\n if (resultIndexed == null) {\n value = new Indexed(null);\n }\n else if (dynamic[index]) {\n value = new Indexed(resultIndexed[indexedIndex++]);\n }\n else {\n try {\n value = resultIndexed[indexedIndex++];\n }\n catch (error) {\n value = error;\n }\n }\n }\n else {\n try {\n value = resultNonIndexed[nonIndexedIndex++];\n }\n catch (error) {\n value = error;\n }\n }\n values.push(value);\n keys.push(param.name || null);\n });\n return Result.fromItems(values, keys);\n }\n // Given a transaction, find the matching function fragment (if any) and\n // determine all its properties and call parameters\n parseTransaction(tx) {\n const data = logger.getBytes(tx.data, \"tx.data\");\n const value = logger.getBigInt((tx.value != null) ? tx.value : 0, \"tx.value\");\n const fragment = this.getFunction(hexlify(data.slice(0, 4)));\n if (!fragment) {\n return null;\n }\n const args = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(fragment.inputs, data.slice(4));\n return new TransactionDescription(fragment, this.getSelector(fragment), args, value);\n }\n // @TODO\n //parseCallResult(data: BytesLike): ??\n // Given an event log, find the matching event fragment (if any) and\n // determine all its properties and values\n parseLog(log) {\n const fragment = this.getEvent(log.topics[0]);\n if (!fragment || fragment.anonymous) {\n return null;\n }\n // @TODO: If anonymous, and the only method, and the input count matches, should we parse?\n // Probably not, because just because it is the only event in the ABI does\n // not mean we have the full ABI; maybe just a fragment?\n return new LogDescription(fragment, this.getEventTopic(fragment), this.decodeEventLog(fragment, log.data, log.topics));\n }\n parseError(data) {\n const hexData = hexlify(data);\n const fragment = this.getError(dataSlice(hexData, 0, 4));\n if (!fragment) {\n return null;\n }\n const args = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(fragment.inputs, dataSlice(hexData, 4));\n return new ErrorDescription(fragment, this.getSelector(fragment), args);\n }\n static from(value) {\n // Already an Interface, which is immutable\n if (value instanceof Interface) {\n return value;\n }\n // JSON\n if (typeof (value) === \"string\") {\n return new Interface(JSON.parse(value));\n }\n // Maybe an interface from an older version, or from a symlinked copy\n if (typeof (value.format) === \"function\") {\n return new Interface(value.format(FormatType.json));\n }\n // Array of fragments\n return new Interface(value);\n }\n}\n_Interface_errors = new WeakMap(), _Interface_events = new WeakMap(), _Interface_functions = new WeakMap(), _Interface_abiCoder = new WeakMap(), _Interface_instances = new WeakSet(), _Interface_getFunction = function _Interface_getFunction(key, values, forceUnique) {\n // Selector\n if (isHexString(key)) {\n const selector = key.toLowerCase();\n for (const fragment of __classPrivateFieldGet(this, _Interface_functions, \"f\").values()) {\n if (selector === this.getSelector(fragment)) {\n return fragment;\n }\n }\n logger.throwArgumentError(\"no matching function\", \"selector\", key);\n }\n // It is a bare name, look up the function (will return null if ambiguous)\n if (key.indexOf(\"(\") === -1) {\n const matching = [];\n for (const [name, fragment] of __classPrivateFieldGet(this, _Interface_functions, \"f\")) {\n if (name.split(\"(\" /* fix:) */)[0] === key) {\n matching.push(fragment);\n }\n }\n if (values) {\n const lastValue = (values.length > 0) ? values[values.length - 1] : null;\n let valueLength = values.length;\n let allowOptions = true;\n if (Typed.isTyped(lastValue) && lastValue.type === \"overrides\") {\n allowOptions = false;\n valueLength--;\n }\n // Remove all matches that don't have a compatible length. The args\n // may contain an overrides, so the match may have n or n - 1 parameters\n for (let i = matching.length - 1; i >= 0; i--) {\n const inputs = matching[i].inputs.length;\n if (inputs !== valueLength && (!allowOptions || inputs !== valueLength - 1)) {\n matching.splice(i, 1);\n }\n }\n // Remove all matches that don't match the Typed signature\n for (let i = matching.length - 1; i >= 0; i--) {\n const inputs = matching[i].inputs;\n for (let j = 0; j < values.length; j++) {\n // Not a typed value\n if (!Typed.isTyped(values[j])) {\n continue;\n }\n // We are past the inputs\n if (j >= inputs.length) {\n if (values[j].type === \"overrides\") {\n continue;\n }\n matching.splice(i, 1);\n break;\n }\n // Make sure the value type matches the input type\n if (values[j].type !== inputs[j].baseType) {\n matching.splice(i, 1);\n break;\n }\n }\n }\n }\n // We found a single matching signature with an overrides, but the\n // last value is something that cannot possibly be an options\n if (matching.length === 1 && values && values.length !== matching[0].inputs.length) {\n const lastArg = values[values.length - 1];\n if (lastArg == null || Array.isArray(lastArg) || typeof (lastArg) !== \"object\") {\n matching.splice(0, 1);\n }\n }\n if (matching.length === 0) {\n logger.throwArgumentError(\"no matching function\", \"name\", key);\n }\n else if (matching.length > 1 && forceUnique) {\n const matchStr = matching.map((m) => JSON.stringify(m.format())).join(\", \");\n logger.throwArgumentError(`multiple matching functions (i.e. ${matchStr})`, \"name\", key);\n }\n return matching[0];\n }\n // Normalize the signature and lookup the function\n const result = __classPrivateFieldGet(this, _Interface_functions, \"f\").get(FunctionFragment.fromString(key).format());\n if (result) {\n return result;\n }\n return logger.throwArgumentError(\"no matching function\", \"signature\", key);\n}, _Interface_getEvent = function _Interface_getEvent(key, values, forceUnique) {\n // EventTopic\n if (isHexString(key)) {\n const eventTopic = key.toLowerCase();\n for (const fragment of __classPrivateFieldGet(this, _Interface_events, \"f\").values()) {\n if (eventTopic === this.getEventTopic(fragment)) {\n return fragment;\n }\n }\n logger.throwArgumentError(\"no matching event\", \"eventTopic\", key);\n }\n // It is a bare name, look up the function (will return null if ambiguous)\n if (key.indexOf(\"(\") === -1) {\n const matching = [];\n for (const [name, fragment] of __classPrivateFieldGet(this, _Interface_events, \"f\")) {\n if (name.split(\"(\" /* fix:) */)[0] === key) {\n matching.push(fragment);\n }\n }\n if (values) {\n // Remove all matches that don't have a compatible length.\n for (let i = matching.length - 1; i >= 0; i--) {\n if (matching[i].inputs.length < values.length) {\n matching.splice(i, 1);\n }\n }\n // Remove all matches that don't match the Typed signature\n for (let i = matching.length - 1; i >= 0; i--) {\n const inputs = matching[i].inputs;\n for (let j = 0; j < values.length; j++) {\n // Not a typed value\n if (!Typed.isTyped(values[j])) {\n continue;\n }\n // Make sure the value type matches the input type\n if (values[j].type !== inputs[j].baseType) {\n matching.splice(i, 1);\n break;\n }\n }\n }\n }\n if (matching.length === 0) {\n logger.throwArgumentError(\"no matching event\", \"name\", key);\n }\n else if (matching.length > 1 && forceUnique) {\n // @TODO: refine by Typed\n logger.throwArgumentError(\"multiple matching events\", \"name\", key);\n }\n return matching[0];\n }\n // Normalize the signature and lookup the function\n const result = __classPrivateFieldGet(this, _Interface_events, \"f\").get(EventFragment.fromString(key).format());\n if (result) {\n return result;\n }\n return logger.throwArgumentError(\"no matching event\", \"signature\", key);\n};\n//# sourceMappingURL=interface.js.map","export const version = \"@ethersproject/web@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { version } from \"./_version.js\";\nimport { Logger } from \"@ethersproject/logger\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _FetchResponse_props, _FetchResponse_error;\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { defineProperties, getStore } from \"@ethersproject/properties\";\nimport { toUtf8String } from \"@ethersproject/strings\";\nimport { logger } from \"./logger.js\";\n;\nexport class FetchResponse {\n constructor(statusCode, statusMessage, headers, body, request) {\n _FetchResponse_props.set(this, void 0);\n _FetchResponse_error.set(this, void 0);\n __classPrivateFieldSet(this, _FetchResponse_props, {\n statusCode,\n statusMessage,\n headers: Object.freeze(Object.assign({}, Object.keys(headers).reduce((accum, k) => {\n accum[k.toLowerCase()] = headers[k];\n return accum;\n }, {}))),\n body: ((body == null) ? null : new Uint8Array(body)),\n request: (request || null),\n }, \"f\");\n __classPrivateFieldSet(this, _FetchResponse_error, { message: \"\" }, \"f\");\n }\n toString() {\n const body = getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"body\");\n return ``;\n }\n get statusCode() { return getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"statusCode\"); }\n get statusMessage() { return getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"statusMessage\"); }\n get headers() { return getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"headers\"); }\n get body() {\n const body = getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"body\");\n return (body == null) ? null : new Uint8Array(body);\n }\n get bodyText() {\n try {\n const body = getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"body\");\n return (body == null) ? \"\" : toUtf8String(body);\n }\n catch (error) {\n return logger.throwError(\"response body is not valid UTF-8 data\", \"UNSUPPORTED_OPERATION\", {\n operation: \"bodyText\", info: { response: this }\n });\n }\n }\n get bodyJson() {\n try {\n return JSON.parse(this.bodyText);\n }\n catch (error) {\n return logger.throwError(\"response body is not valid JSON\", \"UNSUPPORTED_OPERATION\", {\n operation: \"bodyJson\", info: { response: this }\n });\n }\n }\n [(_FetchResponse_props = new WeakMap(), _FetchResponse_error = new WeakMap(), Symbol.iterator)]() {\n const headers = this.headers;\n const keys = Object.keys(headers);\n let index = 0;\n return {\n next: () => {\n if (index < keys.length) {\n const key = keys[index++];\n return {\n value: [key, headers[key]], done: false\n };\n }\n return { value: undefined, done: true };\n }\n };\n }\n makeServerError(message, error) {\n let statusMessage;\n if (!message) {\n message = `${this.statusCode} ${this.statusMessage}`;\n statusMessage = `CLIENT ESCALATED SERVER ERROR (${message})`;\n }\n else {\n statusMessage = `CLIENT ESCALATED SERVER ERROR (${this.statusCode} ${this.statusMessage}; ${message})`;\n }\n const response = new FetchResponse(599, statusMessage, this.headers, this.body, getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"request\") || undefined);\n __classPrivateFieldSet(response, _FetchResponse_error, { message, error }, \"f\");\n return response;\n }\n throwThrottleError(message, stall) {\n if (stall == null) {\n stall = 1000;\n }\n if (typeof (stall) !== \"number\" || !Number.isInteger(stall) || stall < 0) {\n logger.throwArgumentError(\"invalid stall timeout\", \"stall\", stall);\n }\n const error = new Error(message || \"throttling requests\");\n defineProperties(error, { stall, throttle: true });\n throw error;\n }\n getHeader(key) {\n return this.headers[key.toLowerCase()];\n }\n hasBody() {\n const body = getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"body\");\n return (body != null);\n }\n get request() { return getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"request\"); }\n ok() {\n return (__classPrivateFieldGet(this, _FetchResponse_error, \"f\").message === \"\" && this.statusCode >= 200 && this.statusCode < 300);\n }\n assertOk() {\n if (this.ok()) {\n return;\n }\n let { message, error } = __classPrivateFieldGet(this, _FetchResponse_error, \"f\");\n if (message === \"\") {\n message = `server response ${this.statusCode} ${this.statusMessage}`;\n }\n logger.throwError(message, \"SERVER_ERROR\", {\n request: (this.request || \"unknown request\"), response: this, error\n });\n }\n}\n//# sourceMappingURL=response.js.map","import { logger } from \"./logger.js\";\nimport { FetchResponse } from \"./response.js\";\nexport async function getUrl(req, timeout) {\n const protocol = req.url.split(\":\")[0].toLowerCase();\n if (protocol !== \"http\" && protocol !== \"https\") {\n logger.throwError(`unsupported protocol ${protocol}`, \"UNSUPPORTED_OPERATION\", {\n info: { protocol },\n operation: \"request\"\n });\n }\n if (req.credentials && !req.allowInsecureAuthentication) {\n logger.throwError(\"insecure authorized connections unsupported\", \"UNSUPPORTED_OPERATION\", {\n operation: \"request\"\n });\n }\n const init = {\n method: req.method,\n headers: new Headers(Array.from(req)),\n body: req.body || undefined,\n };\n const resp = await fetch(req.url, init);\n const headers = {};\n resp.headers.forEach((value, key) => {\n headers[key.toLowerCase()] = value;\n });\n const body = new Uint8Array(await resp.arrayBuffer());\n return new FetchResponse(resp.status, resp.statusText, headers, body, req);\n}\n//# sourceMappingURL=get-url-browser.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _FetchRequest_props;\nimport { getStore, setStore } from \"@ethersproject/properties\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nimport { logger } from \"./logger.js\";\nfunction check(value, type, name) {\n if (typeof (value) !== type) {\n throw new Error(`invalid ${name}`);\n }\n return value;\n}\nexport class FetchRequest {\n constructor(url) {\n _FetchRequest_props.set(this, void 0);\n __classPrivateFieldSet(this, _FetchRequest_props, {\n allowInsecure: false,\n gzip: false,\n headers: {},\n method: \"\",\n timeout: 300,\n url: check(url, \"string\", \"url\")\n }, \"f\");\n }\n // URL\n get url() { return getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"url\"); }\n set url(url) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"url\", check(url, \"string\", \"url\"));\n }\n // Body\n get body() {\n const body = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\");\n if (body == null) {\n return null;\n }\n if (this.isFrozen()) {\n return new Uint8Array(body);\n }\n return body;\n }\n set body(body) {\n if (body == null) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\", undefined);\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\", undefined);\n }\n else if (typeof (body) === \"string\") {\n // @TODO: utf8-check\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\", toUtf8Bytes(body));\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\", \"text/plain\");\n }\n else if (body instanceof Uint8Array) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\", body);\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\", \"application/octet-stream\");\n }\n else if (typeof (body) === \"object\") {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\", toUtf8Bytes(JSON.stringify(body)));\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\", \"application/json\");\n }\n else {\n throw new Error(\"invalid body\");\n }\n }\n hasBody() {\n return (getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\") != null);\n }\n // Method (default: GET with no body, POST with a body)\n get method() {\n const method = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"method\");\n if (method) {\n return method.toUpperCase();\n }\n if (this.body) {\n return \"POST\";\n }\n return \"GET\";\n }\n set method(method) {\n if (method == null) {\n method = \"\";\n }\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"method\", check(method, \"string\", \"method\"));\n }\n // Headers (automatically fills content-type if not explicitly set)\n get headers() {\n const headers = Object.assign({}, getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\"));\n const bodyType = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\");\n if (this.credentials) { /* TODO */ }\n ;\n if (this.allowGzip) {\n headers[\"accept-encoding\"] = \"gzip\";\n }\n if (headers[\"content-type\"] == null && bodyType) {\n headers[\"content-type\"] = bodyType;\n }\n if (this.body) {\n headers[\"content-length\"] = String(this.body.length);\n }\n return Object.freeze(headers);\n }\n getHeader(key) {\n return this.headers[key.toLowerCase()];\n }\n setHeader(key, value) {\n const headers = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\");\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\", headers);\n headers[check(key, \"string\", \"key\").toLowerCase()] = String(value);\n }\n clearHeaders() {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\", {});\n }\n [(_FetchRequest_props = new WeakMap(), Symbol.iterator)]() {\n const headers = this.headers;\n const keys = Object.keys(headers);\n let index = 0;\n return {\n next: () => {\n if (index < keys.length) {\n const key = keys[index++];\n return {\n value: [key, headers[key]], done: false\n };\n }\n return { value: undefined, done: true };\n }\n };\n }\n // Configure an Authorization header\n get credentials() {\n return getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"creds\") || null;\n }\n setCredentials(username, password) {\n if (username.match(/:/)) {\n logger.throwArgumentError(\"invalid basic authentication username\", \"username\", \"[REDACTED]\");\n }\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"creds\", `${username}:${password}`);\n // @TODO:\n //const auth = username + \":\" + password;\n //this.setHeader(\"authorization\", \"Basic \" + base64Encode(toUtf8Bytes(auth)))\n //this.setHeader(\"authorization\", \"Basic TODO:\" + auth);\n }\n // Configure the request to allow gzipped responses\n get allowGzip() {\n return getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"gzip\");\n }\n set allowGzip(value) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"gzip\", !!value);\n }\n // Allow credentials to be sent over an insecure (non-HTTPS) channel\n get allowInsecureAuthentication() {\n return !!getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"allowInsecure\");\n }\n set allowInsecureAuthentication(value) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"allowInsecure\", check(value, \"boolean\", \"allowInsecureAuthentication\"));\n }\n // Timeout (seconds)\n get timeout() { return getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"timeout\"); }\n set timeout(timeout) {\n timeout = check(timeout, \"number\", \"timeout\");\n if (timeout <= 0) {\n throw new Error(\"invalid timerout\");\n }\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"timeout\", timeout);\n }\n redirect(location) {\n // Redirection; for now we only support absolute locataions\n const current = this.url.split(\":\")[0].toLowerCase();\n const target = location.split(\":\")[0].toLowerCase();\n if (this.method !== \"GET\" || (current === \"https\" && target === \"http\") ||\n !location.match(/^https?:$/)) {\n return logger.throwError(`unsupported redirect`, \"UNSUPPORTED_OPERATION\", {\n operation: `redirect(${this.method} ${JSON.stringify(this.url)} => ${JSON.stringify(location)})`\n });\n }\n // Create a copy of this request, with a new URL\n const req = new FetchRequest(location);\n req.method = \"GET\";\n req.allowGzip = this.allowGzip;\n req.timeout = this.timeout;\n setStore(__classPrivateFieldGet(req, _FetchRequest_props, \"f\"), \"body\", getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\"));\n setStore(__classPrivateFieldGet(req, _FetchRequest_props, \"f\"), \"headers\", Object.assign({}, getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\")));\n setStore(__classPrivateFieldGet(req, _FetchRequest_props, \"f\"), \"bodyType\", getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\"));\n // Do not forward credentials unless on the same domain; only absolute\n //req.allowInsecure = false;\n // paths are currently supported; may want a way to specify to forward?\n //setStore(req.#props, \"creds\", getStore(this.#pros, \"creds\"));\n return req;\n }\n clone() {\n const clone = new FetchRequest(this.url);\n // Preserve \"default method\" (i.e. null)\n setStore(__classPrivateFieldGet(clone, _FetchRequest_props, \"f\"), \"method\", getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"method\"));\n // Preserve \"default body\" with type, copying the Uint8Array is present\n const body = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\");\n setStore(__classPrivateFieldGet(clone, _FetchRequest_props, \"f\"), \"body\", (body == null) ? undefined : new Uint8Array(body));\n setStore(__classPrivateFieldGet(clone, _FetchRequest_props, \"f\"), \"bodyType\", getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\"));\n // Preserve \"default headers\"\n setStore(__classPrivateFieldGet(clone, _FetchRequest_props, \"f\"), \"headers\", Object.assign({}, getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\")));\n // Credentials is readonly, so we copy internally\n setStore(__classPrivateFieldGet(clone, _FetchRequest_props, \"f\"), \"creds\", getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"creds\"));\n if (this.allowGzip) {\n clone.allowGzip = true;\n }\n clone.timeout = this.timeout;\n if (this.allowInsecureAuthentication) {\n clone.allowInsecureAuthentication = true;\n }\n return clone;\n }\n freeze() {\n // Copy the body so any changes to previous access do not modify it\n const body = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\");\n if (body != null) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\", new Uint8Array(body));\n }\n Object.freeze(__classPrivateFieldGet(this, _FetchRequest_props, \"f\").headers);\n Object.freeze(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"));\n return this;\n }\n isFrozen() {\n return Object.isFrozen(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"));\n }\n}\n//# sourceMappingURL=request.js.map","import { decodeBase64 } from \"@ethersproject/bytes\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nimport { getUrl } from \"./get-url.js\"; /*-browser*/\nimport { logger } from \"./logger.js\";\nimport { FetchRequest } from \"./request.js\";\nimport { FetchResponse } from \"./response.js\";\nasync function delay(duration) {\n return new Promise((resolve) => { setTimeout(resolve, duration); });\n}\n// @TODO: Add option for global preflightRequest?\nfunction getTime() { return (new Date()).getTime(); }\nfunction unpercent(value) {\n value = value.replace(/%([0-9a-f][0-9a-f])/gi, (all, code) => {\n return String.fromCharCode(parseInt(code, 16));\n });\n return toUtf8Bytes(value);\n}\nlet lockGateways = false;\nlet ipfsGateway = \"https:/\\/gateway.ipfs.io/\";\nlet arGateway = \"https:/\\/gateway.ar.io/\";\nexport async function fetchData(connection) {\n const conn = (typeof (connection) === \"string\") ? {\n request: new FetchRequest(connection)\n } : (connection instanceof FetchRequest) ? {\n request: connection\n } : Object.assign({}, connection);\n if (conn.request == null) {\n return logger.throwArgumentError(\"missing request\", \"connection\", connection);\n }\n let req = conn.request.clone().freeze();\n switch (conn.request.url.split(\":\")[0]) {\n case \"data\": {\n const match = req.url.match(/^data:([^;:]*)?(;base64)?,(.*)$/i);\n if (match) {\n try {\n const headers = {\n \"content-type\": (match[1] ? match[1] : \"text/plain\")\n };\n const body = (match[2] ? decodeBase64(match[3]) : unpercent(match[3]));\n return new FetchResponse(200, \"OK\", headers, body, req.clone());\n }\n catch (error) {\n return new FetchResponse(400, \"BAD REQUEST (invalid base64 encoded data)\", {}, null, req.clone());\n }\n }\n return new FetchResponse(500, \"INTERNAL SERVER ERROR (unsupported dara URI)\", {}, null, req.clone());\n }\n case \"ipfs\":\n case \"ipns\":\n case \"ar\":\n throw new Error(\"not implemented yet\");\n console.log(\"FF\", arGateway, ipfsGateway);\n case \"http\":\n case \"https\":\n break;\n default:\n throw new Error(\"unsupported scheme\");\n }\n const attempts = (conn.throttleLimit != null) ? conn.throttleLimit : 12;\n if (!Number.isInteger(attempts) || attempts < 1) {\n return logger.throwArgumentError(\"invalid throttleLimit\", \"connection\", connection);\n }\n const slotInterval = (conn.throttleSlotInterval != null) ? conn.throttleSlotInterval : 100;\n //logger.assertInteger(slotInterval, \"connection.throttleSlotInterval\", connection.throttleSlotInterval);\n if (!Number.isInteger(slotInterval) || attempts < 0) {\n return logger.throwArgumentError(\"invalid throttleSlotInterval\", \"connection\", connection);\n }\n const retryFunc = (conn.throttleRetry != null) ? conn.throttleRetry : null;\n if (retryFunc && typeof (retryFunc) !== \"function\") {\n return logger.throwArgumentError(\"invalid throttleRetry callback\", \"connection\", connection);\n }\n const preflightRequest = conn.preflightRequest || null;\n if (preflightRequest && typeof (preflightRequest) !== \"function\") {\n return logger.throwArgumentError(\"invalid preflightRequest callback\", \"connection\", connection);\n }\n const processResponse = conn.processResponse || null;\n if (processResponse && typeof (processResponse) !== \"function\") {\n return logger.throwArgumentError(\"invalid processResponse callback\", \"connection\", connection);\n }\n // Start time of this fetch (for timeouts)\n const t0 = getTime();\n let response = null;\n for (let a = 0; a < attempts; a++) {\n let request = req.clone();\n if (preflightRequest) {\n request = (await preflightRequest(request.freeze())).clone();\n }\n const remainingTime = getTime() - t0;\n if (remainingTime < 0) {\n return logger.throwError(\"timeout\", \"TIMEOUT\", { operation: \"request\", request });\n }\n response = await getUrl(request, remainingTime);\n // Retry logic (server forced)\n if (a < attempts) {\n if (response.statusCode === 301 || response.statusCode === 302) {\n // Try following the redirect; the request will through if the\n // type of redirect is not supported\n try {\n req = request.redirect(response.headers.location || \"\");\n continue;\n }\n catch (error) { }\n ;\n // Things won't get any better on another attempt; abort\n return response;\n }\n else if (response.statusCode === 429) {\n if (retryFunc == null || (await retryFunc(request.freeze(), response, a))) {\n const retryAfter = response.headers[\"retry-after\"];\n if (typeof (retryAfter) === \"string\" && retryAfter.match(/^[1-9][0-9]*$/)) {\n await delay(parseInt(retryAfter));\n }\n else {\n await delay(slotInterval * Math.trunc(Math.random() * Math.pow(2, a)));\n }\n continue;\n }\n }\n }\n // Optional post-processing response; also allows trapping\n // HTTP status errors and doing \"something different\",\n // including any further throttling.\n if (processResponse) {\n try {\n return await processResponse(request, response);\n }\n catch (error) {\n // response.throwThrottleError\n if (error.throttle && typeof (error.stall) === \"number\") {\n if (a < attempts) {\n await delay(error.stall);\n continue;\n }\n // Too many retries should behave more like a 5xx server error\n return response.makeServerError(\"exceeded maximum retry limit\", error);\n }\n // Something went wrong during processing; throw a 5xx server error\n response.makeServerError(\"error in post-processing function\", error).assertOk();\n }\n }\n return response;\n }\n // Too many retries should behave more like a 5xx server error\n return response.makeServerError(\"exceeded maximum retry limit\");\n}\nfetchData.lock = function () {\n lockGateways = true;\n};\n// @TODO: Allow a master Gateway function\nfetchData.setGateway = function (gateway) {\n};\nfetchData.setIpfsGateway = function (gateway) {\n if (lockGateways) {\n logger.throwError(\"gateways are locked\", \"UNSUPPORTED_OPERATION\", {\n operation: \"setIpfsGateway\"\n });\n }\n ipfsGateway = gateway;\n};\nfetchData.setArGateway = function (gateway) {\n if (lockGateways) {\n logger.throwError(\"gateways are locked\", \"UNSUPPORTED_OPERATION\", {\n operation: \"setArGateway\"\n });\n }\n arGateway = gateway;\n};\n//# sourceMappingURL=fetch-data.js.map","export const version = \"@ethersproject/providers@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _a, _EnsResolver_supports2544, _EnsResolver_getResolver;\nimport { concat, dataSlice, hexlify, zeroPadLeft } from \"@ethersproject/bytes\";\nimport { dnsEncode, namehash } from \"@ethersproject/hash\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { encodeBase58, toArray, toNumber } from \"@ethersproject/math\";\nimport { toUtf8Bytes, toUtf8String } from \"@ethersproject/strings\";\nimport { fetchData } from \"@ethersproject/web\";\nimport { logger } from \"./logger.js\";\nconst BN_1 = BigInt(1);\nconst Empty = new Uint8Array([]);\nconst HashZero = \"0x0000000000000000000000000000000000000000000000000000000000000000\";\nfunction parseBytes(result, start) {\n if (result === \"0x\") {\n return null;\n }\n const offset = toNumber(dataSlice(result, start, start + 32));\n const length = toNumber(dataSlice(result, offset, offset + 32));\n return dataSlice(result, offset + 32, offset + 32 + length);\n}\nfunction parseString(result, start) {\n try {\n const bytes = parseBytes(result, start);\n if (bytes != null) {\n return toUtf8String(bytes);\n }\n }\n catch (error) { }\n return null;\n}\nfunction numPad(value) {\n const result = toArray(value);\n if (result.length > 32) {\n throw new Error(\"internal; should not happen\");\n }\n const padded = new Uint8Array(32);\n padded.set(result, 32 - result.length);\n return padded;\n}\nfunction bytesPad(value) {\n if ((value.length % 32) === 0) {\n return value;\n }\n const result = new Uint8Array(Math.ceil(value.length / 32) * 32);\n result.set(value);\n return result;\n}\n// ABI Encodes a series of (bytes, bytes, ...)\nfunction encodeBytes(datas) {\n const result = [];\n let byteCount = 0;\n // Add place-holders for pointers as we add items\n for (let i = 0; i < datas.length; i++) {\n result.push(Empty);\n byteCount += 32;\n }\n for (let i = 0; i < datas.length; i++) {\n const data = logger.getBytes(datas[i]);\n // Update the bytes offset\n result[i] = numPad(byteCount);\n // The length and padded value of data\n result.push(numPad(data.length));\n result.push(bytesPad(data));\n byteCount += 32 + Math.ceil(data.length / 32) * 32;\n }\n return concat(result);\n}\n// @TODO: This should use the fetch-data:ipfs gateway\n// Trim off the ipfs:// prefix and return the default gateway URL\nfunction getIpfsLink(link) {\n if (link.match(/^ipfs:\\/\\/ipfs\\//i)) {\n link = link.substring(12);\n }\n else if (link.match(/^ipfs:\\/\\//i)) {\n link = link.substring(7);\n }\n else {\n logger.throwArgumentError(\"unsupported IPFS format\", \"link\", link);\n }\n return `https:/\\/gateway.ipfs.io/ipfs/${link}`;\n}\n;\n;\nexport class MulticoinProviderPlugin {\n constructor(name) {\n defineProperties(this, { name });\n }\n validate(proivder) {\n return this;\n }\n supportsCoinType(coinType) {\n return false;\n }\n async encodeAddress(coinType, address) {\n throw new Error(\"unsupported coin\");\n }\n async decodeAddress(coinType, data) {\n throw new Error(\"unsupported coin\");\n }\n}\nconst BasicMulticoinPluginId = \"org.ethers.provider-prugins.basicmulticoin\";\nexport class BasicMulticoinProviderPlugin extends MulticoinProviderPlugin {\n constructor() {\n super(BasicMulticoinPluginId);\n }\n}\nconst matcherIpfs = new RegExp(\"^(ipfs):/\\/(.*)$\", \"i\");\nconst matchers = [\n new RegExp(\"^(https):/\\/(.*)$\", \"i\"),\n new RegExp(\"^(data):(.*)$\", \"i\"),\n matcherIpfs,\n new RegExp(\"^eip155:[0-9]+/(erc[0-9]+):(.*)$\", \"i\"),\n];\nexport class EnsResolver {\n constructor(provider, address, name) {\n // For EIP-2544 names, the ancestor that provided the resolver\n _EnsResolver_supports2544.set(this, void 0);\n defineProperties(this, { provider, address, name });\n __classPrivateFieldSet(this, _EnsResolver_supports2544, null, \"f\");\n }\n async supportsWildcard() {\n if (!__classPrivateFieldGet(this, _EnsResolver_supports2544, \"f\")) {\n // supportsInterface(bytes4 = selector(\"resolve(bytes,bytes)\"))\n __classPrivateFieldSet(this, _EnsResolver_supports2544, this.provider.call({\n to: this.address,\n data: \"0x01ffc9a79061b92300000000000000000000000000000000000000000000000000000000\"\n }).then((result) => {\n return (logger.getBigInt(result) === BN_1);\n }).catch((error) => {\n if (error.code === \"CALL_EXCEPTION\") {\n return false;\n }\n // Rethrow the error: link is down, etc. Let future attempts retry.\n __classPrivateFieldSet(this, _EnsResolver_supports2544, null, \"f\");\n throw error;\n }), \"f\");\n }\n return await __classPrivateFieldGet(this, _EnsResolver_supports2544, \"f\");\n }\n async _fetch(selector, parameters = \"0x\") {\n // e.g. keccak256(\"addr(bytes32,uint256)\")\n const addrData = concat([selector, namehash(this.name), parameters]);\n const tx = {\n to: this.address,\n enableCcipRead: true,\n data: addrData\n };\n // Wildcard support; use EIP-2544 to resolve the request\n let wrapped = false;\n if (await this.supportsWildcard()) {\n wrapped = true;\n // selector(\"resolve(bytes,bytes)\")\n tx.data = concat([\"0x9061b923\", encodeBytes([dnsEncode(this.name), addrData])]);\n }\n try {\n let data = await this.provider.call(tx);\n if ((logger.getBytes(data).length % 32) === 4) {\n return logger.throwError(\"resolver threw error\", \"CALL_EXCEPTION\", {\n transaction: tx, data\n });\n }\n if (wrapped) {\n return parseBytes(data, 0);\n }\n return data;\n }\n catch (error) {\n if (error.code !== \"CALL_EXCEPTION\") {\n throw error;\n }\n }\n return null;\n }\n async getAddress(coinType = 60) {\n if (coinType === 60) {\n try {\n // keccak256(\"addr(bytes32)\")\n const result = await this._fetch(\"0x3b3b57de\");\n // No address\n if (result === \"0x\" || result === HashZero) {\n return null;\n }\n const network = await this.provider.getNetwork();\n return network.formatter.callAddress(result);\n }\n catch (error) {\n if (error.code === \"CALL_EXCEPTION\") {\n return null;\n }\n throw error;\n }\n }\n let coinPlugin = null;\n for (const plugin of this.provider.plugins) {\n if (!(plugin instanceof MulticoinProviderPlugin)) {\n continue;\n }\n if (plugin.supportsCoinType(coinType)) {\n coinPlugin = plugin;\n break;\n }\n }\n if (coinPlugin == null) {\n return null;\n }\n // keccak256(\"addr(bytes32,uint256\")\n const data = parseBytes((await this._fetch(\"0xf1cb7e06\", numPad(coinType))) || \"0x\", 0);\n // No address\n if (data == null || data === \"0x\") {\n return null;\n }\n // Compute the address\n const address = await coinPlugin.encodeAddress(coinType, data);\n if (address != null) {\n return address;\n }\n return logger.throwError(`invalid coin data`, \"UNSUPPORTED_OPERATION\", {\n operation: `getAddress(${coinType})`,\n info: { coinType, data }\n });\n }\n async getText(key) {\n // The key encoded as parameter to fetchBytes\n let keyBytes = toUtf8Bytes(key);\n // The nodehash consumes the first slot, so the string pointer targets\n // offset 64, with the length at offset 64 and data starting at offset 96\n const calldata = logger.getBytes(concat([numPad(64), numPad(keyBytes.length), keyBytes]));\n const hexBytes = parseBytes((await this._fetch(\"0x59d1d43c\", bytesPad(calldata))) || \"0x\", 0);\n if (hexBytes == null || hexBytes === \"0x\") {\n return null;\n }\n return toUtf8String(hexBytes);\n }\n async getContentHash() {\n // keccak256(\"contenthash()\")\n const hexBytes = parseBytes((await this._fetch(\"0xbc1c58d1\")) || \"0x\", 0);\n // No contenthash\n if (hexBytes == null || hexBytes === \"0x\") {\n return null;\n }\n // IPFS (CID: 1, Type: 70=DAG-PB, 72=libp2p-key)\n const ipfs = hexBytes.match(/^0x(e3010170|e5010172)(([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f]*))$/);\n if (ipfs) {\n const scheme = (ipfs[1] === \"e3010170\") ? \"ipfs\" : \"ipns\";\n const length = parseInt(ipfs[4], 16);\n if (ipfs[5].length === length * 2) {\n return `${scheme}:/\\/${encodeBase58(\"0x\" + ipfs[2])}`;\n }\n }\n // Swarm (CID: 1, Type: swarm-manifest; hash/length hard-coded to keccak256/32)\n const swarm = hexBytes.match(/^0xe40101fa011b20([0-9a-f]*)$/);\n if (swarm && swarm[1].length === 64) {\n return `bzz:/\\/${swarm[1]}`;\n }\n return logger.throwError(`invalid or unsupported content hash data`, \"UNSUPPORTED_OPERATION\", {\n operation: \"getContentHash()\",\n info: { data: hexBytes }\n });\n }\n async getAvatar() {\n return (await this._getAvatar()).url;\n }\n async _getAvatar() {\n const linkage = [{ type: \"name\", value: this.name }];\n try {\n // test data for ricmoo.eth\n //const avatar = \"eip155:1/erc721:0x265385c7f4132228A0d54EB1A9e7460b91c0cC68/29233\";\n const avatar = await this.getText(\"avatar\");\n if (avatar == null) {\n linkage.push({ type: \"!avatar\", value: \"\" });\n throw new Error(\"!avatar\");\n }\n linkage.push({ type: \"avatar\", value: avatar });\n for (let i = 0; i < matchers.length; i++) {\n const match = avatar.match(matchers[i]);\n if (match == null) {\n continue;\n }\n const scheme = match[1].toLowerCase();\n switch (scheme) {\n case \"https\":\n case \"data\":\n linkage.push({ type: \"url\", value: avatar });\n return { linkage, url: avatar };\n case \"ipfs\": {\n const url = getIpfsLink(avatar);\n linkage.push({ type: \"ipfs\", value: avatar });\n linkage.push({ type: \"url\", value: url });\n return { linkage, url };\n }\n case \"erc721\":\n case \"erc1155\": {\n // Depending on the ERC type, use tokenURI(uint256) or url(uint256)\n const selector = (scheme === \"erc721\") ? \"0xc87b56dd\" : \"0x0e89341c\";\n linkage.push({ type: scheme, value: avatar });\n // The owner of this name\n const owner = await this.getAddress();\n if (owner == null) {\n linkage.push({ type: \"!owner\", value: \"\" });\n throw new Error(\"!owner\");\n }\n const comps = (match[2] || \"\").split(\"/\");\n if (comps.length !== 2) {\n linkage.push({ type: `!${scheme}caip`, value: (match[2] || \"\") });\n throw new Error(\"!caip\");\n }\n const formatter = (await this.provider.getNetwork()).formatter;\n const addr = formatter.address(comps[0]);\n const tokenId = numPad(comps[1]);\n // Check that this account owns the token\n if (scheme === \"erc721\") {\n // ownerOf(uint256 tokenId)\n const tokenOwner = formatter.callAddress(await this.provider.call({\n to: addr, data: concat([\"0x6352211e\", tokenId])\n }));\n if (owner !== tokenOwner) {\n linkage.push({ type: \"!owner\", value: tokenOwner });\n throw new Error(\"!owner\");\n }\n linkage.push({ type: \"owner\", value: tokenOwner });\n }\n else if (scheme === \"erc1155\") {\n // balanceOf(address owner, uint256 tokenId)\n const balance = logger.getBigInt(await this.provider.call({\n to: addr, data: concat([\"0x00fdd58e\", zeroPadLeft(owner, 32), tokenId])\n }));\n if (!balance) {\n linkage.push({ type: \"!balance\", value: \"0\" });\n throw new Error(\"!balance\");\n }\n linkage.push({ type: \"balance\", value: balance.toString() });\n }\n // Call the token contract for the metadata URL\n const tx = {\n to: comps[0],\n data: concat([selector, tokenId])\n };\n let metadataUrl = parseString(await this.provider.call(tx), 0);\n if (metadataUrl == null) {\n linkage.push({ type: \"!metadata-url\", value: \"\" });\n throw new Error(\"!metadata-url\");\n }\n linkage.push({ type: \"metadata-url-base\", value: metadataUrl });\n // ERC-1155 allows a generic {id} in the URL\n if (scheme === \"erc1155\") {\n metadataUrl = metadataUrl.replace(\"{id}\", hexlify(tokenId).substring(2));\n linkage.push({ type: \"metadata-url-expanded\", value: metadataUrl });\n }\n // Transform IPFS metadata links\n if (metadataUrl.match(/^ipfs:/i)) {\n metadataUrl = getIpfsLink(metadataUrl);\n }\n linkage.push({ type: \"metadata-url\", value: metadataUrl });\n // Get the token metadata\n let metadata = {};\n const response = await fetchData(metadataUrl);\n try {\n metadata = response.bodyJson;\n }\n catch (error) {\n try {\n linkage.push({ type: \"!metadata\", value: response.bodyText });\n }\n catch (error) {\n const bytes = response.body;\n if (bytes) {\n linkage.push({ type: \"!metadata\", value: hexlify(bytes) });\n }\n throw error;\n }\n throw error;\n }\n if (!metadata) {\n linkage.push({ type: \"!metadata\", value: \"\" });\n throw new Error(\"!metadata\");\n }\n linkage.push({ type: \"metadata\", value: JSON.stringify(metadata) });\n // Pull the image URL out\n let imageUrl = metadata.image;\n if (typeof (imageUrl) !== \"string\") {\n linkage.push({ type: \"!imageUrl\", value: \"\" });\n throw new Error(\"!imageUrl\");\n }\n if (imageUrl.match(/^(https:\\/\\/|data:)/i)) {\n // Allow\n }\n else {\n // Transform IPFS link to gateway\n const ipfs = imageUrl.match(matcherIpfs);\n if (ipfs == null) {\n linkage.push({ type: \"!imageUrl-ipfs\", value: imageUrl });\n throw new Error(\"!imageUrl-ipfs\");\n }\n linkage.push({ type: \"imageUrl-ipfs\", value: imageUrl });\n imageUrl = getIpfsLink(imageUrl);\n }\n linkage.push({ type: \"url\", value: imageUrl });\n return { linkage, url: imageUrl };\n }\n }\n }\n }\n catch (error) {\n console.log(\"EE\", error);\n }\n return { linkage, url: null };\n }\n static async fromName(provider, name) {\n let currentName = name;\n while (true) {\n if (currentName === \"\" || currentName === \".\") {\n return null;\n }\n // Optimization since the eth node cannot change and does\n // not have a wildcar resolver\n if (name !== \"eth\" && currentName === \"eth\") {\n return null;\n }\n // Check the current node for a resolver\n const addr = await __classPrivateFieldGet(EnsResolver, _a, \"m\", _EnsResolver_getResolver).call(EnsResolver, provider, currentName);\n // Found a resolver!\n if (addr != null) {\n const resolver = new EnsResolver(provider, addr, name);\n // Legacy resolver found, using EIP-2544 so it isn't safe to use\n if (currentName !== name && !(await resolver.supportsWildcard())) {\n return null;\n }\n return resolver;\n }\n // Get the parent node\n currentName = currentName.split(\".\").slice(1).join(\".\");\n }\n }\n}\n_a = EnsResolver, _EnsResolver_supports2544 = new WeakMap(), _EnsResolver_getResolver = async function _EnsResolver_getResolver(provider, name) {\n const network = await provider.getNetwork();\n const ensPlugin = network.getPlugin(\"org.ethers.plugins.ens\");\n // No ENS...\n if (!ensPlugin) {\n return logger.throwError(\"network does not support ENS\", \"UNSUPPORTED_OPERATION\", {\n operation: \"getResolver\", info: { network: network.name }\n });\n }\n try {\n // keccak256(\"resolver(bytes32)\")\n const addrData = await provider.call({\n to: ensPlugin.address,\n data: concat([\"0x0178b8bf\" + namehash(name)]),\n enableCcipRead: true\n });\n const addr = network.formatter.callAddress(addrData);\n if (addr === dataSlice(HashZero, 0, 20)) {\n return null;\n }\n return addr;\n }\n catch (error) {\n // ENS registry cannot throw errors on resolver(bytes32),\n // so probably a link error\n throw error;\n }\n return null;\n};\n//# sourceMappingURL=ens-resolver.js.map","export const version = \"@ethersproject/signing-key@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { version } from \"./_version.js\";\nimport { Logger } from \"@ethersproject/logger\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Signature_props;\nimport { toHex } from \"@ethersproject/math\";\nimport { getStore, setStore } from \"@ethersproject/properties\";\nimport { arrayify, concat, dataLength, dataSlice, hexlify, isHexString } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\n// Constants\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_2 = BigInt(2);\nconst BN_27 = BigInt(27);\nconst BN_28 = BigInt(28);\nconst BN_35 = BigInt(35);\nconst BN_255 = BigInt(255);\nconst BN_MASK_255 = (BN_1 << BN_255) - BN_1;\nconst _guard = {};\nconst Zero = \"0x0000000000000000000000000000000000000000000000000000000000000000\";\nexport class Signature {\n constructor(guard, r, s, v) {\n _Signature_props.set(this, void 0);\n logger.assertPrivate(guard, _guard, \"Signature\");\n __classPrivateFieldSet(this, _Signature_props, { r, s, v, networkV: null }, \"f\");\n }\n get r() { return getStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"r\"); }\n set r(value) {\n if (dataLength(value) !== 32) {\n logger.throwArgumentError(\"invalid r\", \"value\", value);\n }\n setStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"r\", hexlify(value));\n }\n get s() { return getStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"s\"); }\n set s(value) {\n if (dataLength(value) !== 32) {\n logger.throwArgumentError(\"invalid r\", \"value\", value);\n }\n else if (arrayify(value)[0] & 0x80) {\n logger.throwArgumentError(\"non-canonical s\", \"value\", value);\n }\n setStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"s\", hexlify(value));\n }\n get v() { return getStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"v\"); }\n set v(value) {\n const v = logger.getNumber(value, \"value\");\n if (v !== 27 && v !== 28) {\n throw new Error(\"@TODO\");\n }\n setStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"v\", v);\n }\n get networkV() { return getStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"networkV\"); }\n get legacyChainId() {\n const v = this.networkV;\n if (v == null) {\n return null;\n }\n return Signature.getChainId(v);\n }\n get vs() {\n // The EIP-2098 compact representation\n const vs = arrayify(this.s);\n if (this.yParity) {\n vs[0] |= 0x80;\n }\n return hexlify(vs);\n }\n get yParity() {\n if (this.v === 27) {\n return 0;\n }\n return 1;\n /*\n // When v is 0 or 1 it is the recid directly\n if (this.v.isZero()) { return 0; }\n if (this.v.eq(1)) { return 1; }\n\n // Otherwise, odd (e.g. 27) is 0 and even (e.g. 28) is 1\n return this.v.and(1).isZero() ? 1: 0;\n */\n }\n get serialized() {\n return concat([this.r, this.s, (this.yParity ? \"0x1c\" : \"0x1b\")]);\n }\n [(_Signature_props = new WeakMap(), Symbol.for('nodejs.util.inspect.custom'))]() {\n return `Signature { r: \"${this.r}\", s: \"${this.s}\", yParity: ${this.yParity}, networkV: ${this.networkV} }`;\n }\n clone() {\n if (getStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"networkV\")) {\n logger.throwError(\"cannot clone EIP-155 signatures\", \"UNSUPPORTED_OPERATION\", {\n operation: \"clone\"\n });\n }\n const { r, s, v } = __classPrivateFieldGet(this, _Signature_props, \"f\");\n return new Signature(_guard, r, s, v);\n }\n freeze() {\n Object.freeze(__classPrivateFieldGet(this, _Signature_props, \"f\"));\n return this;\n }\n isFrozen() {\n return Object.isFrozen(__classPrivateFieldGet(this, _Signature_props, \"f\"));\n }\n toJSON() {\n const { r, s, v, networkV } = this;\n return {\n _type: \"signature\",\n networkV: ((networkV != null) ? networkV.toString() : null),\n r, s, v,\n };\n }\n static create() {\n return new Signature(_guard, Zero, Zero, 27);\n }\n // Get the chain ID from an EIP-155 v\n static getChainId(v) {\n const bv = logger.getBigInt(v, \"v\");\n // The v is not an EIP-155 v, so it is the unspecified chain ID\n if ((bv == BN_27) || (bv == BN_28)) {\n return BN_0;\n }\n // Bad value for an EIP-155 v\n if (bv < BN_35) {\n logger.throwArgumentError(\"invalid EIP-155 v\", \"v\", v);\n }\n return (bv - BN_35) / BN_2;\n }\n // Get the EIP-155 v transformed for a given chainId\n static getChainIdV(chainId, v) {\n return (logger.getBigInt(chainId) * BN_2) + BigInt(35 + v - 27);\n }\n // Convert an EIP-155 v into a normalized v\n static getNormalizedV(v) {\n const bv = logger.getBigInt(v);\n if (bv == BN_0) {\n return 27;\n }\n if (bv == BN_1) {\n return 28;\n }\n // Otherwise, EIP-155 v means odd is 27 and even is 28\n return (bv & BN_1) ? 27 : 28;\n }\n static fromTransaction(r, s, _v) {\n const v = logger.getBigInt(_v, \"v\");\n const sig = Signature.from({ r, s, v });\n setStore(__classPrivateFieldGet(sig, _Signature_props, \"f\"), \"networkV\", v);\n return sig.freeze();\n }\n static from(sig) {\n const throwError = (message) => {\n return logger.throwArgumentError(message, \"signature\", sig);\n };\n if (typeof (sig) === \"string\") {\n if (dataLength(sig) !== 65) {\n throwError(\"invlaid raw signature length\");\n }\n const r = dataSlice(sig, 0, 32);\n const s = dataSlice(sig, 32, 64);\n if (BigInt(s) >> BN_255) {\n throwError(\"non-canonical s\");\n }\n const v = Signature.getNormalizedV(dataSlice(sig, 64, 65));\n return new Signature(_guard, r, s, v);\n }\n if (sig instanceof Signature) {\n return sig.clone();\n }\n const r = sig.r;\n if (r == null) {\n throwError(\"missing r\");\n }\n if (!isHexString(r, 32)) {\n throwError(\"invalid r\");\n }\n const s = (function (s, vs) {\n if (s) {\n if (!isHexString(s, 32)) {\n throwError(\"invalid s\");\n }\n return s;\n }\n if (vs) {\n if (!isHexString(vs, 32)) {\n throwError(\"invalid vs\");\n }\n return toHex(BigInt(vs) & BN_MASK_255, 32);\n }\n return throwError(\"missing s\");\n })(sig.s, sig.vs);\n if (BigInt(s) >> BN_255) {\n throwError(\"non-canonical s\");\n }\n const v = (function (v, vs, yParity) {\n if (v) {\n return Signature.getNormalizedV(v);\n }\n if (vs) {\n if (!isHexString(vs, 32)) {\n throwError(\"invalid vs\");\n }\n return ((arrayify(vs)[0] & 0x80) ? 28 : 27);\n }\n if (yParity) {\n switch (yParity) {\n case 0: return 27;\n case 1: return 28;\n }\n return throwError(\"invalid yParity\");\n }\n //if (chainId) { return BigNumber.from(chainId).and(1).sub(27); } // @TODO: check this\n return throwError(\"missing v\");\n })(sig.v, sig.vs, sig.yParity);\n // @TODO: check vs, chainId, yParity\n const result = new Signature(_guard, r, s, v);\n if (sig.yParity && sig.yParity !== result.yParity) {\n }\n if (sig.vs && sig.vs !== result.vs) {\n }\n //if (sig.chainId && sig.chainId !== result.chainId) {\n //}\n return result;\n }\n}\n//# sourceMappingURL=signature.js.map","/*! noble-secp256k1 - MIT License (c) 2019 Paul Miller (paulmillr.com) */\nimport nodeCrypto from 'crypto';\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _3n = BigInt(3);\nconst _8n = BigInt(8);\nconst POW_2_256 = _2n ** BigInt(256);\nconst CURVE = {\n a: _0n,\n b: BigInt(7),\n P: POW_2_256 - _2n ** BigInt(32) - BigInt(977),\n n: POW_2_256 - BigInt('432420386565659656852420866394968145599'),\n h: _1n,\n Gx: BigInt('55066263022277343669578718895168534326250603453777594175500187360389116729240'),\n Gy: BigInt('32670510020758816978083085130507043184471273380659243275938904335757337482424'),\n beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'),\n};\nexport { CURVE };\nfunction weistrass(x) {\n const { a, b } = CURVE;\n const x2 = mod(x * x);\n const x3 = mod(x2 * x);\n return mod(x3 + a * x + b);\n}\nconst USE_ENDOMORPHISM = CURVE.a === _0n;\nclass JacobianPoint {\n constructor(x, y, z) {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n static fromAffine(p) {\n if (!(p instanceof Point)) {\n throw new TypeError('JacobianPoint#fromAffine: expected Point');\n }\n return new JacobianPoint(p.x, p.y, _1n);\n }\n static toAffineBatch(points) {\n const toInv = invertBatch(points.map((p) => p.z));\n return points.map((p, i) => p.toAffine(toInv[i]));\n }\n static normalizeZ(points) {\n return JacobianPoint.toAffineBatch(points).map(JacobianPoint.fromAffine);\n }\n equals(other) {\n if (!(other instanceof JacobianPoint))\n throw new TypeError('JacobianPoint expected');\n const { x: X1, y: Y1, z: Z1 } = this;\n const { x: X2, y: Y2, z: Z2 } = other;\n const Z1Z1 = mod(Z1 ** _2n);\n const Z2Z2 = mod(Z2 ** _2n);\n const U1 = mod(X1 * Z2Z2);\n const U2 = mod(X2 * Z1Z1);\n const S1 = mod(mod(Y1 * Z2) * Z2Z2);\n const S2 = mod(mod(Y2 * Z1) * Z1Z1);\n return U1 === U2 && S1 === S2;\n }\n negate() {\n return new JacobianPoint(this.x, mod(-this.y), this.z);\n }\n double() {\n const { x: X1, y: Y1, z: Z1 } = this;\n const A = mod(X1 ** _2n);\n const B = mod(Y1 ** _2n);\n const C = mod(B ** _2n);\n const D = mod(_2n * (mod((X1 + B) ** _2n) - A - C));\n const E = mod(_3n * A);\n const F = mod(E ** _2n);\n const X3 = mod(F - _2n * D);\n const Y3 = mod(E * (D - X3) - _8n * C);\n const Z3 = mod(_2n * Y1 * Z1);\n return new JacobianPoint(X3, Y3, Z3);\n }\n add(other) {\n if (!(other instanceof JacobianPoint))\n throw new TypeError('JacobianPoint expected');\n const { x: X1, y: Y1, z: Z1 } = this;\n const { x: X2, y: Y2, z: Z2 } = other;\n if (X2 === _0n || Y2 === _0n)\n return this;\n if (X1 === _0n || Y1 === _0n)\n return other;\n const Z1Z1 = mod(Z1 ** _2n);\n const Z2Z2 = mod(Z2 ** _2n);\n const U1 = mod(X1 * Z2Z2);\n const U2 = mod(X2 * Z1Z1);\n const S1 = mod(mod(Y1 * Z2) * Z2Z2);\n const S2 = mod(mod(Y2 * Z1) * Z1Z1);\n const H = mod(U2 - U1);\n const r = mod(S2 - S1);\n if (H === _0n) {\n if (r === _0n) {\n return this.double();\n }\n else {\n return JacobianPoint.ZERO;\n }\n }\n const HH = mod(H ** _2n);\n const HHH = mod(H * HH);\n const V = mod(U1 * HH);\n const X3 = mod(r ** _2n - HHH - _2n * V);\n const Y3 = mod(r * (V - X3) - S1 * HHH);\n const Z3 = mod(Z1 * Z2 * H);\n return new JacobianPoint(X3, Y3, Z3);\n }\n subtract(other) {\n return this.add(other.negate());\n }\n multiplyUnsafe(scalar) {\n let n = normalizeScalar(scalar);\n const G = JacobianPoint.BASE;\n const P0 = JacobianPoint.ZERO;\n if (n === _0n)\n return P0;\n if (n === _1n)\n return this;\n if (!USE_ENDOMORPHISM) {\n let p = P0;\n let d = this;\n while (n > _0n) {\n if (n & _1n)\n p = p.add(d);\n d = d.double();\n n >>= _1n;\n }\n return p;\n }\n let { k1neg, k1, k2neg, k2 } = splitScalarEndo(n);\n let k1p = P0;\n let k2p = P0;\n let d = this;\n while (k1 > _0n || k2 > _0n) {\n if (k1 & _1n)\n k1p = k1p.add(d);\n if (k2 & _1n)\n k2p = k2p.add(d);\n d = d.double();\n k1 >>= _1n;\n k2 >>= _1n;\n }\n if (k1neg)\n k1p = k1p.negate();\n if (k2neg)\n k2p = k2p.negate();\n k2p = new JacobianPoint(mod(k2p.x * CURVE.beta), k2p.y, k2p.z);\n return k1p.add(k2p);\n }\n precomputeWindow(W) {\n const windows = USE_ENDOMORPHISM ? 128 / W + 1 : 256 / W + 1;\n const points = [];\n let p = this;\n let base = p;\n for (let window = 0; window < windows; window++) {\n base = p;\n points.push(base);\n for (let i = 1; i < 2 ** (W - 1); i++) {\n base = base.add(p);\n points.push(base);\n }\n p = base.double();\n }\n return points;\n }\n wNAF(n, affinePoint) {\n if (!affinePoint && this.equals(JacobianPoint.BASE))\n affinePoint = Point.BASE;\n const W = (affinePoint && affinePoint._WINDOW_SIZE) || 1;\n if (256 % W) {\n throw new Error('Point#wNAF: Invalid precomputation window, must be power of 2');\n }\n let precomputes = affinePoint && pointPrecomputes.get(affinePoint);\n if (!precomputes) {\n precomputes = this.precomputeWindow(W);\n if (affinePoint && W !== 1) {\n precomputes = JacobianPoint.normalizeZ(precomputes);\n pointPrecomputes.set(affinePoint, precomputes);\n }\n }\n let p = JacobianPoint.ZERO;\n let f = JacobianPoint.ZERO;\n const windows = 1 + (USE_ENDOMORPHISM ? 128 / W : 256 / W);\n const windowSize = 2 ** (W - 1);\n const mask = BigInt(2 ** W - 1);\n const maxNumber = 2 ** W;\n const shiftBy = BigInt(W);\n for (let window = 0; window < windows; window++) {\n const offset = window * windowSize;\n let wbits = Number(n & mask);\n n >>= shiftBy;\n if (wbits > windowSize) {\n wbits -= maxNumber;\n n += _1n;\n }\n if (wbits === 0) {\n let pr = precomputes[offset];\n if (window % 2)\n pr = pr.negate();\n f = f.add(pr);\n }\n else {\n let cached = precomputes[offset + Math.abs(wbits) - 1];\n if (wbits < 0)\n cached = cached.negate();\n p = p.add(cached);\n }\n }\n return { p, f };\n }\n multiply(scalar, affinePoint) {\n let n = normalizeScalar(scalar);\n let point;\n let fake;\n if (USE_ENDOMORPHISM) {\n const { k1neg, k1, k2neg, k2 } = splitScalarEndo(n);\n let { p: k1p, f: f1p } = this.wNAF(k1, affinePoint);\n let { p: k2p, f: f2p } = this.wNAF(k2, affinePoint);\n if (k1neg)\n k1p = k1p.negate();\n if (k2neg)\n k2p = k2p.negate();\n k2p = new JacobianPoint(mod(k2p.x * CURVE.beta), k2p.y, k2p.z);\n point = k1p.add(k2p);\n fake = f1p.add(f2p);\n }\n else {\n const { p, f } = this.wNAF(n, affinePoint);\n point = p;\n fake = f;\n }\n return JacobianPoint.normalizeZ([point, fake])[0];\n }\n toAffine(invZ = invert(this.z)) {\n const { x, y, z } = this;\n const iz1 = invZ;\n const iz2 = mod(iz1 * iz1);\n const iz3 = mod(iz2 * iz1);\n const ax = mod(x * iz2);\n const ay = mod(y * iz3);\n const zz = mod(z * iz1);\n if (zz !== _1n)\n throw new Error('invZ was invalid');\n return new Point(ax, ay);\n }\n}\nJacobianPoint.BASE = new JacobianPoint(CURVE.Gx, CURVE.Gy, _1n);\nJacobianPoint.ZERO = new JacobianPoint(_0n, _1n, _0n);\nconst pointPrecomputes = new WeakMap();\nexport class Point {\n constructor(x, y) {\n this.x = x;\n this.y = y;\n }\n _setWindowSize(windowSize) {\n this._WINDOW_SIZE = windowSize;\n pointPrecomputes.delete(this);\n }\n static fromCompressedHex(bytes) {\n const isShort = bytes.length === 32;\n const x = bytesToNumber(isShort ? bytes : bytes.subarray(1));\n if (!isValidFieldElement(x))\n throw new Error('Point is not on curve');\n const y2 = weistrass(x);\n let y = sqrtMod(y2);\n const isYOdd = (y & _1n) === _1n;\n if (isShort) {\n if (isYOdd)\n y = mod(-y);\n }\n else {\n const isFirstByteOdd = (bytes[0] & 1) === 1;\n if (isFirstByteOdd !== isYOdd)\n y = mod(-y);\n }\n const point = new Point(x, y);\n point.assertValidity();\n return point;\n }\n static fromUncompressedHex(bytes) {\n const x = bytesToNumber(bytes.subarray(1, 33));\n const y = bytesToNumber(bytes.subarray(33, 65));\n const point = new Point(x, y);\n point.assertValidity();\n return point;\n }\n static fromHex(hex) {\n const bytes = ensureBytes(hex);\n const len = bytes.length;\n const header = bytes[0];\n if (len === 32 || (len === 33 && (header === 0x02 || header === 0x03))) {\n return this.fromCompressedHex(bytes);\n }\n if (len === 65 && header === 0x04)\n return this.fromUncompressedHex(bytes);\n throw new Error(`Point.fromHex: received invalid point. Expected 32-33 compressed bytes or 65 uncompressed bytes, not ${len}`);\n }\n static fromPrivateKey(privateKey) {\n return Point.BASE.multiply(normalizePrivateKey(privateKey));\n }\n static fromSignature(msgHash, signature, recovery) {\n msgHash = ensureBytes(msgHash);\n const h = truncateHash(msgHash);\n const { r, s } = normalizeSignature(signature);\n if (recovery !== 0 && recovery !== 1) {\n throw new Error('Cannot recover signature: invalid recovery bit');\n }\n if (h === _0n)\n throw new Error('Cannot recover signature: msgHash cannot be 0');\n const prefix = recovery & 1 ? '03' : '02';\n const R = Point.fromHex(prefix + numTo32bStr(r));\n const { n } = CURVE;\n const rinv = invert(r, n);\n const u1 = mod(-h * rinv, n);\n const u2 = mod(s * rinv, n);\n const Q = Point.BASE.multiplyAndAddUnsafe(R, u1, u2);\n if (!Q)\n throw new Error('Cannot recover signature: point at infinify');\n Q.assertValidity();\n return Q;\n }\n toRawBytes(isCompressed = false) {\n return hexToBytes(this.toHex(isCompressed));\n }\n toHex(isCompressed = false) {\n const x = numTo32bStr(this.x);\n if (isCompressed) {\n const prefix = this.y & _1n ? '03' : '02';\n return `${prefix}${x}`;\n }\n else {\n return `04${x}${numTo32bStr(this.y)}`;\n }\n }\n toHexX() {\n return this.toHex(true).slice(2);\n }\n toRawX() {\n return this.toRawBytes(true).slice(1);\n }\n assertValidity() {\n const msg = 'Point is not on elliptic curve';\n const { x, y } = this;\n if (!isValidFieldElement(x) || !isValidFieldElement(y))\n throw new Error(msg);\n const left = mod(y * y);\n const right = weistrass(x);\n if (mod(left - right) !== _0n)\n throw new Error(msg);\n }\n equals(other) {\n return this.x === other.x && this.y === other.y;\n }\n negate() {\n return new Point(this.x, mod(-this.y));\n }\n double() {\n return JacobianPoint.fromAffine(this).double().toAffine();\n }\n add(other) {\n return JacobianPoint.fromAffine(this).add(JacobianPoint.fromAffine(other)).toAffine();\n }\n subtract(other) {\n return this.add(other.negate());\n }\n multiply(scalar) {\n return JacobianPoint.fromAffine(this).multiply(scalar, this).toAffine();\n }\n multiplyAndAddUnsafe(Q, a, b) {\n const P = JacobianPoint.fromAffine(this);\n const aP = P.multiply(a);\n const bQ = JacobianPoint.fromAffine(Q).multiplyUnsafe(b);\n const sum = aP.add(bQ);\n return sum.equals(JacobianPoint.ZERO) ? undefined : sum.toAffine();\n }\n}\nPoint.BASE = new Point(CURVE.Gx, CURVE.Gy);\nPoint.ZERO = new Point(_0n, _0n);\nfunction sliceDER(s) {\n return Number.parseInt(s[0], 16) >= 8 ? '00' + s : s;\n}\nfunction parseDERInt(data) {\n if (data.length < 2 || data[0] !== 0x02) {\n throw new Error(`Invalid signature integer tag: ${bytesToHex(data)}`);\n }\n const len = data[1];\n const res = data.subarray(2, len + 2);\n if (!len || res.length !== len) {\n throw new Error(`Invalid signature integer: wrong length`);\n }\n if (res[0] === 0x00 && res[1] <= 0x7f) {\n throw new Error('Invalid signature integer: trailing length');\n }\n return { data: bytesToNumber(res), left: data.subarray(len + 2) };\n}\nfunction parseDERSignature(data) {\n if (data.length < 2 || data[0] != 0x30) {\n throw new Error(`Invalid signature tag: ${bytesToHex(data)}`);\n }\n if (data[1] !== data.length - 2) {\n throw new Error('Invalid signature: incorrect length');\n }\n const { data: r, left: sBytes } = parseDERInt(data.subarray(2));\n const { data: s, left: rBytesLeft } = parseDERInt(sBytes);\n if (rBytesLeft.length) {\n throw new Error(`Invalid signature: left bytes after parsing: ${bytesToHex(rBytesLeft)}`);\n }\n return { r, s };\n}\nexport class Signature {\n constructor(r, s) {\n this.r = r;\n this.s = s;\n this.assertValidity();\n }\n static fromCompact(hex) {\n const arr = isUint8a(hex);\n const name = 'Signature.fromCompact';\n if (typeof hex !== 'string' && !arr)\n throw new TypeError(`${name}: Expected string or Uint8Array`);\n const str = arr ? bytesToHex(hex) : hex;\n if (str.length !== 128)\n throw new Error(`${name}: Expected 64-byte hex`);\n return new Signature(hexToNumber(str.slice(0, 64)), hexToNumber(str.slice(64, 128)));\n }\n static fromDER(hex) {\n const arr = isUint8a(hex);\n if (typeof hex !== 'string' && !arr)\n throw new TypeError(`Signature.fromDER: Expected string or Uint8Array`);\n const { r, s } = parseDERSignature(arr ? hex : hexToBytes(hex));\n return new Signature(r, s);\n }\n static fromHex(hex) {\n return this.fromDER(hex);\n }\n assertValidity() {\n const { r, s } = this;\n if (!isWithinCurveOrder(r))\n throw new Error('Invalid Signature: r must be 0 < r < n');\n if (!isWithinCurveOrder(s))\n throw new Error('Invalid Signature: s must be 0 < s < n');\n }\n hasHighS() {\n const HALF = CURVE.n >> _1n;\n return this.s > HALF;\n }\n normalizeS() {\n return this.hasHighS() ? new Signature(this.r, CURVE.n - this.s) : this;\n }\n toDERRawBytes(isCompressed = false) {\n return hexToBytes(this.toDERHex(isCompressed));\n }\n toDERHex(isCompressed = false) {\n const sHex = sliceDER(numberToHexUnpadded(this.s));\n if (isCompressed)\n return sHex;\n const rHex = sliceDER(numberToHexUnpadded(this.r));\n const rLen = numberToHexUnpadded(rHex.length / 2);\n const sLen = numberToHexUnpadded(sHex.length / 2);\n const length = numberToHexUnpadded(rHex.length / 2 + sHex.length / 2 + 4);\n return `30${length}02${rLen}${rHex}02${sLen}${sHex}`;\n }\n toRawBytes() {\n return this.toDERRawBytes();\n }\n toHex() {\n return this.toDERHex();\n }\n toCompactRawBytes() {\n return hexToBytes(this.toCompactHex());\n }\n toCompactHex() {\n return numTo32bStr(this.r) + numTo32bStr(this.s);\n }\n}\nfunction concatBytes(...arrays) {\n if (!arrays.every(isUint8a))\n throw new Error('Uint8Array list expected');\n if (arrays.length === 1)\n return arrays[0];\n const length = arrays.reduce((a, arr) => a + arr.length, 0);\n const result = new Uint8Array(length);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const arr = arrays[i];\n result.set(arr, pad);\n pad += arr.length;\n }\n return result;\n}\nfunction isUint8a(bytes) {\n return bytes instanceof Uint8Array;\n}\nconst hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\nfunction bytesToHex(uint8a) {\n if (!(uint8a instanceof Uint8Array))\n throw new Error('Expected Uint8Array');\n let hex = '';\n for (let i = 0; i < uint8a.length; i++) {\n hex += hexes[uint8a[i]];\n }\n return hex;\n}\nfunction numTo32bStr(num) {\n if (num > POW_2_256)\n throw new Error('Expected number < 2^256');\n return num.toString(16).padStart(64, '0');\n}\nfunction numTo32b(num) {\n return hexToBytes(numTo32bStr(num));\n}\nfunction numberToHexUnpadded(num) {\n const hex = num.toString(16);\n return hex.length & 1 ? `0${hex}` : hex;\n}\nfunction hexToNumber(hex) {\n if (typeof hex !== 'string') {\n throw new TypeError('hexToNumber: expected string, got ' + typeof hex);\n }\n return BigInt(`0x${hex}`);\n}\nfunction hexToBytes(hex) {\n if (typeof hex !== 'string') {\n throw new TypeError('hexToBytes: expected string, got ' + typeof hex);\n }\n if (hex.length % 2)\n throw new Error('hexToBytes: received invalid unpadded hex' + hex.length);\n const array = new Uint8Array(hex.length / 2);\n for (let i = 0; i < array.length; i++) {\n const j = i * 2;\n const hexByte = hex.slice(j, j + 2);\n const byte = Number.parseInt(hexByte, 16);\n if (Number.isNaN(byte) || byte < 0)\n throw new Error('Invalid byte sequence');\n array[i] = byte;\n }\n return array;\n}\nfunction bytesToNumber(bytes) {\n return hexToNumber(bytesToHex(bytes));\n}\nfunction ensureBytes(hex) {\n return hex instanceof Uint8Array ? Uint8Array.from(hex) : hexToBytes(hex);\n}\nfunction normalizeScalar(num) {\n if (typeof num === 'number' && Number.isSafeInteger(num) && num > 0)\n return BigInt(num);\n if (typeof num === 'bigint' && isWithinCurveOrder(num))\n return num;\n throw new TypeError('Expected valid private scalar: 0 < scalar < curve.n');\n}\nfunction mod(a, b = CURVE.P) {\n const result = a % b;\n return result >= _0n ? result : b + result;\n}\nfunction pow2(x, power) {\n const { P } = CURVE;\n let res = x;\n while (power-- > _0n) {\n res *= res;\n res %= P;\n }\n return res;\n}\nfunction sqrtMod(x) {\n const { P } = CURVE;\n const _6n = BigInt(6);\n const _11n = BigInt(11);\n const _22n = BigInt(22);\n const _23n = BigInt(23);\n const _44n = BigInt(44);\n const _88n = BigInt(88);\n const b2 = (x * x * x) % P;\n const b3 = (b2 * b2 * x) % P;\n const b6 = (pow2(b3, _3n) * b3) % P;\n const b9 = (pow2(b6, _3n) * b3) % P;\n const b11 = (pow2(b9, _2n) * b2) % P;\n const b22 = (pow2(b11, _11n) * b11) % P;\n const b44 = (pow2(b22, _22n) * b22) % P;\n const b88 = (pow2(b44, _44n) * b44) % P;\n const b176 = (pow2(b88, _88n) * b88) % P;\n const b220 = (pow2(b176, _44n) * b44) % P;\n const b223 = (pow2(b220, _3n) * b3) % P;\n const t1 = (pow2(b223, _23n) * b22) % P;\n const t2 = (pow2(t1, _6n) * b2) % P;\n return pow2(t2, _2n);\n}\nfunction invert(number, modulo = CURVE.P) {\n if (number === _0n || modulo <= _0n) {\n throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);\n }\n let a = mod(number, modulo);\n let b = modulo;\n let x = _0n, y = _1n, u = _1n, v = _0n;\n while (a !== _0n) {\n const q = b / a;\n const r = b % a;\n const m = x - u * q;\n const n = y - v * q;\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n const gcd = b;\n if (gcd !== _1n)\n throw new Error('invert: does not exist');\n return mod(x, modulo);\n}\nfunction invertBatch(nums, p = CURVE.P) {\n const scratch = new Array(nums.length);\n const lastMultiplied = nums.reduce((acc, num, i) => {\n if (num === _0n)\n return acc;\n scratch[i] = acc;\n return mod(acc * num, p);\n }, _1n);\n const inverted = invert(lastMultiplied, p);\n nums.reduceRight((acc, num, i) => {\n if (num === _0n)\n return acc;\n scratch[i] = mod(acc * scratch[i], p);\n return mod(acc * num, p);\n }, inverted);\n return scratch;\n}\nconst divNearest = (a, b) => (a + b / _2n) / b;\nconst POW_2_128 = _2n ** BigInt(128);\nfunction splitScalarEndo(k) {\n const { n } = CURVE;\n const a1 = BigInt('0x3086d221a7d46bcde86c90e49284eb15');\n const b1 = -_1n * BigInt('0xe4437ed6010e88286f547fa90abfe4c3');\n const a2 = BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8');\n const b2 = a1;\n const c1 = divNearest(b2 * k, n);\n const c2 = divNearest(-b1 * k, n);\n let k1 = mod(k - c1 * a1 - c2 * a2, n);\n let k2 = mod(-c1 * b1 - c2 * b2, n);\n const k1neg = k1 > POW_2_128;\n const k2neg = k2 > POW_2_128;\n if (k1neg)\n k1 = n - k1;\n if (k2neg)\n k2 = n - k2;\n if (k1 > POW_2_128 || k2 > POW_2_128) {\n throw new Error('splitScalarEndo: Endomorphism failed, k=' + k);\n }\n return { k1neg, k1, k2neg, k2 };\n}\nfunction truncateHash(hash) {\n const { n } = CURVE;\n const byteLength = hash.length;\n const delta = byteLength * 8 - 256;\n let h = bytesToNumber(hash);\n if (delta > 0)\n h = h >> BigInt(delta);\n if (h >= n)\n h -= n;\n return h;\n}\nclass HmacDrbg {\n constructor() {\n this.v = new Uint8Array(32).fill(1);\n this.k = new Uint8Array(32).fill(0);\n this.counter = 0;\n }\n hmac(...values) {\n return utils.hmacSha256(this.k, ...values);\n }\n hmacSync(...values) {\n if (typeof utils.hmacSha256Sync !== 'function')\n throw new Error('utils.hmacSha256Sync is undefined, you need to set it');\n const res = utils.hmacSha256Sync(this.k, ...values);\n if (res instanceof Promise)\n throw new Error('To use sync sign(), ensure utils.hmacSha256 is sync');\n return res;\n }\n incr() {\n if (this.counter >= 1000) {\n throw new Error('Tried 1,000 k values for sign(), all were invalid');\n }\n this.counter += 1;\n }\n async reseed(seed = new Uint8Array()) {\n this.k = await this.hmac(this.v, Uint8Array.from([0x00]), seed);\n this.v = await this.hmac(this.v);\n if (seed.length === 0)\n return;\n this.k = await this.hmac(this.v, Uint8Array.from([0x01]), seed);\n this.v = await this.hmac(this.v);\n }\n reseedSync(seed = new Uint8Array()) {\n this.k = this.hmacSync(this.v, Uint8Array.from([0x00]), seed);\n this.v = this.hmacSync(this.v);\n if (seed.length === 0)\n return;\n this.k = this.hmacSync(this.v, Uint8Array.from([0x01]), seed);\n this.v = this.hmacSync(this.v);\n }\n async generate() {\n this.incr();\n this.v = await this.hmac(this.v);\n return this.v;\n }\n generateSync() {\n this.incr();\n this.v = this.hmacSync(this.v);\n return this.v;\n }\n}\nfunction isWithinCurveOrder(num) {\n return _0n < num && num < CURVE.n;\n}\nfunction isValidFieldElement(num) {\n return _0n < num && num < CURVE.P;\n}\nfunction kmdToSig(kBytes, m, d) {\n const k = bytesToNumber(kBytes);\n if (!isWithinCurveOrder(k))\n return;\n const { n } = CURVE;\n const q = Point.BASE.multiply(k);\n const r = mod(q.x, n);\n if (r === _0n)\n return;\n const s = mod(invert(k, n) * mod(m + d * r, n), n);\n if (s === _0n)\n return;\n const sig = new Signature(r, s);\n const recovery = (q.x === sig.r ? 0 : 2) | Number(q.y & _1n);\n return { sig, recovery };\n}\nfunction normalizePrivateKey(key) {\n let num;\n if (typeof key === 'bigint') {\n num = key;\n }\n else if (typeof key === 'number' && Number.isSafeInteger(key) && key > 0) {\n num = BigInt(key);\n }\n else if (typeof key === 'string') {\n if (key.length !== 64)\n throw new Error('Expected 32 bytes of private key');\n num = hexToNumber(key);\n }\n else if (isUint8a(key)) {\n if (key.length !== 32)\n throw new Error('Expected 32 bytes of private key');\n num = bytesToNumber(key);\n }\n else {\n throw new TypeError('Expected valid private key');\n }\n if (!isWithinCurveOrder(num))\n throw new Error('Expected private key: 0 < key < n');\n return num;\n}\nfunction normalizePublicKey(publicKey) {\n if (publicKey instanceof Point) {\n publicKey.assertValidity();\n return publicKey;\n }\n else {\n return Point.fromHex(publicKey);\n }\n}\nfunction normalizeSignature(signature) {\n if (signature instanceof Signature) {\n signature.assertValidity();\n return signature;\n }\n try {\n return Signature.fromDER(signature);\n }\n catch (error) {\n return Signature.fromCompact(signature);\n }\n}\nexport function getPublicKey(privateKey, isCompressed = false) {\n return Point.fromPrivateKey(privateKey).toRawBytes(isCompressed);\n}\nexport function recoverPublicKey(msgHash, signature, recovery, isCompressed = false) {\n return Point.fromSignature(msgHash, signature, recovery).toRawBytes(isCompressed);\n}\nfunction isPub(item) {\n const arr = isUint8a(item);\n const str = typeof item === 'string';\n const len = (arr || str) && item.length;\n if (arr)\n return len === 33 || len === 65;\n if (str)\n return len === 66 || len === 130;\n if (item instanceof Point)\n return true;\n return false;\n}\nexport function getSharedSecret(privateA, publicB, isCompressed = false) {\n if (isPub(privateA))\n throw new TypeError('getSharedSecret: first arg must be private key');\n if (!isPub(publicB))\n throw new TypeError('getSharedSecret: second arg must be public key');\n const b = normalizePublicKey(publicB);\n b.assertValidity();\n return b.multiply(normalizePrivateKey(privateA)).toRawBytes(isCompressed);\n}\nfunction bits2int(bytes) {\n const slice = bytes.length > 32 ? bytes.slice(0, 32) : bytes;\n return bytesToNumber(slice);\n}\nfunction bits2octets(bytes) {\n const z1 = bits2int(bytes);\n const z2 = mod(z1, CURVE.n);\n return int2octets(z2 < _0n ? z1 : z2);\n}\nfunction int2octets(num) {\n if (typeof num !== 'bigint')\n throw new Error('Expected bigint');\n const hex = numTo32bStr(num);\n return hexToBytes(hex);\n}\nfunction initSigArgs(msgHash, privateKey, extraEntropy) {\n if (msgHash == null)\n throw new Error(`sign: expected valid message hash, not \"${msgHash}\"`);\n const h1 = ensureBytes(msgHash);\n const d = normalizePrivateKey(privateKey);\n const seedArgs = [int2octets(d), bits2octets(h1)];\n if (extraEntropy != null) {\n if (extraEntropy === true)\n extraEntropy = utils.randomBytes(32);\n const e = ensureBytes(extraEntropy);\n if (e.length !== 32)\n throw new Error('sign: Expected 32 bytes of extra data');\n seedArgs.push(e);\n }\n const seed = concatBytes(...seedArgs);\n const m = bits2int(h1);\n return { seed, m, d };\n}\nfunction finalizeSig(recSig, opts) {\n let { sig, recovery } = recSig;\n const { canonical, der, recovered } = Object.assign({ canonical: true, der: true }, opts);\n if (canonical && sig.hasHighS()) {\n sig = sig.normalizeS();\n recovery ^= 1;\n }\n const hashed = der ? sig.toDERRawBytes() : sig.toCompactRawBytes();\n return recovered ? [hashed, recovery] : hashed;\n}\nasync function sign(msgHash, privKey, opts = {}) {\n const { seed, m, d } = initSigArgs(msgHash, privKey, opts.extraEntropy);\n let sig;\n const drbg = new HmacDrbg();\n await drbg.reseed(seed);\n while (!(sig = kmdToSig(await drbg.generate(), m, d)))\n await drbg.reseed();\n return finalizeSig(sig, opts);\n}\nfunction signSync(msgHash, privKey, opts = {}) {\n const { seed, m, d } = initSigArgs(msgHash, privKey, opts.extraEntropy);\n let sig;\n const drbg = new HmacDrbg();\n drbg.reseedSync(seed);\n while (!(sig = kmdToSig(drbg.generateSync(), m, d)))\n drbg.reseedSync();\n return finalizeSig(sig, opts);\n}\nexport { sign, signSync };\nconst vopts = { strict: true };\nexport function verify(signature, msgHash, publicKey, opts = vopts) {\n let sig;\n try {\n sig = normalizeSignature(signature);\n msgHash = ensureBytes(msgHash);\n }\n catch (error) {\n return false;\n }\n const { r, s } = sig;\n if (opts.strict && sig.hasHighS())\n return false;\n const h = truncateHash(msgHash);\n if (h === _0n)\n return false;\n let P;\n try {\n P = normalizePublicKey(publicKey);\n }\n catch (error) {\n return false;\n }\n const { n } = CURVE;\n const sinv = invert(s, n);\n const u1 = mod(h * sinv, n);\n const u2 = mod(r * sinv, n);\n const R = Point.BASE.multiplyAndAddUnsafe(P, u1, u2);\n if (!R)\n return false;\n const v = mod(R.x, n);\n return v === r;\n}\nasync function taggedHash(tag, ...messages) {\n const tagB = new Uint8Array(tag.split('').map((c) => c.charCodeAt(0)));\n const tagH = await utils.sha256(tagB);\n const h = await utils.sha256(concatBytes(tagH, tagH, ...messages));\n return bytesToNumber(h);\n}\nasync function createChallenge(x, P, message) {\n const rx = numTo32b(x);\n const t = await taggedHash('BIP0340/challenge', rx, P.toRawX(), message);\n return mod(t, CURVE.n);\n}\nfunction hasEvenY(point) {\n return (point.y & _1n) === _0n;\n}\nclass SchnorrSignature {\n constructor(r, s) {\n this.r = r;\n this.s = s;\n this.assertValidity();\n }\n static fromHex(hex) {\n const bytes = ensureBytes(hex);\n if (bytes.length !== 64)\n throw new TypeError(`SchnorrSignature.fromHex: expected 64 bytes, not ${bytes.length}`);\n const r = bytesToNumber(bytes.subarray(0, 32));\n const s = bytesToNumber(bytes.subarray(32, 64));\n return new SchnorrSignature(r, s);\n }\n assertValidity() {\n const { r, s } = this;\n if (!isValidFieldElement(r) || !isWithinCurveOrder(s))\n throw new Error('Invalid signature');\n }\n toHex() {\n return numTo32bStr(this.r) + numTo32bStr(this.s);\n }\n toRawBytes() {\n return hexToBytes(this.toHex());\n }\n}\nfunction schnorrGetPublicKey(privateKey) {\n return Point.fromPrivateKey(privateKey).toRawX();\n}\nasync function schnorrSign(message, privateKey, auxRand = utils.randomBytes()) {\n if (message == null)\n throw new TypeError(`sign: Expected valid message, not \"${message}\"`);\n const { n } = CURVE;\n const m = ensureBytes(message);\n const d0 = normalizePrivateKey(privateKey);\n const rand = ensureBytes(auxRand);\n if (rand.length !== 32)\n throw new TypeError('sign: Expected 32 bytes of aux randomness');\n const P = Point.fromPrivateKey(d0);\n const d = hasEvenY(P) ? d0 : n - d0;\n const t0h = await taggedHash('BIP0340/aux', rand);\n const t = d ^ t0h;\n const k0h = await taggedHash('BIP0340/nonce', numTo32b(t), P.toRawX(), m);\n const k0 = mod(k0h, n);\n if (k0 === _0n)\n throw new Error('sign: Creation of signature failed. k is zero');\n const R = Point.fromPrivateKey(k0);\n const k = hasEvenY(R) ? k0 : n - k0;\n const e = await createChallenge(R.x, P, m);\n const sig = new SchnorrSignature(R.x, mod(k + e * d, n)).toRawBytes();\n const isValid = await schnorrVerify(sig, m, P.toRawX());\n if (!isValid)\n throw new Error('sign: Invalid signature produced');\n return sig;\n}\nasync function schnorrVerify(signature, message, publicKey) {\n const raw = signature instanceof SchnorrSignature;\n let sig;\n try {\n sig = raw ? signature : SchnorrSignature.fromHex(signature);\n if (raw)\n sig.assertValidity();\n }\n catch (error) {\n return false;\n }\n const { r, s } = sig;\n const m = ensureBytes(message);\n let P;\n try {\n P = normalizePublicKey(publicKey);\n }\n catch (error) {\n return false;\n }\n const e = await createChallenge(r, P, m);\n const R = Point.BASE.multiplyAndAddUnsafe(P, normalizePrivateKey(s), mod(-e, CURVE.n));\n if (!R || !hasEvenY(R) || R.x !== r)\n return false;\n return true;\n}\nexport const schnorr = {\n Signature: SchnorrSignature,\n getPublicKey: schnorrGetPublicKey,\n sign: schnorrSign,\n verify: schnorrVerify,\n};\nPoint.BASE._setWindowSize(8);\nconst crypto = {\n node: nodeCrypto,\n web: typeof self === 'object' && 'crypto' in self ? self.crypto : undefined,\n};\nexport const utils = {\n isValidPrivateKey(privateKey) {\n try {\n normalizePrivateKey(privateKey);\n return true;\n }\n catch (error) {\n return false;\n }\n },\n hashToPrivateKey: (hash) => {\n hash = ensureBytes(hash);\n if (hash.length < 40 || hash.length > 1024)\n throw new Error('Expected 40-1024 bytes of private key as per FIPS 186');\n const num = mod(bytesToNumber(hash), CURVE.n);\n if (num === _0n || num === _1n)\n throw new Error('Invalid private key');\n return numTo32b(num);\n },\n randomBytes: (bytesLength = 32) => {\n if (crypto.web) {\n return crypto.web.getRandomValues(new Uint8Array(bytesLength));\n }\n else if (crypto.node) {\n const { randomBytes } = crypto.node;\n return Uint8Array.from(randomBytes(bytesLength));\n }\n else {\n throw new Error(\"The environment doesn't have randomBytes function\");\n }\n },\n randomPrivateKey: () => {\n return utils.hashToPrivateKey(utils.randomBytes(40));\n },\n bytesToHex,\n mod,\n sha256: async (message) => {\n if (crypto.web) {\n const buffer = await crypto.web.subtle.digest('SHA-256', message.buffer);\n return new Uint8Array(buffer);\n }\n else if (crypto.node) {\n const { createHash } = crypto.node;\n return Uint8Array.from(createHash('sha256').update(message).digest());\n }\n else {\n throw new Error(\"The environment doesn't have sha256 function\");\n }\n },\n hmacSha256: async (key, ...messages) => {\n if (crypto.web) {\n const ckey = await crypto.web.subtle.importKey('raw', key, { name: 'HMAC', hash: { name: 'SHA-256' } }, false, ['sign']);\n const message = concatBytes(...messages);\n const buffer = await crypto.web.subtle.sign('HMAC', ckey, message);\n return new Uint8Array(buffer);\n }\n else if (crypto.node) {\n const { createHmac } = crypto.node;\n const hash = createHmac('sha256', key);\n messages.forEach((m) => hash.update(m));\n return Uint8Array.from(hash.digest());\n }\n else {\n throw new Error(\"The environment doesn't have hmac-sha256 function\");\n }\n },\n sha256Sync: undefined,\n hmacSha256Sync: undefined,\n precompute(windowSize = 8, point = Point.BASE) {\n const cached = point === Point.BASE ? point : new Point(point.x, point.y);\n cached._setWindowSize(windowSize);\n cached.multiply(_3n);\n return cached;\n },\n};\n","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _SigningKey_privateKey;\nimport * as secp256k1 from \"@noble/secp256k1\";\nimport { arrayify, concat, dataLength, hexlify } from \"@ethersproject/bytes\";\nimport { computeHmac } from \"@ethersproject/crypto\";\nimport { toHex } from \"@ethersproject/math\";\nimport { Signature } from \"./signature.js\";\nimport { logger } from \"./logger.js\";\n// Make noble-secp256k1 sync\nsecp256k1.utils.hmacSha256Sync = function (key, ...messages) {\n return arrayify(computeHmac(\"sha256\", key, concat(messages)));\n};\nexport class SigningKey {\n constructor(privateKey) {\n _SigningKey_privateKey.set(this, void 0);\n logger.assertArgument((dataLength(privateKey) === 32), \"invalid private key length\", \"privateKey\", \"[REDACTED]\");\n __classPrivateFieldSet(this, _SigningKey_privateKey, hexlify(privateKey), \"f\");\n }\n get privateKey() { return __classPrivateFieldGet(this, _SigningKey_privateKey, \"f\"); }\n get publicKey() { return SigningKey.computePublicKey(__classPrivateFieldGet(this, _SigningKey_privateKey, \"f\")); }\n get compressedPublicKey() { return SigningKey.computePublicKey(__classPrivateFieldGet(this, _SigningKey_privateKey, \"f\"), true); }\n sign(digest) {\n logger.assertArgument((dataLength(digest) === 32), \"invalid digest length\", \"digest\", digest);\n const [sigDer, recid] = secp256k1.signSync(arrayify(digest), arrayify(__classPrivateFieldGet(this, _SigningKey_privateKey, \"f\")), {\n recovered: true,\n canonical: true\n });\n const sig = secp256k1.Signature.fromHex(sigDer);\n return Signature.from({\n r: toHex(\"0x\" + sig.r.toString(16), 32),\n s: toHex(\"0x\" + sig.s.toString(16), 32),\n v: (recid ? 0x1c : 0x1b)\n }).freeze();\n }\n computeShardSecret(other) {\n const pubKey = SigningKey.computePublicKey(other);\n return hexlify(secp256k1.getSharedSecret(arrayify(__classPrivateFieldGet(this, _SigningKey_privateKey, \"f\")), pubKey));\n }\n static computePublicKey(key, compressed) {\n let bytes = logger.getBytes(key, \"key\");\n if (bytes.length === 32) {\n const pubKey = secp256k1.getPublicKey(bytes, !!compressed);\n return hexlify(pubKey);\n }\n if (bytes.length === 64) {\n const pub = new Uint8Array(65);\n pub[0] = 0x04;\n pub.set(bytes, 1);\n bytes = pub;\n }\n const point = secp256k1.Point.fromHex(bytes);\n return hexlify(point.toRawBytes(compressed));\n }\n static recoverPublicKey(digest, signature) {\n const sig = Signature.from(signature);\n const der = secp256k1.Signature.fromCompact(arrayify(concat([sig.r, sig.s]))).toDERRawBytes();\n const pubKey = secp256k1.recoverPublicKey(arrayify(digest), der, sig.yParity);\n if (pubKey != null) {\n return hexlify(pubKey);\n }\n return logger.throwArgumentError(\"invalid signautre for digest\", \"signature\", signature);\n }\n static _addPoints(p0, p1, compressed) {\n const pub0 = secp256k1.Point.fromHex(SigningKey.computePublicKey(p0).substring(2));\n const pub1 = secp256k1.Point.fromHex(SigningKey.computePublicKey(p1).substring(2));\n return \"0x\" + pub0.add(pub1).toHex(!!compressed);\n }\n}\n_SigningKey_privateKey = new WeakMap();\n/*\nconst key = new SigningKey(\"0x1234567890123456789012345678901234567890123456789012345678901234\");\nconsole.log(key);\nconsole.log(key.sign(\"0x1234567890123456789012345678901234567890123456789012345678901234\"));\n{\n const privKey = \"0x1234567812345678123456781234567812345678123456781234567812345678\";\n const signingKey = new SigningKey(privKey);\n console.log(\"0\", signingKey, signingKey.publicKey, signingKey.publicKeyCompressed);\n\n let pubKey = SigningKey.computePublicKey(privKey);\n let pubKeyComp = SigningKey.computePublicKey(privKey, true);\n let pubKeyRaw = \"0x\" + SigningKey.computePublicKey(privKey).substring(4);\n console.log(\"A\", pubKey, pubKeyComp);\n\n let a = SigningKey.computePublicKey(pubKey);\n let b = SigningKey.computePublicKey(pubKey, true);\n console.log(\"B\", a, b);\n\n a = SigningKey.computePublicKey(pubKeyComp);\n b = SigningKey.computePublicKey(pubKeyComp, true);\n console.log(\"C\", a, b);\n\n a = SigningKey.computePublicKey(pubKeyRaw);\n b = SigningKey.computePublicKey(pubKeyRaw, true);\n console.log(\"D\", a, b);\n\n const digest = \"0x1122334411223344112233441122334411223344112233441122334411223344\";\n const sig = signingKey.sign(digest);\n console.log(\"SS\", sig, sig.r, sig.s, sig.yParity);\n\n console.log(\"R\", SigningKey.recoverPublicKey(digest, sig));\n}\n*/\n//# sourceMappingURL=signing-key.js.map","import { getAddress } from \"@ethersproject/address\";\nimport { dataLength } from \"@ethersproject/bytes\";\nfunction accessSetify(addr, storageKeys) {\n return {\n address: getAddress(addr),\n storageKeys: (storageKeys || []).map((storageKey, index) => {\n if (dataLength(storageKey) !== 32) {\n //logger.throwArgumentError(\"invalid access list storageKey\", `accessList[${ addr }>\n throw new Error(\"\");\n }\n return storageKey.toLowerCase();\n })\n };\n}\nexport function accessListify(value) {\n if (Array.isArray(value)) {\n return value.map((set, index) => {\n if (Array.isArray(set)) {\n if (set.length > 2) {\n //logger.throwArgumentError(\"access list expected to be [ address, storageKeys[>\n throw new Error(\"\");\n }\n return accessSetify(set[0], set[1]);\n }\n return accessSetify(set.address, set.storageKeys);\n });\n }\n const result = Object.keys(value).map((addr) => {\n const storageKeys = value[addr].reduce((accum, storageKey) => {\n accum[storageKey] = true;\n return accum;\n }, {});\n return accessSetify(addr, Object.keys(storageKeys).sort());\n });\n result.sort((a, b) => (a.address.localeCompare(b.address)));\n return result;\n}\n//# sourceMappingURL=accesslist.js.map","export const version = \"@ethersproject/transactions@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Transaction_props;\nimport { getAddress } from \"@ethersproject/address\";\nimport { arrayify, concat, hexlify } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { toArray } from \"@ethersproject/math\";\nimport { getStore, setStore } from \"@ethersproject/properties\";\nimport { encodeRlp } from \"@ethersproject/rlp\";\nimport { Signature } from \"@ethersproject/signing-key\";\nimport { accessListify } from \"./accesslist.js\";\nimport { logger } from \"./logger.js\";\nconst BN_0 = BigInt(0);\nfunction formatNumber(_value, name) {\n const value = logger.getBigInt(_value, \"value\");\n const result = toArray(value);\n if (result.length > 32) {\n logger.throwArgumentError(`value too large`, `tx.${name}`, value);\n }\n return result;\n}\nfunction formatAccessList(value) {\n return accessListify(value).map((set) => [set.address, set.storageKeys]);\n}\nfunction _parseLegacy(data) {\n return {};\n}\nfunction _serializeLegacy(tx, sig) {\n const fields = [\n formatNumber(tx.nonce || 0, \"nonce\"),\n formatNumber(tx.gasPrice || 0, \"gasPrice\"),\n formatNumber(tx.gasLimit || 0, \"gasLimit\"),\n ((tx.to != null) ? getAddress(tx.to) : \"0x\"),\n formatNumber(tx.value || 0, \"value\"),\n (tx.data || \"0x\"),\n ];\n let chainId = BN_0;\n if (tx.chainId != null) {\n // A chainId was provided; if non-zero we'll use EIP-155\n chainId = logger.getBigInt(tx.chainId, \"tx.chainId\");\n // We have a chainId in the tx and an EIP-155 v in the signature,\n // make sure they agree with each other\n if (sig && sig.networkV != null && sig.legacyChainId !== chainId) {\n logger.throwArgumentError(\"tx.chainId/sig.v mismatch\", \"sig\", sig);\n }\n }\n else if (sig) {\n // No chainId provided, but the signature is signing with EIP-155; derive chainId\n const legacy = sig.legacyChainId;\n if (legacy != null) {\n chainId = legacy;\n }\n }\n // Requesting an unsigned transaction\n if (!sig) {\n // We have an EIP-155 transaction (chainId was specified and non-zero)\n if (chainId !== BN_0) {\n fields.push(toArray(chainId));\n fields.push(\"0x\");\n fields.push(\"0x\");\n }\n return encodeRlp(fields);\n }\n // We pushed a chainId and null r, s on for hashing only; remove those\n let v = BigInt(27 + sig.yParity);\n if (chainId !== BN_0) {\n v = Signature.getChainIdV(chainId, sig.v);\n }\n else if (BigInt(sig.v) !== v) {\n logger.throwArgumentError(\"tx.chainId/sig.v mismatch\", \"sig\", sig);\n }\n fields.push(toArray(v));\n fields.push(toArray(sig.r));\n fields.push(toArray(sig.s));\n return encodeRlp(fields);\n}\nfunction _parseEip1559(data) {\n throw new Error(\"@TODO\");\n}\nfunction _serializeEip1559(tx, sig) {\n // If there is an explicit gasPrice, make sure it matches the\n // EIP-1559 fees; otherwise they may not understand what they\n // think they are setting in terms of fee.\n //if (tx.gasPrice != null) {\n // if (tx.gasPrice !== (tx.maxFeePerGas || BN_0)) {\n // logger.throwArgumentError(\"mismatch EIP-1559 gasPrice != maxFeePerGas\", \"tx\", tx);\n // }\n //}\n const fields = [\n formatNumber(tx.chainId || 0, \"chainId\"),\n formatNumber(tx.nonce || 0, \"nonce\"),\n formatNumber(tx.maxPriorityFeePerGas || 0, \"maxPriorityFeePerGas\"),\n formatNumber(tx.maxFeePerGas || 0, \"maxFeePerGas\"),\n formatNumber(tx.gasLimit || 0, \"gasLimit\"),\n ((tx.to != null) ? getAddress(tx.to) : \"0x\"),\n formatNumber(tx.value || 0, \"value\"),\n (tx.data || \"0x\"),\n (formatAccessList(tx.accessList || []))\n ];\n if (sig) {\n fields.push(formatNumber(sig.yParity, \"yParity\"));\n fields.push(toArray(sig.r));\n fields.push(toArray(sig.s));\n }\n return concat([\"0x02\", encodeRlp(fields)]);\n}\nfunction _parseEip2930(data) {\n throw new Error(\"@TODO\");\n}\nfunction _serializeEip2930(tx, sig) {\n const fields = [\n formatNumber(tx.chainId || 0, \"chainId\"),\n formatNumber(tx.nonce || 0, \"nonce\"),\n formatNumber(tx.gasPrice || 0, \"gasPrice\"),\n formatNumber(tx.gasLimit || 0, \"gasLimit\"),\n ((tx.to != null) ? getAddress(tx.to) : \"0x\"),\n formatNumber(tx.value || 0, \"value\"),\n (tx.data || \"0x\"),\n (formatAccessList(tx.accessList || []))\n ];\n if (sig) {\n fields.push(formatNumber(sig.yParity, \"recoveryParam\"));\n fields.push(toArray(sig.r));\n fields.push(toArray(sig.s));\n }\n return concat([\"0x01\", encodeRlp(fields)]);\n}\nexport class Transaction {\n constructor() {\n _Transaction_props.set(this, void 0);\n __classPrivateFieldSet(this, _Transaction_props, {\n type: null,\n to: null,\n nonce: 0,\n gasLimit: BigInt(0),\n gasPrice: null,\n maxPriorityFeePerGas: null,\n maxFeePerGas: null,\n data: \"0x\",\n value: BigInt(0),\n chainId: BigInt(0),\n sig: null,\n accessList: null\n }, \"f\");\n }\n // A type of null indicates the type will be populated automatically\n get type() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"type\"); }\n get typeName() {\n switch (this.type) {\n case 0: return \"legacy\";\n case 1: return \"eip-2930\";\n case 2: return \"eip-1559\";\n }\n return null;\n }\n set type(value) {\n switch (value) {\n case null:\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"type\", null);\n break;\n case 0:\n case \"legacy\":\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"type\", 0);\n break;\n case 1:\n case \"berlin\":\n case \"eip-2930\":\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"type\", 1);\n break;\n case 2:\n case \"london\":\n case \"eip-1559\":\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"type\", 2);\n break;\n default:\n throw new Error(`unsupported transaction type`);\n }\n }\n /*\n detectType(): number {\n const hasFee = (this.maxFeePerGas != null) || (this.maxPriorityFeePerGas != null);\n const hasAccessList = (this.accessList != null);\n const hasLegacy = (this.gasPrice != null);\n\n if (hasLegacy) {\n if (hasFee) {\n throw new Error(\"cannot mix legacy and london properties\");\n }\n if (hasAccessList) { return 1; }\n return 0;\n }\n\n return 2;\n }\n */\n get to() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"to\"); }\n set to(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"to\", (value == null) ? null : getAddress(value));\n }\n get nonce() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"nonce\"); }\n set nonce(value) { setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"nonce\", logger.getNumber(value, \"value\")); }\n get gasLimit() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"gasLimit\"); }\n set gasLimit(value) { setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"gasLimit\", logger.getBigInt(value)); }\n get gasPrice() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"gasPrice\"); }\n set gasPrice(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"gasPrice\", (value == null) ? null : logger.getBigInt(value));\n }\n get maxPriorityFeePerGas() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"maxPriorityFeePerGas\"); }\n set maxPriorityFeePerGas(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"maxPriorityFeePerGas\", (value == null) ? null : logger.getBigInt(value));\n }\n get maxFeePerGas() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"maxFeePerGas\"); }\n set maxFeePerGas(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"maxFeePerGas\", (value == null) ? null : logger.getBigInt(value));\n }\n get data() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"data\"); }\n set data(value) { setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"data\", hexlify(value)); }\n get value() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"value\"); }\n set value(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"value\", logger.getBigInt(value));\n }\n get chainId() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"chainId\"); }\n set chainId(value) { setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"chainId\", logger.getBigInt(value)); }\n get signature() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"sig\") || null; }\n set signature(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"sig\", (value == null) ? null : Signature.from(value));\n }\n get accessList() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"accessList\") || null; }\n set accessList(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"accessList\", (value == null) ? null : accessListify(value));\n }\n get hash() {\n if (this.signature == null) {\n throw new Error(\"cannot hash unsigned transaction; maybe you meant .unsignedHash\");\n }\n return keccak256(this.serialized);\n }\n get unsignedHash() {\n return keccak256(this.unsignedSerialized);\n }\n get from() {\n if (this.signature == null) {\n return null;\n }\n // use ecomputeAddress(this.fromPublicKey);\n return \"\";\n }\n get fromPublicKey() {\n if (this.signature == null) {\n return null;\n }\n // use ecrecover\n return \"\";\n }\n isSigned() {\n return this.signature != null;\n }\n get serialized() {\n if (this.signature == null) {\n throw new Error(\"cannot serialize unsigned transaction; maybe you meant .unsignedSerialized\");\n }\n const types = this.inferTypes();\n if (types.length !== 1) {\n throw new Error(\"cannot determine transaction type; specify type manually\");\n }\n switch (types[0]) {\n case 0:\n return _serializeLegacy(this, this.signature);\n case 1:\n return _serializeEip2930(this, this.signature);\n case 2:\n return _serializeEip1559(this, this.signature);\n }\n throw new Error(\"unsupported type\");\n }\n get unsignedSerialized() {\n if (this.signature != null) {\n throw new Error(\"cannot serialize unsigned transaction; maybe you meant .unsignedSerialized\");\n }\n const types = this.inferTypes();\n if (types.length !== 1) {\n throw new Error(\"cannot determine transaction type; specify type manually\");\n }\n switch (types[0]) {\n case 0:\n return _serializeLegacy(this);\n case 1:\n return _serializeEip2930(this);\n case 2:\n return _serializeEip1559(this);\n }\n throw new Error(\"unsupported type\");\n }\n // Validates properties and lists possible types this transaction adheres to\n inferTypes() {\n // Checks that there are no conflicting properties set\n const hasGasPrice = this.gasPrice != null;\n const hasFee = (this.maxFeePerGas != null || this.maxPriorityFeePerGas != null);\n const hasAccessList = (this.accessList != null);\n //if (hasGasPrice && hasFee) {\n // throw new Error(\"transaction cannot have gasPrice and maxFeePerGas\");\n //}\n if (!!this.maxFeePerGas && !!this.maxPriorityFeePerGas) {\n if (this.maxFeePerGas < this.maxPriorityFeePerGas) {\n throw new Error(\"priorityFee cannot be more than maxFee\");\n }\n }\n //if (this.type === 2 && hasGasPrice) {\n // throw new Error(\"eip-1559 transaction cannot have gasPrice\");\n //}\n if ((this.type === 0 || this.type === 1) && hasFee) {\n throw new Error(\"transaction type cannot have maxFeePerGas or maxPriorityFeePerGas\");\n }\n if (this.type === 0 && hasAccessList) {\n throw new Error(\"legacy transaction cannot have accessList\");\n }\n const types = [];\n // Explicit type\n if (this.type != null) {\n types.push(this.type);\n }\n else {\n if (hasFee) {\n types.push(2);\n }\n else if (hasGasPrice) {\n types.push(1);\n if (!hasAccessList) {\n types.push(0);\n }\n }\n else if (hasAccessList) {\n types.push(1);\n types.push(2);\n }\n else {\n types.push(0);\n types.push(1);\n types.push(2);\n }\n }\n types.sort();\n return types;\n }\n clone() {\n return Transaction.from(this);\n }\n freeze() {\n if (__classPrivateFieldGet(this, _Transaction_props, \"f\").sig) {\n __classPrivateFieldGet(this, _Transaction_props, \"f\").sig = (__classPrivateFieldGet(this, _Transaction_props, \"f\").sig.clone().freeze());\n }\n if (__classPrivateFieldGet(this, _Transaction_props, \"f\").accessList) {\n __classPrivateFieldGet(this, _Transaction_props, \"f\").accessList = Object.freeze(__classPrivateFieldGet(this, _Transaction_props, \"f\").accessList.map((set) => {\n Object.freeze(set.storageKeys);\n return Object.freeze(set);\n }));\n }\n Object.freeze(__classPrivateFieldGet(this, _Transaction_props, \"f\"));\n return this;\n }\n isFrozen() {\n return Object.isFrozen(__classPrivateFieldGet(this, _Transaction_props, \"f\"));\n }\n static from(tx) {\n if (typeof (tx) === \"string\") {\n const payload = arrayify(tx);\n if (payload[0] >= 0x7f) { // @TODO: > vs >= ??\n return Transaction.from(_parseLegacy(payload));\n }\n switch (payload[0]) {\n case 1: return Transaction.from(_parseEip2930(payload.slice(1)));\n case 2: return Transaction.from(_parseEip1559(payload.slice(1)));\n }\n throw new Error(\"unsupported transaction type\");\n }\n const result = new Transaction();\n if (tx.type != null) {\n result.type = tx.type;\n }\n if (tx.to != null) {\n result.to = tx.to;\n }\n if (tx.nonce != null) {\n result.nonce = tx.nonce;\n }\n if (tx.gasLimit != null) {\n result.gasLimit = tx.gasLimit;\n }\n if (tx.gasPrice != null) {\n result.gasPrice = tx.gasPrice;\n }\n if (tx.maxPriorityFeePerGas != null) {\n result.maxPriorityFeePerGas = tx.maxPriorityFeePerGas;\n }\n if (tx.maxFeePerGas != null) {\n result.maxFeePerGas = tx.maxFeePerGas;\n }\n if (tx.data != null) {\n result.data = tx.data;\n }\n if (tx.value != null) {\n result.value = tx.value;\n }\n if (tx.chainId != null) {\n result.chainId = tx.chainId;\n }\n if (tx.signature != null) {\n result.signature = Signature.from(tx.signature);\n }\n if (tx.accessList != null) {\n result.accessList = tx.accessList;\n }\n // Should these be checked?? Should from be allowed if there is no signature?\n // from?: null | A;\n // hash?: null | string;\n return result;\n }\n}\n_Transaction_props = new WeakMap();\n//# sourceMappingURL=transaction.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Block_transactions, _TransactionReceipt_logs;\n//import { resolveAddress } from \"@ethersproject/address\";\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { accessListify } from \"@ethersproject/transactions\";\nimport { logger } from \"./logger.js\";\n// -----------------------\nfunction getValue(value) {\n if (value == null) {\n return null;\n }\n return value;\n}\nfunction toJson(value) {\n if (value == null) {\n return null;\n }\n return value.toString();\n}\n// @TODO? implements Required\nexport class FeeData {\n constructor(gasPrice, maxFeePerGas, maxPriorityFeePerGas) {\n defineProperties(this, {\n gasPrice: getValue(gasPrice),\n maxFeePerGas: getValue(maxFeePerGas),\n maxPriorityFeePerGas: getValue(maxPriorityFeePerGas)\n });\n }\n toJSON() {\n const { gasPrice, maxFeePerGas, maxPriorityFeePerGas } = this;\n return {\n _type: \"FeeData\",\n gasPrice: toJson(gasPrice),\n maxFeePerGas: toJson(maxFeePerGas),\n maxPriorityFeePerGas: toJson(maxPriorityFeePerGas),\n };\n }\n}\n;\nexport function copyRequest(req) {\n const result = {};\n // These could be addresses, ENS names or Addressables\n if (req.to) {\n result.to = req.to;\n }\n if (req.from) {\n result.from = req.from;\n }\n if (req.data) {\n result.data = hexlify(req.data);\n }\n const bigIntKeys = \"chainId,gasLimit,gasPrice,maxFeePerGas, maxPriorityFeePerGas,value\".split(/,/);\n for (const key in bigIntKeys) {\n if (!(key in req) || req[key] == null) {\n continue;\n }\n result[key] = logger.getBigInt(req[key], `request.${key}`);\n }\n const numberKeys = \"type,nonce\".split(/,/);\n for (const key in numberKeys) {\n if (!(key in req) || req[key] == null) {\n continue;\n }\n result[key] = logger.getNumber(req[key], `request.${key}`);\n }\n if (req.accessList) {\n result.accessList = accessListify(req.accessList);\n }\n if (\"blockTag\" in req) {\n result.blockTag = req.blockTag;\n }\n if (\"enableCcipRead\" in req) {\n result.enableCcipReadEnabled = !!req.enableCcipRead;\n }\n if (\"customData\" in req) {\n result.customData = req.customData;\n }\n return result;\n}\n;\nexport class Block {\n constructor(block, provider) {\n _Block_transactions.set(this, void 0);\n if (provider == null) {\n provider = dummyProvider;\n }\n __classPrivateFieldSet(this, _Block_transactions, Object.freeze(block.transactions.map((tx) => {\n if (typeof (tx) !== \"string\" && tx.provider !== provider) {\n throw new Error(\"provider mismatch\");\n }\n return tx;\n })), \"f\");\n ;\n defineProperties(this, {\n provider,\n hash: getValue(block.hash),\n number: block.number,\n timestamp: block.timestamp,\n parentHash: block.parentHash,\n nonce: block.nonce,\n difficulty: block.difficulty,\n gasLimit: block.gasLimit,\n gasUsed: block.gasUsed,\n miner: block.miner,\n extraData: block.extraData,\n baseFeePerGas: getValue(block.baseFeePerGas)\n });\n }\n get transactions() { return __classPrivateFieldGet(this, _Block_transactions, \"f\"); }\n //connect(provider: Provider): Block {\n // return new Block(this, provider);\n //}\n toJSON() {\n const { baseFeePerGas, difficulty, extraData, gasLimit, gasUsed, hash, miner, nonce, number, parentHash, timestamp, transactions } = this;\n return {\n _type: \"Block\",\n baseFeePerGas: toJson(baseFeePerGas),\n difficulty: toJson(difficulty),\n extraData,\n gasLimit: toJson(gasLimit),\n gasUsed: toJson(gasUsed),\n hash, miner, nonce, number, parentHash, timestamp,\n transactions,\n };\n }\n [(_Block_transactions = new WeakMap(), Symbol.iterator)]() {\n let index = 0;\n return {\n next: () => {\n if (index < this.length) {\n return {\n value: this.transactions[index++], done: false\n };\n }\n return { value: undefined, done: true };\n }\n };\n }\n get length() { return this.transactions.length; }\n get date() {\n if (this.timestamp == null) {\n return null;\n }\n return new Date(this.timestamp * 1000);\n }\n async getTransaction(index) {\n const tx = this.transactions[index];\n if (tx == null) {\n throw new Error(\"no such tx\");\n }\n if (typeof (tx) === \"string\") {\n return (await this.provider.getTransaction(tx));\n }\n else {\n return tx;\n }\n }\n isMined() { return !!this.hash; }\n isLondon() { return !!this.baseFeePerGas; }\n orphanedEvent() {\n if (!this.isMined()) {\n throw new Error(\"\");\n }\n return createOrphanedBlockFilter(this);\n }\n}\nexport class Log {\n constructor(log, provider) {\n if (provider == null) {\n provider = dummyProvider;\n }\n this.provider = provider;\n const topics = Object.freeze(log.topics.slice());\n defineProperties(this, {\n transactionHash: log.transactionHash,\n blockHash: log.blockHash,\n blockNumber: log.blockNumber,\n removed: log.removed,\n address: log.address,\n data: log.data,\n topics,\n index: log.index,\n transactionIndex: log.transactionIndex,\n });\n }\n //connect(provider: Provider): Log {\n // return new Log(this, provider);\n //}\n toJSON() {\n const { address, blockHash, blockNumber, data, index, removed, topics, transactionHash, transactionIndex } = this;\n return {\n _type: \"log\",\n address, blockHash, blockNumber, data, index,\n removed, topics, transactionHash, transactionIndex\n };\n }\n async getBlock() {\n return (await this.provider.getBlock(this.blockHash));\n }\n async getTransaction() {\n return (await this.provider.getTransaction(this.transactionHash));\n }\n async getTransactionReceipt() {\n return (await this.provider.getTransactionReceipt(this.transactionHash));\n }\n removedEvent() {\n return createRemovedLogFilter(this);\n }\n}\nexport class TransactionReceipt {\n constructor(tx, provider) {\n _TransactionReceipt_logs.set(this, void 0);\n if (provider == null) {\n provider = dummyProvider;\n }\n __classPrivateFieldSet(this, _TransactionReceipt_logs, Object.freeze(tx.logs.map((log) => {\n if (provider !== log.provider) {\n //return log.connect(provider);\n throw new Error(\"provider mismatch\");\n }\n return log;\n })), \"f\");\n defineProperties(this, {\n provider,\n to: tx.to,\n from: tx.from,\n contractAddress: tx.contractAddress,\n hash: tx.hash,\n index: tx.index,\n blockHash: tx.blockHash,\n blockNumber: tx.blockNumber,\n logsBloom: tx.logsBloom,\n gasUsed: tx.gasUsed,\n cumulativeGasUsed: tx.cumulativeGasUsed,\n gasPrice: (tx.effectiveGasPrice || tx.gasPrice),\n byzantium: tx.byzantium,\n status: tx.status,\n root: tx.root\n });\n }\n get logs() { return __classPrivateFieldGet(this, _TransactionReceipt_logs, \"f\"); }\n //connect(provider: Provider): TransactionReceipt {\n // return new TransactionReceipt(this, provider);\n //}\n toJSON() {\n const { to, from, contractAddress, hash, index, blockHash, blockNumber, logsBloom, logs, byzantium, status, root } = this;\n return {\n _type: \"TransactionReceipt\",\n blockHash, blockNumber, byzantium, contractAddress,\n cumulativeGasUsed: toJson(this.cumulativeGasUsed),\n from,\n gasPrice: toJson(this.gasPrice),\n gasUsed: toJson(this.gasUsed),\n hash, index, logs, logsBloom, root, status, to\n };\n }\n get length() { return this.logs.length; }\n [(_TransactionReceipt_logs = new WeakMap(), Symbol.iterator)]() {\n let index = 0;\n return {\n next: () => {\n if (index < this.length) {\n return { value: this.logs[index++], done: false };\n }\n return { value: undefined, done: true };\n }\n };\n }\n get fee() {\n return this.gasUsed * this.gasPrice;\n }\n async getBlock() {\n const block = await this.provider.getBlock(this.blockHash);\n if (block == null) {\n throw new Error(\"TODO\");\n }\n return block;\n }\n async getTransaction() {\n const tx = await this.provider.getTransaction(this.hash);\n if (tx == null) {\n throw new Error(\"TODO\");\n }\n return tx;\n }\n async confirmations() {\n return (await this.provider.getBlockNumber()) - this.blockNumber + 1;\n }\n removedEvent() {\n return createRemovedTransactionFilter(this);\n }\n reorderedEvent(other) {\n if (other && !other.isMined()) {\n return logger.throwError(\"unmined 'other' transction cannot be orphaned\", \"UNSUPPORTED_OPERATION\", {\n operation: \"reorderedEvent(other)\"\n });\n }\n return createReorderedTransactionFilter(this, other);\n }\n}\n;\nexport class TransactionResponse {\n constructor(tx, provider) {\n if (provider == null) {\n provider = dummyProvider;\n }\n this.provider = provider;\n this.blockNumber = (tx.blockNumber != null) ? tx.blockNumber : null;\n this.blockHash = (tx.blockHash != null) ? tx.blockHash : null;\n this.hash = tx.hash;\n this.index = tx.index;\n this.type = tx.type;\n this.from = tx.from;\n this.to = tx.to || null;\n this.gasLimit = tx.gasLimit;\n this.nonce = tx.nonce;\n this.data = tx.data;\n this.value = tx.value;\n this.gasPrice = tx.gasPrice;\n this.maxPriorityFeePerGas = (tx.maxPriorityFeePerGas != null) ? tx.maxPriorityFeePerGas : null;\n this.maxFeePerGas = (tx.maxFeePerGas != null) ? tx.maxFeePerGas : null;\n this.chainId = tx.chainId;\n this.signature = tx.signature;\n this.accessList = (tx.accessList != null) ? tx.accessList : null;\n }\n //connect(provider: Provider): TransactionResponse {\n // return new TransactionResponse(this, provider);\n //}\n toJSON() {\n const { blockNumber, blockHash, index, hash, type, to, from, nonce, data, signature, accessList } = this;\n return {\n _type: \"TransactionReceipt\",\n accessList, blockNumber, blockHash,\n chainId: toJson(this.chainId),\n data, from,\n gasLimit: toJson(this.gasLimit),\n gasPrice: toJson(this.gasPrice),\n hash,\n maxFeePerGas: toJson(this.maxFeePerGas),\n maxPriorityFeePerGas: toJson(this.maxPriorityFeePerGas),\n nonce, signature, to, index, type,\n value: toJson(this.value),\n };\n }\n async getBlock() {\n let blockNumber = this.blockNumber;\n if (blockNumber == null) {\n const tx = await this.getTransaction();\n if (tx) {\n blockNumber = tx.blockNumber;\n }\n }\n if (blockNumber == null) {\n return null;\n }\n const block = this.provider.getBlock(blockNumber);\n if (block == null) {\n throw new Error(\"TODO\");\n }\n return block;\n }\n async getTransaction() {\n return this.provider.getTransaction(this.hash);\n }\n async wait(confirms) {\n return this.provider.waitForTransaction(this.hash, confirms);\n }\n isMined() {\n return (this.blockHash != null);\n }\n isLegacy() {\n return (this.type === 0);\n }\n isBerlin() {\n return (this.type === 1);\n }\n isLondon() {\n return (this.type === 2);\n }\n removedEvent() {\n if (!this.isMined()) {\n return logger.throwError(\"unmined transaction canot be orphaned\", \"UNSUPPORTED_OPERATION\", {\n operation: \"removeEvent()\"\n });\n }\n return createRemovedTransactionFilter(this);\n }\n reorderedEvent(other) {\n if (!this.isMined()) {\n return logger.throwError(\"unmined transaction canot be orphaned\", \"UNSUPPORTED_OPERATION\", {\n operation: \"removeEvent()\"\n });\n }\n if (other && !other.isMined()) {\n return logger.throwError(\"unmined 'other' transaction canot be orphaned\", \"UNSUPPORTED_OPERATION\", {\n operation: \"removeEvent()\"\n });\n }\n return createReorderedTransactionFilter(this, other);\n }\n}\nfunction createOrphanedBlockFilter(block) {\n return { orphan: \"drop-block\", hash: block.hash, number: block.number };\n}\nfunction createReorderedTransactionFilter(tx, other) {\n return { orphan: \"reorder-transaction\", tx, other };\n}\nfunction createRemovedTransactionFilter(tx) {\n return { orphan: \"drop-transaction\", tx };\n}\nfunction createRemovedLogFilter(log) {\n return { orphan: \"drop-log\", log: {\n transactionHash: log.transactionHash,\n blockHash: log.blockHash,\n blockNumber: log.blockNumber,\n address: log.address,\n data: log.data,\n topics: Object.freeze(log.topics.slice()),\n index: log.index\n } };\n}\nfunction fail() {\n throw new Error(\"this provider should not be used\");\n}\nclass DummyProvider {\n async getNetwork() { return fail(); }\n async getFeeData() { return fail(); }\n async estimateGas(tx) { return fail(); }\n async call(tx) { return fail(); }\n async resolveName(name) { return fail(); }\n // State\n async getBlockNumber() { return fail(); }\n // Account\n async getBalanceOf(address, blockTag) {\n return fail();\n }\n async getTransactionCountOf(address, blockTag) {\n return fail();\n }\n async getCode(address, blockTag) {\n return fail();\n }\n async getStorageAt(address, position, blockTag) {\n return fail();\n }\n // Write\n async broadcastTransaction(signedTx) { return fail(); }\n // Queries\n async getBlock(blockHashOrBlockTag) {\n return fail();\n }\n async getBlockWithTransactions(blockHashOrBlockTag) {\n return fail();\n }\n async getTransaction(hash) {\n return fail();\n }\n async getTransactionReceipt(hash) {\n return fail();\n }\n // Bloom-filter Queries\n async getLogs(filter) {\n return fail();\n }\n // ENS\n async lookupAddress(address) {\n return fail();\n }\n async waitForTransaction(hash, confirms, timeout) {\n return fail();\n }\n async waitForBlock(blockTag) {\n return fail();\n }\n // EventEmitterable\n async on(event, listener) { return fail(); }\n async once(event, listener) { return fail(); }\n async emit(event, ...args) { return fail(); }\n async listenerCount(event) { return fail(); }\n async listeners(event) { return fail(); }\n async off(event, listener) { return fail(); }\n async removeAllListeners(event) { return fail(); }\n async addListener(event, listener) { return fail(); }\n async removeListener(event, listener) { return fail(); }\n}\n// A singleton provider instance that can be used as a placeholder. This\n// allows API that have a Provider added later to not require a null check.\nexport const dummyProvider = new DummyProvider();\n//# sourceMappingURL=provider.js.map","// Belongs to Networks; requires abstract-provider\n// provider requires abstract-provider and network\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Formatter_format, _Formatter_baseBlock;\n/**\n * Formatter\n *\n * This is responsibile for converting much of the various\n * loose network values into a concrete ethers-ready value.\n *\n * For example, converting addresses to checksum addresses,\n * validating a hash is 32 bytes, and so on.\n *\n * By sub-classing this class and providing it in a custom\n * Network object this allows exotic (non-Ethereum) networks\n * to be fairly simple to adapt to ethers.\n */\nimport { getAddress, getCreateAddress } from \"@ethersproject/address\";\nimport { dataLength, dataSlice, isHexString, quantity } from \"@ethersproject/bytes\";\nimport { toHex } from \"@ethersproject/math\";\nimport { Signature } from \"@ethersproject/signing-key\";\nimport { accessListify } from \"@ethersproject/transactions\";\nimport { Block, Log, TransactionReceipt, TransactionResponse } from \"./provider.js\";\nimport { logger } from \"./logger.js\";\nconst BN_MAX_UINT256 = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\n//export type AccessListSet = { address: string, storageKeys: Array };\n//export type AccessList = Array;\n//export type AccessListish = AccessList |\n// Array<[ string, Array ]> |\n// Record>;\nfunction stringify(value) {\n if (typeof (value) !== \"string\") {\n throw new Error(\"invalid string\");\n }\n return value;\n}\nexport class Formatter {\n constructor() {\n _Formatter_format.set(this, void 0);\n _Formatter_baseBlock.set(this, void 0);\n const address = this.address.bind(this);\n const bigNumber = this.bigNumber.bind(this);\n const blockTag = this.blockTag.bind(this);\n const data = this.data.bind(this);\n const hash = this.hash.bind(this);\n const number = this.number.bind(this);\n const uint256 = this.uint256.bind(this);\n const topics = this.arrayOf(hash);\n __classPrivateFieldSet(this, _Formatter_format, {\n address,\n bigNumber,\n blockTag,\n data,\n hash,\n number,\n uint256,\n topics,\n filter: this.object({\n fromBlock: this.allowNull(blockTag, undefined),\n toBlock: this.allowNull(blockTag, undefined),\n blockHash: this.allowNull(hash, undefined),\n address: this.allowNull(address, undefined),\n topics: this.allowNull(topics, undefined)\n }),\n transactionRequest: this.object({\n from: this.allowNull(address),\n type: this.allowNull(number),\n to: this.allowNull(address),\n nonce: this.allowNull(number),\n gasLimit: this.allowNull(uint256),\n gasPrice: this.allowNull(uint256),\n maxFeePerGas: this.allowNull(uint256),\n maxPriorityFeePerGas: this.allowNull(uint256),\n data: this.allowNull(data),\n value: this.allowNull(uint256),\n }),\n transactionResponse: this.object({\n hash: hash,\n index: number,\n type: this.allowNull(number, 0),\n // These can be null for pending blocks\n blockHash: this.allowNull(hash),\n blockNumber: this.allowNull(number),\n // For Legacy transactions, this comes from the v\n chainId: this.allowNull(number),\n from: address,\n to: this.address,\n gasLimit: bigNumber,\n gasPrice: this.allowNull(bigNumber),\n maxFeePerGas: this.allowNull(bigNumber),\n maxPriorityFeePerGas: this.allowNull(bigNumber),\n value: bigNumber,\n data: data,\n nonce: number,\n r: hash,\n s: hash,\n v: number,\n accessList: this.allowNull(this.accessList)\n }, {\n index: [\"transactionIndex\"]\n }),\n }, \"f\");\n __classPrivateFieldSet(this, _Formatter_baseBlock, this.object({\n number: number,\n hash: this.allowNull(hash, null),\n timestamp: number,\n parentHash: hash,\n nonce: this.allowNull(stringify, \"0x0000000000000000\"),\n difficulty: bigNumber,\n gasLimit: bigNumber,\n gasUsed: bigNumber,\n miner: this.allowNull(address, \"0x0000000000000000000000000000000000000000\"),\n extraData: stringify,\n baseFeePerGas: this.allowNull(bigNumber),\n }), \"f\");\n }\n // An address\n address(value) {\n return getAddress(value);\n }\n // An address from a call result; may be zero-padded\n callAddress(value) {\n if (dataLength(value) !== 32 || dataSlice(value, 0, 12) !== \"0x000000000000000000000000\") {\n logger.throwArgumentError(\"invalid call address\", \"value\", value);\n }\n return this.address(dataSlice(value, 12));\n }\n // An address from a transaction (e.g. { from: string, nonce: number })\n contractAddress(value) {\n return getCreateAddress({\n from: this.address(value.from),\n nonce: logger.getNumber(value.nonce, \"value.nonce\")\n });\n }\n // Block Tag\n blockTag(value) {\n if (value == null) {\n return \"latest\";\n }\n switch (value) {\n case \"earliest\":\n return \"0x0\";\n case \"latest\":\n case \"pending\":\n return value;\n }\n if (typeof (value) === \"number\" || (isHexString(value) && dataLength(value) < 32)) {\n return quantity(value);\n }\n return logger.throwArgumentError(\"invalid blockTag\", \"value\", value);\n }\n // Block objects\n block(value, provider) {\n const params = __classPrivateFieldGet(this, _Formatter_baseBlock, \"f\").call(this, value);\n params.transactions = value.transactions.map((t) => this.hash(t));\n return new Block(params, provider);\n }\n blockWithTransactions(value, provider) {\n throw new Error();\n }\n // Transactions\n transactionRequest(value, provider) {\n return __classPrivateFieldGet(this, _Formatter_format, \"f\").transactionRequest(value);\n }\n transactionResponse(value, provider) {\n value = Object.assign({}, value);\n // @TODO: Use the remap feature\n if (value.data == null && value.input != null) {\n value.data = value.input;\n }\n if (value.gasLimit == null && value.gas) {\n value.gasLimit = value.gas;\n }\n value = __classPrivateFieldGet(this, _Formatter_format, \"f\").transactionResponse(value);\n const sig = Signature.fromTransaction(value.r, value.s, value.v);\n value.signature = sig;\n if (value.chainId == null) {\n value.chainId = sig.legacyChainId;\n }\n return new TransactionResponse(value, provider);\n }\n // Receipts\n log(value, provider) {\n const log = this.object({\n address: this.address,\n blockHash: this.hash,\n blockNumber: this.number,\n data: this.data,\n index: this.number,\n removed: this.boolean,\n topics: this.topics,\n transactionHash: this.hash,\n transactionIndex: this.number,\n }, {\n index: [\"logIndex\"]\n })(value);\n return new Log(log, provider);\n }\n receipt(value, provider) {\n const receipt = this.object({\n blockHash: this.hash,\n blockNumber: this.number,\n contractAddress: this.allowNull(this.address),\n cumulativeGasUsed: this.bigNumber,\n from: this.address,\n gasUsed: this.bigNumber,\n logs: this.arrayOf((v) => (this.log(v, provider))),\n logsBloom: this.data,\n root: this.allowNull(this.data),\n status: this.allowNull(this.number),\n to: this.address,\n gasPrice: this.allowNull(this.bigNumber),\n hash: this.hash,\n index: this.number,\n type: this.allowNull(this.number, 0),\n }, {\n hash: [\"transactionHash\"],\n gasPrice: [\"effectiveGasPrice\"],\n index: [\"transactionIndex\"]\n })(value);\n // RSK incorrectly implemented EIP-658, so we munge things a bit here for it\n if (receipt.root != null) {\n if (receipt.root.length <= 4) {\n // Could be 0x00, 0x0, 0x01 or 0x1\n const value = parseInt(receipt.root);\n if (value === 0 || value === 1) {\n // Make sure if both are specified, they match\n if (receipt.status != null && receipt.status !== value) {\n return logger.throwError(\"alt-root-status/status mismatch\", \"BAD_DATA\", {\n value: { root: receipt.root, status: receipt.status }\n });\n }\n receipt.status = value;\n delete receipt.root;\n }\n else {\n return logger.throwError(\"invalid alt-root-status\", \"BAD_DATA\", {\n value: receipt.root\n });\n }\n }\n else if (!isHexString(receipt.root, 32)) {\n // Must be a valid bytes32\n return logger.throwError(\"invalid receipt root hash\", \"BAD_DATA\", {\n value: receipt.root\n });\n }\n }\n //receipt.byzantium = (receipt.root == null);\n return new TransactionReceipt(receipt, provider);\n }\n // Fitlers\n topics(value) {\n return __classPrivateFieldGet(this, _Formatter_format, \"f\").topics(value);\n }\n filter(value) {\n return __classPrivateFieldGet(this, _Formatter_format, \"f\").filter(value);\n }\n filterLog(value) {\n console.log(\"ME\", value);\n return null;\n }\n // Converts a serialized transaction to a TransactionResponse\n transaction(value) {\n throw new Error();\n }\n // Useful utility formatters functions, which if need be use the\n // methods within the formatter to ensure internal compatibility\n // Access List; converts an AccessListish to an AccessList\n accessList(value) {\n return accessListify(value);\n }\n // Converts falsish values to a specific value, otherwise use the formatter. Calls preserve `this`.\n allowFalsish(format, ifFalse) {\n return ((value) => {\n if (!value) {\n return ifFalse;\n }\n return format.call(this, value);\n });\n }\n // Allows null, optionally replacing it with a default value. Calls preserve `this`.\n allowNull(format, ifNull) {\n return ((value) => {\n if (value == null) {\n return ifNull;\n }\n return format.call(this, value);\n });\n }\n // Requires an Array satisfying the formatter. Calls preserves `this`.\n arrayOf(format) {\n return ((array) => {\n if (!Array.isArray(array)) {\n throw new Error(\"not an array\");\n }\n return array.map((i) => format.call(this, i));\n });\n }\n // Requires a value which is a value BigNumber\n bigNumber(value) {\n return logger.getBigInt(value, \"value\");\n }\n uint256(value) {\n const result = this.bigNumber(value);\n if (result < 0 || result > BN_MAX_UINT256) {\n logger.throwArgumentError(\"invalid uint256\", \"value\", value);\n }\n return result;\n }\n // Requires a value which is a value boolean or string equivalent\n boolean(value) {\n switch (value) {\n case true:\n case \"true\":\n return true;\n case false:\n case \"false\":\n return false;\n }\n return logger.throwArgumentError(`invalid boolean; ${JSON.stringify(value)}`, \"value\", value);\n }\n // Requires a value which is a valid hexstring. If dataOrLength is true,\n // the length must be even (i.e. a datahexstring) or if it is a number,\n // specifies teh number of bytes value must represent\n _hexstring(dataOrLength) {\n if (dataOrLength == null) {\n dataOrLength = false;\n }\n return (function (value) {\n if (isHexString(value, dataOrLength)) {\n return value.toLowerCase();\n }\n throw new Error(\"bad hexstring\");\n });\n }\n data(value) {\n if (dataLength(value) == null) {\n logger.throwArgumentError(\"\", \"value\", value);\n }\n return value;\n }\n // Requires a network-native hash\n hash(value) {\n if (dataLength(value) !== 32) {\n logger.throwArgumentError(\"\", \"value\", value);\n }\n return __classPrivateFieldGet(this, _Formatter_format, \"f\").data(value);\n }\n // Requires a valid number, within the IEEE 754 safe range\n number(value) {\n return logger.getNumber(value);\n }\n // Requires an object which matches a fleet of other formatters\n // Any FormatFunc may return `undefined` to have the value omitted\n // from the result object. Calls preserve `this`.\n object(format, altNames) {\n return ((value) => {\n const result = {};\n for (const key in format) {\n let srcKey = key;\n if (altNames && key in altNames && !(srcKey in value)) {\n for (const altKey of altNames[key]) {\n if (altKey in value) {\n srcKey = altKey;\n break;\n }\n }\n }\n try {\n const nv = format[key].call(this, value[srcKey]);\n if (nv !== undefined) {\n result[key] = nv;\n }\n }\n catch (error) {\n const message = (error instanceof Error) ? error.message : \"not-an-error\";\n logger.throwError(`invalid value for value.${key} (${message})`, \"BAD_DATA\", { value });\n }\n }\n return result;\n });\n }\n // Requires a value which matches a network-native storage slot\n storageSlot(value) {\n return toHex(logger.getBigInt(value), 32);\n }\n}\n_Formatter_format = new WeakMap(), _Formatter_baseBlock = new WeakMap();\n//# sourceMappingURL=formatter.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { logger } from \"./logger.js\";\nconst EnsAddress = \"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\";\nexport class NetworkPlugin {\n constructor(name) {\n defineProperties(this, { name });\n }\n clone() {\n return new NetworkPlugin(this.name);\n }\n validate(network) {\n return this;\n }\n}\nexport class GasCostPlugin extends NetworkPlugin {\n constructor(effectiveBlock = 0, costs) {\n super(`org.ethers.plugins.gas-cost#${(effectiveBlock || 0)}`);\n const props = { effectiveBlock };\n function set(name, nullish) {\n let value = (costs || {})[name];\n if (value == null) {\n value = nullish;\n }\n if (typeof (value) !== \"number\") {\n logger.throwArgumentError(`invalud value for ${name}`, \"costs\", costs);\n }\n props[name] = value;\n }\n set(\"txBase\", 21000);\n set(\"txCreate\", 32000);\n set(\"txDataZero\", 4);\n set(\"txDataNonzero\", 16);\n set(\"txAccessListStorageKey\", 1900);\n set(\"txAccessListAddress\", 2400);\n defineProperties(this, props);\n }\n clone() {\n return new GasCostPlugin(this.effectiveBlock, this);\n }\n}\n// Networks shoudl use this plugin to specify the contract address\n// and network necessary to resolve ENS names.\nexport class EnsPlugin extends NetworkPlugin {\n constructor(address, targetNetwork) {\n super(\"org.ethers.plugins.ens\");\n defineProperties(this, {\n address: (address || EnsAddress),\n targetNetwork: ((targetNetwork == null) ? 1 : targetNetwork)\n });\n }\n clone() {\n return new EnsPlugin(this.address, this.targetNetwork);\n }\n validate(network) {\n network.formatter.address(this.address);\n return this;\n }\n}\nexport class MaxPriorityFeePlugin extends NetworkPlugin {\n constructor(priorityFee) {\n super(\"org.ethers.plugins.max-priority-fee\");\n defineProperties(this, {\n priorityFee: logger.getBigInt(priorityFee)\n });\n }\n async getPriorityFee(provider) {\n return this.priorityFee;\n }\n clone() {\n return new MaxPriorityFeePlugin(this.priorityFee);\n }\n}\n//# sourceMappingURL=plugins-network.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Network_props;\nimport { getStore, setStore } from \"@ethersproject/properties\";\nimport { Formatter } from \"./formatter.js\";\nimport { logger } from \"./logger.js\";\nimport { EnsPlugin, GasCostPlugin } from \"./plugins-network.js\";\n/* * * *\n// Networks which operation against an L2 can use this plugin to\n// specify how to access L1, for the purpose of resolving ENS,\n// for example.\nexport class LayerOneConnectionPlugin extends NetworkPlugin {\n readonly provider!: Provider;\n// @TODO: Rename to ChainAccess and allow for connecting to any chain\n constructor(provider: Provider) {\n super(\"org.ethers.plugins.layer-one-connection\");\n defineProperties(this, { provider });\n }\n\n clone(): LayerOneConnectionPlugin {\n return new LayerOneConnectionPlugin(this.provider);\n }\n}\n*/\n/* * * *\nexport class PriceOraclePlugin extends NetworkPlugin {\n readonly address!: string;\n\n constructor(address: string) {\n super(\"org.ethers.plugins.price-oracle\");\n defineProperties(this, { address });\n }\n\n clone(): PriceOraclePlugin {\n return new PriceOraclePlugin(this.address);\n }\n}\n*/\n// Networks or clients with a higher need for security (such as clients\n// that may automatically make CCIP requests without user interaction)\n// can use this plugin to anonymize requests or intercept CCIP requests\n// to notify and/or receive authorization from the user\n/* * * *\nexport type FetchDataFunc = (req: Frozen) => Promise;\nexport class CcipPreflightPlugin extends NetworkPlugin {\n readonly fetchData!: FetchDataFunc;\n\n constructor(fetchData: FetchDataFunc) {\n super(\"org.ethers.plugins.ccip-preflight\");\n defineProperties(this, { fetchData });\n }\n\n clone(): CcipPreflightPlugin {\n return new CcipPreflightPlugin(this.fetchData);\n }\n}\n*/\nconst Networks = new Map();\nconst defaultFormatter = new Formatter();\nexport class Network {\n constructor(name, _chainId, formatter) {\n _Network_props.set(this, void 0);\n const chainId = logger.getBigInt(_chainId);\n if (formatter == null) {\n formatter = defaultFormatter;\n }\n const plugins = new Map();\n __classPrivateFieldSet(this, _Network_props, { name, chainId, formatter, plugins }, \"f\");\n }\n toJSON() {\n return { name: this.name, chainId: this.chainId };\n }\n get name() { return getStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"name\"); }\n set name(value) { setStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"name\", value); }\n get chainId() { return getStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"chainId\"); }\n set chainId(value) { setStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"chainId\", logger.getBigInt(value, \"chainId\")); }\n get formatter() { return getStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"formatter\"); }\n set formatter(value) { setStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"formatter\", value); }\n get plugins() {\n return Array.from(__classPrivateFieldGet(this, _Network_props, \"f\").plugins.values());\n }\n attachPlugin(plugin) {\n if (this.isFrozen()) {\n throw new Error(\"frozen\");\n }\n if (__classPrivateFieldGet(this, _Network_props, \"f\").plugins.get(plugin.name)) {\n throw new Error(`cannot replace existing plugin: ${plugin.name} `);\n }\n __classPrivateFieldGet(this, _Network_props, \"f\").plugins.set(plugin.name, plugin.validate(this));\n return this;\n }\n getPlugin(name) {\n return (__classPrivateFieldGet(this, _Network_props, \"f\").plugins.get(name)) || null;\n }\n // Gets a list of Plugins which match basename, ignoring any fragment\n getPlugins(basename) {\n return (this.plugins.filter((p) => (p.name.split(\"#\")[0] === basename)));\n }\n clone() {\n const clone = new Network(this.name, this.chainId, this.formatter);\n this.plugins.forEach((plugin) => {\n clone.attachPlugin(plugin.clone());\n });\n return clone;\n }\n freeze() {\n Object.freeze(__classPrivateFieldGet(this, _Network_props, \"f\"));\n return this;\n }\n isFrozen() {\n return Object.isFrozen(__classPrivateFieldGet(this, _Network_props, \"f\"));\n }\n computeIntrinsicGas(tx) {\n const costs = this.getPlugin(\"org.ethers.gas-cost\") || (new GasCostPlugin());\n let gas = costs.txBase;\n if (tx.to == null) {\n gas += costs.txCreate;\n }\n if (tx.data) {\n for (let i = 2; i < tx.data.length; i += 2) {\n if (tx.data.substring(i, i + 2) === \"00\") {\n gas += costs.txDataZero;\n }\n else {\n gas += costs.txDataNonzero;\n }\n }\n }\n if (tx.accessList) {\n const accessList = this.formatter.accessList(tx.accessList);\n for (const addr in accessList) {\n gas += costs.txAccessListAddress + costs.txAccessListStorageKey * accessList[addr].storageKeys.length;\n }\n }\n return gas;\n }\n static from(network) {\n // Default network\n if (network == null) {\n return Network.from(\"homestead\");\n }\n // Canonical name or chain ID\n if (typeof (network) === \"number\") {\n network = BigInt(network);\n }\n if (typeof (network) === \"string\" || typeof (network) === \"bigint\") {\n const networkFunc = Networks.get(network);\n if (networkFunc) {\n return networkFunc();\n }\n if (typeof (network) === \"bigint\") {\n return new Network(\"unknown\", network);\n }\n logger.throwArgumentError(\"unknown network\", \"network\", network);\n }\n // Clonable with network-like abilities\n if (typeof (network.clone) === \"function\") {\n const clone = network.clone();\n //if (typeof(network.name) !== \"string\" || typeof(network.chainId) !== \"number\") {\n //}\n return clone;\n }\n // Networkish\n if (typeof (network) === \"object\") {\n if (typeof (network.name) !== \"string\" || typeof (network.chainId) !== \"number\") {\n logger.throwArgumentError(\"invalid network object name or chainId\", \"network\", network);\n }\n const custom = new Network((network.name), (network.chainId));\n if (network.ensAddress || network.ensNetwork != null) {\n custom.attachPlugin(new EnsPlugin(network.ensAddress, network.ensNetwork));\n }\n //if ((network).layerOneConnection) {\n // custom.attachPlugin(new LayerOneConnectionPlugin((network).layerOneConnection));\n //}\n return custom;\n }\n return logger.throwArgumentError(\"invalid network\", \"network\", network);\n }\n static register(nameOrChainId, networkFunc) {\n if (typeof (nameOrChainId) === \"number\") {\n nameOrChainId = BigInt(nameOrChainId);\n }\n const existing = Networks.get(nameOrChainId);\n if (existing) {\n logger.throwArgumentError(`conflicting network for ${JSON.stringify(existing.name)}`, \"nameOrChainId\", nameOrChainId);\n }\n Networks.set(nameOrChainId, networkFunc);\n }\n}\n_Network_props = new WeakMap();\n//# sourceMappingURL=network.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _PollingBlockSubscriber_instances, _PollingBlockSubscriber_provider, _PollingBlockSubscriber_poller, _PollingBlockSubscriber_interval, _PollingBlockSubscriber_blockNumber, _PollingBlockSubscriber_poll, _OnBlockSubscriber_provider, _OnBlockSubscriber_poll, _PollingOrphanSubscriber_filter, _PollingTransactionSubscriber_hash, _PollingEventSubscriber_instances, _PollingEventSubscriber_provider, _PollingEventSubscriber_filter, _PollingEventSubscriber_poller, _PollingEventSubscriber_blockNumber, _PollingEventSubscriber_poll;\nimport { isHexString } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nfunction copy(obj) {\n return JSON.parse(JSON.stringify(obj));\n}\nexport function getPollingSubscriber(provider, event) {\n if (event === \"block\") {\n return new PollingBlockSubscriber(provider);\n }\n if (isHexString(event, 32)) {\n return new PollingTransactionSubscriber(provider, event);\n }\n return logger.throwError(\"unsupported polling event\", \"UNSUPPORTED_OPERATION\", {\n operation: \"getPollingSubscriber\", info: { event }\n });\n}\n// @TODO: refactor this\nexport class PollingBlockSubscriber {\n constructor(provider) {\n _PollingBlockSubscriber_instances.add(this);\n _PollingBlockSubscriber_provider.set(this, void 0);\n _PollingBlockSubscriber_poller.set(this, void 0);\n _PollingBlockSubscriber_interval.set(this, void 0);\n // The most recent block we have scanned for events. The value -2\n // indicates we still need to fetch an initial block number\n _PollingBlockSubscriber_blockNumber.set(this, void 0);\n __classPrivateFieldSet(this, _PollingBlockSubscriber_provider, provider, \"f\");\n __classPrivateFieldSet(this, _PollingBlockSubscriber_poller, null, \"f\");\n __classPrivateFieldSet(this, _PollingBlockSubscriber_interval, 4000, \"f\");\n __classPrivateFieldSet(this, _PollingBlockSubscriber_blockNumber, -2, \"f\");\n }\n get pollingInterval() { return __classPrivateFieldGet(this, _PollingBlockSubscriber_interval, \"f\"); }\n set pollingInterval(value) { __classPrivateFieldSet(this, _PollingBlockSubscriber_interval, value, \"f\"); }\n start() {\n if (__classPrivateFieldGet(this, _PollingBlockSubscriber_poller, \"f\")) {\n throw new Error(\"subscriber already running\");\n }\n __classPrivateFieldGet(this, _PollingBlockSubscriber_instances, \"m\", _PollingBlockSubscriber_poll).call(this);\n __classPrivateFieldSet(this, _PollingBlockSubscriber_poller, setTimeout(__classPrivateFieldGet(this, _PollingBlockSubscriber_instances, \"m\", _PollingBlockSubscriber_poll).bind(this), __classPrivateFieldGet(this, _PollingBlockSubscriber_interval, \"f\")), \"f\");\n }\n stop() {\n if (!__classPrivateFieldGet(this, _PollingBlockSubscriber_poller, \"f\")) {\n throw new Error(\"subscriber not running\");\n }\n clearTimeout(__classPrivateFieldGet(this, _PollingBlockSubscriber_poller, \"f\"));\n __classPrivateFieldSet(this, _PollingBlockSubscriber_poller, null, \"f\");\n }\n pause(dropWhilePaused) {\n this.stop();\n if (dropWhilePaused) {\n __classPrivateFieldSet(this, _PollingBlockSubscriber_blockNumber, -2, \"f\");\n }\n }\n resume() {\n this.start();\n }\n}\n_PollingBlockSubscriber_provider = new WeakMap(), _PollingBlockSubscriber_poller = new WeakMap(), _PollingBlockSubscriber_interval = new WeakMap(), _PollingBlockSubscriber_blockNumber = new WeakMap(), _PollingBlockSubscriber_instances = new WeakSet(), _PollingBlockSubscriber_poll = async function _PollingBlockSubscriber_poll() {\n const blockNumber = await __classPrivateFieldGet(this, _PollingBlockSubscriber_provider, \"f\").getBlockNumber();\n if (__classPrivateFieldGet(this, _PollingBlockSubscriber_blockNumber, \"f\") === -2) {\n __classPrivateFieldSet(this, _PollingBlockSubscriber_blockNumber, blockNumber, \"f\");\n return;\n }\n // @TODO: Put a cap on the maximum number of events per loop?\n if (blockNumber !== __classPrivateFieldGet(this, _PollingBlockSubscriber_blockNumber, \"f\")) {\n for (let b = __classPrivateFieldGet(this, _PollingBlockSubscriber_blockNumber, \"f\") + 1; b <= blockNumber; b++) {\n __classPrivateFieldGet(this, _PollingBlockSubscriber_provider, \"f\").emit(\"block\", b);\n }\n __classPrivateFieldSet(this, _PollingBlockSubscriber_blockNumber, blockNumber, \"f\");\n }\n __classPrivateFieldSet(this, _PollingBlockSubscriber_poller, setTimeout(__classPrivateFieldGet(this, _PollingBlockSubscriber_instances, \"m\", _PollingBlockSubscriber_poll).bind(this), __classPrivateFieldGet(this, _PollingBlockSubscriber_interval, \"f\")), \"f\");\n};\nexport class OnBlockSubscriber {\n constructor(provider) {\n _OnBlockSubscriber_provider.set(this, void 0);\n _OnBlockSubscriber_poll.set(this, void 0);\n __classPrivateFieldSet(this, _OnBlockSubscriber_provider, provider, \"f\");\n __classPrivateFieldSet(this, _OnBlockSubscriber_poll, (blockNumber) => {\n this._poll(blockNumber, __classPrivateFieldGet(this, _OnBlockSubscriber_provider, \"f\"));\n }, \"f\");\n }\n async _poll(blockNumber, provider) {\n throw new Error(\"sub-classes must override this\");\n }\n start() {\n __classPrivateFieldGet(this, _OnBlockSubscriber_poll, \"f\").call(this, -2);\n __classPrivateFieldGet(this, _OnBlockSubscriber_provider, \"f\").on(\"block\", __classPrivateFieldGet(this, _OnBlockSubscriber_poll, \"f\"));\n }\n stop() {\n __classPrivateFieldGet(this, _OnBlockSubscriber_provider, \"f\").off(\"block\", __classPrivateFieldGet(this, _OnBlockSubscriber_poll, \"f\"));\n }\n pause(dropWhilePaused) { this.stop(); }\n resume() { this.start(); }\n}\n_OnBlockSubscriber_provider = new WeakMap(), _OnBlockSubscriber_poll = new WeakMap();\nexport class PollingOrphanSubscriber extends OnBlockSubscriber {\n constructor(provider, filter) {\n super(provider);\n _PollingOrphanSubscriber_filter.set(this, void 0);\n __classPrivateFieldSet(this, _PollingOrphanSubscriber_filter, copy(filter), \"f\");\n }\n async _poll(blockNumber, provider) {\n console.log(__classPrivateFieldGet(this, _PollingOrphanSubscriber_filter, \"f\"));\n throw new Error(\"@TODO\");\n }\n}\n_PollingOrphanSubscriber_filter = new WeakMap();\nexport class PollingTransactionSubscriber extends OnBlockSubscriber {\n constructor(provider, hash) {\n super(provider);\n _PollingTransactionSubscriber_hash.set(this, void 0);\n __classPrivateFieldSet(this, _PollingTransactionSubscriber_hash, hash, \"f\");\n }\n async _poll(blockNumber, provider) {\n const tx = await provider.getTransactionReceipt(__classPrivateFieldGet(this, _PollingTransactionSubscriber_hash, \"f\"));\n if (tx) {\n provider.emit(__classPrivateFieldGet(this, _PollingTransactionSubscriber_hash, \"f\"), tx);\n }\n }\n}\n_PollingTransactionSubscriber_hash = new WeakMap();\nexport class PollingEventSubscriber {\n constructor(provider, filter) {\n _PollingEventSubscriber_instances.add(this);\n _PollingEventSubscriber_provider.set(this, void 0);\n _PollingEventSubscriber_filter.set(this, void 0);\n _PollingEventSubscriber_poller.set(this, void 0);\n // The most recent block we have scanned for events. The value -2\n // indicates we still need to fetch an initial block number\n _PollingEventSubscriber_blockNumber.set(this, void 0);\n __classPrivateFieldSet(this, _PollingEventSubscriber_provider, provider, \"f\");\n __classPrivateFieldSet(this, _PollingEventSubscriber_filter, copy(filter), \"f\");\n __classPrivateFieldSet(this, _PollingEventSubscriber_poller, __classPrivateFieldGet(this, _PollingEventSubscriber_instances, \"m\", _PollingEventSubscriber_poll).bind(this), \"f\");\n __classPrivateFieldSet(this, _PollingEventSubscriber_blockNumber, -2, \"f\");\n }\n start() {\n if (__classPrivateFieldGet(this, _PollingEventSubscriber_blockNumber, \"f\") === -2) {\n __classPrivateFieldGet(this, _PollingEventSubscriber_provider, \"f\").getBlockNumber().then((blockNumber) => {\n __classPrivateFieldSet(this, _PollingEventSubscriber_blockNumber, blockNumber, \"f\");\n });\n }\n __classPrivateFieldGet(this, _PollingEventSubscriber_provider, \"f\").on(\"block\", __classPrivateFieldGet(this, _PollingEventSubscriber_poller, \"f\"));\n }\n stop() {\n __classPrivateFieldGet(this, _PollingEventSubscriber_provider, \"f\").off(\"block\", __classPrivateFieldGet(this, _PollingEventSubscriber_poller, \"f\"));\n }\n pause(dropWhilePaused) {\n this.stop();\n if (dropWhilePaused) {\n __classPrivateFieldSet(this, _PollingEventSubscriber_blockNumber, -2, \"f\");\n }\n }\n resume() {\n this.start();\n }\n}\n_PollingEventSubscriber_provider = new WeakMap(), _PollingEventSubscriber_filter = new WeakMap(), _PollingEventSubscriber_poller = new WeakMap(), _PollingEventSubscriber_blockNumber = new WeakMap(), _PollingEventSubscriber_instances = new WeakSet(), _PollingEventSubscriber_poll = async function _PollingEventSubscriber_poll(blockNumber) {\n // The initial block hasn't been determined yet\n if (__classPrivateFieldGet(this, _PollingEventSubscriber_blockNumber, \"f\") === -2) {\n return;\n }\n const filter = copy(__classPrivateFieldGet(this, _PollingEventSubscriber_filter, \"f\"));\n filter.fromBlock = __classPrivateFieldGet(this, _PollingEventSubscriber_blockNumber, \"f\") + 1;\n filter.toBlock = blockNumber;\n __classPrivateFieldSet(this, _PollingEventSubscriber_blockNumber, blockNumber, \"f\");\n const logs = await __classPrivateFieldGet(this, _PollingEventSubscriber_provider, \"f\").getLogs(filter);\n for (const log of logs) {\n __classPrivateFieldGet(this, _PollingEventSubscriber_provider, \"f\").emit(__classPrivateFieldGet(this, _PollingEventSubscriber_filter, \"f\"), log);\n }\n};\n//# sourceMappingURL=subscriber-polling.js.map","// @TODO\n// Event coalescence\n// When we register an event with an async value (e.g. address is a Signer\n// or ENS name), we need to add it immeidately for the Event API, but also\n// need time to resolve the address. Upon resolving the address, we need to\n// migrate the listener to the static event. We also need to maintain a map\n// of Signer/ENS name to address so we can sync respond to listenerCount.\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _AbstractProvider_instances, _AbstractProvider_subs, _AbstractProvider_plugins, _AbstractProvider_pausedState, _AbstractProvider_networkPromise, _AbstractProvider_anyNetwork, _AbstractProvider_performCache, _AbstractProvider_nextTimer, _AbstractProvider_timers, _AbstractProvider_disableCcipRead, _AbstractProvider_perform, _AbstractProvider_call, _AbstractProvider_getBlock, _AbstractProvider_hasSub, _AbstractProvider_getSub;\nimport { resolveAddress } from \"@ethersproject/address\";\nimport { concat, dataLength, dataSlice, hexlify, isHexString } from \"@ethersproject/bytes\";\nimport { isCallException } from \"@ethersproject/logger\";\nimport { toArray } from \"@ethersproject/math\";\nimport { defineProperties, EventPayload, resolveProperties } from \"@ethersproject/properties\";\nimport { toUtf8String } from \"@ethersproject/strings\";\nimport { fetchData, FetchRequest } from \"@ethersproject/web\";\nimport { EnsResolver } from \"./ens-resolver.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { FeeData } from \"./provider.js\";\nimport { PollingBlockSubscriber, PollingEventSubscriber, PollingOrphanSubscriber, PollingTransactionSubscriber } from \"./subscriber-polling.js\";\n// Constants\nconst BN_2 = BigInt(2);\nconst MAX_CCIP_REDIRECTS = 10;\nfunction getTag(prefix, value) {\n return prefix + \":\" + JSON.stringify(value, (k, v) => {\n if (typeof (v) === \"bigint\") {\n return `bigint:${v.toString()}`;\n }\n if (typeof (v) === \"string\") {\n return v.toLowerCase();\n }\n // Sort object keys\n if (typeof (v) === \"object\" && !Array.isArray(v)) {\n const keys = Object.keys(v);\n keys.sort();\n return keys.reduce((accum, key) => {\n accum[key] = v[key];\n return accum;\n }, {});\n }\n return v;\n });\n}\nexport class UnmanagedSubscriber {\n constructor(name) { defineProperties(this, { name }); }\n start() { }\n stop() { }\n pause(dropWhilePaused) { }\n resume() { }\n}\nfunction copy(value) {\n return JSON.parse(JSON.stringify(value));\n}\nfunction concisify(items) {\n items = Array.from((new Set(items)).values());\n items.sort();\n return items;\n}\n// Normalize a ProviderEvent into a Subscription\n// @TODO: Make events sync if possible; like block\n//function getSyncSubscription(_event: ProviderEvent): Subscription {\n//}\nasync function getSubscription(_event, provider) {\n if (_event == null) {\n throw new Error(\"invalid event\");\n }\n // Normalize topic array info an EventFilter\n if (Array.isArray(_event)) {\n _event = { topics: _event };\n }\n if (typeof (_event) === \"string\") {\n switch (_event) {\n case \"block\":\n case \"pending\":\n case \"debug\":\n case \"network\": {\n return { type: _event, tag: _event };\n }\n }\n }\n if (isHexString(_event, 32)) {\n const hash = _event.toLowerCase();\n return { type: \"transaction\", tag: getTag(\"tx\", { hash }), hash };\n }\n if (_event.orphan) {\n const event = _event;\n // @TODO: Should lowercase and whatnot things here instead of copy...\n return { type: \"orphan\", tag: getTag(\"orphan\", event), filter: copy(event) };\n }\n if ((_event.address || _event.topics)) {\n const event = _event;\n const filter = {\n topics: ((event.topics || []).map((t) => {\n if (t == null) {\n return null;\n }\n if (Array.isArray(t)) {\n return concisify(t.map((t) => t.toLowerCase()));\n }\n return t.toLowerCase();\n }))\n };\n if (event.address) {\n const addresses = [];\n const promises = [];\n const addAddress = (addr) => {\n if (isHexString(addr)) {\n addresses.push(addr);\n }\n else {\n promises.push((async () => {\n addresses.push(await resolveAddress(addr, provider));\n })());\n }\n };\n if (Array.isArray(event.address)) {\n event.address.forEach(addAddress);\n }\n else {\n addAddress(event.address);\n }\n if (promises.length) {\n await Promise.all(promises);\n }\n filter.address = concisify(addresses.map((a) => a.toLowerCase()));\n }\n return { filter, tag: getTag(\"event\", filter), type: \"event\" };\n }\n return logger.throwArgumentError(\"unknown ProviderEvent\", \"event\", _event);\n}\nfunction getTime() { return (new Date()).getTime(); }\nexport function copyRequest(tx) {\n // @TODO: copy the copy from contracts and use it from this\n return tx;\n}\nexport class AbstractProvider {\n // @TODO: This should be a () => Promise so network can be\n // done when needed; or rely entirely on _detectNetwork?\n constructor(_network) {\n _AbstractProvider_instances.add(this);\n _AbstractProvider_subs.set(this, void 0);\n _AbstractProvider_plugins.set(this, void 0);\n // null=unpaused, true=paused+dropWhilePaused, false=paused\n _AbstractProvider_pausedState.set(this, void 0);\n _AbstractProvider_networkPromise.set(this, void 0);\n _AbstractProvider_anyNetwork.set(this, void 0);\n _AbstractProvider_performCache.set(this, void 0);\n _AbstractProvider_nextTimer.set(this, void 0);\n _AbstractProvider_timers.set(this, void 0);\n _AbstractProvider_disableCcipRead.set(this, void 0);\n if (_network === \"any\") {\n __classPrivateFieldSet(this, _AbstractProvider_anyNetwork, true, \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, null, \"f\");\n }\n else if (_network) {\n const network = Network.from(_network);\n __classPrivateFieldSet(this, _AbstractProvider_anyNetwork, false, \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, Promise.resolve(network), \"f\");\n setTimeout(() => { this.emit(\"network\", network, null); }, 0);\n }\n else {\n __classPrivateFieldSet(this, _AbstractProvider_anyNetwork, false, \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, null, \"f\");\n }\n //this.#approxNumber = -2;\n //this.#approxNumberT0 = 0;\n __classPrivateFieldSet(this, _AbstractProvider_performCache, new Map(), \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_subs, new Map(), \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_plugins, new Map(), \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_pausedState, null, \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_nextTimer, 0, \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_timers, new Map(), \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_disableCcipRead, false, \"f\");\n }\n get plugins() {\n return Array.from(__classPrivateFieldGet(this, _AbstractProvider_plugins, \"f\").values());\n }\n attachPlugin(plugin) {\n if (__classPrivateFieldGet(this, _AbstractProvider_plugins, \"f\").get(plugin.name)) {\n throw new Error(`cannot replace existing plugin: ${plugin.name} `);\n }\n __classPrivateFieldGet(this, _AbstractProvider_plugins, \"f\").set(plugin.name, plugin.validate(this));\n return this;\n }\n getPlugin(name) {\n return (__classPrivateFieldGet(this, _AbstractProvider_plugins, \"f\").get(name)) || null;\n }\n set disableCcipRead(value) { __classPrivateFieldSet(this, _AbstractProvider_disableCcipRead, !!value, \"f\"); }\n get disableCcipRead() { return __classPrivateFieldGet(this, _AbstractProvider_disableCcipRead, \"f\"); }\n async ccipReadFetch(tx, calldata, urls) {\n if (this.disableCcipRead || urls.length === 0 || tx.to == null) {\n return null;\n }\n const sender = tx.to.toLowerCase();\n const data = calldata.toLowerCase();\n const errorMessages = [];\n for (let i = 0; i < urls.length; i++) {\n const url = urls[i];\n // URL expansion\n const href = url.replace(\"{sender}\", sender).replace(\"{data}\", data);\n // If no {data} is present, use POST; otherwise GET\n //const json: string | null = (url.indexOf(\"{data}\") >= 0) ? null: JSON.stringify({ data, sender });\n //const result = await fetchJson({ url: href, errorPassThrough: true }, json, (value, response) => {\n // value.status = response.statusCode;\n // return value;\n //});\n const request = new FetchRequest(href);\n if (url.indexOf(\"{data}\") === -1) {\n request.body = { data, sender };\n }\n let errorMessage = \"unknown error\";\n const resp = await fetchData(request);\n try {\n const result = resp.bodyJson;\n if (result.data) {\n return result.data;\n }\n if (result.message) {\n errorMessage = result.message;\n }\n }\n catch (error) { }\n // 4xx indicates the result is not present; stop\n if (resp.statusCode >= 400 && resp.statusCode < 500) {\n return logger.throwError(`response not found during CCIP fetch: ${errorMessage}`, \"OFFCHAIN_FAULT\", {\n reason: \"404_MISSING_RESOURCE\",\n transaction: tx, info: { url, errorMessage }\n });\n }\n // 5xx indicates server issue; try the next url\n errorMessages.push(errorMessage);\n }\n return logger.throwError(`error encountered during CCIP fetch: ${errorMessages.map((m) => JSON.stringify(m)).join(\", \")}`, \"OFFCHAIN_FAULT\", {\n reason: \"500_SERVER_ERROR\",\n transaction: tx, info: { urls, errorMessages }\n });\n }\n _wrapTransaction(tx, hash, blockNumber) {\n return tx;\n }\n _detectNetwork() {\n return logger.throwError(\"sub-classes must implement this\", \"UNSUPPORTED_OPERATION\", {\n operation: \"_detectNetwork\"\n });\n }\n async _perform(req) {\n return logger.throwError(`unsupported method: ${req.method}`, \"UNSUPPORTED_OPERATION\", {\n operation: req.method,\n info: req\n });\n }\n // State\n async getBlockNumber() {\n return logger.getNumber(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getBlockNumber\" }), \"%response\");\n }\n async _getAddress(address) {\n if (typeof (address) === \"string\") {\n return address;\n }\n return await address.getAddress();\n }\n async _getBlockTag(blockTag) {\n const network = await this.getNetwork();\n if (typeof (blockTag) === \"number\" && Number.isSafeInteger(blockTag) && blockTag < 0) {\n //let blockNumber = await this._getApproxBlockNumber(500);\n let blockNumber = await this.getBlockNumber();\n blockNumber += blockTag;\n if (blockNumber < 0) {\n blockNumber = 0;\n }\n return network.formatter.blockTag(blockNumber);\n }\n return network.formatter.blockTag(blockTag);\n }\n async getNetwork() {\n // No explicit network was set and this is our first time\n if (__classPrivateFieldGet(this, _AbstractProvider_networkPromise, \"f\") == null) {\n // Detect the current network (shared with all calls)\n const detectNetwork = this._detectNetwork().then((network) => {\n this.emit(\"network\", network, null);\n return network;\n }, (error) => {\n // Reset the networkPromise on failure, so we will try again\n if (__classPrivateFieldGet(this, _AbstractProvider_networkPromise, \"f\") === detectNetwork) {\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, null, \"f\");\n }\n throw error;\n });\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, detectNetwork, \"f\");\n return await detectNetwork;\n }\n const networkPromise = __classPrivateFieldGet(this, _AbstractProvider_networkPromise, \"f\");\n const [expected, actual] = await Promise.all([\n networkPromise,\n this._detectNetwork() // The actual connected network\n ]);\n if (expected.chainId !== actual.chainId) {\n if (__classPrivateFieldGet(this, _AbstractProvider_anyNetwork, \"f\")) {\n // The \"any\" network can change, so notify listeners\n this.emit(\"network\", actual, expected);\n // Update the network if something else hasn't already changed it\n if (__classPrivateFieldGet(this, _AbstractProvider_networkPromise, \"f\") === networkPromise) {\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, Promise.resolve(actual), \"f\");\n }\n }\n else {\n // Otherwise, we do not allow changes to the underlying network\n logger.throwError(`network changed: ${expected.chainId} => ${actual.chainId} `, \"NETWORK_ERROR\", {\n event: \"changed\"\n });\n }\n }\n return expected.clone().freeze();\n }\n async getFeeData() {\n const { block, gasPrice } = await resolveProperties({\n block: this.getBlock(\"latest\"),\n gasPrice: ((async () => {\n try {\n const gasPrice = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getGasPrice\" });\n return logger.getBigInt(gasPrice, \"%response\");\n }\n catch (error) { }\n return null;\n })())\n });\n let maxFeePerGas = null, maxPriorityFeePerGas = null;\n if (block && block.baseFeePerGas) {\n // We may want to compute this more accurately in the future,\n // using the formula \"check if the base fee is correct\".\n // See: https://eips.ethereum.org/EIPS/eip-1559\n maxPriorityFeePerGas = BigInt(\"1500000000\");\n // Allow a network to override their maximum priority fee per gas\n const priorityFeePlugin = (await this.getNetwork()).getPlugin(\"org.ethers.plugins.max-priority-fee\");\n if (priorityFeePlugin) {\n maxPriorityFeePerGas = await priorityFeePlugin.getPriorityFee(this);\n }\n maxFeePerGas = (block.baseFeePerGas * BN_2) + maxPriorityFeePerGas;\n }\n return new FeeData(gasPrice, maxFeePerGas, maxPriorityFeePerGas);\n }\n async _getTransaction(_request) {\n const network = await this.getNetwork();\n // Fill in any addresses\n const request = Object.assign({}, _request, await resolveProperties({\n to: (_request.to ? resolveAddress(_request.to, this) : undefined),\n from: (_request.from ? resolveAddress(_request.from, this) : undefined),\n }));\n return network.formatter.transactionRequest(request);\n }\n async estimateGas(_tx) {\n const transaction = await this._getTransaction(_tx);\n return logger.getBigInt(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"estimateGas\", transaction\n }), \"%response\");\n }\n async call(_tx) {\n const { tx, blockTag } = await resolveProperties({\n tx: this._getTransaction(_tx),\n blockTag: this._getBlockTag(_tx.blockTag)\n });\n return __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_call).call(this, tx, blockTag, _tx.enableCcipRead ? 0 : -1);\n }\n // Account\n async getBalanceOf(_address, _blockTag) {\n const { address, blockTag } = await resolveProperties({\n address: resolveAddress(_address),\n blockTag: this._getBlockTag(_blockTag)\n });\n return logger.getBigInt(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getBalance\", address, blockTag\n }), \"%response\");\n }\n async getTransactionCountOf(_address, _blockTag) {\n const { address, blockTag } = await resolveProperties({\n address: resolveAddress(_address),\n blockTag: this._getBlockTag(_blockTag)\n });\n return logger.getNumber(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getTransactionCount\", address, blockTag\n }), \"%response\");\n }\n async getCode(_address, _blockTag) {\n const { address, blockTag } = await resolveProperties({\n address: resolveAddress(_address),\n blockTag: this._getBlockTag(_blockTag)\n });\n return hexlify(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getCode\", address, blockTag\n }));\n }\n async getStorageAt(_address, _position, _blockTag) {\n const position = logger.getBigInt(_position);\n const { address, blockTag } = await resolveProperties({\n address: resolveAddress(_address),\n blockTag: this._getBlockTag(_blockTag)\n });\n return hexlify(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getStorageAt\", address, position, blockTag\n }));\n }\n // Write\n async broadcastTransaction(signedTx) {\n throw new Error();\n return {};\n }\n // Queries\n async getBlock(block) {\n const format = (await this.getNetwork()).formatter;\n const params = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_getBlock).call(this, block, false);\n if (params == null) {\n return null;\n }\n return format.block(params, this);\n }\n async getBlockWithTransactions(block) {\n const format = (await this.getNetwork()).formatter;\n const params = __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_getBlock).call(this, block, true);\n if (params == null) {\n return null;\n }\n return format.blockWithTransactions(params, this);\n }\n async getTransaction(hash) {\n const format = (await this.getNetwork()).formatter;\n const params = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getTransaction\", hash });\n return format.transactionResponse(params, this);\n }\n async getTransactionReceipt(hash) {\n const format = (await this.getNetwork()).formatter;\n const receipt = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getTransactionReceipt\", hash });\n if (receipt == null) {\n return null;\n }\n // Some backends did not backfill the effectiveGasPrice into old transactions\n // in the receipt, so we look it up manually and inject it.\n if (receipt.gasPrice == null && receipt.effectiveGasPrice == null) {\n const tx = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getTransaction\", hash });\n receipt.effectiveGasPrice = tx.gasPrice;\n }\n return format.receipt(receipt, this);\n }\n async _getFilter(filter) {\n const lookup = {};\n if (filter.address) {\n if (Array.isArray(filter.address)) {\n lookup.address = Promise.all(filter.address.map((a) => resolveAddress(a, this)));\n }\n else {\n lookup.address = resolveAddress(filter.address, this);\n }\n }\n const addBlockTag = (key) => {\n if (filter[key] == null) {\n return;\n }\n lookup[key] = this._getBlockTag(filter[key]);\n };\n addBlockTag(\"fromBlock\");\n addBlockTag(\"toBlock\");\n const result = await resolveProperties(lookup);\n if (Array.isArray(result.address)) {\n result.address.sort();\n }\n if (filter.blockHash) {\n if (filter.fromBlock || filter.toBlock) {\n throw new Error(\"invalid filter\");\n }\n result.blockHash = filter.blockHash;\n }\n return result;\n }\n // Bloom-filter Queries\n async getLogs(_filter) {\n const { network, filter } = await resolveProperties({\n network: this.getNetwork(),\n filter: this._getFilter(_filter)\n });\n return (await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getLogs\", filter })).map((l) => {\n return network.formatter.log(l, this);\n });\n }\n // ENS\n _getProvider(chainId) {\n return logger.throwError(\"provider cannot connect to target network\", \"UNSUPPORTED_OPERATION\", {\n operation: \"_getProvider()\"\n });\n }\n async getResolver(name) {\n return await EnsResolver.fromName(this, name);\n }\n async getAvatar(name) {\n const resolver = await this.getResolver(name);\n if (resolver) {\n return await resolver.getAvatar();\n }\n return null;\n }\n async resolveName(name) {\n if (typeof (name) === \"string\") {\n const resolver = await this.getResolver(name);\n if (resolver) {\n return await resolver.getAddress();\n }\n }\n else {\n const address = await name.getAddress();\n if (address == null) {\n return logger.throwArgumentError(\"Addressable returned no address\", \"name\", name);\n }\n return address;\n }\n return null;\n }\n async lookupAddress(address) {\n throw new Error();\n //return \"TODO\";\n }\n async waitForTransaction(hash, confirms = 1, timeout) {\n if (confirms === 0) {\n return this.getTransactionReceipt(hash);\n }\n return new Promise(async (resolve, reject) => {\n let timer = null;\n const listener = (async (blockNumber) => {\n try {\n const receipt = await this.getTransactionReceipt(hash);\n if (receipt != null) {\n if (blockNumber - receipt.blockNumber + 1 >= confirms) {\n resolve(receipt);\n this.off(\"block\", listener);\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n return;\n }\n }\n }\n catch (error) {\n console.log(\"EEE\", error);\n }\n this.once(\"block\", listener);\n });\n if (timeout != null) {\n timer = setTimeout(() => {\n if (timer == null) {\n return;\n }\n timer = null;\n this.off(\"block\", listener);\n reject(logger.makeError(\"timeout\", \"TIMEOUT\", {}));\n }, timeout);\n }\n listener(await this.getBlockNumber());\n });\n }\n async waitForBlock(blockTag) {\n throw new Error();\n //return new Block({ }, this);\n }\n _clearTimeout(timerId) {\n const timer = __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").get(timerId);\n if (!timer) {\n return;\n }\n if (timer.timer) {\n clearTimeout(timer.timer);\n }\n __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").delete(timerId);\n }\n _setTimeout(_func, timeout = 0) {\n var _a, _b;\n const timerId = (__classPrivateFieldSet(this, _AbstractProvider_nextTimer, (_b = __classPrivateFieldGet(this, _AbstractProvider_nextTimer, \"f\"), _a = _b++, _b), \"f\"), _a);\n const func = () => {\n __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").delete(timerId);\n _func();\n };\n if (this.paused) {\n __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").set(timerId, { timer: null, func, time: timeout });\n }\n else {\n const timer = setTimeout(func, timeout);\n __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").set(timerId, { timer, func, time: getTime() });\n }\n return timerId;\n }\n _forEachSubscriber(func) {\n for (const sub of __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").values()) {\n func(sub.subscriber);\n }\n }\n // Event API; sub-classes should override this; any supported\n // event filter will have been munged into an EventFilter\n _getSubscriber(sub) {\n switch (sub.type) {\n case \"debug\":\n case \"network\":\n return new UnmanagedSubscriber(sub.type);\n case \"block\":\n return new PollingBlockSubscriber(this);\n case \"event\":\n return new PollingEventSubscriber(this, sub.filter);\n case \"transaction\":\n return new PollingTransactionSubscriber(this, sub.hash);\n case \"orphan\":\n return new PollingOrphanSubscriber(this, sub.filter);\n }\n throw new Error(`unsupported event: ${sub.type}`);\n }\n _recoverSubscriber(oldSub, newSub) {\n for (const sub of __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").values()) {\n if (sub.subscriber === oldSub) {\n if (sub.started) {\n sub.subscriber.stop();\n }\n sub.subscriber = newSub;\n if (sub.started) {\n newSub.start();\n }\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") != null) {\n newSub.pause(__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\"));\n }\n break;\n }\n }\n }\n async on(event, listener) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_getSub).call(this, event);\n sub.listeners.push({ listener, once: false });\n if (!sub.started) {\n sub.subscriber.start();\n sub.started = true;\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") != null) {\n sub.subscriber.pause(__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\"));\n }\n }\n return this;\n }\n async once(event, listener) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_getSub).call(this, event);\n sub.listeners.push({ listener, once: true });\n if (!sub.started) {\n sub.subscriber.start();\n sub.started = true;\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") != null) {\n sub.subscriber.pause(__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\"));\n }\n }\n return this;\n }\n async emit(event, ...args) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_hasSub).call(this, event, args);\n if (!sub) {\n return false;\n }\n ;\n const count = sub.listeners.length;\n sub.listeners = sub.listeners.filter(({ listener, once }) => {\n const payload = new EventPayload(this, (once ? null : listener), event);\n setTimeout(() => { listener.call(this, ...args, payload); }, 0);\n return !once;\n });\n return (count > 0);\n }\n async listenerCount(event) {\n if (event) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_hasSub).call(this, event);\n if (!sub) {\n return 0;\n }\n return sub.listeners.length;\n }\n let total = 0;\n for (const { listeners } of __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").values()) {\n total += listeners.length;\n }\n return total;\n }\n async listeners(event) {\n if (event) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_hasSub).call(this, event);\n if (!sub) {\n return [];\n }\n return sub.listeners.map(({ listener }) => listener);\n }\n let result = [];\n for (const { listeners } of __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").values()) {\n result = result.concat(listeners.map(({ listener }) => listener));\n }\n return result;\n }\n async off(event, listener) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_hasSub).call(this, event);\n if (!sub) {\n return this;\n }\n if (listener) {\n const index = sub.listeners.map(({ listener }) => listener).indexOf(listener);\n if (index >= 0) {\n sub.listeners.splice(index, 1);\n }\n }\n if (!listener || sub.listeners.length === 0) {\n if (sub.started) {\n sub.subscriber.stop();\n }\n __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").delete(sub.tag);\n }\n return this;\n }\n async removeAllListeners(event) {\n if (event) {\n const { tag, started, subscriber } = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_getSub).call(this, event);\n if (started) {\n subscriber.stop();\n }\n __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").delete(tag);\n }\n else {\n for (const [tag, { started, subscriber }] of __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\")) {\n if (started) {\n subscriber.stop();\n }\n __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").delete(tag);\n }\n }\n return this;\n }\n // Alias for \"on\"\n async addListener(event, listener) {\n return await this.on(event, listener);\n }\n // Alias for \"off\"\n async removeListener(event, listener) {\n return this.off(event, listener);\n }\n // Sub-classes should override this to shutdown any sockets, etc.\n // but MUST call this super.shutdown.\n async shutdown() {\n // Stop all listeners\n this.removeAllListeners();\n // Shut down all tiemrs\n for (const timerId of __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").keys()) {\n this._clearTimeout(timerId);\n }\n }\n get paused() { return (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") != null); }\n pause(dropWhilePaused) {\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") != null) {\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") == !!dropWhilePaused) {\n return;\n }\n return logger.throwError(\"cannot change pause type; resume first\", \"UNSUPPORTED_OPERATION\", {\n operation: \"pause\"\n });\n }\n this._forEachSubscriber((s) => s.pause(dropWhilePaused));\n __classPrivateFieldSet(this, _AbstractProvider_pausedState, !!dropWhilePaused, \"f\");\n for (const timer of __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").values()) {\n // Clear the timer\n if (timer.timer) {\n clearTimeout(timer.timer);\n }\n // Remaining time needed for when we become unpaused\n timer.time = getTime() - timer.time;\n }\n }\n resume() {\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") == null) {\n return;\n }\n this._forEachSubscriber((s) => s.resume());\n __classPrivateFieldSet(this, _AbstractProvider_pausedState, null, \"f\");\n for (const timer of __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").values()) {\n // Remaining time when we were paused\n let timeout = timer.time;\n if (timeout < 0) {\n timeout = 0;\n }\n // Start time (in cause paused, so we con compute remaininf time)\n timer.time = getTime();\n // Start the timer\n setTimeout(timer.func, timeout);\n }\n }\n}\n_AbstractProvider_subs = new WeakMap(), _AbstractProvider_plugins = new WeakMap(), _AbstractProvider_pausedState = new WeakMap(), _AbstractProvider_networkPromise = new WeakMap(), _AbstractProvider_anyNetwork = new WeakMap(), _AbstractProvider_performCache = new WeakMap(), _AbstractProvider_nextTimer = new WeakMap(), _AbstractProvider_timers = new WeakMap(), _AbstractProvider_disableCcipRead = new WeakMap(), _AbstractProvider_instances = new WeakSet(), _AbstractProvider_perform = \n// Shares multiple identical requests made during the same 250ms\nasync function _AbstractProvider_perform(req) {\n // Create a tag\n const tag = getTag(req.method, req);\n let perform = __classPrivateFieldGet(this, _AbstractProvider_performCache, \"f\").get(tag);\n if (!perform) {\n perform = this._perform(req);\n __classPrivateFieldGet(this, _AbstractProvider_performCache, \"f\").set(tag, perform);\n setTimeout(() => {\n if (__classPrivateFieldGet(this, _AbstractProvider_performCache, \"f\").get(tag) === perform) {\n __classPrivateFieldGet(this, _AbstractProvider_performCache, \"f\").delete(tag);\n }\n }, 250);\n }\n return await perform;\n}, _AbstractProvider_call = async function _AbstractProvider_call(tx, blockTag, attempt) {\n if (attempt >= MAX_CCIP_REDIRECTS) {\n logger.throwError(\"CCIP read exceeded maximum redirections\", \"OFFCHAIN_FAULT\", {\n reason: \"TOO_MANY_REDIRECTS\",\n transaction: Object.assign({}, tx, { blockTag, enableCcipRead: true })\n });\n }\n const transaction = copyRequest(tx);\n try {\n return hexlify(await this._perform({ method: \"call\", transaction, blockTag }));\n }\n catch (error) {\n // CCIP Read OffchainLookup\n if (!this.disableCcipRead && isCallException(error) && attempt >= 0 && blockTag === \"latest\" && transaction.to != null && dataSlice(error.data, 0, 4) === \"0x556f1830\") {\n const data = error.data;\n const txSender = await resolveAddress(transaction.to, this);\n // Parse the CCIP Read Arguments\n let ccipArgs;\n try {\n ccipArgs = parseOffchainLookup(dataSlice(error.data, 4));\n }\n catch (error) {\n return logger.throwError(error.message, \"OFFCHAIN_FAULT\", {\n reason: \"BAD_DATA\",\n transaction, info: { data }\n });\n }\n // Check the sender of the OffchainLookup matches the transaction\n if (ccipArgs.sender.toLowerCase() !== txSender.toLowerCase()) {\n return logger.throwError(\"CCIP Read sender mismatch\", \"CALL_EXCEPTION\", {\n data, transaction,\n errorSignature: \"OffchainLookup(address,string[],bytes,bytes4,bytes)\",\n errorName: \"OffchainLookup\",\n errorArgs: ccipArgs.errorArgs\n });\n }\n const ccipResult = await this.ccipReadFetch(transaction, ccipArgs.calldata, ccipArgs.urls);\n if (ccipResult == null) {\n return logger.throwError(\"CCIP Read failed to fetch data\", \"OFFCHAIN_FAULT\", {\n reason: \"FETCH_FAILED\",\n transaction, info: { data: error.data, errorArgs: ccipArgs.errorArgs }\n });\n }\n return __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_call).call(this, {\n to: txSender,\n data: concat([\n ccipArgs.selector, encodeBytes([ccipResult, ccipArgs.extraData])\n ]),\n }, blockTag, attempt + 1);\n }\n throw error;\n }\n}, _AbstractProvider_getBlock = async function _AbstractProvider_getBlock(block, includeTransactions) {\n const format = (await this.getNetwork()).formatter;\n if (isHexString(block, 32)) {\n return await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getBlock\", blockHash: block, includeTransactions\n });\n }\n return await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getBlock\", blockTag: format.blockTag(block), includeTransactions\n });\n}, _AbstractProvider_hasSub = async function _AbstractProvider_hasSub(event, emitArgs) {\n let sub = await getSubscription(event, this);\n // This is a log that is removing an existing log; we actually want\n // to emit an orphan event for the removed log\n if (sub.type === \"event\" && emitArgs && emitArgs.length > 0 && emitArgs[0].removed === true) {\n sub = await getSubscription({ orphan: \"drop-log\", log: emitArgs[0] }, this);\n }\n return __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").get(sub.tag) || null;\n}, _AbstractProvider_getSub = async function _AbstractProvider_getSub(event) {\n const subscription = await getSubscription(event, this);\n // Prevent tampering with our tag in any subclass' _getSubscriber\n const tag = subscription.tag;\n let sub = __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").get(tag);\n if (!sub) {\n const subscriber = this._getSubscriber(subscription);\n const addressableMap = new WeakMap();\n const nameMap = new Map();\n sub = { subscriber, tag, addressableMap, nameMap, started: false, listeners: [] };\n __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").set(tag, sub);\n }\n return sub;\n};\nfunction _parseString(result, start) {\n try {\n const bytes = _parseBytes(result, start);\n if (bytes) {\n return toUtf8String(bytes);\n }\n }\n catch (error) { }\n return null;\n}\nfunction _parseBytes(result, start) {\n if (result === \"0x\") {\n return null;\n }\n try {\n const offset = logger.getNumber(dataSlice(result, start, start + 32));\n const length = logger.getNumber(dataSlice(result, offset, offset + 32));\n return dataSlice(result, offset + 32, offset + 32 + length);\n }\n catch (error) { }\n return null;\n}\nfunction numPad(value) {\n const result = toArray(value);\n if (result.length > 32) {\n throw new Error(\"internal; should not happen\");\n }\n const padded = new Uint8Array(32);\n padded.set(result, 32 - result.length);\n return padded;\n}\nfunction bytesPad(value) {\n if ((value.length % 32) === 0) {\n return value;\n }\n const result = new Uint8Array(Math.ceil(value.length / 32) * 32);\n result.set(value);\n return result;\n}\nconst empty = new Uint8Array([]);\n// ABI Encodes a series of (bytes, bytes, ...)\nfunction encodeBytes(datas) {\n const result = [];\n let byteCount = 0;\n // Add place-holders for pointers as we add items\n for (let i = 0; i < datas.length; i++) {\n result.push(empty);\n byteCount += 32;\n }\n for (let i = 0; i < datas.length; i++) {\n const data = logger.getBytes(datas[i]);\n // Update the bytes offset\n result[i] = numPad(byteCount);\n // The length and padded value of data\n result.push(numPad(data.length));\n result.push(bytesPad(data));\n byteCount += 32 + Math.ceil(data.length / 32) * 32;\n }\n return concat(result);\n}\nconst zeros = \"0x0000000000000000000000000000000000000000000000000000000000000000\";\nfunction parseOffchainLookup(data) {\n const result = {\n sender: \"\", urls: [], calldata: \"\", selector: \"\", extraData: \"\", errorArgs: []\n };\n if (dataLength(data) < 5 * 32) {\n throw new Error(\"insufficient OffchainLookup data\");\n }\n const sender = dataSlice(data, 0, 32);\n if (dataSlice(sender, 0, 12) !== dataSlice(zeros, 0, 12)) {\n throw new Error(\"corrupt OffchainLookup sender\");\n }\n result.sender = dataSlice(sender, 12);\n // Read the URLs from the response\n try {\n const urls = [];\n const urlsOffset = logger.getNumber(dataSlice(data, 32, 64));\n const urlsLength = logger.getNumber(dataSlice(data, urlsOffset, urlsOffset + 32));\n const urlsData = dataSlice(data, urlsOffset + 32);\n for (let u = 0; u < urlsLength; u++) {\n const url = _parseString(urlsData, u * 32);\n if (url == null) {\n throw new Error(\"abort\");\n }\n urls.push(url);\n }\n result.urls = urls;\n }\n catch (error) {\n throw new Error(\"corrupt OffchainLookup urls\");\n }\n // Get the CCIP calldata to forward\n try {\n const calldata = _parseBytes(data, 64);\n if (calldata == null) {\n throw new Error(\"abort\");\n }\n result.calldata = calldata;\n }\n catch (error) {\n throw new Error(\"corrupt OffchainLookup calldata\");\n }\n // Get the callbackSelector (bytes4)\n if (dataSlice(data, 100, 128) !== dataSlice(zeros, 0, 28)) {\n throw new Error(\"corrupt OffchainLookup callbaackSelector\");\n }\n result.selector = dataSlice(data, 96, 100);\n // Get the extra data to send back to the contract as context\n try {\n const extraData = _parseBytes(data, 128);\n if (extraData == null) {\n throw new Error(\"abort\");\n }\n result.extraData = extraData;\n }\n catch (error) {\n throw new Error(\"corrupt OffchainLookup extraData\");\n }\n result.errorArgs = \"sender,urls,calldata,selector,extraData\".split(/,/).map((k) => result[k]);\n return result;\n}\n//# sourceMappingURL=abstract-provider.js.map","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar _AbstractSigner_instances, _AbstractSigner_checkProvider, _AbstractSigner_fromify, _VoidSigner_instances, _VoidSigner_throwUnsupported, _WrappedSigner_signer;\nimport { defineProperties, resolveProperties } from \"@ethersproject/properties\";\nimport { Transaction } from \"@ethersproject/transactions\";\nimport { logger } from \"./logger.js\";\nexport class AbstractSigner {\n constructor(provider) {\n _AbstractSigner_instances.add(this);\n defineProperties(this, { provider: (provider || null) });\n }\n async getBalance(blockTag) {\n return __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"getBalance\").getBalanceOf(await this.getAddress(), blockTag);\n }\n async getTransactionCount(blockTag) {\n return __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"getTransactionCount\").getTransactionCountOf(await this.getAddress(), blockTag);\n }\n async estimateGas(tx) {\n return __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"estimateGas\").estimateGas(await __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_fromify).call(this, tx));\n }\n async call(tx) {\n return __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"call\").call(await __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_fromify).call(this, tx));\n }\n async populateTransaction(tx) {\n const provider = __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"populateTransaction\");\n //let pop: Deferrable = Object.assign({ }, tx);\n let pop = Object.assign({}, tx);\n if (pop.to != null) {\n pop.to = provider.resolveName(pop.to).then((to) => {\n if (to == null) {\n return logger.throwArgumentError(\"transaction to ENS name not configured\", \"tx.to\", pop.to);\n }\n return to;\n });\n }\n if (pop.from != null) {\n const from = pop.from;\n pop.from = Promise.all([\n this.getAddress(),\n this.resolveName(from)\n ]).then(([address, from]) => {\n if (!from || address.toLowerCase() !== from.toLowerCase()) {\n return logger.throwArgumentError(\"transaction from mismatch\", \"tx.from\", from);\n }\n return address;\n });\n }\n if (pop.nonce == null) {\n pop.nonce = this.getTransactionCount();\n }\n pop = resolveProperties(pop);\n if (pop.gasLimit == null) {\n pop.gasLimit = provider.estimateGas(pop);\n }\n pop = resolveProperties(pop);\n //@TODO: Copy logic from AbstractSigner in v5\n return await resolveProperties(pop);\n }\n async resolveName(name) {\n const provider = __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"resolveName\");\n return await provider.resolveName(name);\n }\n async sendTransaction(tx) {\n const provider = __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"sendTransaction\");\n const txObj = Transaction.from(await this.populateTransaction(tx));\n return await provider.broadcastTransaction(await this.signTransaction(txObj));\n }\n}\n_AbstractSigner_instances = new WeakSet(), _AbstractSigner_checkProvider = function _AbstractSigner_checkProvider(operation) {\n if (this.provider) {\n return this.provider;\n }\n return logger.throwError(\"missing provider\", \"UNSUPPORTED_OPERATION\", { operation });\n}, _AbstractSigner_fromify = async function _AbstractSigner_fromify(tx) {\n tx = Object.assign({}, tx);\n const actions = [];\n if (tx.from != null) {\n const from = tx.from;\n actions.push(Promise.all([\n this.getAddress(),\n this.resolveName(from)\n ]).then(([address, from]) => {\n if (!from || address.toLowerCase() !== from.toLowerCase()) {\n logger.throwArgumentError(\"transaction from mismatch\", \"tx.from\", from);\n }\n tx.from = address;\n }));\n }\n await Promise.all(actions);\n return tx;\n};\nexport class VoidSigner extends AbstractSigner {\n constructor(address, provider) {\n super(provider);\n _VoidSigner_instances.add(this);\n defineProperties(this, { address });\n }\n async getAddress() { return this.address; }\n connect(provider) {\n return new VoidSigner(this.address, provider);\n }\n async signTransaction(tx) {\n __classPrivateFieldGet(this, _VoidSigner_instances, \"m\", _VoidSigner_throwUnsupported).call(this, \"transactions\", \"signTransaction\");\n }\n async signMessage(message) {\n __classPrivateFieldGet(this, _VoidSigner_instances, \"m\", _VoidSigner_throwUnsupported).call(this, \"messages\", \"signMessage\");\n }\n async signTypedData(domain, types, value) {\n __classPrivateFieldGet(this, _VoidSigner_instances, \"m\", _VoidSigner_throwUnsupported).call(this, \"typed-data\", \"signTypedData\");\n }\n}\n_VoidSigner_instances = new WeakSet(), _VoidSigner_throwUnsupported = function _VoidSigner_throwUnsupported(suffix, operation) {\n return logger.throwError(`VoidSigner cannot sign ${suffix}`, \"UNSUPPORTED_OPERATION\", {\n operation\n });\n};\nexport class WrappedSigner extends AbstractSigner {\n //get provider(): null | Provider { return this.#signer.provider; }\n constructor(signer) {\n super(signer.provider);\n _WrappedSigner_signer.set(this, void 0);\n __classPrivateFieldSet(this, _WrappedSigner_signer, signer, \"f\");\n }\n async getAddress() {\n return await __classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").getAddress();\n }\n connect(provider) {\n return new WrappedSigner(__classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").connect(provider));\n }\n async signTransaction(tx) {\n return await __classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").signTransaction(tx);\n }\n async sendTransaction(tx) {\n return await __classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").sendTransaction(tx);\n }\n async signMessage(message) {\n return await __classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").signMessage(message);\n }\n async signTypedData(domain, types, value) {\n return await __classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").signTypedData(domain, types, value);\n }\n}\n_WrappedSigner_signer = new WeakMap();\n//# sourceMappingURL=abstract-signer.js.map","// Show the throttle message only once\nconst shown = new Set();\nexport function showThrottleMessage(service) {\n if (shown.has(service)) {\n return;\n }\n shown.add(service);\n console.log(\"========= NOTICE =========\");\n console.log(`Request-Rate Exceeded for ${service} (this message will not be repeated)`);\n console.log(\"\");\n console.log(\"The default API keys for each service are provided as a highly-throttled,\");\n console.log(\"community resource for low-traffic projects and early prototyping.\");\n console.log(\"\");\n console.log(\"While your application will continue to function, we highly recommended\");\n console.log(\"signing up for your own API keys to improve performance, increase your\");\n console.log(\"request rate/limit and enable other perks, such as metrics and advanced APIs.\");\n console.log(\"\");\n console.log(\"For more details: https:/\\/docs.ethers.io/api-keys/\");\n console.log(\"==========================\");\n}\n//# sourceMappingURL=community.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _FilterIdSubscriber_instances, _FilterIdSubscriber_provider, _FilterIdSubscriber_filterIdPromise, _FilterIdSubscriber_poller, _FilterIdSubscriber_network, _FilterIdSubscriber_poll, _FilterIdSubscriber_teardown, _FilterIdEventSubscriber_event;\nimport { PollingEventSubscriber } from \"./subscriber-polling.js\";\nfunction copy(obj) {\n return JSON.parse(JSON.stringify(obj));\n}\nexport class FilterIdSubscriber {\n constructor(provider) {\n _FilterIdSubscriber_instances.add(this);\n _FilterIdSubscriber_provider.set(this, void 0);\n _FilterIdSubscriber_filterIdPromise.set(this, void 0);\n _FilterIdSubscriber_poller.set(this, void 0);\n _FilterIdSubscriber_network.set(this, void 0);\n __classPrivateFieldSet(this, _FilterIdSubscriber_provider, provider, \"f\");\n __classPrivateFieldSet(this, _FilterIdSubscriber_filterIdPromise, null, \"f\");\n __classPrivateFieldSet(this, _FilterIdSubscriber_poller, __classPrivateFieldGet(this, _FilterIdSubscriber_instances, \"m\", _FilterIdSubscriber_poll).bind(this), \"f\");\n __classPrivateFieldSet(this, _FilterIdSubscriber_network, null, \"f\");\n }\n _subscribe(provider) {\n throw new Error(\"subclasses must override this\");\n }\n _emitResults(provider, result) {\n throw new Error(\"subclasses must override this\");\n }\n _recover(provider) {\n throw new Error(\"subclasses must override this\");\n }\n start() { __classPrivateFieldGet(this, _FilterIdSubscriber_instances, \"m\", _FilterIdSubscriber_poll).call(this, -2); }\n stop() {\n __classPrivateFieldGet(this, _FilterIdSubscriber_instances, \"m\", _FilterIdSubscriber_teardown).call(this);\n __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").off(\"block\", __classPrivateFieldGet(this, _FilterIdSubscriber_poller, \"f\"));\n }\n pause(dropWhilePaused) {\n if (dropWhilePaused) {\n __classPrivateFieldGet(this, _FilterIdSubscriber_instances, \"m\", _FilterIdSubscriber_teardown).call(this);\n }\n __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").off(\"block\", __classPrivateFieldGet(this, _FilterIdSubscriber_poller, \"f\"));\n }\n resume() { this.start(); }\n}\n_FilterIdSubscriber_provider = new WeakMap(), _FilterIdSubscriber_filterIdPromise = new WeakMap(), _FilterIdSubscriber_poller = new WeakMap(), _FilterIdSubscriber_network = new WeakMap(), _FilterIdSubscriber_instances = new WeakSet(), _FilterIdSubscriber_poll = async function _FilterIdSubscriber_poll(blockNumber) {\n try {\n if (__classPrivateFieldGet(this, _FilterIdSubscriber_filterIdPromise, \"f\") == null) {\n __classPrivateFieldSet(this, _FilterIdSubscriber_filterIdPromise, this._subscribe(__classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\")), \"f\");\n }\n const filterId = await __classPrivateFieldGet(this, _FilterIdSubscriber_filterIdPromise, \"f\");\n if (filterId == null) {\n __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\")._recoverSubscriber(this, this._recover(__classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\")));\n return;\n }\n const network = await __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").getNetwork();\n if (!__classPrivateFieldGet(this, _FilterIdSubscriber_network, \"f\")) {\n __classPrivateFieldSet(this, _FilterIdSubscriber_network, network, \"f\");\n }\n if (__classPrivateFieldGet(this, _FilterIdSubscriber_network, \"f\").chainId !== network.chainId) {\n throw new Error(\"chaid changed\");\n }\n const result = await __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").send(\"eth_getFilterChanges\", [filterId]);\n await this._emitResults(__classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\"), result);\n }\n catch (error) {\n console.log(\"@TODO\", error);\n }\n __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").once(\"block\", __classPrivateFieldGet(this, _FilterIdSubscriber_poller, \"f\"));\n}, _FilterIdSubscriber_teardown = function _FilterIdSubscriber_teardown() {\n const filterIdPromise = __classPrivateFieldGet(this, _FilterIdSubscriber_filterIdPromise, \"f\");\n if (filterIdPromise) {\n __classPrivateFieldSet(this, _FilterIdSubscriber_filterIdPromise, null, \"f\");\n filterIdPromise.then((filterId) => {\n __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").send(\"eth_uninstallFilter\", [filterId]);\n });\n }\n};\nexport class FilterIdEventSubscriber extends FilterIdSubscriber {\n constructor(provider, filter) {\n super(provider);\n _FilterIdEventSubscriber_event.set(this, void 0);\n __classPrivateFieldSet(this, _FilterIdEventSubscriber_event, copy(filter), \"f\");\n }\n _recover(provider) {\n return new PollingEventSubscriber(provider, __classPrivateFieldGet(this, _FilterIdEventSubscriber_event, \"f\"));\n }\n async _subscribe(provider) {\n const filterId = await provider.send(\"eth_newFilter\", [__classPrivateFieldGet(this, _FilterIdEventSubscriber_event, \"f\")]);\n console.log(\"____SUB\", filterId);\n return filterId;\n }\n async _emitResults(provider, results) {\n const network = await provider.getNetwork();\n for (const result of results) {\n const log = network.formatter.log(result, provider);\n provider.emit(__classPrivateFieldGet(this, _FilterIdEventSubscriber_event, \"f\"), log);\n }\n }\n}\n_FilterIdEventSubscriber_event = new WeakMap();\nexport class FilterIdPendingSubscriber extends FilterIdSubscriber {\n async _subscribe(provider) {\n return await provider.send(\"eth_newPendingTransactionFilter\", []);\n }\n async _emitResults(provider, results) {\n const network = await provider.getNetwork();\n for (const result of results) {\n provider.emit(\"pending\", network.formatter.hash(result));\n }\n }\n}\n//# sourceMappingURL=subscriber-filterid.js.map","// @TODO:\n// - Add the batching API\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _JsonRpcApiProvider_nextId, _JsonRpcApiProvider_options, _JsonRpcProvider_connect, _JsonRpcProvider_pollingInterval;\n// https://playground.open-rpc.org/?schemaUrl=https://raw.githubusercontent.com/ethereum/eth1.0-apis/assembled-spec/openrpc.json&uiSchema%5BappBar%5D%5Bui:splitView%5D=true&uiSchema%5BappBar%5D%5Bui:input%5D=false&uiSchema%5BappBar%5D%5Bui:examplesDropdown%5D=false\nimport { resolveAddress } from \"@ethersproject/address\";\nimport { hexlify, isHexString, quantity } from \"@ethersproject/bytes\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { TypedDataEncoder } from \"@ethersproject/hash\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nimport { accessListify } from \"@ethersproject/transactions\";\nimport { fetchData, FetchRequest } from \"@ethersproject/web\";\nimport { AbstractProvider, UnmanagedSubscriber } from \"./abstract-provider.js\";\nimport { Network } from \"./network.js\";\nimport { FilterIdEventSubscriber, FilterIdPendingSubscriber } from \"./subscriber-filterid.js\";\nimport { logger } from \"./logger.js\";\nfunction copy(value) {\n return JSON.parse(JSON.stringify(value));\n}\nconst Primitive = \"bigint,boolean,function,number,string,symbol\".split(/,/g);\n//const Methods = \"getAddress,then\".split(/,/g);\nfunction deepCopy(value) {\n if (value == null || Primitive.indexOf(typeof (value)) >= 0) {\n return value;\n }\n // Keep any Addressable\n if (typeof (value.getAddress) === \"function\") {\n return value;\n }\n if (Array.isArray(value)) {\n return (value.map(deepCopy));\n }\n if (typeof (value) === \"object\") {\n return Object.keys(value).reduce((accum, key) => {\n accum[key] = value[key];\n return accum;\n }, {});\n }\n throw new Error(`should not happen: ${value} (${typeof (value)})`);\n}\nfunction getLowerCase(value) {\n if (value) {\n return value.toLowerCase();\n }\n return value;\n}\nfunction isPollable(value) {\n return (value && typeof (value.pollingInterval) === \"number\");\n}\nconst defaultOptions = {\n // Default to use filter ID (the FilterIdSubscriber will\n // fallback onto polling if subscription fails)\n polling: false,\n // Maximum batch size (in bytes)\n batchMaxSize: (1 << 20),\n // How long to wait before dispatching a new batch\n batchStallTime: 250,\n};\n// @TODO: Unchecked Signers\nexport class JsonRpcSigner {\n constructor(provider, address) {\n defineProperties(this, { provider, address });\n }\n connect(provider) {\n return logger.throwError(\"cannot reconnect JsonRpcSigner\", \"UNSUPPORTED_OPERATION\", {\n operation: \"signer.connect\"\n });\n }\n async getAddress() {\n return this.address;\n }\n async getNetwork() {\n return await this.provider.getNetwork();\n }\n async getFeeData() {\n return await this.provider.getFeeData();\n }\n async estimateGas(tx) {\n return await this.provider.estimateGas(tx);\n }\n async call(tx) {\n return await this.provider.call(tx);\n }\n async resolveName(name) {\n return await this.provider.resolveName(name);\n }\n async getBalance(blockTag) {\n return await this.provider.getBalanceOf(this.address);\n }\n async getTransactionCount(blockTag) {\n return await this.provider.getTransactionCountOf(this.address);\n }\n // Returns just the hash of the transaction after sent, which is what\n // the bare JSON-RPC API does;\n async sendUncheckedTransaction(_tx) {\n const tx = deepCopy(_tx);\n const promises = [];\n // Make sure the from matches the sender\n if (tx.from) {\n const _from = tx.from;\n promises.push((async () => {\n const from = await resolveAddress(_from, this.provider);\n if (from == null || from.toLowerCase() !== this.address.toLowerCase()) {\n logger.throwArgumentError(\"from address mismatch\", \"transaction\", _tx);\n }\n tx.from = from;\n })());\n }\n else {\n tx.from = this.address;\n }\n // The JSON-RPC for eth_sendTransaction uses 90000 gas; if the user\n // wishes to use this, it is easy to specify explicitly, otherwise\n // we look it up for them.\n if (tx.gasLimit == null) {\n promises.push((async () => {\n tx.gasLimit = await this.provider.estimateGas(Object.assign(Object.assign({}, tx), { from: this.address }));\n })());\n }\n // The address may be an ENS name or Addressable\n if (tx.to != null) {\n const _to = tx.to;\n promises.push((async () => {\n tx.to = await resolveAddress(_to, this.provider);\n })());\n }\n // Wait until all of our properties are filled in\n if (promises.length) {\n await Promise.all(promises);\n }\n const hexTx = this.provider.getRpcTransaction(tx);\n return this.provider.send(\"eth_sendTransaction\", [hexTx]);\n }\n async sendTransaction(tx) {\n // This cannot be mined any earlier than any recent block\n const blockNumber = await this.provider.getBlockNumber();\n // Send the transaction\n const hash = await this.sendUncheckedTransaction(tx);\n // Unfortunately, JSON-RPC only provides and opaque transaction hash\n // for a response, and we need the actual transaction, so we poll\n // for it; it should show up very quickly\n return await (new Promise((resolve, reject) => {\n const checkTx = async (duration) => {\n // Try getting the transaction\n const tx = await this.provider.getTransaction(hash);\n if (tx != null) {\n resolve(this.provider._wrapTransaction(tx, hash, blockNumber));\n return;\n }\n // Wait another 4 seconds\n this.provider._setTimeout(() => { checkTx(4000); }, duration);\n };\n checkTx(1000);\n }));\n }\n async signTransaction(_tx) {\n const tx = deepCopy(_tx);\n // Make sure the from matches the sender\n if (tx.from) {\n const from = await resolveAddress(tx.from, this.provider);\n if (from == null || from.toLowerCase() !== this.address.toLowerCase()) {\n return logger.throwArgumentError(\"from address mismatch\", \"transaction\", _tx);\n }\n tx.from = from;\n }\n else {\n tx.from = this.address;\n }\n const hexTx = this.provider.getRpcTransaction(tx);\n return await this.provider.send(\"eth_sign_Transaction\", [hexTx]);\n }\n async signMessage(_message) {\n const message = ((typeof (_message) === \"string\") ? toUtf8Bytes(_message) : _message);\n return await this.provider.send(\"personal_sign\", [\n hexlify(message), this.address.toLowerCase()\n ]);\n }\n async signTypedData(domain, types, _value) {\n const value = deepCopy(_value);\n // Populate any ENS names (in-place)\n const populated = await TypedDataEncoder.resolveNames(domain, types, value, async (value) => {\n const address = await resolveAddress(value);\n if (address == null) {\n return logger.throwArgumentError(\"TypedData does not support null address\", \"value\", value);\n }\n return address;\n });\n return await this.provider.send(\"eth_signTypedData_v4\", [\n this.address.toLowerCase(),\n JSON.stringify(TypedDataEncoder.getPayload(populated.domain, types, populated.value))\n ]);\n }\n async unlock(password) {\n return this.provider.send(\"personal_unlockAccount\", [\n this.address.toLowerCase(), password, null\n ]);\n }\n // https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign\n async _legacySignMessage(_message) {\n const message = ((typeof (_message) === \"string\") ? toUtf8Bytes(_message) : _message);\n return await this.provider.send(\"eth_sign\", [\n this.address.toLowerCase(), hexlify(message)\n ]);\n }\n}\nexport class JsonRpcApiProvider extends AbstractProvider {\n constructor(network) {\n super(network);\n _JsonRpcApiProvider_nextId.set(this, void 0);\n _JsonRpcApiProvider_options.set(this, void 0);\n __classPrivateFieldSet(this, _JsonRpcApiProvider_nextId, 1, \"f\");\n __classPrivateFieldSet(this, _JsonRpcApiProvider_options, Object.assign({}, defaultOptions), \"f\");\n }\n _getOptions(key) {\n return __classPrivateFieldGet(this, _JsonRpcApiProvider_options, \"f\")[key];\n }\n _setOptions(options) {\n // Validate all the options\n for (const _key in options) {\n const key = _key;\n const value = options[key];\n if (typeof (value) !== typeof (__classPrivateFieldGet(this, _JsonRpcApiProvider_options, \"f\")[key])) {\n return logger.throwArgumentError(\"invalid option value\", `options.${key}`, value);\n }\n }\n // Update the values\n for (const _key in options) {\n const key = _key;\n __classPrivateFieldGet(this, _JsonRpcApiProvider_options, \"f\")[key] = (options[key]);\n }\n }\n prepareRequest(method, params) {\n var _a, _b;\n return {\n method, params, id: (__classPrivateFieldSet(this, _JsonRpcApiProvider_nextId, (_b = __classPrivateFieldGet(this, _JsonRpcApiProvider_nextId, \"f\"), _a = _b++, _b), \"f\"), _a), jsonrpc: \"2.0\"\n };\n }\n // Sends the payload to the backend\n //async sendPayload(payload: any): Promise {\n // throw new Error(\"sub-class must implement this\");\n //}\n async send(method, params) {\n // @TODO: This should construct and queue the payload\n throw new Error(\"sub-class must implement this\");\n }\n async getSigner(address = 0) {\n const network = await this.getNetwork();\n const accounts = await this.send(\"eth_accounts\", []);\n // Account index\n if (typeof (address) === \"number\") {\n if (address > accounts.length) {\n throw new Error(\"no such account\");\n }\n return new JsonRpcSigner(this, accounts[address]);\n }\n // Account address\n address = network.formatter.address(address);\n for (const account of accounts) {\n if (network.formatter.address(account) === account) {\n return new JsonRpcSigner(this, account);\n }\n }\n throw new Error(\"invalid account\");\n }\n // Sub-classes can override this; it detects the *actual* network we\n // are connected to\n async _detectNetwork() {\n return Network.from(logger.getBigInt(await this._perform({ method: \"chainId\" })));\n }\n _getSubscriber(sub) {\n // Pending Filters aren't availble via polling\n if (sub.type === \"pending\") {\n return new FilterIdPendingSubscriber(this);\n }\n if (sub.type === \"event\") {\n return new FilterIdEventSubscriber(this, sub.filter);\n }\n // Orphaned Logs are handled automatically, by the filter, since\n // logs with removed are emitted by it\n if (sub.type === \"orphan\" && sub.filter.orphan === \"drop-log\") {\n return new UnmanagedSubscriber(\"orphan\");\n }\n return super._getSubscriber(sub);\n }\n getRpcTransaction(tx) {\n const result = {};\n // JSON-RPC now requires numeric values to be \"quantity\" values\n [\"chainId\", \"gasLimit\", \"gasPrice\", \"type\", \"maxFeePerGas\", \"maxPriorityFeePerGas\", \"nonce\", \"value\"].forEach((key) => {\n if (tx[key] == null) {\n return;\n }\n let dstKey = key;\n if (key === \"gasLimit\") {\n dstKey = \"gas\";\n }\n result[dstKey] = quantity(tx[key]);\n });\n // Make sure addresses and data are lowercase\n [\"from\", \"to\", \"data\"].forEach((key) => {\n if (tx[key] == null) {\n return;\n }\n result[key] = hexlify(tx[key]);\n });\n // Normalize the access list object\n if (tx.accessList) {\n result[\"accessList\"] = accessListify(tx.accessList);\n }\n return result;\n }\n getRpcRequest(req) {\n switch (req.method) {\n case \"chainId\":\n return { method: \"eth_chainId\", args: [] };\n case \"getBlockNumber\":\n return { method: \"eth_blockNumber\", args: [] };\n case \"getGasPrice\":\n return { method: \"eth_gasPrice\", args: [] };\n case \"getBalance\":\n return {\n method: \"eth_getBalance\",\n args: [getLowerCase(req.address), req.blockTag]\n };\n case \"getTransactionCount\":\n return {\n method: \"eth_getTransactionCount\",\n args: [getLowerCase(req.address), req.blockTag]\n };\n case \"getCode\":\n return {\n method: \"eth_getCode\",\n args: [getLowerCase(req.address), req.blockTag]\n };\n case \"getStorageAt\":\n return {\n method: \"eth_getStorageAt\",\n args: [\n getLowerCase(req.address),\n (\"0x\" + req.position.toString(16)),\n req.blockTag\n ]\n };\n case \"sendTransaction\":\n return {\n method: \"eth_sendRawTransaction\",\n args: [req.signedTransaction]\n };\n case \"getBlock\":\n if (\"blockTag\" in req) {\n return {\n method: \"eth_getBlockByNumber\",\n args: [req.blockTag, !!req.includeTransactions]\n };\n }\n else if (\"blockHash\" in req) {\n return {\n method: \"eth_getBlockByHash\",\n args: [req.blockHash, !!req.includeTransactions]\n };\n }\n break;\n case \"getTransaction\":\n return {\n method: \"eth_getTransactionByHash\",\n args: [req.hash]\n };\n case \"getTransactionReceipt\":\n return {\n method: \"eth_getTransactionReceipt\",\n args: [req.hash]\n };\n case \"call\":\n return {\n method: \"eth_call\",\n args: [this.getRpcTransaction(req.transaction), req.blockTag]\n };\n case \"estimateGas\": {\n return {\n method: \"eth_estimateGas\",\n args: [this.getRpcTransaction(req.transaction)]\n };\n }\n case \"getLogs\":\n if (req.filter && req.filter.address != null) {\n if (Array.isArray(req.filter.address)) {\n req.filter.address = req.filter.address.map(getLowerCase);\n }\n else {\n req.filter.address = getLowerCase(req.filter.address);\n }\n }\n return { method: \"eth_getLogs\", args: [req.filter] };\n }\n return null;\n }\n getRpcError(method, args, error) {\n if (method === \"eth_call\") {\n const result = spelunkData(error);\n if (result) {\n // @TODO: Extract errorSignature, errorName, errorArgs, reason if\n // it is Error(string) or Panic(uint25)\n return logger.makeError(\"execution reverted during JSON-RPC call\", \"CALL_EXCEPTION\", {\n data: result.data,\n transaction: args[0]\n });\n }\n return logger.makeError(\"missing revert data during JSON-RPC call\", \"CALL_EXCEPTION\", {\n data: \"0x\", transaction: args[0], info: { error }\n });\n }\n if (method === \"eth_estimateGas\") {\n }\n const message = JSON.stringify(spelunkMessage(error));\n if (message.match(/insufficient funds|base fee exceeds gas limit/)) {\n return logger.makeError(\"insufficient funds for intrinsic transaction cost\", \"INSUFFICIENT_FUNDS\", {\n transaction: args[0]\n });\n }\n if (message.match(/nonce/) && message.match(/too low/)) {\n return logger.makeError(\"nonce has already been used\", \"NONCE_EXPIRED\", {\n transaction: args[0]\n });\n }\n // \"replacement transaction underpriced\"\n if (message.match(/replacement transaction/) && message.match(/underpriced/)) {\n return logger.makeError(\"replacement fee too low\", \"REPLACEMENT_UNDERPRICED\", {\n transaction: args[0]\n });\n }\n if (message.match(/only replay-protected/)) {\n return logger.makeError(\"legacy pre-eip-155 transactions not supported\", \"UNSUPPORTED_OPERATION\", {\n operation: method, info: { transaction: args[0] }\n });\n }\n if (method === \"estimateGas\" && message.match(/gas required exceeds allowance|always failing transaction|execution reverted/)) {\n return logger.makeError(\"cannot estimate gas; transaction may fail or may require manual gas limit\", \"UNPREDICTABLE_GAS_LIMIT\", {\n transaction: args[0]\n });\n }\n return error;\n }\n async _perform(req) {\n // Legacy networks do not like the type field being passed along (which\n // is fair), so we delete type if it is 0 and a non-EIP-1559 network\n if (req.method === \"call\" || req.method === \"estimateGas\") {\n let tx = req.transaction;\n if (tx && tx.type != null && logger.getBigInt(tx.type)) {\n // If there are no EIP-1559 properties, it might be non-EIP-a559\n if (tx.maxFeePerGas == null && tx.maxPriorityFeePerGas == null) {\n const feeData = await this.getFeeData();\n if (feeData.maxFeePerGas == null && feeData.maxPriorityFeePerGas == null) {\n // Network doesn't know about EIP-1559 (and hence type)\n req = Object.assign({}, req, {\n transaction: Object.assign({}, tx, { type: undefined })\n });\n }\n }\n }\n }\n const request = this.getRpcRequest(req);\n if (request != null) {\n this.emit(\"debug\", { type: \"sendRequest\", request });\n try {\n const result = await this.send(request.method, request.args);\n //console.log(\"RR\", result);\n this.emit(\"debug\", { type: \"getResponse\", result });\n return result;\n }\n catch (error) {\n this.emit(\"debug\", { type: \"getError\", error });\n throw this.getRpcError(request.method, request.args, error);\n }\n }\n return super._perform(req);\n }\n}\n_JsonRpcApiProvider_nextId = new WeakMap(), _JsonRpcApiProvider_options = new WeakMap();\nexport class JsonRpcProvider extends JsonRpcApiProvider {\n constructor(url, network) {\n if (url == null) {\n url = \"http:/\\/localhost:8545\";\n }\n super(network);\n _JsonRpcProvider_connect.set(this, void 0);\n _JsonRpcProvider_pollingInterval.set(this, void 0);\n if (typeof (url) === \"string\") {\n __classPrivateFieldSet(this, _JsonRpcProvider_connect, { request: new FetchRequest(url) }, \"f\");\n }\n else {\n __classPrivateFieldSet(this, _JsonRpcProvider_connect, Object.assign({}, url), \"f\");\n __classPrivateFieldGet(this, _JsonRpcProvider_connect, \"f\").request = __classPrivateFieldGet(this, _JsonRpcProvider_connect, \"f\").request.clone();\n }\n __classPrivateFieldSet(this, _JsonRpcProvider_pollingInterval, 4000, \"f\");\n }\n async send(method, params) {\n params = copy(params);\n // Configure a POST connection for the requested method\n const connection = Object.assign({}, __classPrivateFieldGet(this, _JsonRpcProvider_connect, \"f\"));\n connection.request = connection.request.clone();\n connection.request.body = this.prepareRequest(method, params);\n const result = (await fetchData(connection)).bodyJson;\n if (\"error\" in result) {\n return logger.throwError(\"error from JSON-RPC\", \"UNKNOWN_ERROR\", {\n result\n });\n }\n return result.result;\n }\n get pollingInterval() { return __classPrivateFieldGet(this, _JsonRpcProvider_pollingInterval, \"f\"); }\n set pollingInterval(value) {\n if (!Number.isInteger(value) || value < 0) {\n throw new Error(\"invalid interval\");\n }\n __classPrivateFieldSet(this, _JsonRpcProvider_pollingInterval, value, \"f\");\n this._forEachSubscriber((sub) => {\n if (isPollable(sub)) {\n sub.pollingInterval = __classPrivateFieldGet(this, _JsonRpcProvider_pollingInterval, \"f\");\n }\n });\n }\n}\n_JsonRpcProvider_connect = new WeakMap(), _JsonRpcProvider_pollingInterval = new WeakMap();\n// This class should only be used when it is not possible for the\n// underlying network to change, such as with INFURA. If you are\n// using MetaMask or some other client which allows users to change\n// their network DO NOT USE THIS. Bad things will happen.\nexport class StaticJsonRpcProvider extends JsonRpcProvider {\n constructor(url, network) {\n super(url, network);\n defineProperties(this, { network });\n }\n async _detectNetwork() {\n return this.network;\n }\n}\nfunction spelunkData(value) {\n if (value == null) {\n return null;\n }\n // These *are* the droids we're looking for.\n if (typeof (value.message) === \"string\" && value.message.match(\"reverted\") && isHexString(value.data)) {\n return { message: value.message, data: value.data };\n }\n // Spelunk further...\n if (typeof (value) === \"object\") {\n for (const key in value) {\n const result = spelunkData(value[key]);\n if (result) {\n return result;\n }\n }\n return null;\n }\n // Might be a JSON string we can further descend...\n if (typeof (value) === \"string\") {\n try {\n return spelunkData(JSON.parse(value));\n }\n catch (error) { }\n }\n return null;\n}\nfunction _spelunkMessage(value, result) {\n if (value == null) {\n return;\n }\n // These *are* the droids we're looking for.\n if (typeof (value.message) === \"string\") {\n result.push(value.message);\n }\n // Spelunk further...\n if (typeof (value) === \"object\") {\n for (const key in value) {\n _spelunkMessage(value[key], result);\n }\n }\n // Might be a JSON string we can further descend...\n if (typeof (value) === \"string\") {\n try {\n return _spelunkMessage(JSON.parse(value), result);\n }\n catch (error) { }\n }\n}\nfunction spelunkMessage(value) {\n const result = [];\n _spelunkMessage(value, result);\n return result;\n}\n//# sourceMappingURL=provider-jsonrpc.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { FetchRequest } from \"@ethersproject/web\";\nimport { showThrottleMessage } from \"./community.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { StaticJsonRpcProvider } from \"./provider-jsonrpc.js\";\nconst defaultApiKey = \"9f7d929b018cdffb338517efa06f58359e86ff1ffd350bc889738523659e7972\";\nfunction getHost(name) {\n switch (name) {\n case \"homestead\":\n return \"rpc.ankr.com/eth\";\n case \"matic\":\n return \"rpc.ankr.com/polygon\";\n case \"arbitrum\":\n return \"rpc.ankr.com/arbitrum\";\n }\n return logger.throwArgumentError(\"unsupported network\", \"network\", name);\n}\nexport class AnkrProvider extends StaticJsonRpcProvider {\n constructor(_network = \"homestead\", apiKey) {\n const network = Network.from(_network);\n if (apiKey == null) {\n apiKey = defaultApiKey;\n }\n const connection = AnkrProvider.getConnection(network, apiKey);\n super(connection, network);\n defineProperties(this, { apiKey });\n // Ankr does not support filterId, so we force polling\n super._setOptions({ polling: true });\n }\n _getProvider(chainId) {\n try {\n return new AnkrProvider(chainId, this.apiKey);\n }\n catch (error) { }\n return super._getProvider(chainId);\n }\n static getConnection(network, apiKey) {\n if (apiKey == null) {\n apiKey = defaultApiKey;\n }\n const request = new FetchRequest(`https:/\\/${getHost(network.name)}/${apiKey}`);\n request.allowGzip = true;\n const throttleRetry = async (request, response, attempt) => {\n if (apiKey === defaultApiKey) {\n showThrottleMessage(\"AnkrProvider\");\n }\n return true;\n };\n return { request, throttleRetry };\n }\n isCommunityResource() {\n return (this.apiKey === defaultApiKey);\n }\n}\n//# sourceMappingURL=provider-ankr.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { FetchRequest } from \"@ethersproject/web\";\nimport { showThrottleMessage } from \"./community.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { StaticJsonRpcProvider } from \"./provider-jsonrpc.js\";\nconst defaultApiKey = \"_gg7wSSi0KMBsdKnGVfHDueq6xMB9EkC\";\nfunction getHost(name) {\n switch (name) {\n case \"homestead\":\n return \"eth-mainnet.alchemyapi.io\";\n case \"ropsten\":\n return \"eth-ropsten.alchemyapi.io\";\n case \"rinkeby\":\n return \"eth-rinkeby.alchemyapi.io\";\n case \"goerli\":\n return \"eth-goerli.alchemyapi.io\";\n case \"kovan\":\n return \"eth-kovan.alchemyapi.io\";\n case \"matic\":\n return \"polygon-mainnet.g.alchemy.com\";\n case \"maticmum\":\n return \"polygon-mumbai.g.alchemy.com\";\n case \"arbitrum\":\n return \"arb-mainnet.g.alchemy.com\";\n case \"arbitrum-rinkeby\":\n return \"arb-rinkeby.g.alchemy.com\";\n case \"optimism\":\n return \"opt-mainnet.g.alchemy.com\";\n case \"optimism-kovan\":\n return \"opt-kovan.g.alchemy.com\";\n }\n return logger.throwArgumentError(\"unsupported network\", \"network\", name);\n}\nexport class AlchemyProvider extends StaticJsonRpcProvider {\n constructor(_network = \"homestead\", apiKey) {\n const network = Network.from(_network);\n if (apiKey == null) {\n apiKey = defaultApiKey;\n }\n super(AlchemyProvider.getConnection(network, apiKey), network);\n defineProperties(this, { apiKey });\n }\n _getProvider(chainId) {\n try {\n return new AlchemyProvider(chainId, this.apiKey);\n }\n catch (error) { }\n return super._getProvider(chainId);\n }\n isCommunityResource() {\n return (this.apiKey === defaultApiKey);\n }\n static getConnection(network, apiKey) {\n if (apiKey == null) {\n apiKey = defaultApiKey;\n }\n const request = new FetchRequest(`https:/\\/${getHost(network.name)}/v2/${apiKey}`);\n request.allowGzip = true;\n const throttleRetry = async (request, response, attempt) => {\n if (apiKey === defaultApiKey) {\n showThrottleMessage(\"alchemy\");\n }\n return true;\n };\n return { request, throttleRetry };\n }\n}\n//# sourceMappingURL=provider-alchemy.js.map","import { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { StaticJsonRpcProvider } from \"./provider-jsonrpc.js\";\nexport class CloudflareProvider extends StaticJsonRpcProvider {\n constructor(_network = \"homestead\") {\n const network = Network.from(_network);\n if (network.name !== \"homestead\") {\n return logger.throwArgumentError(\"unsupported network\", \"network\", _network);\n }\n super(\"https:/\\/cloudflare-eth.com/\", network);\n }\n}\n//# sourceMappingURL=provider-cloudflare.js.map","import { hexlify, isHexString, quantity } from \"@ethersproject/bytes\";\nimport { isError } from \"@ethersproject/logger\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { toUtf8String } from \"@ethersproject/strings\";\nimport { fetchData, FetchRequest } from \"@ethersproject/web\";\nif (false) {\n console.log(isHexString, isError);\n} // @TODO\nimport { AbstractProvider } from \"./abstract-provider.js\";\nimport { Network } from \"./network.js\";\nimport { NetworkPlugin } from \"./plugins-network.js\";\nimport { logger } from \"./logger.js\";\nconst defaultApiKey = \"9D13ZE7XSBTJ94N9BNJ2MA33VMAY2YPIRB\";\nconst EtherscanPluginId = \"org.ethers.plugins.etherscan\";\nexport class EtherscanPlugin extends NetworkPlugin {\n constructor(baseUrl, communityApiKey) {\n super(EtherscanPluginId);\n //if (communityApiKey == null) { communityApiKey = null; }\n defineProperties(this, { baseUrl, communityApiKey });\n }\n clone() {\n return new EtherscanPlugin(this.baseUrl, this.communityApiKey);\n }\n}\nexport class EtherscanProvider extends AbstractProvider {\n constructor(_network, apiKey) {\n super();\n const network = Network.from(_network);\n if (apiKey == null) {\n const plugin = network.getPlugin(EtherscanPluginId);\n if (plugin) {\n apiKey = plugin.communityApiKey;\n }\n else {\n apiKey = defaultApiKey;\n }\n }\n defineProperties(this, { apiKey, network });\n // Test that the network is supported by Etherscan\n this.getBaseUrl();\n }\n getBaseUrl() {\n const plugin = this.network.getPlugin(EtherscanPluginId);\n if (plugin) {\n return plugin.baseUrl;\n }\n switch (this.network.name) {\n case \"homestead\":\n return \"https:/\\/api.etherscan.io\";\n case \"ropsten\":\n return \"https:/\\/api-ropsten.etherscan.io\";\n case \"rinkeby\":\n return \"https:/\\/api-rinkeby.etherscan.io\";\n case \"kovan\":\n return \"https:/\\/api-kovan.etherscan.io\";\n case \"goerli\":\n return \"https:/\\/api-goerli.etherscan.io\";\n default:\n }\n return logger.throwArgumentError(\"unsupported network\", \"network\", this.network);\n }\n getUrl(module, params) {\n const query = Object.keys(params).reduce((accum, key) => {\n const value = params[key];\n if (value != null) {\n accum += `&${key}=${value}`;\n }\n return accum;\n }, \"\");\n const apiKey = ((this.apiKey) ? `&apikey=${this.apiKey}` : \"\");\n return `${this.getBaseUrl()}/api?module=${module}${query}${apiKey}`;\n }\n getPostUrl() {\n return `${this.getBaseUrl()}/api`;\n }\n getPostData(module, params) {\n params.module = module;\n params.apikey = this.apiKey;\n return params;\n }\n async detectNetwork() {\n return this.network;\n }\n async fetch(module, params, post) {\n const url = (post ? this.getPostUrl() : this.getUrl(module, params));\n const payload = (post ? this.getPostData(module, params) : null);\n /*\n this.emit(\"debug\", {\n action: \"request\",\n request: url,\n provider: this\n });\n */\n const request = new FetchRequest(url);\n const connection = {\n request,\n throttleSlotInterval: 1000,\n processResponse: async (request, response) => {\n const result = response.hasBody() ? JSON.parse(toUtf8String(response.body)) : {};\n const throttle = ((typeof (result.result) === \"string\") ? result.result : \"\").toLowerCase().indexOf(\"rate limit\") >= 0;\n if (module === \"proxy\") {\n // This JSON response indicates we are being throttled\n if (result && result.status == 0 && result.message == \"NOTOK\" && throttle) {\n response.throwThrottleError(result.result);\n }\n }\n else {\n if (throttle) {\n response.throwThrottleError(result.result);\n }\n }\n return response;\n },\n };\n if (payload) {\n request.setHeader(\"content-type\", \"application/x-www-form-urlencoded; charset=UTF-8\");\n request.body = Object.keys(payload).map((k) => `${k}=${payload[k]}`).join(\"&\");\n }\n const response = await fetchData(connection);\n if (!response.hasBody()) {\n throw new Error();\n }\n /*\n this.emit(\"debug\", {\n action: \"response\",\n request: url,\n response: deepCopy(result),\n provider: this\n });\n */\n const result = JSON.parse(toUtf8String(response.body));\n if (module === \"proxy\") {\n if (result.jsonrpc != \"2.0\") {\n // @TODO: not any\n const error = new Error(\"invalid response\");\n error.result = JSON.stringify(result);\n throw error;\n }\n if (result.error) {\n // @TODO: not any\n const error = new Error(result.error.message || \"unknown error\");\n if (result.error.code) {\n error.code = result.error.code;\n }\n if (result.error.data) {\n error.data = result.error.data;\n }\n throw error;\n }\n return result.result;\n }\n else {\n // getLogs, getHistory have weird success responses\n if (result.status == 0 && (result.message === \"No records found\" || result.message === \"No transactions found\")) {\n return result.result;\n }\n if (result.status != 1 || result.message != \"OK\") {\n const error = new Error(\"invalid response\");\n error.result = JSON.stringify(result);\n // if ((result.result || \"\").toLowerCase().indexOf(\"rate limit\") >= 0) {\n // error.throttleRetry = true;\n // }\n throw error;\n }\n return result.result;\n }\n }\n // The transaction has already been sanitized by the calls in Provider\n _getTransactionPostData(transaction) {\n const result = {};\n for (let key in transaction) {\n if (transaction[key] == null) {\n continue;\n }\n let value = transaction[key];\n if (key === \"type\" && value === 0) {\n continue;\n }\n // Quantity-types require no leading zero, unless 0\n if ({ type: true, gasLimit: true, gasPrice: true, maxFeePerGs: true, maxPriorityFeePerGas: true, nonce: true, value: true }[key]) {\n value = quantity(hexlify(value));\n }\n else if (key === \"accessList\") {\n value = \"[\" + this.network.formatter.accessList(value).map((set) => {\n return `{address:\"${set.address}\",storageKeys:[\"${set.storageKeys.join('\",\"')}\"]}`;\n }).join(\",\") + \"]\";\n }\n else {\n value = hexlify(value);\n }\n result[key] = value;\n }\n return result;\n }\n _checkError(req, error, transaction) {\n /*\n let body = \"\";\n if (isError(error, Logger.Errors.SERVER_ERROR) && error.response && error.response.hasBody()) {\n body = toUtf8String(error.response.body);\n }\n console.log(body);\n \n // Undo the \"convenience\" some nodes are attempting to prevent backwards\n // incompatibility; maybe for v6 consider forwarding reverts as errors\n if (method === \"call\" && body) {\n \n // Etherscan keeps changing their string\n if (body.match(/reverted/i) || body.match(/VM execution error/i)) {\n \n // Etherscan prefixes the data like \"Reverted 0x1234\"\n let data = e.data;\n if (data) { data = \"0x\" + data.replace(/^.*0x/i, \"\"); }\n if (!isHexString(data)) { data = \"0x\"; }\n \n logger.throwError(\"call exception\", Logger.Errors.CALL_EXCEPTION, {\n error, data\n });\n }\n }\n \n // Get the message from any nested error structure\n let message = error.message;\n if (isError(error, Logger.Errors.SERVER_ERROR)) {\n if (error.error && typeof(error.error.message) === \"string\") {\n message = error.error.message;\n } else if (typeof(error.body) === \"string\") {\n message = error.body;\n } else if (typeof(error.responseText) === \"string\") {\n message = error.responseText;\n }\n }\n message = (message || \"\").toLowerCase();\n \n // \"Insufficient funds. The account you tried to send transaction from\n // does not have enough funds. Required 21464000000000 and got: 0\"\n if (message.match(/insufficient funds/)) {\n logger.throwError(\"insufficient funds for intrinsic transaction cost\", Logger.Errors.INSUFFICIENT_FUNDS, {\n error, transaction, info: { method }\n });\n }\n \n // \"Transaction with the same hash was already imported.\"\n if (message.match(/same hash was already imported|transaction nonce is too low|nonce too low/)) {\n logger.throwError(\"nonce has already been used\", Logger.Errors.NONCE_EXPIRED, {\n error, transaction, info: { method }\n });\n }\n \n // \"Transaction gas price is too low. There is another transaction with\n // same nonce in the queue. Try increasing the gas price or incrementing the nonce.\"\n if (message.match(/another transaction with same nonce/)) {\n logger.throwError(\"replacement fee too low\", Logger.Errors.REPLACEMENT_UNDERPRICED, {\n error, transaction, info: { method }\n });\n }\n \n if (message.match(/execution failed due to an exception|execution reverted/)) {\n logger.throwError(\"cannot estimate gas; transaction may fail or may require manual gas limit\", Logger.Errors.UNPREDICTABLE_GAS_LIMIT, {\n error, transaction, info: { method }\n });\n }\n */\n throw error;\n }\n async _detectNetwork() {\n return this.network;\n }\n async _perform(req) {\n switch (req.method) {\n case \"chainId\":\n return this.network.chainId;\n case \"getBlockNumber\":\n return this.fetch(\"proxy\", { action: \"eth_blockNumber\" });\n case \"getGasPrice\":\n return this.fetch(\"proxy\", { action: \"eth_gasPrice\" });\n case \"getBalance\":\n // Returns base-10 result\n return this.fetch(\"account\", {\n action: \"balance\",\n address: req.address,\n tag: req.blockTag\n });\n case \"getTransactionCount\":\n return this.fetch(\"proxy\", {\n action: \"eth_getTransactionCount\",\n address: req.address,\n tag: req.blockTag\n });\n case \"getCode\":\n return this.fetch(\"proxy\", {\n action: \"eth_getCode\",\n address: req.address,\n tag: req.blockTag\n });\n case \"getStorageAt\":\n return this.fetch(\"proxy\", {\n action: \"eth_getStorageAt\",\n address: req.address,\n position: req.position,\n tag: req.blockTag\n });\n case \"sendTransaction\":\n return this.fetch(\"proxy\", {\n action: \"eth_sendRawTransaction\",\n hex: req.signedTransaction\n }, true).catch((error) => {\n return this._checkError(req, error, req.signedTransaction);\n });\n case \"getBlock\":\n if (\"blockTag\" in req) {\n return this.fetch(\"proxy\", {\n action: \"eth_getBlockByNumber\",\n tag: req.blockTag,\n boolean: (req.includeTransactions ? \"true\" : \"false\")\n });\n }\n return logger.throwError(\"getBlock by blockHash not supported by Etherscan\", \"UNSUPPORTED_OPERATION\", {\n operation: \"getBlock(blockHash)\"\n });\n case \"getTransaction\":\n return this.fetch(\"proxy\", {\n action: \"eth_getTransactionByHash\",\n txhash: req.hash\n });\n case \"getTransactionReceipt\":\n return this.fetch(\"proxy\", {\n action: \"eth_getTransactionReceipt\",\n txhash: req.hash\n });\n case \"call\": {\n if (req.blockTag !== \"latest\") {\n throw new Error(\"EtherscanProvider does not support blockTag for call\");\n }\n const postData = this._getTransactionPostData(req.transaction);\n postData.module = \"proxy\";\n postData.action = \"eth_call\";\n try {\n return await this.fetch(\"proxy\", postData, true);\n }\n catch (error) {\n return this._checkError(req, error, req.transaction);\n }\n }\n case \"estimateGas\": {\n const postData = this._getTransactionPostData(req.transaction);\n postData.module = \"proxy\";\n postData.action = \"eth_estimateGas\";\n try {\n return await this.fetch(\"proxy\", postData, true);\n }\n catch (error) {\n return this._checkError(req, error, req.transaction);\n }\n }\n /*\n case \"getLogs\": {\n // Needs to complain if more than one address is passed in\n const args: Record = { action: \"getLogs\" }\n \n if (params.filter.fromBlock) {\n args.fromBlock = checkLogTag(params.filter.fromBlock);\n }\n \n if (params.filter.toBlock) {\n args.toBlock = checkLogTag(params.filter.toBlock);\n }\n \n if (params.filter.address) {\n args.address = params.filter.address;\n }\n \n // @TODO: We can handle slightly more complicated logs using the logs API\n if (params.filter.topics && params.filter.topics.length > 0) {\n if (params.filter.topics.length > 1) {\n logger.throwError(\"unsupported topic count\", Logger.Errors.UNSUPPORTED_OPERATION, { topics: params.filter.topics });\n }\n if (params.filter.topics.length === 1) {\n const topic0 = params.filter.topics[0];\n if (typeof(topic0) !== \"string\" || topic0.length !== 66) {\n logger.throwError(\"unsupported topic format\", Logger.Errors.UNSUPPORTED_OPERATION, { topic0: topic0 });\n }\n args.topic0 = topic0;\n }\n }\n \n const logs: Array = await this.fetch(\"logs\", args);\n \n // Cache txHash => blockHash\n let blocks: { [tag: string]: string } = {};\n \n // Add any missing blockHash to the logs\n for (let i = 0; i < logs.length; i++) {\n const log = logs[i];\n if (log.blockHash != null) { continue; }\n if (blocks[log.blockNumber] == null) {\n const block = await this.getBlock(log.blockNumber);\n if (block) {\n blocks[log.blockNumber] = block.hash;\n }\n }\n \n log.blockHash = blocks[log.blockNumber];\n }\n \n return logs;\n }\n */\n default:\n break;\n }\n return super._perform(req);\n }\n async getNetwork() {\n return this.network;\n }\n async getEtherPrice() {\n if (this.network.name !== \"homestead\") {\n return 0.0;\n }\n return parseFloat((await this.fetch(\"stats\", { action: \"ethprice\" })).ethusd);\n }\n isCommunityResource() {\n const plugin = this.network.getPlugin(EtherscanPluginId);\n if (plugin) {\n return (plugin.communityApiKey === this.apiKey);\n }\n return (defaultApiKey === this.apiKey);\n }\n}\n/*\n(async function() {\n const provider = new EtherscanProvider();\n console.log(provider);\n console.log(await provider.getBlockNumber());\n / *\n provider.on(\"block\", (b) => {\n console.log(\"BB\", b);\n });\n console.log(await provider.getTransactionReceipt(\"0xa5ded92f548e9f362192f9ab7e5b3fbc9b5a919a868e29247f177d49ce38de6e\"));\n\n provider.once(\"0xa5ded92f548e9f362192f9ab7e5b3fbc9b5a919a868e29247f177d49ce38de6e\", (tx) => {\n console.log(\"TT\", tx);\n });\n * /\n try {\n console.log(await provider.getBlock(100));\n } catch (error) {\n console.log(error);\n }\n\n try {\n console.log(await provider.getBlock(13821768));\n } catch (error) {\n console.log(error);\n }\n\n})();\n*/\n//# sourceMappingURL=provider-etherscan.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { FetchRequest } from \"@ethersproject/web\";\nimport { showThrottleMessage } from \"./community.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { StaticJsonRpcProvider } from \"./provider-jsonrpc.js\";\nconst defaultProjectId = \"84842078b09946638c03157f83405213\";\nfunction getHost(name) {\n switch (name) {\n case \"homestead\":\n return \"mainnet.infura.io\";\n case \"ropsten\":\n return \"ropsten.infura.io\";\n case \"rinkeby\":\n return \"rinkeby.infura.io\";\n case \"kovan\":\n return \"kovan.infura.io\";\n case \"goerli\":\n return \"goerli.infura.io\";\n case \"matic\":\n return \"polygon-mainnet.infura.io\";\n case \"maticmum\":\n return \"polygon-mumbai.infura.io\";\n case \"optimism\":\n return \"optimism-mainnet.infura.io\";\n case \"optimism-kovan\":\n return \"optimism-kovan.infura.io\";\n case \"arbitrum\":\n return \"arbitrum-mainnet.infura.io\";\n case \"arbitrum-rinkeby\":\n return \"arbitrum-rinkeby.infura.io\";\n }\n return logger.throwArgumentError(\"unsupported network\", \"network\", name);\n}\nexport class InfuraProvider extends StaticJsonRpcProvider {\n constructor(_network = \"homestead\", projectId, projectSecret) {\n const network = Network.from(_network);\n if (projectId == null) {\n projectId = defaultProjectId;\n }\n if (projectSecret == null) {\n projectSecret = null;\n }\n const connection = InfuraProvider.getConnection(network, projectId, projectSecret);\n super(connection, network);\n defineProperties(this, { projectId, projectSecret });\n }\n _getProvider(chainId) {\n try {\n return new InfuraProvider(chainId, this.projectId, this.projectSecret);\n }\n catch (error) { }\n return super._getProvider(chainId);\n }\n static getConnection(network, projectId, projectSecret) {\n if (projectId == null) {\n projectId = defaultProjectId;\n }\n if (projectSecret == null) {\n projectSecret = null;\n }\n const request = new FetchRequest(`https:/\\/${getHost(network.name)}/v3/${projectId}`);\n request.allowGzip = true;\n if (projectSecret) {\n request.setCredentials(\"\", projectSecret);\n }\n const throttleRetry = async (request, response, attempt) => {\n if (projectId === defaultProjectId) {\n showThrottleMessage(\"InfuraProvider\");\n }\n return true;\n };\n return { request, throttleRetry };\n }\n isCommunityResource() {\n return (this.projectId === defaultProjectId);\n }\n}\n//# sourceMappingURL=provider-infura.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { FetchRequest } from \"@ethersproject/web\";\nimport { showThrottleMessage } from \"./community.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { StaticJsonRpcProvider } from \"./provider-jsonrpc.js\";\n// These are load-balancer-based application IDs\nconst defaultAppIds = {\n homestead: \"6004bcd10040261633ade990\",\n ropsten: \"6004bd4d0040261633ade991\",\n rinkeby: \"6004bda20040261633ade994\",\n goerli: \"6004bd860040261633ade992\",\n};\nfunction getHost(name) {\n switch (name) {\n case \"homestead\":\n return \"eth-mainnet.gateway.pokt.network\";\n case \"ropsten\":\n return \"eth-ropsten.gateway.pokt.network\";\n case \"rinkeby\":\n return \"eth-rinkeby.gateway.pokt.network\";\n case \"goerli\":\n return \"eth-goerli.gateway.pokt.network\";\n }\n return logger.throwArgumentError(\"unsupported network\", \"network\", name);\n}\nfunction normalizeApiKey(network, _appId, applicationSecretKey, loadBalancer) {\n loadBalancer = !!loadBalancer;\n let community = false;\n let applicationId = _appId;\n if (applicationId == null) {\n applicationId = defaultAppIds[network.name];\n if (applicationId == null) {\n logger.throwArgumentError(\"network does not support default applicationId\", \"applicationId\", _appId);\n }\n loadBalancer = true;\n community = true;\n }\n else if (applicationId === defaultAppIds[network.name]) {\n loadBalancer = true;\n community = true;\n }\n if (applicationSecretKey == null) {\n applicationSecretKey = null;\n }\n return { applicationId, applicationSecretKey, community, loadBalancer };\n}\nexport class PocketProvider extends StaticJsonRpcProvider {\n constructor(_network = \"homestead\", _appId, _secretKey, _loadBalancer) {\n const network = Network.from(_network);\n const { applicationId, applicationSecretKey, loadBalancer } = normalizeApiKey(network, _appId, _secretKey, _loadBalancer);\n const connection = PocketProvider.getConnection(network, applicationId, applicationSecretKey, loadBalancer);\n super(connection, network);\n defineProperties(this, { applicationId, applicationSecretKey, loadBalancer });\n }\n static getConnection(network, _appId, _secretKey, _loadBalancer) {\n const { applicationId, applicationSecretKey, community, loadBalancer } = normalizeApiKey(network, _appId, _secretKey, _loadBalancer);\n let url = `https:/\\/${getHost(network.name)}/v1/`;\n if (loadBalancer) {\n url += \"lb/\";\n }\n url += applicationId;\n const request = new FetchRequest(url);\n request.allowGzip = true;\n if (applicationSecretKey) {\n request.setCredentials(\"\", applicationSecretKey);\n }\n const throttleRetry = async (request, response, attempt) => {\n if (community) {\n showThrottleMessage(\"PocketProvider\");\n }\n return true;\n };\n return { request, throttleRetry };\n }\n isCommunityResource() {\n return (this.applicationId === defaultAppIds[this.network.name]);\n }\n}\n//# sourceMappingURL=provider-pocket.js.map","export function shuffle(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n const tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n }\n}\n//# sourceMappingURL=shuffle.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _FallbackProvider_instances, _FallbackProvider_configs, _FallbackProvider_initialSyncPromise, _FallbackProvider_getNextConfig, _FallbackProvider_addRunner, _FallbackProvider_initialSync, _FallbackProvider_checkQuorum, _FallbackProvider_waitForQuorum;\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { AbstractProvider } from \"./abstract-provider.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { shuffle } from \"./shuffle.js\";\n//const BN_0 = BigInt(\"0\");\nconst BN_1 = BigInt(\"1\");\nconst BN_2 = BigInt(\"2\");\nfunction stall(duration) {\n return new Promise((resolve) => { setTimeout(resolve, duration); });\n}\nfunction getTime() { return (new Date()).getTime(); }\n;\nconst defaultConfig = { stallTimeout: 400, priority: 1, weight: 1 };\nconst defaultState = {\n blockNumber: -2, requests: 0, lateResponses: 0, errorResponses: 0,\n outOfSync: -1, unsupportedEvents: 0, rollingDuration: 0, score: 0,\n _network: null, _updateNumber: null, _totalTime: 0\n};\nasync function waitForSync(config, blockNumber) {\n while (config.blockNumber < 0 || config.blockNumber < blockNumber) {\n if (!config._updateNumber) {\n config._updateNumber = (async () => {\n const blockNumber = await config.provider.getBlockNumber();\n if (blockNumber > config.blockNumber) {\n config.blockNumber = blockNumber;\n }\n config._updateNumber = null;\n })();\n }\n await config._updateNumber;\n config.outOfSync++;\n }\n}\n// Normalizes a result to a string that can be used to compare against\n// other results using normal string equality\nfunction normalize(network, value, req) {\n switch (req.method) {\n case \"chainId\":\n return logger.getBigInt(value).toString();\n case \"getBlockNumber\":\n return logger.getNumber(value).toString();\n case \"getGasPrice\":\n return logger.getBigInt(value).toString();\n case \"getBalance\":\n return logger.getBigInt(value).toString();\n case \"getTransactionCount\":\n return logger.getNumber(value).toString();\n case \"getCode\":\n return hexlify(value);\n case \"getStorageAt\":\n return hexlify(value);\n case \"getBlock\":\n if (req.includeTransactions) {\n return JSON.stringify(network.formatter.blockWithTransactions(value));\n }\n return JSON.stringify(network.formatter.block(value));\n case \"getTransaction\":\n return JSON.stringify(network.formatter.transactionResponse(value));\n case \"getTransactionReceipt\":\n return JSON.stringify(network.formatter.receipt(value));\n case \"call\":\n return hexlify(value);\n case \"estimateGas\":\n return logger.getBigInt(value).toString();\n case \"getLogs\":\n return JSON.stringify(value.map((v) => network.formatter.log(v)));\n }\n return logger.throwError(\"unsupported method\", \"UNSUPPORTED_OPERATION\", {\n operation: `_perform(${JSON.stringify(req.method)})`\n });\n}\n// This strategy picks the highest wieght result, as long as the weight is\n// equal to or greater than quorum\nfunction checkQuorum(quorum, results) {\n const tally = new Map();\n for (const { result, normal, weight } of results) {\n const t = tally.get(normal) || { result, weight: 0 };\n t.weight += weight;\n tally.set(normal, t);\n }\n let bestWeight = 0;\n let bestResult = undefined;\n for (const { weight, result } of tally.values()) {\n if (weight >= quorum && weight > bestWeight) {\n bestWeight = weight;\n bestResult = result;\n }\n }\n return bestResult;\n}\n/*\nfunction getMean(results: Array): bigint {\n const total = results.reduce((a, r) => (a + BigInt(r.result)), BN_0);\n return total / BigInt(results.length);\n}\n*/\nfunction getMedian(results) {\n // Get the sorted values\n const values = results.map((r) => BigInt(r.result));\n values.sort((a, b) => ((a < b) ? -1 : (b > a) ? 1 : 0));\n const mid = values.length / 2;\n // Odd-length; take the middle value\n if (values.length % 2) {\n return values[mid];\n }\n // Even length; take the ceiling of the mean of the center two values\n return (values[mid - 1] + values[mid] + BN_1) / BN_2;\n}\nexport class FallbackProvider extends AbstractProvider {\n constructor(providers, network) {\n super(network);\n _FallbackProvider_instances.add(this);\n _FallbackProvider_configs.set(this, void 0);\n _FallbackProvider_initialSyncPromise.set(this, void 0);\n __classPrivateFieldSet(this, _FallbackProvider_configs, providers.map((p) => {\n if (p instanceof AbstractProvider) {\n return Object.assign({ provider: p }, defaultConfig, defaultState);\n }\n else {\n return Object.assign({}, defaultConfig, p, defaultState);\n }\n }), \"f\");\n __classPrivateFieldSet(this, _FallbackProvider_initialSyncPromise, null, \"f\");\n this.quorum = 2; //Math.ceil(providers.length / 2);\n this.eventQuorum = 1;\n this.eventWorkers = 1;\n if (this.quorum > __classPrivateFieldGet(this, _FallbackProvider_configs, \"f\").reduce((a, c) => (a + c.weight), 0)) {\n logger.throwArgumentError(\"quorum exceed provider wieght\", \"quorum\", this.quorum);\n }\n }\n async _detectNetwork() {\n return Network.from(logger.getBigInt(await this._perform({ method: \"chainId\" }))).freeze();\n }\n _getSubscriber(sub) {\n throw new Error(\"@TODO\");\n }\n async _perform(req) {\n await __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_initialSync).call(this);\n // Bootstrap enough to meet quorum\n const running = new Set();\n for (let i = 0; i < this.quorum; i++) {\n __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_addRunner).call(this, running, req);\n }\n const result = __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_waitForQuorum).call(this, running, req);\n for (const runner of running) {\n runner.done = true;\n }\n return result;\n }\n}\n_FallbackProvider_configs = new WeakMap(), _FallbackProvider_initialSyncPromise = new WeakMap(), _FallbackProvider_instances = new WeakSet(), _FallbackProvider_getNextConfig = function _FallbackProvider_getNextConfig(configs) {\n // Shuffle the states, sorted by priority\n const allConfigs = __classPrivateFieldGet(this, _FallbackProvider_configs, \"f\").slice();\n shuffle(allConfigs);\n allConfigs.sort((a, b) => (b.priority - a.priority));\n for (const config of allConfigs) {\n if (configs.indexOf(config) === -1) {\n return config;\n }\n }\n return null;\n}, _FallbackProvider_addRunner = function _FallbackProvider_addRunner(running, req) {\n const config = __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_getNextConfig).call(this, Array.from(running).map((r) => r.config));\n if (config == null) {\n return null;\n }\n const result = {};\n const runner = {\n config, result, didBump: false, done: false,\n perform: null, staller: null\n };\n const now = getTime();\n runner.perform = (async () => {\n try {\n config.requests++;\n result.result = await config.provider._perform(req);\n }\n catch (error) {\n config.errorResponses++;\n result.error = error;\n }\n if (runner.done) {\n config.lateResponses++;\n }\n const dt = (getTime() - now);\n config._totalTime += dt;\n config.rollingDuration = 0.95 * config.rollingDuration + 0.05 * dt;\n runner.perform = null;\n })();\n runner.staller = (async () => {\n await stall(config.stallTimeout);\n runner.staller = null;\n })();\n running.add(runner);\n return runner;\n}, _FallbackProvider_initialSync = \n// Initializes the blockNumber and network for each runner and\n// blocks until initialized\nasync function _FallbackProvider_initialSync() {\n let initialSync = __classPrivateFieldGet(this, _FallbackProvider_initialSyncPromise, \"f\");\n if (!initialSync) {\n const promises = [];\n __classPrivateFieldGet(this, _FallbackProvider_configs, \"f\").forEach((config) => {\n promises.push(waitForSync(config, 0));\n promises.push((async () => {\n config._network = await config.provider.getNetwork();\n })());\n });\n __classPrivateFieldSet(this, _FallbackProvider_initialSyncPromise, initialSync = (async () => {\n // Wait for all providers to have a block number and network\n await Promise.all(promises);\n // Check all the networks match\n let chainId = null;\n for (const config of __classPrivateFieldGet(this, _FallbackProvider_configs, \"f\")) {\n const network = (config._network);\n if (chainId == null) {\n chainId = network.chainId;\n }\n else if (network.chainId !== chainId) {\n logger.throwError(\"cannot mix providers on different networks\", \"UNSUPPORTED_OPERATION\", {\n operation: \"new FallbackProvider\"\n });\n }\n }\n })(), \"f\");\n }\n await initialSync;\n}, _FallbackProvider_checkQuorum = async function _FallbackProvider_checkQuorum(running, req) {\n // Get all the result objects\n const results = [];\n for (const runner of running) {\n if (\"result\" in runner.result) {\n const result = runner.result.result;\n results.push({\n result,\n normal: normalize((runner.config._network), result, req),\n weight: runner.config.weight\n });\n }\n }\n // Are there enough results to event meet quorum?\n if (results.reduce((a, r) => (a + r.weight), 0) < this.quorum) {\n return undefined;\n }\n switch (req.method) {\n case \"getBlockNumber\": {\n throw new Error(\"TODO\");\n }\n case \"getGasPrice\":\n case \"estimateGas\":\n return getMedian(results);\n case \"getBlock\":\n // Pending blocks are mempool dependant and already\n // quite untrustworthy\n if (\"blockTag\" in req && req.blockTag === \"pending\") {\n return results[0].result;\n }\n return checkQuorum(this.quorum, results);\n case \"chainId\":\n case \"getBalance\":\n case \"getTransactionCount\":\n case \"getCode\":\n case \"getStorageAt\":\n case \"getTransaction\":\n case \"getTransactionReceipt\":\n case \"getLogs\":\n return checkQuorum(this.quorum, results);\n case \"call\":\n // @TODO: Check errors\n return checkQuorum(this.quorum, results);\n case \"sendTransaction\":\n throw new Error(\"TODO\");\n }\n return logger.throwError(\"unsupported method\", \"UNSUPPORTED_OPERATION\", {\n operation: `_perform(${JSON.stringify(req.method)})`\n });\n}, _FallbackProvider_waitForQuorum = async function _FallbackProvider_waitForQuorum(running, req) {\n if (running.size === 0) {\n throw new Error(\"no runners?!\");\n }\n // Any promises that are interesting to watch for; an expired stall\n // or a successful perform\n const interesting = [];\n //const results: Array = [ ];\n //const errors: Array = [ ];\n let newRunners = 0;\n for (const runner of running) {\n // @TODO: use runner.perfom != null\n /*\n if (\"result\" in runner.result) {\n results.push(runner.result.result);\n } else if (\"error\" in runner.result) {\n errors.push(runner.result.error);\n }\n*/\n // No responses, yet; keep an eye on it\n if (runner.perform) {\n interesting.push(runner.perform);\n }\n // Still stalling...\n if (runner.staller) {\n interesting.push(runner.staller);\n continue;\n }\n // This runner has already triggered another runner\n if (runner.didBump) {\n continue;\n }\n // Got a response (result or error) or stalled; kick off another runner\n runner.didBump = true;\n newRunners++;\n }\n // Check for quorum\n /*\n console.log({ results, errors } );\n if (results.length >= this.quorum) {\n return results[0];\n }\n\n if (errors.length >= this.quorum) {\n return errors[0];\n }\n */\n const value = await __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_checkQuorum).call(this, running, req);\n if (value !== undefined) {\n if (value instanceof Error) {\n throw value;\n }\n return value;\n }\n // Add any new runners, because a staller timed out or a result\n // or error response came in.\n for (let i = 0; i < newRunners; i++) {\n __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_addRunner).call(this, running, req);\n }\n if (interesting.length === 0) {\n throw new Error(\"quorum not met\");\n // return logger.throwError(\"failed to meet quorum\", \"\", {\n // });\n }\n // Wait for someone to either complete its perform or trigger a stall\n await Promise.race(interesting);\n return await __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_waitForQuorum).call(this, running, req);\n};\n//# sourceMappingURL=provider-fallback.js.map","function getGlobal() {\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n throw new Error('unable to locate global object');\n}\n;\nconst _WebSocket = getGlobal().WebSocket;\nexport { _WebSocket as WebSocket };\n//# sourceMappingURL=ws-browser.js.map","/**\n * SocketProvider\n *\n * Generic long-lived socket provider.\n *\n * Sub-classing notes\n * - a sub-class MUST call the `_start()` method once connected\n * - a sub-class MUST override the `_write(string)` method\n * - a sub-class MUST call `_processMessage(string)` for each message\n */\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _SocketSubscriber_provider, _SocketSubscriber_filter, _SocketSubscriber_filterId, _SocketSubscriber_paused, _SocketSubscriber_emitPromise, _SocketEventSubscriber_logFilter, _SocketEventSubscriber_formatter, _SocketProvider_callbacks, _SocketProvider_ready, _SocketProvider_subs, _SocketProvider_pending;\nimport { UnmanagedSubscriber } from \"./abstract-provider.js\";\nimport { logger } from \"./logger.js\";\nimport { JsonRpcApiProvider } from \"./provider-jsonrpc.js\";\nexport class SocketSubscriber {\n constructor(provider, filter) {\n _SocketSubscriber_provider.set(this, void 0);\n _SocketSubscriber_filter.set(this, void 0);\n _SocketSubscriber_filterId.set(this, void 0);\n _SocketSubscriber_paused.set(this, void 0);\n _SocketSubscriber_emitPromise.set(this, void 0);\n __classPrivateFieldSet(this, _SocketSubscriber_provider, provider, \"f\");\n __classPrivateFieldSet(this, _SocketSubscriber_filter, JSON.stringify(filter), \"f\");\n __classPrivateFieldSet(this, _SocketSubscriber_filterId, null, \"f\");\n __classPrivateFieldSet(this, _SocketSubscriber_paused, null, \"f\");\n __classPrivateFieldSet(this, _SocketSubscriber_emitPromise, null, \"f\");\n }\n get filter() { return JSON.parse(__classPrivateFieldGet(this, _SocketSubscriber_filter, \"f\")); }\n start() {\n __classPrivateFieldSet(this, _SocketSubscriber_filterId, __classPrivateFieldGet(this, _SocketSubscriber_provider, \"f\").send(\"eth_subscribe\", this.filter).then((filterId) => {\n ;\n __classPrivateFieldGet(this, _SocketSubscriber_provider, \"f\")._register(filterId, this);\n return filterId;\n }), \"f\");\n }\n stop() {\n (__classPrivateFieldGet(this, _SocketSubscriber_filterId, \"f\")).then((filterId) => {\n __classPrivateFieldGet(this, _SocketSubscriber_provider, \"f\").send(\"eth_unsubscribe\", [filterId]);\n });\n __classPrivateFieldSet(this, _SocketSubscriber_filterId, null, \"f\");\n }\n // @TODO: pause should trap the current blockNumber, unsub, and on resume use getLogs\n // and resume\n pause(dropWhilePaused) {\n if (!dropWhilePaused) {\n logger.throwError(\"preserve logs while paused not supported by SocketSubscriber yet\", \"UNSUPPORTED_OPERATION\", {\n operation: \"pause(false)\"\n });\n }\n __classPrivateFieldSet(this, _SocketSubscriber_paused, !!dropWhilePaused, \"f\");\n }\n resume() {\n __classPrivateFieldSet(this, _SocketSubscriber_paused, null, \"f\");\n }\n _handleMessage(message) {\n if (__classPrivateFieldGet(this, _SocketSubscriber_filterId, \"f\") == null) {\n return;\n }\n if (__classPrivateFieldGet(this, _SocketSubscriber_paused, \"f\") === null) {\n let emitPromise = __classPrivateFieldGet(this, _SocketSubscriber_emitPromise, \"f\");\n if (emitPromise == null) {\n emitPromise = this._emit(__classPrivateFieldGet(this, _SocketSubscriber_provider, \"f\"), message);\n }\n else {\n emitPromise = emitPromise.then(async () => {\n await this._emit(__classPrivateFieldGet(this, _SocketSubscriber_provider, \"f\"), message);\n });\n }\n __classPrivateFieldSet(this, _SocketSubscriber_emitPromise, emitPromise.then(() => {\n if (__classPrivateFieldGet(this, _SocketSubscriber_emitPromise, \"f\") === emitPromise) {\n __classPrivateFieldSet(this, _SocketSubscriber_emitPromise, null, \"f\");\n }\n }), \"f\");\n }\n }\n async _emit(provider, message) {\n throw new Error(\"sub-classes must implemente this; _emit\");\n }\n}\n_SocketSubscriber_provider = new WeakMap(), _SocketSubscriber_filter = new WeakMap(), _SocketSubscriber_filterId = new WeakMap(), _SocketSubscriber_paused = new WeakMap(), _SocketSubscriber_emitPromise = new WeakMap();\nexport class SocketBlockSubscriber extends SocketSubscriber {\n constructor(provider) {\n super(provider, [\"newHeads\"]);\n }\n async _emit(provider, message) {\n provider.emit(\"block\", parseInt(message.number));\n }\n}\nexport class SocketPendingSubscriber extends SocketSubscriber {\n constructor(provider) {\n super(provider, [\"newPendingTransactions\"]);\n }\n async _emit(provider, message) {\n provider.emit(\"pending\", message);\n }\n}\nexport class SocketEventSubscriber extends SocketSubscriber {\n constructor(provider, filter) {\n super(provider, [\"logs\", filter]);\n _SocketEventSubscriber_logFilter.set(this, void 0);\n _SocketEventSubscriber_formatter.set(this, void 0);\n __classPrivateFieldSet(this, _SocketEventSubscriber_logFilter, JSON.stringify(filter), \"f\");\n __classPrivateFieldSet(this, _SocketEventSubscriber_formatter, provider.getNetwork().then((network) => network.formatter), \"f\");\n }\n get logFilter() { return JSON.parse(__classPrivateFieldGet(this, _SocketEventSubscriber_logFilter, \"f\")); }\n async _emit(provider, message) {\n const formatter = await __classPrivateFieldGet(this, _SocketEventSubscriber_formatter, \"f\");\n provider.emit(__classPrivateFieldGet(this, _SocketEventSubscriber_logFilter, \"f\"), formatter.log(message, provider));\n }\n}\n_SocketEventSubscriber_logFilter = new WeakMap(), _SocketEventSubscriber_formatter = new WeakMap();\nexport class SocketProvider extends JsonRpcApiProvider {\n constructor(network) {\n super(network);\n _SocketProvider_callbacks.set(this, void 0);\n _SocketProvider_ready.set(this, void 0);\n // Maps each filterId to its subscriber\n _SocketProvider_subs.set(this, void 0);\n // If any events come in before a subscriber has finished\n // registering, queue them\n _SocketProvider_pending.set(this, void 0);\n __classPrivateFieldSet(this, _SocketProvider_callbacks, new Map(), \"f\");\n __classPrivateFieldSet(this, _SocketProvider_ready, false, \"f\");\n __classPrivateFieldSet(this, _SocketProvider_subs, new Map(), \"f\");\n __classPrivateFieldSet(this, _SocketProvider_pending, new Map(), \"f\");\n }\n _getSubscriber(sub) {\n switch (sub.type) {\n case \"close\":\n return new UnmanagedSubscriber(\"close\");\n case \"block\":\n return new SocketBlockSubscriber(this);\n case \"pending\":\n return new SocketPendingSubscriber(this);\n case \"event\":\n return new SocketEventSubscriber(this, sub.filter);\n case \"orphan\":\n // Handled auto-matically within AbstractProvider\n // when the log.removed = true\n if (sub.filter.orphan === \"drop-log\") {\n return new UnmanagedSubscriber(\"drop-log\");\n }\n }\n return super._getSubscriber(sub);\n }\n _register(filterId, subscriber) {\n __classPrivateFieldGet(this, _SocketProvider_subs, \"f\").set(filterId, subscriber);\n const pending = __classPrivateFieldGet(this, _SocketProvider_pending, \"f\").get(filterId);\n if (pending) {\n for (const message of pending) {\n subscriber._handleMessage(message);\n }\n __classPrivateFieldGet(this, _SocketProvider_pending, \"f\").delete(filterId);\n }\n }\n async send(method, params) {\n const payload = this.prepareRequest(method, params);\n const promise = new Promise((resolve, reject) => {\n __classPrivateFieldGet(this, _SocketProvider_callbacks, \"f\").set(payload.id, { payload, resolve, reject });\n });\n if (__classPrivateFieldGet(this, _SocketProvider_ready, \"f\")) {\n await this._write(JSON.stringify(payload));\n }\n return await promise;\n }\n // Sub-classes must call this once they are connected\n async _start() {\n if (__classPrivateFieldGet(this, _SocketProvider_ready, \"f\")) {\n return;\n }\n __classPrivateFieldSet(this, _SocketProvider_ready, true, \"f\");\n for (const { payload } of __classPrivateFieldGet(this, _SocketProvider_callbacks, \"f\").values()) {\n await this._write(JSON.stringify(payload));\n }\n }\n // Sub-classes must call this for each message\n async _processMessage(message) {\n const result = JSON.parse(message);\n if (\"id\" in result) {\n const promise = __classPrivateFieldGet(this, _SocketProvider_callbacks, \"f\").get(result.id);\n if (!promise) {\n console.log(\"Weird... Response for not a thing we sent\");\n return;\n }\n __classPrivateFieldGet(this, _SocketProvider_callbacks, \"f\").delete(result.id);\n if (\"error\" in result) {\n const { message, code, data } = result.error;\n const error = logger.makeError(message || \"unkonwn error\", \"SERVER_ERROR\", {\n request: `ws:${JSON.stringify(promise.payload)}`,\n info: { code, data }\n });\n promise.reject(error);\n }\n else {\n promise.resolve(result.result);\n }\n }\n else if (result.method === \"eth_subscription\") {\n const filterId = result.params.subscription;\n const subscriber = __classPrivateFieldGet(this, _SocketProvider_subs, \"f\").get(filterId);\n if (subscriber) {\n subscriber._handleMessage(result.params.result);\n }\n else {\n let pending = __classPrivateFieldGet(this, _SocketProvider_pending, \"f\").get(filterId);\n if (pending == null) {\n pending = [];\n __classPrivateFieldGet(this, _SocketProvider_pending, \"f\").set(filterId, pending);\n }\n pending.push(result.params.result);\n }\n }\n }\n async _write(message) {\n throw new Error(\"sub-classes must override this\");\n }\n}\n_SocketProvider_callbacks = new WeakMap(), _SocketProvider_ready = new WeakMap(), _SocketProvider_subs = new WeakMap(), _SocketProvider_pending = new WeakMap();\n//# sourceMappingURL=provider-socket.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _WebSocketProvider_websocket;\nimport { WebSocket } from \"ws\"; /*-browser*/\nimport { SocketProvider } from \"./provider-socket.js\";\nexport class WebSocketProvider extends SocketProvider {\n constructor(url, network) {\n super(network);\n _WebSocketProvider_websocket.set(this, void 0);\n if (typeof (url) === \"string\") {\n __classPrivateFieldSet(this, _WebSocketProvider_websocket, new WebSocket(url), \"f\");\n }\n else {\n __classPrivateFieldSet(this, _WebSocketProvider_websocket, url, \"f\");\n }\n this.websocket.onopen = () => {\n this._start();\n };\n this.websocket.onmessage = (message) => {\n this._processMessage(message.data);\n };\n }\n get websocket() { return __classPrivateFieldGet(this, _WebSocketProvider_websocket, \"f\"); }\n async _write(message) {\n this.websocket.send(message);\n }\n}\n_WebSocketProvider_websocket = new WeakMap();\n//# sourceMappingURL=provider-websocket.js.map","import { EnsPlugin, GasCostPlugin, MaxPriorityFeePlugin } from \"./plugins-network.js\";\nimport { EtherscanPlugin } from \"./provider-etherscan.js\";\nimport { Network as _Network } from \"./network.js\";\n// See: https://chainlist.org\nfunction injectCommonNetworks(Network) {\n /// Register popular Ethereum networks\n function registerEth(name, chainId, options) {\n const func = function () {\n const network = new Network(name, chainId);\n // We use 0 to disable ENS\n if (options.ensNetwork != null) {\n network.attachPlugin(new EnsPlugin(null, options.ensNetwork));\n }\n if (options.priorityFee) {\n network.attachPlugin(new MaxPriorityFeePlugin(options.priorityFee));\n }\n if (options.etherscan) {\n const { url, apiKey } = options.etherscan;\n network.attachPlugin(new EtherscanPlugin(url, apiKey));\n }\n network.attachPlugin(new GasCostPlugin());\n return network;\n };\n // Register the network by name and chain ID\n Network.register(name, func);\n Network.register(chainId, func);\n if (options.altNames) {\n options.altNames.forEach((name) => {\n Network.register(name, func);\n });\n }\n }\n registerEth(\"homestead\", 1, { ensNetwork: 1, altNames: [\"mainnet\"] });\n registerEth(\"ropsten\", 3, { ensNetwork: 3 });\n registerEth(\"rinkeby\", 4, { ensNetwork: 4 });\n registerEth(\"goerli\", 5, { ensNetwork: 5 });\n registerEth(\"kovan\", 42, { ensNetwork: 42 });\n registerEth(\"classic\", 61, {});\n registerEth(\"classicKotti\", 6, {});\n registerEth(\"xdai\", 100, { ensNetwork: 1 });\n // Polygon has a 35 gwei maxPriorityFee requirement\n registerEth(\"matic\", 137, {\n ensNetwork: 1,\n priorityFee: 35000000000,\n etherscan: {\n apiKey: \"W6T8DJW654GNTQ34EFEYYP3EZD9DD27CT7\",\n url: \"https:/\\/api.polygonscan.com/\"\n }\n });\n registerEth(\"maticMumbai\", 80001, {\n priorityFee: 35000000000,\n etherscan: {\n apiKey: \"W6T8DJW654GNTQ34EFEYYP3EZD9DD27CT7\",\n url: \"https:/\\/api-testnet.polygonscan.com/\"\n }\n });\n registerEth(\"bnb\", 56, {\n ensNetwork: 1,\n etherscan: {\n apiKey: \"EVTS3CU31AATZV72YQ55TPGXGMVIFUQ9M9\",\n url: \"http:/\\/api.bscscan.com\"\n }\n });\n registerEth(\"bnbt\", 97, {\n etherscan: {\n apiKey: \"EVTS3CU31AATZV72YQ55TPGXGMVIFUQ9M9\",\n url: \"http:/\\/api-testnet.bscscan.com\"\n }\n });\n return Network;\n}\nconst Network = injectCommonNetworks(_Network);\nexport { Network };\n//# sourceMappingURL=common-networks.js.map","const IpcSocketProvider = undefined;\nexport { IpcSocketProvider };\n//# sourceMappingURL=provider-ipcsocket-browser.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _ContractTransactionReceipt_interface, _ContractTransactionResponse_interface;\nimport { defineProperties, EventPayload } from \"@ethersproject/properties\";\nimport { Log, TransactionReceipt, TransactionResponse } from \"@ethersproject/providers\";\nexport class EventLog extends Log {\n constructor(log, iface, fragment) {\n super(log, log.provider);\n const args = iface.decodeEventLog(fragment, log.data, log.topics);\n defineProperties(this, { args, fragment, interface: iface });\n }\n get eventName() { return this.fragment.name; }\n get eventSignature() { return this.fragment.format(); }\n}\nexport class ContractTransactionReceipt extends TransactionReceipt {\n constructor(iface, provider, tx) {\n super(tx, provider);\n _ContractTransactionReceipt_interface.set(this, void 0);\n __classPrivateFieldSet(this, _ContractTransactionReceipt_interface, iface, \"f\");\n }\n get logs() {\n return super.logs.map((log) => {\n const fragment = log.topics.length ? __classPrivateFieldGet(this, _ContractTransactionReceipt_interface, \"f\").getEvent(log.topics[0]) : null;\n if (fragment) {\n return new EventLog(log, __classPrivateFieldGet(this, _ContractTransactionReceipt_interface, \"f\"), fragment);\n }\n else {\n return log;\n }\n });\n }\n}\n_ContractTransactionReceipt_interface = new WeakMap();\nexport class ContractTransactionResponse extends TransactionResponse {\n constructor(iface, provider, tx) {\n super(tx, provider);\n _ContractTransactionResponse_interface.set(this, void 0);\n __classPrivateFieldSet(this, _ContractTransactionResponse_interface, iface, \"f\");\n }\n async wait(confirms) {\n const receipt = await super.wait();\n if (receipt == null) {\n return null;\n }\n return new ContractTransactionReceipt(__classPrivateFieldGet(this, _ContractTransactionResponse_interface, \"f\"), this.provider, receipt);\n }\n}\n_ContractTransactionResponse_interface = new WeakMap();\nexport class ContractEventPayload extends EventPayload {\n constructor(contract, listener, filter, fragment, _log) {\n super(contract, listener, filter);\n const log = new EventLog(_log, contract.interface, fragment);\n const args = contract.interface.decodeEventLog(fragment, log.data, log.topics);\n defineProperties(this, { args, fragment, log });\n }\n get eventName() {\n return this.fragment.name;\n }\n get eventSignature() {\n return this.fragment.format();\n }\n async getBlock() {\n return await this.log.getBlock();\n }\n async getTransaction() {\n return await this.log.getTransaction();\n }\n async getTransactionReceipt() {\n return await this.log.getTransactionReceipt();\n }\n}\n//# sourceMappingURL=wrappers.js.map","export const version = \"@ethersproject/contract@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _PreparedTopicFilter_filter;\nimport { resolveAddress } from \"@ethersproject/address\";\nimport { Interface, Typed } from \"@ethersproject/abi\";\nimport { isHexString } from \"@ethersproject/bytes\";\nimport { isCallException } from \"@ethersproject/logger\";\nimport { defineProperties, resolveProperties } from \"@ethersproject/properties\";\nimport { copyRequest } from \"@ethersproject/providers\";\nimport { ContractEventPayload, ContractTransactionResponse, EventLog } from \"./wrappers.js\";\nimport { logger } from \"./logger.js\";\nfunction canEstimate(value) {\n return (value && typeof (value.estimateGas) === \"function\");\n}\nfunction canCall(value) {\n return (value && typeof (value.call) === \"function\");\n}\nfunction canSend(value) {\n return (value && typeof (value.sendTransaction) === \"function\");\n}\nfunction canResolve(value) {\n return (value && typeof (value.resolveName) === \"function\");\n}\nfunction canQuery(value) {\n return (value && typeof (value.getLogs) === \"function\");\n}\nfunction canSubscribe(value) {\n return (value && typeof (value.on) === \"function\" && typeof (value.off) === \"function\");\n}\nfunction concisify(items) {\n items = Array.from((new Set(items)).values());\n items.sort();\n return items;\n}\nclass PreparedTopicFilter {\n constructor(contract, fragment, args) {\n _PreparedTopicFilter_filter.set(this, void 0);\n defineProperties(this, { fragment });\n if (fragment.inputs.length < args.length) {\n throw new Error(\"too many arguments\");\n }\n // Recursively descend into args and resolve any addresses\n const runner = getRunner(contract.runner, \"resolveName\");\n const resolver = canResolve(runner) ? runner : null;\n __classPrivateFieldSet(this, _PreparedTopicFilter_filter, (async function () {\n const resolvedArgs = await Promise.all(fragment.inputs.map((param, index) => {\n return param.walkAsync(args[index], (type, value) => {\n if (type === \"address\") {\n return resolveAddress(value, resolver);\n }\n return value;\n });\n }));\n return contract.interface.encodeFilterTopics(fragment, resolvedArgs);\n })(), \"f\");\n }\n getTopicFilter() {\n return __classPrivateFieldGet(this, _PreparedTopicFilter_filter, \"f\");\n }\n}\n_PreparedTopicFilter_filter = new WeakMap();\n// A = Arguments passed in as a tuple\n// R = The result type of the call (i.e. if only one return type,\n// the qualified type, otherwise Result)\n// D = The type the default call will return (i.e. R for view/pure,\n// TransactionResponse otherwise)\n//export interface ContractMethod = Array, R = any, D extends R | ContractTransactionResponse = ContractTransactionResponse> {\nfunction _WrappedMethodBase() {\n return Function;\n}\nfunction getRunner(value, feature) {\n if (value == null) {\n return null;\n }\n if (typeof (value[feature]) === \"function\") {\n return value;\n }\n if (value.provider && typeof (value.provider[feature]) === \"function\") {\n return value.provider;\n }\n return null;\n}\nexport async function copyOverrides(arg) {\n // Create a shallow copy (we'll deep-ify anything needed during normalizing)\n const overrides = copyRequest(Typed.dereference(arg, \"overrides\"));\n // Some sanity checking; these are what these methods adds\n //if ((overrides).to) {\n if (overrides.to) {\n logger.throwArgumentError(\"cannot override to\", \"overrides.to\", overrides.to);\n }\n else if (overrides.data) {\n logger.throwArgumentError(\"cannot override data\", \"overrides.data\", overrides.data);\n }\n // Resolve any from\n if (overrides.from) {\n overrides.from = await resolveAddress(overrides.from);\n }\n return overrides;\n}\nexport async function resolveArgs(_runner, inputs, args) {\n // Recursively descend into args and resolve any addresses\n const runner = getRunner(_runner, \"resolveName\");\n const resolver = canResolve(runner) ? runner : null;\n return await Promise.all(inputs.map((param, index) => {\n return param.walkAsync(args[index], (type, value) => {\n if (type === \"address\") {\n return resolveAddress(value, resolver);\n }\n return value;\n });\n }));\n}\nclass WrappedMethod extends _WrappedMethodBase() {\n constructor(contract, key) {\n super();\n defineProperties(this, {\n name: contract.interface.getFunctionName(key),\n _contract: contract, _key: key\n });\n const proxy = new Proxy(this, {\n // Perform the default operation for this fragment type\n apply: async (target, thisArg, args) => {\n const fragment = target.getFragment(...args);\n if (fragment.constant) {\n return await target.staticCall(...args);\n }\n return await target.send(...args);\n },\n });\n return proxy;\n }\n // Only works on non-ambiguous keys (refined fragment is always non-ambiguous)\n get fragment() {\n return this._contract.interface.getFunction(this._key);\n }\n getFragment(...args) {\n return this._contract.interface.getFunction(this._key, args);\n }\n async populateTransaction(...args) {\n const fragment = this.getFragment(...args);\n // If an overrides was passed in, copy it and normalize the values\n let overrides = {};\n if (fragment.inputs.length + 1 === args.length) {\n overrides = await copyOverrides(args.pop());\n }\n if (fragment.inputs.length !== args.length) {\n throw new Error(\"internal error: fragment inputs doesn't match arguments; should not happen\");\n }\n const resolvedArgs = await resolveArgs(this._contract.runner, fragment.inputs, args);\n return Object.assign({}, overrides, await resolveProperties({\n to: this._contract.getAddress(),\n data: this._contract.interface.encodeFunctionData(fragment, resolvedArgs)\n }));\n }\n async staticCall(...args) {\n const result = await this.staticCallResult(...args);\n if (result.length === 1) {\n return result[0];\n }\n return result;\n }\n async send(...args) {\n const runner = getRunner(this._contract.runner, \"sendTransaction\");\n if (!canSend(runner)) {\n return logger.throwError(\"contract runner does not support sending transactions\", \"UNSUPPORTED_OPERATION\", {\n operation: \"sendTransaction\"\n });\n }\n const tx = await runner.sendTransaction(await this.populateTransaction(...args));\n const provider = getRunner(this._contract.runner, \"getLogs\");\n return new ContractTransactionResponse(this._contract.interface, provider, tx);\n }\n async estimateGas(...args) {\n const runner = getRunner(this._contract.runner, \"estimateGas\");\n if (!canEstimate(runner)) {\n return logger.throwError(\"contract runner does not support gas estimation\", \"UNSUPPORTED_OPERATION\", {\n operation: \"estimateGas\"\n });\n }\n return await runner.estimateGas(await this.populateTransaction(...args));\n }\n async staticCallResult(...args) {\n const runner = getRunner(this._contract.runner, \"call\");\n if (!canCall(runner)) {\n return logger.throwError(\"contract runner does not support calling\", \"UNSUPPORTED_OPERATION\", {\n operation: \"call\"\n });\n }\n const fragment = this.getFragment(...args);\n const tx = await this.populateTransaction(...args);\n let result = \"0x\";\n try {\n result = await runner.call(tx);\n }\n catch (error) {\n if (isCallException(error)) {\n throw this._contract.interface.makeError(fragment, error.data, tx);\n }\n throw error;\n }\n return this._contract.interface.decodeFunctionResult(fragment, result);\n }\n}\nfunction _WrappedEventBase() {\n return Function;\n}\nclass WrappedEvent extends _WrappedEventBase() {\n constructor(contract, key) {\n super();\n defineProperties(this, {\n name: contract.interface.getEventName(key),\n _contract: contract, _key: key\n });\n return new Proxy(this, {\n // Perform the default operation for this fragment type\n apply: async (target, thisArg, args) => {\n return new PreparedTopicFilter(contract, target.getFragment(...args), args);\n },\n });\n }\n // Only works on non-ambiguous keys\n get fragment() {\n return this._contract.interface.getEvent(this._key);\n }\n getFragment(...args) {\n return this._contract.interface.getEvent(this._key, args);\n }\n}\n;\n// The combination of TypeScrype, Private Fields and Proxies makes\n// the world go boom; so we hide variables with some trickery keeping\n// a symbol attached to each BaseContract which its sub-class (even\n// via a Proxy) can reach and use to look up its internal values.\nconst internal = Symbol.for(\"_ethersInternal_contract\");\nconst internalValues = new WeakMap();\nfunction setInternal(contract, values) {\n internalValues.set(contract[internal], values);\n}\nfunction getInternal(contract) {\n return internalValues.get(contract[internal]);\n}\nfunction isDeferred(value) {\n return (value && typeof (value) === \"object\" && (\"getTopicFilter\" in value) &&\n (typeof (value.getTopicFilter) === \"function\") && value.fragment);\n}\nasync function getSubTag(contract, event) {\n let fragment;\n let topics;\n if (Array.isArray(event)) {\n // Topics; e.g. `[ \"0x1234...89ab\" ]`\n fragment = contract.interface.getEvent(event[0]);\n topics = event;\n }\n else if (typeof (event) === \"string\") {\n // Event name (name or signature); `\"Transfer\"`\n fragment = contract.interface.getEvent(event);\n topics = [contract.interface.getEventTopic(fragment)];\n }\n else if (isDeferred(event)) {\n // Deferred Topic Filter; e.g. `contract.filter.Transfer(from)`\n fragment = event.fragment;\n topics = await event.getTopicFilter();\n }\n else if (\"fragment\" in event) {\n // ContractEvent; e.g. `contract.filter.Transfer`\n fragment = event.fragment;\n topics = [contract.interface.getEventTopic(fragment)];\n }\n else {\n console.log(event);\n throw new Error(\"TODO\");\n }\n // Normalize topics and sort TopicSets\n topics = topics.map((t) => {\n if (t == null) {\n return null;\n }\n if (Array.isArray(t)) {\n return concisify(t.map((t) => t.toLowerCase()));\n }\n return t.toLowerCase();\n });\n const tag = topics.map((t) => {\n if (t == null) {\n return \"null\";\n }\n if (Array.isArray(t)) {\n return t.join(\"|\");\n }\n return t;\n }).join(\"&\");\n return { fragment, tag, topics };\n}\nasync function hasSub(contract, event) {\n const { subs } = getInternal(contract);\n return subs.get((await getSubTag(contract, event)).tag) || null;\n}\nasync function getSub(contract, event) {\n // Make sure our runner can actually subscribe to events\n const runner = getRunner(contract.runner, \"on\");\n const runnerOff = getRunner(contract.runner, \"off\");\n if (!runner || runner !== runnerOff || !canSubscribe(runner)) {\n return logger.throwError(\"contract runner does not support subscribing\", \"UNSUPPORTED_OPERATION\", {\n operation: \"on\"\n });\n }\n const { fragment, tag, topics } = await getSubTag(contract, event);\n const { addr, subs } = getInternal(contract);\n let sub = subs.get(tag);\n if (!sub) {\n const address = (addr ? addr : contract);\n const filter = { address, topics };\n const listener = (log) => {\n const payload = new ContractEventPayload(contract, null, event, fragment, log);\n emit(contract, event, payload.args, payload);\n };\n let started = false;\n const start = () => {\n if (started) {\n return;\n }\n runner.on(filter, listener);\n started = true;\n };\n const stop = () => {\n if (!started) {\n return;\n }\n runner.off(filter, listener);\n started = false;\n };\n sub = { tag, listeners: [], start, stop };\n subs.set(tag, sub);\n }\n return sub;\n}\nasync function _emit(contract, event, args, payload) {\n await lastEmit;\n const sub = await hasSub(contract, event);\n if (!sub) {\n return false;\n }\n const count = sub.listeners.length;\n sub.listeners = sub.listeners.filter(({ listener, once }) => {\n const passArgs = args.slice();\n if (payload) {\n passArgs.push(new ContractEventPayload(contract, (once ? null : listener), event, payload.fragment, payload.log));\n }\n setTimeout(() => { listener.call(contract, ...passArgs); }, 0);\n return !once;\n });\n return (count > 0);\n}\n// We use this to ensure one emit resolves before firing the next to\n// ensure correct ordering (note this cannot throw and just adds the\n// notice to the event queu using setTimeout).\nlet lastEmit = Promise.resolve();\nasync function emit(contract, event, args, payload) {\n try {\n await lastEmit;\n }\n catch (error) { }\n const resultPromise = _emit(contract, event, args, payload);\n lastEmit = resultPromise;\n return await resultPromise;\n}\nconst passProperties = [\"then\"];\nexport class BaseContract {\n constructor(target, abi, runner = null, _deployTx) {\n const iface = Interface.from(abi);\n defineProperties(this, { target, runner, interface: iface });\n Object.defineProperty(this, internal, { value: {} });\n let addrPromise;\n let addr = null;\n let deployTx = null;\n if (_deployTx) {\n const provider = getRunner(runner, \"getLogs\");\n deployTx = new ContractTransactionResponse(this.interface, provider, _deployTx);\n }\n let subs = new Map();\n // Resolve the target as the address\n if (typeof (target) === \"string\") {\n if (isHexString(target)) {\n addr = target;\n addrPromise = Promise.resolve(target);\n }\n else {\n const resolver = getRunner(runner, \"resolveName\");\n if (!canResolve(resolver)) {\n throw logger.makeError(\"contract runner does not support name resolution\", \"UNSUPPORTED_OPERATION\", {\n operation: \"resolveName\"\n });\n }\n addrPromise = resolver.resolveName(target).then((addr) => {\n if (addr == null) {\n throw new Error(\"TODO\");\n }\n getInternal(this).addr = addr;\n return addr;\n });\n }\n }\n else {\n addrPromise = target.getAddress().then((addr) => {\n if (addr == null) {\n throw new Error(\"TODO\");\n }\n getInternal(this).addr = addr;\n return addr;\n });\n }\n // Set our private values\n setInternal(this, { addrPromise, addr, deployTx, subs });\n // Add the event filters\n const filters = new Proxy({}, {\n get: (target, _prop, receiver) => {\n // Pass important checks (like `then` for Promise) through\n if (passProperties.indexOf(_prop) >= 0) {\n return Reflect.get(target, _prop, receiver);\n }\n const prop = String(_prop);\n const result = this.getEvent(prop);\n if (result) {\n return result;\n }\n throw new Error(`unknown contract event: ${prop}`);\n }\n });\n defineProperties(this, { filters });\n // Return a Proxy that will respond to functions\n return new Proxy(this, {\n get: (target, _prop, receiver) => {\n if (_prop in target || passProperties.indexOf(_prop) >= 0) {\n return Reflect.get(target, _prop, receiver);\n }\n const prop = String(_prop);\n const result = target.getFunction(prop);\n if (result) {\n return result;\n }\n throw new Error(`unknown contract method: ${prop}`);\n }\n });\n }\n async getAddress() { return await getInternal(this).addrPromise; }\n deploymentTransaction() {\n return getInternal(this).deployTx;\n }\n getFunction(key) {\n if (typeof (key) !== \"string\") {\n key = key.format();\n }\n return (new WrappedMethod(this, key));\n }\n getEvent(key) {\n if (typeof (key) !== \"string\") {\n key = key.format();\n }\n return (new WrappedEvent(this, key));\n }\n async queryFilter(event, fromBlock = 0, toBlock = \"latest\") {\n const { addr, addrPromise } = getInternal(this);\n const address = (addr ? addr : (await addrPromise));\n const { fragment, topics } = await getSubTag(this, event);\n const filter = { address, topics, fromBlock, toBlock };\n const runner = getRunner(this.runner, \"getLogs\");\n if (!canQuery(runner)) {\n return logger.throwError(\"contract runner does not support querying\", \"UNSUPPORTED_OPERATION\", {\n operation: \"getLogs\"\n });\n }\n return (await runner.getLogs(filter)).map((log) => {\n return new EventLog(log, this.interface, fragment);\n });\n }\n async on(event, listener) {\n const sub = await getSub(this, event);\n sub.listeners.push({ listener, once: false });\n sub.start();\n return this;\n }\n async once(event, listener) {\n const sub = await getSub(this, event);\n sub.listeners.push({ listener, once: true });\n sub.start();\n return this;\n }\n async emit(event, ...args) {\n return await emit(this, event, args, null);\n }\n async listenerCount(event) {\n if (event) {\n const sub = await hasSub(this, event);\n if (!sub) {\n return 0;\n }\n return sub.listeners.length;\n }\n const { subs } = getInternal(this);\n let total = 0;\n for (const { listeners } of subs.values()) {\n total += listeners.length;\n }\n return total;\n }\n async listeners(event) {\n if (event) {\n const sub = await hasSub(this, event);\n if (!sub) {\n return [];\n }\n return sub.listeners.map(({ listener }) => listener);\n }\n const { subs } = getInternal(this);\n let result = [];\n for (const { listeners } of subs.values()) {\n result = result.concat(listeners.map(({ listener }) => listener));\n }\n return result;\n }\n async off(event, listener) {\n const sub = await hasSub(this, event);\n if (!sub) {\n return this;\n }\n if (listener) {\n const index = sub.listeners.map(({ listener }) => listener).indexOf(listener);\n if (index >= 0) {\n sub.listeners.splice(index, 1);\n }\n }\n if (listener == null || sub.listeners.length === 0) {\n sub.stop();\n getInternal(this).subs.delete(sub.tag);\n }\n return this;\n }\n async removeAllListeners(event) {\n if (event) {\n const sub = await hasSub(this, event);\n if (!sub) {\n return this;\n }\n sub.stop();\n getInternal(this).subs.delete(sub.tag);\n }\n else {\n const { subs } = getInternal(this);\n for (const { tag, stop } of subs.values()) {\n stop();\n subs.delete(tag);\n }\n }\n return this;\n }\n // Alias for \"on\"\n async addListener(event, listener) {\n return await this.on(event, listener);\n }\n // Alias for \"off\"\n async removeListener(event, listener) {\n return await this.off(event, listener);\n }\n static buildClass(abi) {\n class CustomContract extends BaseContract {\n constructor(address, runner = null) {\n super(address, abi, runner);\n }\n }\n return CustomContract;\n }\n ;\n static from(target, abi, runner = null) {\n const contract = new this(target, abi, runner);\n return contract;\n }\n}\nfunction _ContractBase() {\n return BaseContract;\n}\nexport class Contract extends _ContractBase() {\n}\n//# sourceMappingURL=contract.js.map","import { getAddress } from \"@ethersproject/address\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { SigningKey } from \"@ethersproject/signing-key\";\nexport function computeAddress(key) {\n const publicKey = SigningKey.computePublicKey(key, false);\n return getAddress(keccak256(\"0x\" + publicKey.substring(4)).substring(26));\n}\n//# sourceMappingURL=address.js.map","const subsChrs = \" !#$%&'()*+,-./<=>?@[]^_`{|}~\";\nconst Word = /^[a-z]*$/i;\nfunction unfold(words, sep) {\n let initial = 97;\n return words.reduce((accum, word) => {\n if (word === sep) {\n initial++;\n }\n else if (word.match(Word)) {\n accum.push(String.fromCharCode(initial) + word);\n }\n else {\n initial = 97;\n accum.push(word);\n }\n return accum;\n }, []);\n}\nexport function decode(data, subs) {\n // Replace all the substitutions with their expanded form\n for (let i = subsChrs.length - 1; i >= 0; i--) {\n data = data.split(subsChrs[i]).join(subs.substring(2 * i, 2 * i + 2));\n }\n // Get all tle clumps; each suffix, first-increment and second-increment\n const clumps = [];\n const leftover = data.replace(/(:|([0-9])|([A-Z][a-z]*))/g, (all, item, semi, word) => {\n if (semi) {\n for (let i = parseInt(semi); i >= 0; i--) {\n clumps.push(\";\");\n }\n }\n else {\n clumps.push(item.toLowerCase());\n }\n return \"\";\n });\n if (leftover) {\n throw new Error(`leftovers: ${JSON.stringify(leftover)}`);\n }\n return unfold(unfold(clumps, \";\"), \":\");\n}\nexport function decodeOwl(data) {\n if (data[0] !== \"0\") {\n throw TypeError(\"unsupported auwl data\");\n }\n return decode(data.substring(1 + 2 * subsChrs.length), data.substring(1, 1 + 2 * subsChrs.length));\n}\n//# sourceMappingURL=decode-owl.js.map","export const version = \"@ethersproject/wordlists@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { defineProperties } from \"@ethersproject/properties\";\nexport class Wordlist {\n constructor(locale) {\n defineProperties(this, { locale });\n }\n // Subclasses may override this\n split(mnemonic) {\n return mnemonic.toLowerCase().split(/ +/g);\n }\n // Subclasses may override this\n join(words) {\n return words.join(\" \");\n }\n}\n//# sourceMappingURL=wordlist.js.map","// Use the encode-latin.js script to create the necessary\n// data files to be consumed by this class\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _WordlistOwl_instances, _WordlistOwl_data, _WordlistOwl_checksum, _WordlistOwl_words, _WordlistOwl_loadWords;\nimport { id } from \"@ethersproject/hash\";\nimport { decodeOwl } from \"./decode-owl.js\";\nimport { logger } from \"./logger.js\";\nimport { Wordlist } from \"./wordlist.js\";\nexport class WordlistOwl extends Wordlist {\n constructor(locale, data, checksum) {\n super(locale);\n _WordlistOwl_instances.add(this);\n _WordlistOwl_data.set(this, void 0);\n _WordlistOwl_checksum.set(this, void 0);\n _WordlistOwl_words.set(this, void 0);\n __classPrivateFieldSet(this, _WordlistOwl_data, data, \"f\");\n __classPrivateFieldSet(this, _WordlistOwl_checksum, checksum, \"f\");\n __classPrivateFieldSet(this, _WordlistOwl_words, null, \"f\");\n }\n get _data() { return __classPrivateFieldGet(this, _WordlistOwl_data, \"f\"); }\n _decodeWords() {\n return decodeOwl(__classPrivateFieldGet(this, _WordlistOwl_data, \"f\"));\n }\n getWord(index) {\n const words = __classPrivateFieldGet(this, _WordlistOwl_instances, \"m\", _WordlistOwl_loadWords).call(this);\n if (index < 0 || index >= words.length) {\n logger.throwArgumentError(`invalid word index: ${index}`, \"index\", index);\n }\n return words[index];\n }\n getWordIndex(word) {\n return __classPrivateFieldGet(this, _WordlistOwl_instances, \"m\", _WordlistOwl_loadWords).call(this).indexOf(word);\n }\n}\n_WordlistOwl_data = new WeakMap(), _WordlistOwl_checksum = new WeakMap(), _WordlistOwl_words = new WeakMap(), _WordlistOwl_instances = new WeakSet(), _WordlistOwl_loadWords = function _WordlistOwl_loadWords() {\n if (__classPrivateFieldGet(this, _WordlistOwl_words, \"f\") == null) {\n const words = this._decodeWords();\n // Verify the computed list matches the official list\n const checksum = id(words.join(\"\\n\") + \"\\n\");\n /* c8 ignore start */\n if (checksum !== __classPrivateFieldGet(this, _WordlistOwl_checksum, \"f\")) {\n throw new Error(`BIP39 Wordlist for ${this.locale} FAILED`);\n }\n /* c8 ignore stop */\n __classPrivateFieldSet(this, _WordlistOwl_words, words, \"f\");\n }\n return __classPrivateFieldGet(this, _WordlistOwl_words, \"f\");\n};\n//# sourceMappingURL=wordlist-owl.js.map","import { WordlistOwl } from \"./wordlist-owl.js\";\nconst words = \"0erleonalorenseinceregesticitStanvetearctssi#ch2Athck&tneLl0And#Il.yLeOutO=S|S%b/ra@SurdU'0Ce[Cid|CountCu'Hie=IdOu,-Qui*Ro[TT]T%T*[Tu$0AptDD-tD*[Ju,M.UltV<)Vi)0Rob-0FairF%dRaid0A(EEntRee0Ead0MRRp%tS!_rmBumCoholErtI&LLeyLowMo,O}PhaReadySoT Ways0A>urAz(gOngOuntU'd0Aly,Ch%Ci|G G!GryIm$K!Noun)Nu$O` Sw T&naTiqueXietyY1ArtOlogyPe?P!Pro=Ril1ChCt-EaEnaGueMMedM%MyOundR<+Re,Ri=RowTTefa@Ti,Tw%k0KPe@SaultSetSi,SumeThma0H!>OmTa{T&dT.udeTra@0Ct]D.Gu,NtTh%ToTumn0Era+OcadoOid0AkeA*AyEsomeFulKw?d0Is:ByChel%C#D+GL<)Lc#y~MbooN_{Ad!AftAmA}AshAt AwlAzyEamEd.EekEwI{etImeIspIt-OpO[Ou^OwdUci$UelUi'Umb!Un^UshYY,$2BeLtu*PPbo?dRiousRr|Rta(R=Sh]/omTe3C!:DMa+MpN)Ng R(gShUght WnY3AlBa>BrisCadeCemb CideCl(eC%a>C*a'ErF&'F(eFyG*eLayLiv M3AgramAlAm#dAryCeE'lEtFf G.$Gn.yLemmaNn NosaurRe@RtSag*eScov Sea'ShSmi[S%d Splay/<)V tVideV%)Zzy5Ct%Cum|G~Lph(Ma(Na>NkeyN%OrSeUb!Ve_ftAg#AmaA,-AwEamE[IftIllInkIpI=OpUmY2CkMbNeR(g/T^Ty1Arf1Nam-:G G!RlyRnR`Sily/Sy1HoOlogyOnomy0GeItUca>1F%t0G1GhtTh 2BowD E@r-EgSe0B?kBodyBra)Er+Ot]PloyPow Pty0Ab!A@DD![D%'EmyErgyF%)Ga+G(eH<)JoyLi,OughR-hRollSu*T Ti*TryVelope1Isode0U$Uip0AA'OdeOs]R%Upt0CapeSayS&)Ta>0Ern$H-s1Id&)IlOkeOl=1A@Amp!Ce[Ch<+C.eCludeCu'Ecu>Erci'Hau,Hib.I!I,ItOt-PM&'Mu}Pa@Po'Pro=Pul'0ChCludeComeC*a'DexD-a>Do%Du,ryFN Noc|PutQuirySSue0Em1Ory:CketGu?RZz3AlousAns~yWel9BInKeUr}yY5D+I)MpNg!Ni%Nk/:Ng?oo3EnEpT^upY3CkDD}yNdNgdomSsTT^&TeTt&Wi4EeIfeO{Ow:BBelB%Dd DyKeMpNgua+PtopR+T T(UghUndryVaWWnWsu.Y Zy3Ad AfArnA=Ctu*FtGG$G&dIsu*M#NdNg`NsOp?dSs#Tt Vel3ArB tyBr?yC&'FeFtGhtKeMbM.NkOnQuid/Tt!VeZ?d5AdAnB, C$CkG-NelyNgOpTt yUdUn+VeY$5CkyGga+Mb N?N^Xury3R-s:Ch(eDG-G}tIdIlInJ%KeMm$NNa+Nda>NgoNs]Nu$P!Rb!R^Rg(R(eRketRria+SkSs/ T^T i$ThTrixTt XimumZe3AdowAnAsu*AtCh<-D$DiaLodyLtMb M%yNt]NuRcyR+R.RryShSsa+T$Thod3Dd!DnightLk~]M-NdNimumN%Nu>Rac!Rr%S ySs/akeXXedXtu*5Bi!DelDifyMM|N.%NkeyN, N`OnR$ReRn(gSqu.oTh T]T%Unta(U'VeVie5ChFf(LeLtiplySc!SeumShroomS-/Tu$3Self/ yTh:I=MePk(Rrow/yT]Tu*3ArCkEdGati=G!@I` PhewR=/TTw%kUtr$V WsXt3CeGht5B!I'M(eeOd!Rm$R`SeTab!TeTh(gTi)VelW5C!?Mb R'T:K0EyJe@Li+Scu*S =Ta(Vious0CurEAyEa'Ed+U{UgUn+2EmEtIntL?LeLi)NdNyOlPul?Rt]S.]Ssib!/TatoTt yV tyWd W _@i)Ai'Ed-tEf Epa*Es|EttyEv|I)IdeIm?yIntI%.yIs#Iva>IzeOb!mO)[Odu)Of.OgramOje@Omo>OofOp tyOsp O>@OudOvide2Bl-Dd(g~LpL'Mpk(N^PilPpyR^a'R.yRpo'R'ShTZz!3Ramid:99Al.yAntumArt E,]I{ItIzO>:Bb.Cco#CeCkD?DioIlInI'~yMpN^NdomN+PidReTeTh V&WZ%3AdyAlAs#BelBuildC$lCei=CipeC%dCyc!Du)F!@F%mFu'G]G*tGul?Je@LaxLea'LiefLyMa(Memb M(dMo=Nd NewNtOp&PairPeatPla)P%tQui*ScueSemb!Si,Sour)Sp#'SultTi*T*atTurnUn]Ve$ViewW?d2Y`m0BBb#CeChDeD+F!GhtGidNgOtPp!SkTu$V$V 5AdA,BotBu,CketM<)OfOkieOmSeTa>UghUndU>Y$5Bb DeGLeNNwayR$:DDd!D}[FeIlLadLm#L#LtLu>MeMp!NdTisfyToshiU)Usa+VeY1A!AnA*Att E}HemeHoolI&)I[%sOrp]OutRapRe&RiptRub1AAr^As#AtC#dC*tCt]Cur.yEdEkGm|Le@~M(?Ni%N'Nt&)RiesRvi)Ss]Tt!TupV&_dowAftAllowA*EdEllEriffIeldIftI}IpIv O{OeOotOpOrtOuld O=RimpRugUff!Y0Bl(gCkDeE+GhtGnL|Lk~yLv Mil?Mp!N)NgR&/ Tua>XZe1A>Et^IIllInIrtUll0AbAmEepEnd I)IdeIghtImOgAyEakEelEmEpE*oI{IllIngO{Oma^O}OolOryO=Ra>gyReetRikeR#gRugg!Ud|UffUmb!Y!0Bje@Bm.BwayC)[ChDd&Ff G?G+,ItMm NNnyN'tP PplyP*meReRfa)R+Rpri'RroundR=ySpe@/a(1AllowAmpApArmE?EetIftImIngIt^Ord1MbolMptomRup/em:B!Ck!GIlL|LkNkPeR+tSk/eTtooXi3A^Am~NNGradeHoldOnP Set1BOng::Rd3Ar~ow9UUngU`:3BraRo9NeO\";\nconst checksum = \"0x3c8acc1e7b08d8e76f9fda015ef48dc8c710a73cb7e0f77b2c18a9b5a7adde60\";\nexport class LangEn extends WordlistOwl {\n constructor() { super(\"en\", words, checksum); }\n}\nexport const langEn = new LangEn();\n//# sourceMappingURL=lang-en.js.map","export const version = \"@ethersproject/wallet@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { langEn as en } from \"./lang-en.js\";\nexport const wordlists = Object.freeze({\n en\n});\n//# sourceMappingURL=wordlists-en.js.map","const Base64 = \")!@#$%^&*(ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_\";\nexport function decodeBits(width, data) {\n const maxValue = (1 << width) - 1;\n const result = [];\n let accum = 0, bits = 0, flood = 0;\n for (let i = 0; i < data.length; i++) {\n // Accumulate 6 bits of data\n accum = ((accum << 6) | Base64.indexOf(data[i]));\n bits += 6;\n // While we have enough for a word...\n while (bits >= width) {\n // ...read the word\n const value = (accum >> (bits - width));\n accum &= (1 << (bits - width)) - 1;\n bits -= width;\n // A value of 0 indicates we exceeded maxValue, it\n // floods over into the next value\n if (value === 0) {\n flood += maxValue;\n }\n else {\n result.push(value + flood);\n flood = 0;\n }\n }\n }\n return result;\n}\n//# sourceMappingURL=bit-reader.js.map","import { decodeBits } from \"./bit-reader.js\";\nimport { decodeOwl } from \"./decode-owl.js\";\nexport function decodeOwlA(data, accents) {\n let words = decodeOwl(data).join(\",\");\n // Inject the accents\n accents.split(/,/g).forEach((accent) => {\n const match = accent.match(/^([a-z]*)([0-9]+)([0-9])(.*)$/);\n if (!match) {\n throw new Error(\"internal error parsing accents\");\n }\n let posOffset = 0;\n const positions = decodeBits(parseInt(match[3]), match[4]);\n const charCode = parseInt(match[2]);\n const regex = new RegExp(`([${match[1]}])`, \"g\");\n words = words.replace(regex, (all, letter) => {\n const rem = --positions[posOffset];\n if (rem === 0) {\n letter = String.fromCharCode(letter.charCodeAt(0), charCode);\n posOffset++;\n }\n return letter;\n });\n });\n return words.split(\",\");\n}\n//# sourceMappingURL=decode-owla.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _WordlistOwlA_accent;\nimport { WordlistOwl } from \"./wordlist-owl.js\";\nimport { decodeOwlA } from \"./decode-owla.js\";\nexport class WordlistOwlA extends WordlistOwl {\n constructor(locale, data, accent, checksum) {\n super(locale, data, checksum);\n _WordlistOwlA_accent.set(this, void 0);\n __classPrivateFieldSet(this, _WordlistOwlA_accent, accent, \"f\");\n }\n get _accent() { return __classPrivateFieldGet(this, _WordlistOwlA_accent, \"f\"); }\n _decodeWords() {\n return decodeOwlA(this._data, this._accent);\n }\n}\n_WordlistOwlA_accent = new WeakMap();\n//# sourceMappingURL=wordlist-owla.js.map","import { arrayify, hexlify } from \"@ethersproject/bytes\";\nimport { pbkdf2, sha256 } from \"@ethersproject/crypto\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { toUtf8Bytes, UnicodeNormalizationForm } from \"@ethersproject/strings\";\nimport { langEn } from \"@ethersproject/wordlists\";\nimport { logger } from \"./logger.js\";\n// Returns a byte with the MSB bits set\nfunction getUpperMask(bits) {\n return ((1 << bits) - 1) << (8 - bits) & 0xff;\n}\n// Returns a byte with the LSB bits set\nfunction getLowerMask(bits) {\n return ((1 << bits) - 1) & 0xff;\n}\nfunction mnemonicToEntropy(mnemonic, wordlist = langEn) {\n logger.assertNormalize(\"NFKD\");\n if (wordlist == null) {\n wordlist = langEn;\n }\n const words = wordlist.split(mnemonic);\n if ((words.length % 3) !== 0 || words.length < 12 || words.length > 24) {\n logger.throwArgumentError(\"invalid mnemonic length\", \"mnemonic\", \"[ REDACTED ]\");\n }\n const entropy = arrayify(new Uint8Array(Math.ceil(11 * words.length / 8)));\n let offset = 0;\n for (let i = 0; i < words.length; i++) {\n let index = wordlist.getWordIndex(words[i].normalize(\"NFKD\"));\n if (index === -1) {\n logger.throwArgumentError(`invalid mnemonic word at index ${i}`, \"mnemonic\", \"[ REDACTED ]\");\n }\n for (let bit = 0; bit < 11; bit++) {\n if (index & (1 << (10 - bit))) {\n entropy[offset >> 3] |= (1 << (7 - (offset % 8)));\n }\n offset++;\n }\n }\n const entropyBits = 32 * words.length / 3;\n const checksumBits = words.length / 3;\n const checksumMask = getUpperMask(checksumBits);\n const checksum = arrayify(sha256(entropy.slice(0, entropyBits / 8)))[0] & checksumMask;\n if (checksum !== (entropy[entropy.length - 1] & checksumMask)) {\n logger.throwArgumentError(\"invalid mnemonic checksum\", \"mnemonic\", \"[ REDACTED ]\");\n }\n return hexlify(entropy.slice(0, entropyBits / 8));\n}\nfunction entropyToMnemonic(entropy, wordlist = langEn) {\n if ((entropy.length % 4) || entropy.length < 16 || entropy.length > 32) {\n logger.throwArgumentError(\"invalid entropy size\", \"entropy\", \"[ REDACTED ]\");\n }\n if (wordlist == null) {\n wordlist = langEn;\n }\n const indices = [0];\n let remainingBits = 11;\n for (let i = 0; i < entropy.length; i++) {\n // Consume the whole byte (with still more to go)\n if (remainingBits > 8) {\n indices[indices.length - 1] <<= 8;\n indices[indices.length - 1] |= entropy[i];\n remainingBits -= 8;\n // This byte will complete an 11-bit index\n }\n else {\n indices[indices.length - 1] <<= remainingBits;\n indices[indices.length - 1] |= entropy[i] >> (8 - remainingBits);\n // Start the next word\n indices.push(entropy[i] & getLowerMask(8 - remainingBits));\n remainingBits += 3;\n }\n }\n // Compute the checksum bits\n const checksumBits = entropy.length / 4;\n const checksum = parseInt(sha256(entropy).substring(2, 4), 16) & getUpperMask(checksumBits);\n // Shift the checksum into the word indices\n indices[indices.length - 1] <<= checksumBits;\n indices[indices.length - 1] |= (checksum >> (8 - checksumBits));\n return wordlist.join(indices.map((index) => wordlist.getWord(index)));\n}\nconst _guard = {};\nexport class Mnemonic {\n constructor(guard, entropy, phrase, password, wordlist) {\n if (password == null) {\n password = \"\";\n }\n if (wordlist == null) {\n wordlist = langEn;\n }\n logger.assertPrivate(guard, _guard, \"Mnemonic\");\n defineProperties(this, { phrase, password, wordlist, entropy });\n }\n computeSeed() {\n const salt = toUtf8Bytes(\"mnemonic\" + this.password, UnicodeNormalizationForm.NFKD);\n return pbkdf2(toUtf8Bytes(this.phrase, UnicodeNormalizationForm.NFKD), salt, 2048, 64, \"sha512\");\n }\n static fromPhrase(phrase, password, wordlist) {\n // Normalize the case and space; throws if invalid\n const entropy = mnemonicToEntropy(phrase, wordlist);\n phrase = entropyToMnemonic(logger.getBytes(entropy), wordlist);\n return new Mnemonic(_guard, entropy, phrase, password, wordlist);\n }\n static fromEntropy(_entropy, password, wordlist) {\n const entropy = logger.getBytes(_entropy, \"entropy\");\n const phrase = entropyToMnemonic(entropy, wordlist);\n return new Mnemonic(_guard, hexlify(entropy), phrase, password, wordlist);\n }\n static entropyToPhrase(_entropy, wordlist) {\n const entropy = logger.getBytes(_entropy, \"entropy\");\n return entropyToMnemonic(entropy, wordlist);\n }\n static phraseToEntropy(phrase, wordlist) {\n return mnemonicToEntropy(phrase, wordlist);\n }\n static isValidMnemonic(phrase, wordlist) {\n try {\n mnemonicToEntropy(phrase, wordlist);\n return true;\n }\n catch (error) { }\n return false;\n }\n}\n//# sourceMappingURL=mnemonic.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _BaseWallet_signingKey;\nimport { getAddress, resolveAddress } from \"@ethersproject/address\";\nimport { hashMessage, TypedDataEncoder } from \"@ethersproject/hash\";\nimport { defineProperties, resolveProperties } from \"@ethersproject/properties\";\nimport { AbstractSigner } from \"@ethersproject/providers\";\nimport { Transaction } from \"@ethersproject/transactions\";\nimport { computeAddress } from \"./address.js\";\nimport { logger } from \"./logger.js\";\nexport class BaseWallet extends AbstractSigner {\n constructor(privateKey, provider) {\n super(provider);\n _BaseWallet_signingKey.set(this, void 0);\n __classPrivateFieldSet(this, _BaseWallet_signingKey, privateKey, \"f\");\n const address = computeAddress(this.signingKey.publicKey);\n defineProperties(this, { address });\n }\n // Store these in getters to reduce visibility in console.log\n get signingKey() { return __classPrivateFieldGet(this, _BaseWallet_signingKey, \"f\"); }\n get privateKey() { return this.signingKey.privateKey; }\n async getAddress() { return this.address; }\n connect(provider) {\n return new BaseWallet(__classPrivateFieldGet(this, _BaseWallet_signingKey, \"f\"), provider);\n }\n async signTransaction(_tx) {\n // Replace any Addressable or ENS name with an address\n const tx = Object.assign({}, _tx, await resolveProperties({\n to: (_tx.to ? resolveAddress(_tx.to, this.provider) : undefined),\n from: (_tx.from ? resolveAddress(_tx.from, this.provider) : undefined)\n }));\n if (tx.from != null) {\n if (getAddress(tx.from) !== this.address) {\n logger.throwArgumentError(\"transaction from address mismatch\", \"tx.from\", _tx.from);\n }\n delete tx.from;\n }\n // Build the transaction\n const btx = Transaction.from(tx);\n btx.signature = this.signingKey.sign(btx.unsignedHash);\n return btx.serialized;\n }\n async signMessage(message) {\n return this.signingKey.sign(hashMessage(message)).serialized;\n }\n async signTypedData(domain, types, value) {\n // Populate any ENS names\n const populated = await TypedDataEncoder.resolveNames(domain, types, value, async (name) => {\n if (this.provider == null) {\n return logger.throwError(\"cannot resolve ENS names without a provider\", \"UNSUPPORTED_OPERATION\", {\n operation: \"resolveName\",\n info: { name }\n });\n }\n const address = await this.provider.resolveName(name);\n if (address == null) {\n return logger.throwError(\"unconfigured ENS name\", \"UNCONFIGURED_NAME\", {\n value: name\n });\n }\n return address;\n });\n return this.signingKey.sign(TypedDataEncoder.hash(populated.domain, types, populated.value)).serialized;\n }\n}\n_BaseWallet_signingKey = new WeakMap();\n//# sourceMappingURL=base-wallet.js.map","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar _a, _HDNodeWallet_fromSeed, _HDNodeWalletManager_root;\nimport { arrayify, concat, dataSlice, hexlify } from \"@ethersproject/bytes\";\nimport { computeHmac, randomBytes, ripemd160, sha256 } from \"@ethersproject/crypto\";\nimport { decodeBase58, encodeBase58, toBigInt, toHex } from \"@ethersproject/math\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { VoidSigner } from \"@ethersproject/providers\";\nimport { SigningKey } from \"@ethersproject/signing-key\";\nimport { langEn } from \"@ethersproject/wordlists/lib/lang-en.js\";\nimport { computeAddress } from \"./address.js\";\nimport { logger } from \"./logger.js\";\nimport { Mnemonic } from \"./mnemonic.js\";\nimport { BaseWallet } from \"./base-wallet.js\";\nexport const defaultPath = \"m/44'/60'/0'/0/0\";\n// \"Bitcoin seed\"\nconst MasterSecret = new Uint8Array([66, 105, 116, 99, 111, 105, 110, 32, 115, 101, 101, 100]);\nconst HardenedBit = 0x80000000;\nconst N = BigInt(\"0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141\");\nconst Nibbles = \"0123456789abcdef\";\nfunction zpad(value, length) {\n let result = \"\";\n while (value) {\n result = Nibbles[value % 16] + result;\n value = Math.trunc(value / 16);\n }\n while (result.length < length * 2) {\n result = \"0\" + result;\n }\n return \"0x\" + result;\n}\nfunction encodeBase58Check(_value) {\n const value = logger.getBytes(_value);\n const check = dataSlice(sha256(sha256(value)), 0, 4);\n const bytes = concat([value, check]);\n return encodeBase58(bytes);\n}\nconst _guard = {};\nfunction ser_I(index, chainCode, publicKey, privateKey) {\n const data = new Uint8Array(37);\n if (index & HardenedBit) {\n if (privateKey == null) {\n return logger.throwError(\"cannot derive child of neutered node\", \"UNSUPPORTED_OPERATION\", {\n operation: \"deriveChild\"\n });\n }\n // Data = 0x00 || ser_256(k_par)\n data.set(arrayify(privateKey), 1);\n }\n else {\n // Data = ser_p(point(k_par))\n data.set(arrayify(publicKey));\n }\n // Data += ser_32(i)\n for (let i = 24; i >= 0; i -= 8) {\n data[33 + (i >> 3)] = ((index >> (24 - i)) & 0xff);\n }\n const I = arrayify(computeHmac(\"sha512\", chainCode, data));\n return { IL: I.slice(0, 32), IR: I.slice(32) };\n}\nfunction derivePath(node, path) {\n const components = path.split(\"/\");\n if (components.length === 0 || (components[0] === \"m\" && node.depth !== 0)) {\n throw new Error(\"invalid path - \" + path);\n }\n if (components[0] === \"m\") {\n components.shift();\n }\n let result = node;\n for (let i = 0; i < components.length; i++) {\n const component = components[i];\n if (component.match(/^[0-9]+'$/)) {\n const index = parseInt(component.substring(0, component.length - 1));\n if (index >= HardenedBit) {\n throw new Error(\"invalid path index - \" + component);\n }\n result = result.deriveChild(HardenedBit + index);\n }\n else if (component.match(/^[0-9]+$/)) {\n const index = parseInt(component);\n if (index >= HardenedBit) {\n throw new Error(\"invalid path index - \" + component);\n }\n result = result.deriveChild(index);\n }\n else {\n throw new Error(\"invalid path component - \" + component);\n }\n }\n return result;\n}\nexport class HDNodeWallet extends BaseWallet {\n constructor(guard, signingKey, parentFingerprint, chainCode, path, index, depth, mnemonic, provider) {\n super(signingKey, provider);\n logger.assertPrivate(guard, _guard, \"HDNodeWallet\");\n defineProperties(this, { publicKey: signingKey.compressedPublicKey });\n const fingerprint = dataSlice(ripemd160(sha256(this.publicKey)), 0, 4);\n defineProperties(this, {\n parentFingerprint, fingerprint,\n chainCode, path, index, depth\n });\n defineProperties(this, { mnemonic });\n }\n connect(provider) {\n return new HDNodeWallet(_guard, this.signingKey, this.parentFingerprint, this.chainCode, this.path, this.index, this.depth, this.mnemonic, provider);\n }\n get extendedKey() {\n // We only support the mainnet values for now, but if anyone needs\n // testnet values, let me know. I believe current sentiment is that\n // we should always use mainnet, and use BIP-44 to derive the network\n // - Mainnet: public=0x0488B21E, private=0x0488ADE4\n // - Testnet: public=0x043587CF, private=0x04358394\n if (this.depth >= 256) {\n throw new Error(\"Depth too large!\");\n }\n return encodeBase58Check(concat([\n \"0x0488ADE4\", zpad(this.depth, 1), this.parentFingerprint,\n zpad(this.index, 4), this.chainCode,\n concat([\"0x00\", this.privateKey])\n ]));\n }\n hasPath() { return (this.path != null); }\n neuter() {\n return new HDNodeVoidWallet(_guard, this.address, this.publicKey, this.parentFingerprint, this.chainCode, this.path, this.index, this.depth, this.provider);\n }\n deriveChild(_index) {\n const index = logger.getNumber(_index, \"index\");\n if (index > 0xffffffff) {\n throw new Error(\"invalid index - \" + String(index));\n }\n // Base path\n let path = this.path;\n if (path) {\n path += \"/\" + (index & ~HardenedBit);\n if (index & HardenedBit) {\n path += \"'\";\n }\n }\n const { IR, IL } = ser_I(index, this.chainCode, this.publicKey, this.privateKey);\n const ki = new SigningKey(toHex((toBigInt(IL) + BigInt(this.privateKey)) % N, 32));\n return new HDNodeWallet(_guard, ki, this.fingerprint, hexlify(IR), path, index, this.depth + 1, this.mnemonic, this.provider);\n }\n derivePath(path) {\n return derivePath(this, path);\n }\n static fromSeed(seed) {\n return __classPrivateFieldGet(HDNodeWallet, _a, \"m\", _HDNodeWallet_fromSeed).call(HDNodeWallet, seed, null);\n }\n static fromPhrase(phrase, password = \"\", path = defaultPath, wordlist = langEn) {\n if (!path) {\n path = defaultPath;\n }\n const mnemonic = Mnemonic.fromPhrase(phrase, password, wordlist);\n return __classPrivateFieldGet(HDNodeWallet, _a, \"m\", _HDNodeWallet_fromSeed).call(HDNodeWallet, mnemonic.computeSeed(), mnemonic).derivePath(path);\n }\n static fromMnemonic(mnemonic, path = defaultPath) {\n if (!path) {\n path = defaultPath;\n }\n return __classPrivateFieldGet(HDNodeWallet, _a, \"m\", _HDNodeWallet_fromSeed).call(HDNodeWallet, mnemonic.computeSeed(), mnemonic).derivePath(path);\n }\n static fromExtendedKey(extendedKey) {\n const bytes = arrayify(decodeBase58(extendedKey)); // @TODO: redact\n if (bytes.length !== 82 || encodeBase58Check(bytes.slice(0, 78)) !== extendedKey) {\n logger.throwArgumentError(\"invalid extended key\", \"extendedKey\", \"[ REDACTED ]\");\n }\n const depth = bytes[4];\n const parentFingerprint = hexlify(bytes.slice(5, 9));\n const index = parseInt(hexlify(bytes.slice(9, 13)).substring(2), 16);\n const chainCode = hexlify(bytes.slice(13, 45));\n const key = bytes.slice(45, 78);\n switch (hexlify(bytes.slice(0, 4))) {\n // Public Key\n case \"0x0488b21e\":\n case \"0x043587cf\": {\n const publicKey = hexlify(key);\n return new HDNodeVoidWallet(_guard, computeAddress(publicKey), publicKey, parentFingerprint, chainCode, null, index, depth, null);\n }\n // Private Key\n case \"0x0488ade4\":\n case \"0x04358394 \":\n if (key[0] !== 0) {\n break;\n }\n return new HDNodeWallet(_guard, new SigningKey(key.slice(1)), parentFingerprint, chainCode, null, index, depth, null, null);\n }\n return logger.throwArgumentError(\"invalid extended key prefix\", \"extendedKey\", \"[ REDACTED ]\");\n }\n static createRandom(password = \"\", path = defaultPath, wordlist = langEn) {\n if (!path) {\n path = defaultPath;\n }\n const mnemonic = Mnemonic.fromEntropy(randomBytes(16), password, wordlist);\n return __classPrivateFieldGet(HDNodeWallet, _a, \"m\", _HDNodeWallet_fromSeed).call(HDNodeWallet, mnemonic.computeSeed(), mnemonic).derivePath(path);\n }\n}\n_a = HDNodeWallet, _HDNodeWallet_fromSeed = function _HDNodeWallet_fromSeed(_seed, mnemonic) {\n const seed = logger.getBytes(_seed, \"seed\");\n if (seed.length < 16 || seed.length > 64) {\n throw new Error(\"invalid seed\");\n }\n const I = arrayify(computeHmac(\"sha512\", MasterSecret, seed));\n const signingKey = new SigningKey(hexlify(I.slice(0, 32)));\n return new HDNodeWallet(_guard, signingKey, \"0x00000000\", hexlify(I.slice(32)), \"m\", 0, 0, mnemonic, null);\n};\nexport class HDNodeVoidWallet extends VoidSigner {\n constructor(guard, address, publicKey, parentFingerprint, chainCode, path, index, depth, provider) {\n super(address, provider);\n logger.assertPrivate(guard, _guard, \"HDNodeVoidWallet\");\n defineProperties(this, { publicKey });\n const fingerprint = dataSlice(ripemd160(sha256(publicKey)), 0, 4);\n defineProperties(this, {\n publicKey, fingerprint, parentFingerprint, chainCode, path, index, depth\n });\n }\n connect(provider) {\n return new HDNodeVoidWallet(_guard, this.address, this.publicKey, this.parentFingerprint, this.chainCode, this.path, this.index, this.depth, provider);\n }\n get extendedKey() {\n // We only support the mainnet values for now, but if anyone needs\n // testnet values, let me know. I believe current sentiment is that\n // we should always use mainnet, and use BIP-44 to derive the network\n // - Mainnet: public=0x0488B21E, private=0x0488ADE4\n // - Testnet: public=0x043587CF, private=0x04358394\n if (this.depth >= 256) {\n throw new Error(\"Depth too large!\");\n }\n return encodeBase58Check(concat([\n \"0x0488B21E\",\n zpad(this.depth, 1),\n this.parentFingerprint,\n zpad(this.index, 4),\n this.chainCode,\n this.publicKey,\n ]));\n }\n hasPath() { return (this.path != null); }\n deriveChild(_index) {\n const index = logger.getNumber(_index, \"index\");\n if (index > 0xffffffff) {\n throw new Error(\"invalid index - \" + String(index));\n }\n // Base path\n let path = this.path;\n if (path) {\n path += \"/\" + (index & ~HardenedBit);\n if (index & HardenedBit) {\n path += \"'\";\n }\n }\n const { IR, IL } = ser_I(index, this.chainCode, this.publicKey, null);\n const Ki = SigningKey._addPoints(IL, this.publicKey, true);\n const address = computeAddress(Ki);\n return new HDNodeVoidWallet(_guard, address, Ki, this.fingerprint, hexlify(IR), path, index, this.depth + 1, this.provider);\n }\n derivePath(path) {\n return derivePath(this, path);\n }\n}\nexport class HDNodeWalletManager {\n constructor(phrase, password = \"\", path = \"m/44'/60'/0'/0\", locale = langEn) {\n _HDNodeWalletManager_root.set(this, void 0);\n __classPrivateFieldSet(this, _HDNodeWalletManager_root, HDNodeWallet.fromPhrase(phrase, password, path, locale), \"f\");\n }\n getSigner(index = 0) {\n return __classPrivateFieldGet(this, _HDNodeWalletManager_root, \"f\").deriveChild(index);\n }\n}\n_HDNodeWalletManager_root = new WeakMap();\nexport function getAccountPath(_index) {\n const index = logger.getNumber(_index, \"index\");\n if (index < 0 || index >= HardenedBit) {\n logger.throwArgumentError(\"invalid account index\", \"index\", index);\n }\n return `m/44'/60'/${index}'/0/0`;\n}\n//# sourceMappingURL=hdwallet.js.map","/*! MIT License. Copyright 2015-2022 Richard Moore . See LICENSE.txt. */\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _AES_key, _AES_Kd, _AES_Ke;\n// Number of rounds by keysize\nconst numberOfRounds = { 16: 10, 24: 12, 32: 14 };\n// Round constant words\nconst rcon = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91];\n// S-box and Inverse S-box (S is for Substitution)\nconst S = [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16];\nconst Si = [0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d];\n// Transformations for encryption\nconst T1 = [0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a];\nconst T2 = [0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616];\nconst T3 = [0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16];\nconst T4 = [0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c];\n// Transformations for decryption\nconst T5 = [0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742];\nconst T6 = [0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857];\nconst T7 = [0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8];\nconst T8 = [0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0];\n// Transformations for decryption key expansion\nconst U1 = [0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3];\nconst U2 = [0x00000000, 0x0b0e090d, 0x161c121a, 0x1d121b17, 0x2c382434, 0x27362d39, 0x3a24362e, 0x312a3f23, 0x58704868, 0x537e4165, 0x4e6c5a72, 0x4562537f, 0x74486c5c, 0x7f466551, 0x62547e46, 0x695a774b, 0xb0e090d0, 0xbbee99dd, 0xa6fc82ca, 0xadf28bc7, 0x9cd8b4e4, 0x97d6bde9, 0x8ac4a6fe, 0x81caaff3, 0xe890d8b8, 0xe39ed1b5, 0xfe8ccaa2, 0xf582c3af, 0xc4a8fc8c, 0xcfa6f581, 0xd2b4ee96, 0xd9bae79b, 0x7bdb3bbb, 0x70d532b6, 0x6dc729a1, 0x66c920ac, 0x57e31f8f, 0x5ced1682, 0x41ff0d95, 0x4af10498, 0x23ab73d3, 0x28a57ade, 0x35b761c9, 0x3eb968c4, 0x0f9357e7, 0x049d5eea, 0x198f45fd, 0x12814cf0, 0xcb3bab6b, 0xc035a266, 0xdd27b971, 0xd629b07c, 0xe7038f5f, 0xec0d8652, 0xf11f9d45, 0xfa119448, 0x934be303, 0x9845ea0e, 0x8557f119, 0x8e59f814, 0xbf73c737, 0xb47dce3a, 0xa96fd52d, 0xa261dc20, 0xf6ad766d, 0xfda37f60, 0xe0b16477, 0xebbf6d7a, 0xda955259, 0xd19b5b54, 0xcc894043, 0xc787494e, 0xaedd3e05, 0xa5d33708, 0xb8c12c1f, 0xb3cf2512, 0x82e51a31, 0x89eb133c, 0x94f9082b, 0x9ff70126, 0x464de6bd, 0x4d43efb0, 0x5051f4a7, 0x5b5ffdaa, 0x6a75c289, 0x617bcb84, 0x7c69d093, 0x7767d99e, 0x1e3daed5, 0x1533a7d8, 0x0821bccf, 0x032fb5c2, 0x32058ae1, 0x390b83ec, 0x241998fb, 0x2f1791f6, 0x8d764dd6, 0x867844db, 0x9b6a5fcc, 0x906456c1, 0xa14e69e2, 0xaa4060ef, 0xb7527bf8, 0xbc5c72f5, 0xd50605be, 0xde080cb3, 0xc31a17a4, 0xc8141ea9, 0xf93e218a, 0xf2302887, 0xef223390, 0xe42c3a9d, 0x3d96dd06, 0x3698d40b, 0x2b8acf1c, 0x2084c611, 0x11aef932, 0x1aa0f03f, 0x07b2eb28, 0x0cbce225, 0x65e6956e, 0x6ee89c63, 0x73fa8774, 0x78f48e79, 0x49deb15a, 0x42d0b857, 0x5fc2a340, 0x54ccaa4d, 0xf741ecda, 0xfc4fe5d7, 0xe15dfec0, 0xea53f7cd, 0xdb79c8ee, 0xd077c1e3, 0xcd65daf4, 0xc66bd3f9, 0xaf31a4b2, 0xa43fadbf, 0xb92db6a8, 0xb223bfa5, 0x83098086, 0x8807898b, 0x9515929c, 0x9e1b9b91, 0x47a17c0a, 0x4caf7507, 0x51bd6e10, 0x5ab3671d, 0x6b99583e, 0x60975133, 0x7d854a24, 0x768b4329, 0x1fd13462, 0x14df3d6f, 0x09cd2678, 0x02c32f75, 0x33e91056, 0x38e7195b, 0x25f5024c, 0x2efb0b41, 0x8c9ad761, 0x8794de6c, 0x9a86c57b, 0x9188cc76, 0xa0a2f355, 0xabacfa58, 0xb6bee14f, 0xbdb0e842, 0xd4ea9f09, 0xdfe49604, 0xc2f68d13, 0xc9f8841e, 0xf8d2bb3d, 0xf3dcb230, 0xeecea927, 0xe5c0a02a, 0x3c7a47b1, 0x37744ebc, 0x2a6655ab, 0x21685ca6, 0x10426385, 0x1b4c6a88, 0x065e719f, 0x0d507892, 0x640a0fd9, 0x6f0406d4, 0x72161dc3, 0x791814ce, 0x48322bed, 0x433c22e0, 0x5e2e39f7, 0x552030fa, 0x01ec9ab7, 0x0ae293ba, 0x17f088ad, 0x1cfe81a0, 0x2dd4be83, 0x26dab78e, 0x3bc8ac99, 0x30c6a594, 0x599cd2df, 0x5292dbd2, 0x4f80c0c5, 0x448ec9c8, 0x75a4f6eb, 0x7eaaffe6, 0x63b8e4f1, 0x68b6edfc, 0xb10c0a67, 0xba02036a, 0xa710187d, 0xac1e1170, 0x9d342e53, 0x963a275e, 0x8b283c49, 0x80263544, 0xe97c420f, 0xe2724b02, 0xff605015, 0xf46e5918, 0xc544663b, 0xce4a6f36, 0xd3587421, 0xd8567d2c, 0x7a37a10c, 0x7139a801, 0x6c2bb316, 0x6725ba1b, 0x560f8538, 0x5d018c35, 0x40139722, 0x4b1d9e2f, 0x2247e964, 0x2949e069, 0x345bfb7e, 0x3f55f273, 0x0e7fcd50, 0x0571c45d, 0x1863df4a, 0x136dd647, 0xcad731dc, 0xc1d938d1, 0xdccb23c6, 0xd7c52acb, 0xe6ef15e8, 0xede11ce5, 0xf0f307f2, 0xfbfd0eff, 0x92a779b4, 0x99a970b9, 0x84bb6bae, 0x8fb562a3, 0xbe9f5d80, 0xb591548d, 0xa8834f9a, 0xa38d4697];\nconst U3 = [0x00000000, 0x0d0b0e09, 0x1a161c12, 0x171d121b, 0x342c3824, 0x3927362d, 0x2e3a2436, 0x23312a3f, 0x68587048, 0x65537e41, 0x724e6c5a, 0x7f456253, 0x5c74486c, 0x517f4665, 0x4662547e, 0x4b695a77, 0xd0b0e090, 0xddbbee99, 0xcaa6fc82, 0xc7adf28b, 0xe49cd8b4, 0xe997d6bd, 0xfe8ac4a6, 0xf381caaf, 0xb8e890d8, 0xb5e39ed1, 0xa2fe8cca, 0xaff582c3, 0x8cc4a8fc, 0x81cfa6f5, 0x96d2b4ee, 0x9bd9bae7, 0xbb7bdb3b, 0xb670d532, 0xa16dc729, 0xac66c920, 0x8f57e31f, 0x825ced16, 0x9541ff0d, 0x984af104, 0xd323ab73, 0xde28a57a, 0xc935b761, 0xc43eb968, 0xe70f9357, 0xea049d5e, 0xfd198f45, 0xf012814c, 0x6bcb3bab, 0x66c035a2, 0x71dd27b9, 0x7cd629b0, 0x5fe7038f, 0x52ec0d86, 0x45f11f9d, 0x48fa1194, 0x03934be3, 0x0e9845ea, 0x198557f1, 0x148e59f8, 0x37bf73c7, 0x3ab47dce, 0x2da96fd5, 0x20a261dc, 0x6df6ad76, 0x60fda37f, 0x77e0b164, 0x7aebbf6d, 0x59da9552, 0x54d19b5b, 0x43cc8940, 0x4ec78749, 0x05aedd3e, 0x08a5d337, 0x1fb8c12c, 0x12b3cf25, 0x3182e51a, 0x3c89eb13, 0x2b94f908, 0x269ff701, 0xbd464de6, 0xb04d43ef, 0xa75051f4, 0xaa5b5ffd, 0x896a75c2, 0x84617bcb, 0x937c69d0, 0x9e7767d9, 0xd51e3dae, 0xd81533a7, 0xcf0821bc, 0xc2032fb5, 0xe132058a, 0xec390b83, 0xfb241998, 0xf62f1791, 0xd68d764d, 0xdb867844, 0xcc9b6a5f, 0xc1906456, 0xe2a14e69, 0xefaa4060, 0xf8b7527b, 0xf5bc5c72, 0xbed50605, 0xb3de080c, 0xa4c31a17, 0xa9c8141e, 0x8af93e21, 0x87f23028, 0x90ef2233, 0x9de42c3a, 0x063d96dd, 0x0b3698d4, 0x1c2b8acf, 0x112084c6, 0x3211aef9, 0x3f1aa0f0, 0x2807b2eb, 0x250cbce2, 0x6e65e695, 0x636ee89c, 0x7473fa87, 0x7978f48e, 0x5a49deb1, 0x5742d0b8, 0x405fc2a3, 0x4d54ccaa, 0xdaf741ec, 0xd7fc4fe5, 0xc0e15dfe, 0xcdea53f7, 0xeedb79c8, 0xe3d077c1, 0xf4cd65da, 0xf9c66bd3, 0xb2af31a4, 0xbfa43fad, 0xa8b92db6, 0xa5b223bf, 0x86830980, 0x8b880789, 0x9c951592, 0x919e1b9b, 0x0a47a17c, 0x074caf75, 0x1051bd6e, 0x1d5ab367, 0x3e6b9958, 0x33609751, 0x247d854a, 0x29768b43, 0x621fd134, 0x6f14df3d, 0x7809cd26, 0x7502c32f, 0x5633e910, 0x5b38e719, 0x4c25f502, 0x412efb0b, 0x618c9ad7, 0x6c8794de, 0x7b9a86c5, 0x769188cc, 0x55a0a2f3, 0x58abacfa, 0x4fb6bee1, 0x42bdb0e8, 0x09d4ea9f, 0x04dfe496, 0x13c2f68d, 0x1ec9f884, 0x3df8d2bb, 0x30f3dcb2, 0x27eecea9, 0x2ae5c0a0, 0xb13c7a47, 0xbc37744e, 0xab2a6655, 0xa621685c, 0x85104263, 0x881b4c6a, 0x9f065e71, 0x920d5078, 0xd9640a0f, 0xd46f0406, 0xc372161d, 0xce791814, 0xed48322b, 0xe0433c22, 0xf75e2e39, 0xfa552030, 0xb701ec9a, 0xba0ae293, 0xad17f088, 0xa01cfe81, 0x832dd4be, 0x8e26dab7, 0x993bc8ac, 0x9430c6a5, 0xdf599cd2, 0xd25292db, 0xc54f80c0, 0xc8448ec9, 0xeb75a4f6, 0xe67eaaff, 0xf163b8e4, 0xfc68b6ed, 0x67b10c0a, 0x6aba0203, 0x7da71018, 0x70ac1e11, 0x539d342e, 0x5e963a27, 0x498b283c, 0x44802635, 0x0fe97c42, 0x02e2724b, 0x15ff6050, 0x18f46e59, 0x3bc54466, 0x36ce4a6f, 0x21d35874, 0x2cd8567d, 0x0c7a37a1, 0x017139a8, 0x166c2bb3, 0x1b6725ba, 0x38560f85, 0x355d018c, 0x22401397, 0x2f4b1d9e, 0x642247e9, 0x692949e0, 0x7e345bfb, 0x733f55f2, 0x500e7fcd, 0x5d0571c4, 0x4a1863df, 0x47136dd6, 0xdccad731, 0xd1c1d938, 0xc6dccb23, 0xcbd7c52a, 0xe8e6ef15, 0xe5ede11c, 0xf2f0f307, 0xfffbfd0e, 0xb492a779, 0xb999a970, 0xae84bb6b, 0xa38fb562, 0x80be9f5d, 0x8db59154, 0x9aa8834f, 0x97a38d46];\nconst U4 = [0x00000000, 0x090d0b0e, 0x121a161c, 0x1b171d12, 0x24342c38, 0x2d392736, 0x362e3a24, 0x3f23312a, 0x48685870, 0x4165537e, 0x5a724e6c, 0x537f4562, 0x6c5c7448, 0x65517f46, 0x7e466254, 0x774b695a, 0x90d0b0e0, 0x99ddbbee, 0x82caa6fc, 0x8bc7adf2, 0xb4e49cd8, 0xbde997d6, 0xa6fe8ac4, 0xaff381ca, 0xd8b8e890, 0xd1b5e39e, 0xcaa2fe8c, 0xc3aff582, 0xfc8cc4a8, 0xf581cfa6, 0xee96d2b4, 0xe79bd9ba, 0x3bbb7bdb, 0x32b670d5, 0x29a16dc7, 0x20ac66c9, 0x1f8f57e3, 0x16825ced, 0x0d9541ff, 0x04984af1, 0x73d323ab, 0x7ade28a5, 0x61c935b7, 0x68c43eb9, 0x57e70f93, 0x5eea049d, 0x45fd198f, 0x4cf01281, 0xab6bcb3b, 0xa266c035, 0xb971dd27, 0xb07cd629, 0x8f5fe703, 0x8652ec0d, 0x9d45f11f, 0x9448fa11, 0xe303934b, 0xea0e9845, 0xf1198557, 0xf8148e59, 0xc737bf73, 0xce3ab47d, 0xd52da96f, 0xdc20a261, 0x766df6ad, 0x7f60fda3, 0x6477e0b1, 0x6d7aebbf, 0x5259da95, 0x5b54d19b, 0x4043cc89, 0x494ec787, 0x3e05aedd, 0x3708a5d3, 0x2c1fb8c1, 0x2512b3cf, 0x1a3182e5, 0x133c89eb, 0x082b94f9, 0x01269ff7, 0xe6bd464d, 0xefb04d43, 0xf4a75051, 0xfdaa5b5f, 0xc2896a75, 0xcb84617b, 0xd0937c69, 0xd99e7767, 0xaed51e3d, 0xa7d81533, 0xbccf0821, 0xb5c2032f, 0x8ae13205, 0x83ec390b, 0x98fb2419, 0x91f62f17, 0x4dd68d76, 0x44db8678, 0x5fcc9b6a, 0x56c19064, 0x69e2a14e, 0x60efaa40, 0x7bf8b752, 0x72f5bc5c, 0x05bed506, 0x0cb3de08, 0x17a4c31a, 0x1ea9c814, 0x218af93e, 0x2887f230, 0x3390ef22, 0x3a9de42c, 0xdd063d96, 0xd40b3698, 0xcf1c2b8a, 0xc6112084, 0xf93211ae, 0xf03f1aa0, 0xeb2807b2, 0xe2250cbc, 0x956e65e6, 0x9c636ee8, 0x877473fa, 0x8e7978f4, 0xb15a49de, 0xb85742d0, 0xa3405fc2, 0xaa4d54cc, 0xecdaf741, 0xe5d7fc4f, 0xfec0e15d, 0xf7cdea53, 0xc8eedb79, 0xc1e3d077, 0xdaf4cd65, 0xd3f9c66b, 0xa4b2af31, 0xadbfa43f, 0xb6a8b92d, 0xbfa5b223, 0x80868309, 0x898b8807, 0x929c9515, 0x9b919e1b, 0x7c0a47a1, 0x75074caf, 0x6e1051bd, 0x671d5ab3, 0x583e6b99, 0x51336097, 0x4a247d85, 0x4329768b, 0x34621fd1, 0x3d6f14df, 0x267809cd, 0x2f7502c3, 0x105633e9, 0x195b38e7, 0x024c25f5, 0x0b412efb, 0xd7618c9a, 0xde6c8794, 0xc57b9a86, 0xcc769188, 0xf355a0a2, 0xfa58abac, 0xe14fb6be, 0xe842bdb0, 0x9f09d4ea, 0x9604dfe4, 0x8d13c2f6, 0x841ec9f8, 0xbb3df8d2, 0xb230f3dc, 0xa927eece, 0xa02ae5c0, 0x47b13c7a, 0x4ebc3774, 0x55ab2a66, 0x5ca62168, 0x63851042, 0x6a881b4c, 0x719f065e, 0x78920d50, 0x0fd9640a, 0x06d46f04, 0x1dc37216, 0x14ce7918, 0x2bed4832, 0x22e0433c, 0x39f75e2e, 0x30fa5520, 0x9ab701ec, 0x93ba0ae2, 0x88ad17f0, 0x81a01cfe, 0xbe832dd4, 0xb78e26da, 0xac993bc8, 0xa59430c6, 0xd2df599c, 0xdbd25292, 0xc0c54f80, 0xc9c8448e, 0xf6eb75a4, 0xffe67eaa, 0xe4f163b8, 0xedfc68b6, 0x0a67b10c, 0x036aba02, 0x187da710, 0x1170ac1e, 0x2e539d34, 0x275e963a, 0x3c498b28, 0x35448026, 0x420fe97c, 0x4b02e272, 0x5015ff60, 0x5918f46e, 0x663bc544, 0x6f36ce4a, 0x7421d358, 0x7d2cd856, 0xa10c7a37, 0xa8017139, 0xb3166c2b, 0xba1b6725, 0x8538560f, 0x8c355d01, 0x97224013, 0x9e2f4b1d, 0xe9642247, 0xe0692949, 0xfb7e345b, 0xf2733f55, 0xcd500e7f, 0xc45d0571, 0xdf4a1863, 0xd647136d, 0x31dccad7, 0x38d1c1d9, 0x23c6dccb, 0x2acbd7c5, 0x15e8e6ef, 0x1ce5ede1, 0x07f2f0f3, 0x0efffbfd, 0x79b492a7, 0x70b999a9, 0x6bae84bb, 0x62a38fb5, 0x5d80be9f, 0x548db591, 0x4f9aa883, 0x4697a38d];\nfunction convertToInt32(bytes) {\n const result = [];\n for (let i = 0; i < bytes.length; i += 4) {\n result.push((bytes[i] << 24) | (bytes[i + 1] << 16) | (bytes[i + 2] << 8) | bytes[i + 3]);\n }\n return result;\n}\nexport class AES {\n constructor(key) {\n _AES_key.set(this, void 0);\n _AES_Kd.set(this, void 0);\n _AES_Ke.set(this, void 0);\n if (!(this instanceof AES)) {\n throw Error('AES must be instanitated with `new`');\n }\n __classPrivateFieldSet(this, _AES_key, new Uint8Array(key), \"f\");\n const rounds = numberOfRounds[this.key.length];\n if (rounds == null) {\n throw new TypeError('invalid key size (must be 16, 24 or 32 bytes)');\n }\n // encryption round keys\n __classPrivateFieldSet(this, _AES_Ke, [], \"f\");\n // decryption round keys\n __classPrivateFieldSet(this, _AES_Kd, [], \"f\");\n for (let i = 0; i <= rounds; i++) {\n __classPrivateFieldGet(this, _AES_Ke, \"f\").push([0, 0, 0, 0]);\n __classPrivateFieldGet(this, _AES_Kd, \"f\").push([0, 0, 0, 0]);\n }\n const roundKeyCount = (rounds + 1) * 4;\n const KC = this.key.length / 4;\n // convert the key into ints\n const tk = convertToInt32(this.key);\n // copy values into round key arrays\n let index;\n for (let i = 0; i < KC; i++) {\n index = i >> 2;\n __classPrivateFieldGet(this, _AES_Ke, \"f\")[index][i % 4] = tk[i];\n __classPrivateFieldGet(this, _AES_Kd, \"f\")[rounds - index][i % 4] = tk[i];\n }\n // key expansion (fips-197 section 5.2)\n let rconpointer = 0;\n let t = KC, tt;\n while (t < roundKeyCount) {\n tt = tk[KC - 1];\n tk[0] ^= ((S[(tt >> 16) & 0xFF] << 24) ^\n (S[(tt >> 8) & 0xFF] << 16) ^\n (S[tt & 0xFF] << 8) ^\n S[(tt >> 24) & 0xFF] ^\n (rcon[rconpointer] << 24));\n rconpointer += 1;\n // key expansion (for non-256 bit)\n if (KC != 8) {\n for (let i = 1; i < KC; i++) {\n tk[i] ^= tk[i - 1];\n }\n // key expansion for 256-bit keys is \"slightly different\" (fips-197)\n }\n else {\n for (let i = 1; i < (KC / 2); i++) {\n tk[i] ^= tk[i - 1];\n }\n tt = tk[(KC / 2) - 1];\n tk[KC / 2] ^= (S[tt & 0xFF] ^\n (S[(tt >> 8) & 0xFF] << 8) ^\n (S[(tt >> 16) & 0xFF] << 16) ^\n (S[(tt >> 24) & 0xFF] << 24));\n for (let i = (KC / 2) + 1; i < KC; i++) {\n tk[i] ^= tk[i - 1];\n }\n }\n // copy values into round key arrays\n let i = 0, r, c;\n while (i < KC && t < roundKeyCount) {\n r = t >> 2;\n c = t % 4;\n __classPrivateFieldGet(this, _AES_Ke, \"f\")[r][c] = tk[i];\n __classPrivateFieldGet(this, _AES_Kd, \"f\")[rounds - r][c] = tk[i++];\n t++;\n }\n }\n // inverse-cipher-ify the decryption round key (fips-197 section 5.3)\n for (let r = 1; r < rounds; r++) {\n for (let c = 0; c < 4; c++) {\n tt = __classPrivateFieldGet(this, _AES_Kd, \"f\")[r][c];\n __classPrivateFieldGet(this, _AES_Kd, \"f\")[r][c] = (U1[(tt >> 24) & 0xFF] ^\n U2[(tt >> 16) & 0xFF] ^\n U3[(tt >> 8) & 0xFF] ^\n U4[tt & 0xFF]);\n }\n }\n }\n get key() { return __classPrivateFieldGet(this, _AES_key, \"f\").slice(); }\n encrypt(plaintext) {\n if (plaintext.length != 16) {\n throw new TypeError('invalid plaintext size (must be 16 bytes)');\n }\n const rounds = __classPrivateFieldGet(this, _AES_Ke, \"f\").length - 1;\n const a = [0, 0, 0, 0];\n // convert plaintext to (ints ^ key)\n let t = convertToInt32(plaintext);\n for (let i = 0; i < 4; i++) {\n t[i] ^= __classPrivateFieldGet(this, _AES_Ke, \"f\")[0][i];\n }\n // apply round transforms\n for (let r = 1; r < rounds; r++) {\n for (let i = 0; i < 4; i++) {\n a[i] = (T1[(t[i] >> 24) & 0xff] ^\n T2[(t[(i + 1) % 4] >> 16) & 0xff] ^\n T3[(t[(i + 2) % 4] >> 8) & 0xff] ^\n T4[t[(i + 3) % 4] & 0xff] ^\n __classPrivateFieldGet(this, _AES_Ke, \"f\")[r][i]);\n }\n t = a.slice();\n }\n // the last round is special\n const result = new Uint8Array(16);\n let tt = 0;\n for (let i = 0; i < 4; i++) {\n tt = __classPrivateFieldGet(this, _AES_Ke, \"f\")[rounds][i];\n result[4 * i] = (S[(t[i] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\n result[4 * i + 1] = (S[(t[(i + 1) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\n result[4 * i + 2] = (S[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff;\n result[4 * i + 3] = (S[t[(i + 3) % 4] & 0xff] ^ tt) & 0xff;\n }\n return result;\n }\n decrypt(ciphertext) {\n if (ciphertext.length != 16) {\n throw new TypeError('invalid ciphertext size (must be 16 bytes)');\n }\n const rounds = __classPrivateFieldGet(this, _AES_Kd, \"f\").length - 1;\n const a = [0, 0, 0, 0];\n // convert plaintext to (ints ^ key)\n let t = convertToInt32(ciphertext);\n for (let i = 0; i < 4; i++) {\n t[i] ^= __classPrivateFieldGet(this, _AES_Kd, \"f\")[0][i];\n }\n // apply round transforms\n for (let r = 1; r < rounds; r++) {\n for (let i = 0; i < 4; i++) {\n a[i] = (T5[(t[i] >> 24) & 0xff] ^\n T6[(t[(i + 3) % 4] >> 16) & 0xff] ^\n T7[(t[(i + 2) % 4] >> 8) & 0xff] ^\n T8[t[(i + 1) % 4] & 0xff] ^\n __classPrivateFieldGet(this, _AES_Kd, \"f\")[r][i]);\n }\n t = a.slice();\n }\n // the last round is special\n const result = new Uint8Array(16);\n let tt = 0;\n for (let i = 0; i < 4; i++) {\n tt = __classPrivateFieldGet(this, _AES_Kd, \"f\")[rounds][i];\n result[4 * i] = (Si[(t[i] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\n result[4 * i + 1] = (Si[(t[(i + 3) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\n result[4 * i + 2] = (Si[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff;\n result[4 * i + 3] = (Si[t[(i + 1) % 4] & 0xff] ^ tt) & 0xff;\n }\n return result;\n }\n}\n_AES_key = new WeakMap(), _AES_Kd = new WeakMap(), _AES_Ke = new WeakMap();\n//# sourceMappingURL=aes.js.map","import { AES } from \"./aes.js\";\nexport class ModeOfOperation {\n constructor(name, key, cls) {\n if (cls && !(this instanceof cls)) {\n throw new Error(`${name} must be instantiated with \"new\"`);\n }\n Object.defineProperties(this, {\n aes: { enumerable: true, value: new AES(key) },\n name: { enumerable: true, value: name }\n });\n }\n}\n//# sourceMappingURL=mode.js.map","// Cipher Block Chaining\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _CBC_iv, _CBC_lastBlock;\nimport { ModeOfOperation } from \"./mode.js\";\nexport class CBC extends ModeOfOperation {\n constructor(key, iv) {\n super(\"ECC\", key, CBC);\n _CBC_iv.set(this, void 0);\n _CBC_lastBlock.set(this, void 0);\n if (iv) {\n if (iv.length % 16) {\n throw new TypeError(\"invalid iv size (must be 16 bytes)\");\n }\n __classPrivateFieldSet(this, _CBC_iv, new Uint8Array(iv), \"f\");\n }\n else {\n __classPrivateFieldSet(this, _CBC_iv, new Uint8Array(16), \"f\");\n }\n __classPrivateFieldSet(this, _CBC_lastBlock, this.iv, \"f\");\n }\n get iv() { return new Uint8Array(__classPrivateFieldGet(this, _CBC_iv, \"f\")); }\n encrypt(plaintext) {\n if (plaintext.length % 16) {\n throw new TypeError(\"invalid plaintext size (must be multiple of 16 bytes)\");\n }\n const ciphertext = new Uint8Array(plaintext.length);\n for (let i = 0; i < plaintext.length; i += 16) {\n for (let j = 0; j < 16; j++) {\n __classPrivateFieldGet(this, _CBC_lastBlock, \"f\")[j] ^= plaintext[i + j];\n }\n __classPrivateFieldSet(this, _CBC_lastBlock, this.aes.encrypt(__classPrivateFieldGet(this, _CBC_lastBlock, \"f\")), \"f\");\n ciphertext.set(__classPrivateFieldGet(this, _CBC_lastBlock, \"f\"), i);\n }\n return ciphertext;\n }\n decrypt(ciphertext) {\n if (ciphertext.length % 16) {\n throw new TypeError(\"invalid ciphertext size (must be multiple of 16 bytes)\");\n }\n const plaintext = new Uint8Array(ciphertext.length);\n for (let i = 0; i < ciphertext.length; i += 16) {\n const block = this.aes.decrypt(ciphertext.subarray(i, i + 16));\n for (let j = 0; j < 16; j++) {\n plaintext[i + j] = block[j] ^ __classPrivateFieldGet(this, _CBC_lastBlock, \"f\")[j];\n __classPrivateFieldGet(this, _CBC_lastBlock, \"f\")[j] = ciphertext[i + j];\n }\n }\n return plaintext;\n }\n}\n_CBC_iv = new WeakMap(), _CBC_lastBlock = new WeakMap();\n//# sourceMappingURL=mode-cbc.js.map","// Cipher Feedback\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _CFB_instances, _CFB_iv, _CFB_shiftRegister, _CFB_shift;\nimport { ModeOfOperation } from \"./mode.js\";\nexport class CFB extends ModeOfOperation {\n constructor(key, iv, segmentSize = 8) {\n super(\"CFB\", key, CFB);\n _CFB_instances.add(this);\n _CFB_iv.set(this, void 0);\n _CFB_shiftRegister.set(this, void 0);\n // This library currently only handles byte-aligned segmentSize\n if (!Number.isInteger(segmentSize) || (segmentSize % 8)) {\n throw new TypeError(\"invalid segmentSize\");\n }\n Object.defineProperties(this, {\n segmentSize: { enumerable: true, value: segmentSize }\n });\n if (iv) {\n if (iv.length % 16) {\n throw new TypeError(\"invalid iv size (must be 16 bytes)\");\n }\n __classPrivateFieldSet(this, _CFB_iv, new Uint8Array(iv), \"f\");\n }\n else {\n __classPrivateFieldSet(this, _CFB_iv, new Uint8Array(16), \"f\");\n }\n __classPrivateFieldSet(this, _CFB_shiftRegister, this.iv, \"f\");\n }\n get iv() { return new Uint8Array(__classPrivateFieldGet(this, _CFB_iv, \"f\")); }\n encrypt(plaintext) {\n if (8 * plaintext.length % this.segmentSize) {\n throw new TypeError(\"invalid plaintext size (must be multiple of segmentSize bytes)\");\n }\n const segmentSize = this.segmentSize / 8;\n const ciphertext = new Uint8Array(plaintext);\n for (let i = 0; i < ciphertext.length; i += segmentSize) {\n const xorSegment = this.aes.encrypt(__classPrivateFieldGet(this, _CFB_shiftRegister, \"f\"));\n for (let j = 0; j < segmentSize; j++) {\n ciphertext[i + j] ^= xorSegment[j];\n }\n __classPrivateFieldGet(this, _CFB_instances, \"m\", _CFB_shift).call(this, ciphertext.subarray(i));\n }\n return ciphertext;\n }\n decrypt(ciphertext) {\n if (8 * ciphertext.length % this.segmentSize) {\n throw new TypeError(\"invalid ciphertext size (must be multiple of segmentSize bytes)\");\n }\n const segmentSize = this.segmentSize / 8;\n const plaintext = new Uint8Array(ciphertext);\n for (let i = 0; i < plaintext.length; i += segmentSize) {\n const xorSegment = this.aes.encrypt(__classPrivateFieldGet(this, _CFB_shiftRegister, \"f\"));\n for (let j = 0; j < segmentSize; j++) {\n plaintext[i + j] ^= xorSegment[j];\n }\n __classPrivateFieldGet(this, _CFB_instances, \"m\", _CFB_shift).call(this, ciphertext.subarray(i));\n }\n return plaintext;\n }\n}\n_CFB_iv = new WeakMap(), _CFB_shiftRegister = new WeakMap(), _CFB_instances = new WeakSet(), _CFB_shift = function _CFB_shift(data) {\n const segmentSize = this.segmentSize / 8;\n // Shift the register\n __classPrivateFieldGet(this, _CFB_shiftRegister, \"f\").set(__classPrivateFieldGet(this, _CFB_shiftRegister, \"f\").subarray(segmentSize));\n __classPrivateFieldGet(this, _CFB_shiftRegister, \"f\").set(data.subarray(0, segmentSize), 16 - segmentSize);\n};\n//# sourceMappingURL=mode-cfb.js.map","// Counter Mode\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _CTR_remaining, _CTR_remainingIndex, _CTR_counter;\nimport { ModeOfOperation } from \"./mode.js\";\nexport class CTR extends ModeOfOperation {\n constructor(key, initialValue) {\n super(\"CTR\", key, CTR);\n // Remaining bytes for the one-time pad\n _CTR_remaining.set(this, void 0);\n _CTR_remainingIndex.set(this, void 0);\n // The current counter\n _CTR_counter.set(this, void 0);\n __classPrivateFieldSet(this, _CTR_counter, new Uint8Array(16), \"f\");\n __classPrivateFieldGet(this, _CTR_counter, \"f\").fill(0);\n __classPrivateFieldSet(this, _CTR_remaining, __classPrivateFieldGet(this, _CTR_counter, \"f\"), \"f\"); // This will be discarded immediately\n __classPrivateFieldSet(this, _CTR_remainingIndex, 16, \"f\");\n if (initialValue == null) {\n initialValue = 1;\n }\n if (typeof (initialValue) === \"number\") {\n this.setCounterValue(initialValue);\n }\n else {\n this.setCounterBytes(initialValue);\n }\n }\n get counter() { return new Uint8Array(__classPrivateFieldGet(this, _CTR_counter, \"f\")); }\n setCounterValue(value) {\n if (!Number.isInteger(value) || value < 0 || value > Number.MAX_SAFE_INTEGER) {\n throw new TypeError(\"invalid counter initial integer value\");\n }\n for (let index = 15; index >= 0; --index) {\n __classPrivateFieldGet(this, _CTR_counter, \"f\")[index] = value % 256;\n value = Math.floor(value / 256);\n }\n }\n setCounterBytes(value) {\n if (value.length !== 16) {\n throw new TypeError(\"invalid counter initial Uint8Array value length\");\n }\n __classPrivateFieldGet(this, _CTR_counter, \"f\").set(value);\n }\n increment() {\n for (let i = 15; i >= 0; i--) {\n if (__classPrivateFieldGet(this, _CTR_counter, \"f\")[i] === 255) {\n __classPrivateFieldGet(this, _CTR_counter, \"f\")[i] = 0;\n }\n else {\n __classPrivateFieldGet(this, _CTR_counter, \"f\")[i]++;\n break;\n }\n }\n }\n encrypt(plaintext) {\n var _a, _b;\n const crypttext = new Uint8Array(plaintext);\n for (let i = 0; i < crypttext.length; i++) {\n if (__classPrivateFieldGet(this, _CTR_remainingIndex, \"f\") === 16) {\n __classPrivateFieldSet(this, _CTR_remaining, this.aes.encrypt(__classPrivateFieldGet(this, _CTR_counter, \"f\")), \"f\");\n __classPrivateFieldSet(this, _CTR_remainingIndex, 0, \"f\");\n this.increment();\n }\n crypttext[i] ^= __classPrivateFieldGet(this, _CTR_remaining, \"f\")[__classPrivateFieldSet(this, _CTR_remainingIndex, (_b = __classPrivateFieldGet(this, _CTR_remainingIndex, \"f\"), _a = _b++, _b), \"f\"), _a];\n }\n return crypttext;\n }\n decrypt(ciphertext) {\n return this.encrypt(ciphertext);\n }\n}\n_CTR_remaining = new WeakMap(), _CTR_remainingIndex = new WeakMap(), _CTR_counter = new WeakMap();\n//# sourceMappingURL=mode-ctr.js.map","// Output Feedback\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _OFB_iv, _OFB_lastPrecipher, _OFB_lastPrecipherIndex;\nimport { ModeOfOperation } from \"./mode.js\";\nexport class OFB extends ModeOfOperation {\n constructor(key, iv) {\n super(\"OFB\", key, OFB);\n _OFB_iv.set(this, void 0);\n _OFB_lastPrecipher.set(this, void 0);\n _OFB_lastPrecipherIndex.set(this, void 0);\n if (iv) {\n if (iv.length % 16) {\n throw new TypeError(\"invalid iv size (must be 16 bytes)\");\n }\n __classPrivateFieldSet(this, _OFB_iv, new Uint8Array(iv), \"f\");\n }\n else {\n __classPrivateFieldSet(this, _OFB_iv, new Uint8Array(16), \"f\");\n }\n __classPrivateFieldSet(this, _OFB_lastPrecipher, this.iv, \"f\");\n __classPrivateFieldSet(this, _OFB_lastPrecipherIndex, 16, \"f\");\n }\n get iv() { return new Uint8Array(__classPrivateFieldGet(this, _OFB_iv, \"f\")); }\n encrypt(plaintext) {\n var _a, _b;\n if (plaintext.length % 16) {\n throw new TypeError(\"invalid plaintext size (must be multiple of 16 bytes)\");\n }\n const ciphertext = new Uint8Array(plaintext);\n for (let i = 0; i < ciphertext.length; i++) {\n if (__classPrivateFieldGet(this, _OFB_lastPrecipherIndex, \"f\") === 16) {\n __classPrivateFieldSet(this, _OFB_lastPrecipher, this.aes.encrypt(__classPrivateFieldGet(this, _OFB_lastPrecipher, \"f\")), \"f\");\n __classPrivateFieldSet(this, _OFB_lastPrecipherIndex, 0, \"f\");\n }\n ciphertext[i] ^= __classPrivateFieldGet(this, _OFB_lastPrecipher, \"f\")[__classPrivateFieldSet(this, _OFB_lastPrecipherIndex, (_b = __classPrivateFieldGet(this, _OFB_lastPrecipherIndex, \"f\"), _a = _b++, _b), \"f\"), _a];\n }\n return ciphertext;\n }\n decrypt(ciphertext) {\n if (ciphertext.length % 16) {\n throw new TypeError(\"invalid ciphertext size (must be multiple of 16 bytes)\");\n }\n return this.encrypt(ciphertext);\n }\n}\n_OFB_iv = new WeakMap(), _OFB_lastPrecipher = new WeakMap(), _OFB_lastPrecipherIndex = new WeakMap();\n//# sourceMappingURL=mode-ofb.js.map","export function pkcs7Pad(data) {\n const padder = 16 - (data.length % 16);\n const result = new Uint8Array(data.length + padder);\n result.set(data);\n for (let i = data.length; i < result.length; i++) {\n result[i] = padder;\n }\n return result;\n}\nexport function pkcs7Strip(data) {\n if (data.length < 16) {\n throw new TypeError('PKCS#7 invalid length');\n }\n const padder = data[data.length - 1];\n if (padder > 16) {\n throw new TypeError('PKCS#7 padding byte out of range');\n }\n const length = data.length - padder;\n for (let i = 0; i < padder; i++) {\n if (data[length + i] !== padder) {\n throw new TypeError('PKCS#7 invalid padding byte');\n }\n }\n return new Uint8Array(data.subarray(0, length));\n}\n//# sourceMappingURL=padding.js.map","import { arrayify, hexlify } from \"@ethersproject/bytes\";\nimport { toUtf8Bytes, UnicodeNormalizationForm } from '@ethersproject/strings';\nimport { logger } from \"./logger.js\";\nexport function looseArrayify(hexString) {\n if (typeof (hexString) === 'string' && hexString.substring(0, 2) !== '0x') {\n hexString = '0x' + hexString;\n }\n return arrayify(hexString);\n}\nexport function zpad(value, length) {\n value = String(value);\n while (value.length < length) {\n value = '0' + value;\n }\n return value;\n}\nexport function getPassword(password) {\n if (typeof (password) === 'string') {\n return toUtf8Bytes(password, UnicodeNormalizationForm.NFKC);\n }\n return arrayify(password);\n}\nexport function spelunk(object, _path) {\n const match = _path.match(/^([a-z0-9$_.-]*)(:([a-z]+))?(!)?$/i);\n if (match == null) {\n return logger.throwArgumentError(\"invalid path\", \"path\", _path);\n }\n const path = match[1];\n const type = match[3];\n const reqd = (match[4] === \"!\");\n let cur = object;\n for (const comp of path.toLowerCase().split('.')) {\n // Search for a child object with a case-insensitive matching key\n if (Array.isArray(cur)) {\n if (!comp.match(/^[0-9]+$/)) {\n break;\n }\n cur = cur[parseInt(comp)];\n }\n else if (typeof (cur) === \"object\") {\n let found = null;\n for (const key in cur) {\n if (key.toLowerCase() === comp) {\n found = cur[key];\n break;\n }\n }\n cur = found;\n }\n else {\n cur = null;\n }\n if (cur == null) {\n break;\n }\n }\n if (reqd && cur == null) {\n logger.throwArgumentError(\"missing required value\", \"path\", path);\n }\n if (type && cur != null) {\n if (type === \"int\") {\n if (typeof (cur) === \"string\" && cur.match(/^-?[0-9]+$/)) {\n return parseInt(cur);\n }\n else if (Number.isSafeInteger(cur)) {\n return cur;\n }\n }\n if (type === \"number\") {\n if (typeof (cur) === \"string\" && cur.match(/^-?[0-9.]*$/)) {\n return parseFloat(cur);\n }\n }\n if (type === \"data\") {\n if (typeof (cur) === \"string\") {\n return looseArrayify(cur);\n }\n }\n if (type === \"array\" && Array.isArray(cur)) {\n return cur;\n }\n if (type === typeof (cur)) {\n return cur;\n }\n logger.throwArgumentError(`wrong type found for ${type} `, \"path\", path);\n }\n return cur;\n}\n/*\nexport function follow(object: any, path: string): null | string {\n let currentChild = object;\n\n for (const comp of path.toLowerCase().split('/')) {\n\n // Search for a child object with a case-insensitive matching key\n let matchingChild = null;\n for (const key in currentChild) {\n if (key.toLowerCase() === comp) {\n matchingChild = currentChild[key];\n break;\n }\n }\n\n if (matchingChild === null) { return null; }\n\n currentChild = matchingChild;\n }\n\n return currentChild;\n}\n\n// \"path/to/something:type!\"\nexport function followRequired(data: any, path: string): string {\n const value = follow(data, path);\n if (value != null) { return value; }\n return logger.throwArgumentError(\"invalid value\", `data:${ path }`,\n JSON.stringify(data));\n}\n*/\n// See: https://www.ietf.org/rfc/rfc4122.txt (Section 4.4)\nexport function uuidV4(randomBytes) {\n const bytes = logger.getBytes(randomBytes, \"randomBytes\");\n // Section: 4.1.3:\n // - time_hi_and_version[12:16] = 0b0100\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n // Section 4.4\n // - clock_seq_hi_and_reserved[6] = 0b0\n // - clock_seq_hi_and_reserved[7] = 0b1\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const value = hexlify(bytes);\n return [\n value.substring(2, 10),\n value.substring(10, 14),\n value.substring(14, 18),\n value.substring(18, 22),\n value.substring(22, 34),\n ].join(\"-\");\n}\n//# sourceMappingURL=utils.js.map","import { CBC, pkcs7Strip } from \"aes-js\";\nimport { getAddress } from \"@ethersproject/address\";\nimport { arrayify } from \"@ethersproject/bytes\";\nimport { pbkdf2 } from \"@ethersproject/crypto\";\nimport { id } from \"@ethersproject/hash\";\nimport { logger } from \"./logger.js\";\nimport { getPassword, looseArrayify, spelunk } from \"./utils.js\";\nexport function isCrowdsaleJson(json) {\n try {\n const data = JSON.parse(json);\n if (data.encseed) {\n return true;\n }\n }\n catch (error) { }\n return false;\n}\n// See: https://github.com/ethereum/pyethsaletool\nexport function decryptCrowdsaleJson(json, _password) {\n const data = JSON.parse(json);\n const password = getPassword(_password);\n // Ethereum Address\n const address = getAddress(spelunk(data, \"ethaddr:string!\"));\n // Encrypted Seed\n const encseed = looseArrayify(spelunk(data, \"encseed:string!\"));\n if (!encseed || (encseed.length % 16) !== 0) {\n logger.throwArgumentError(\"invalid encseed\", \"json\", json);\n }\n const key = arrayify(pbkdf2(password, password, 2000, 32, \"sha256\")).slice(0, 16);\n const iv = encseed.slice(0, 16);\n const encryptedSeed = encseed.slice(16);\n // Decrypt the seed\n const aesCbc = new CBC(key, iv);\n const seed = pkcs7Strip(arrayify(aesCbc.decrypt(encryptedSeed)));\n // This wallet format is weird... Convert the binary encoded hex to a string.\n let seedHex = \"\";\n for (let i = 0; i < seed.length; i++) {\n seedHex += String.fromCharCode(seed[i]);\n }\n return { address, privateKey: id(seedHex) };\n}\n//# sourceMappingURL=json-crowdsale.js.map","import { CTR } from \"aes-js\";\nimport { getAddress } from \"@ethersproject/address\";\nimport { arrayify, concat, hexlify } from \"@ethersproject/bytes\";\nimport { keccak256, pbkdf2, randomBytes, scrypt, scryptSync } from \"@ethersproject/crypto\";\nimport { computeAddress } from \"./address.js\";\nimport { logger } from \"./logger.js\";\nimport { getPassword, spelunk, uuidV4, zpad } from \"./utils.js\";\nimport { version } from \"./_version.js\";\nconst defaultPath = \"m/44'/60'/0'/0/0\";\nexport function isKeystoreJson(json) {\n try {\n const data = JSON.parse(json);\n const version = ((data.version != null) ? parseInt(data.version) : 0);\n if (version === 3) {\n return true;\n }\n }\n catch (error) { }\n return false;\n}\nfunction decrypt(data, key, ciphertext) {\n const cipher = spelunk(data, \"crypto.cipher:string\");\n if (cipher === \"aes-128-ctr\") {\n const iv = spelunk(data, \"crypto.cipherparams.iv:data!\");\n const aesCtr = new CTR(key, iv);\n return hexlify(aesCtr.decrypt(ciphertext));\n }\n return logger.throwError(\"unsupported cipher\", \"UNSUPPORTED_OPERATION\", {\n operation: \"decrypt\"\n });\n}\nfunction getAccount(data, _key) {\n const key = logger.getBytes(_key);\n const ciphertext = spelunk(data, \"crypto.ciphertext:data!\");\n const computedMAC = hexlify(keccak256(concat([key.slice(16, 32), ciphertext]))).substring(2);\n if (computedMAC !== spelunk(data, \"crypto.mac:string!\").toLowerCase()) {\n return logger.throwArgumentError(\"incorrect password\", \"password\", \"[ REDACTED ]\");\n }\n const privateKey = decrypt(data, key.slice(0, 16), ciphertext);\n const address = computeAddress(privateKey);\n if (data.address) {\n let check = data.address.toLowerCase();\n if (check.substring(0, 2) !== \"0x\") {\n check = \"0x\" + check;\n }\n if (getAddress(check) !== address) {\n logger.throwArgumentError(\"keystore address/privateKey mismatch\", \"address\", data.address);\n }\n }\n const account = { address, privateKey };\n // Version 0.1 x-ethers metadata must contain an encrypted mnemonic phrase\n const version = spelunk(data, \"x-ethers.version:string\");\n if (version === \"0.1\") {\n const mnemonicKey = key.slice(32, 64);\n const mnemonicCiphertext = spelunk(data, \"x-ethers.mnemonicCiphertext:data!\");\n const mnemonicIv = spelunk(data, \"x-ethers.mnemonicCounter:data!\");\n const mnemonicAesCtr = new CTR(mnemonicKey, mnemonicIv);\n account.mnemonic = {\n path: (spelunk(data, \"x-ethers.path:string\") || defaultPath),\n locale: (spelunk(data, \"x-ethers.locale:string\") || \"en\"),\n entropy: hexlify(arrayify(mnemonicAesCtr.decrypt(mnemonicCiphertext)))\n };\n }\n return account;\n}\nfunction getKdfParams(data) {\n const kdf = spelunk(data, \"crypto.kdf:string\");\n if (kdf && typeof (kdf) === \"string\") {\n const throwError = function (name, value) {\n return logger.throwArgumentError(\"invalid key-derivation function parameters\", name, value);\n };\n if (kdf.toLowerCase() === \"scrypt\") {\n const salt = spelunk(data, \"crypto.kdfparams.salt:data!\");\n const N = spelunk(data, \"crypto.kdfparams.n:int!\");\n const r = spelunk(data, \"crypto.kdfparams.r:int!\");\n const p = spelunk(data, \"crypto.kdfparams.p:int!\");\n // Check for all required parameters\n if (!N || !r || !p) {\n return throwError(\"kdf\", kdf);\n }\n // Make sure N is a power of 2\n if ((N & (N - 1)) !== 0) {\n return throwError(\"N\", N);\n }\n const dkLen = spelunk(data, \"crypto.kdfparams.dklen:int!\");\n if (dkLen !== 32) {\n return throwError(\"dklen\", dkLen);\n }\n return { name: \"scrypt\", salt, N, r, p, dkLen: 64 };\n }\n else if (kdf.toLowerCase() === \"pbkdf2\") {\n const salt = spelunk(data, \"crypto.kdfparams.salt:data!\");\n const prf = spelunk(data, \"crypto.kdfparams.prf:string!\");\n const algorithm = prf.split(\"-\").pop();\n if (algorithm !== \"sha256\" && algorithm !== \"sha512\") {\n return throwError(\"prf\", prf);\n }\n const count = spelunk(data, \"crypto.kdfparams.c:int!\");\n const dkLen = spelunk(data, \"crypto.kdfparams.dklen:int!\");\n if (dkLen !== 32) {\n throwError(\"dklen\", dkLen);\n }\n return { name: \"pbkdf2\", salt, count, dkLen, algorithm };\n }\n }\n return logger.throwArgumentError(\"unsupported key-derivation function\", \"kdf\", kdf);\n}\nexport function decryptKeystoreJsonSync(json, _password) {\n const data = JSON.parse(json);\n const password = getPassword(_password);\n const params = getKdfParams(data);\n if (params.name === \"pbkdf2\") {\n const { salt, count, dkLen, algorithm } = params;\n const key = pbkdf2(password, salt, count, dkLen, algorithm);\n return getAccount(data, key);\n }\n else if (params.name === \"scrypt\") {\n const { salt, N, r, p, dkLen } = params;\n const key = scryptSync(password, salt, N, r, p, dkLen);\n return getAccount(data, key);\n }\n throw new Error(\"unreachable\");\n}\nfunction stall(duration) {\n return new Promise((resolve) => { setTimeout(() => { resolve(); }, duration); });\n}\nexport async function decryptKeystoreJson(json, _password, progress) {\n const data = JSON.parse(json);\n const password = getPassword(_password);\n const params = getKdfParams(data);\n if (params.name === \"pbkdf2\") {\n if (progress) {\n progress(0);\n await stall(0);\n }\n const { salt, count, dkLen, algorithm } = params;\n const key = pbkdf2(password, salt, count, dkLen, algorithm);\n if (progress) {\n progress(1);\n await stall(0);\n }\n return getAccount(data, key);\n }\n else if (params.name === \"scrypt\") {\n const { salt, N, r, p, dkLen } = params;\n const key = await scrypt(password, salt, N, r, p, dkLen, progress);\n return getAccount(data, key);\n }\n throw new Error(\"unreachable\");\n}\nexport async function encryptKeystoreJson(account, password, options, progressCallback) {\n // Check the address matches the private key\n //if (getAddress(account.address) !== computeAddress(account.privateKey)) {\n // throw new Error(\"address/privateKey mismatch\");\n //}\n // Check the mnemonic (if any) matches the private key\n /*\n if (hasMnemonic(account)) {\n const mnemonic = account.mnemonic;\n const node = HDNode.fromMnemonic(mnemonic.phrase, null, mnemonic.locale).derivePath(mnemonic.path || defaultPath);\n\n if (node.privateKey != account.privateKey) {\n throw new Error(\"mnemonic mismatch\");\n }\n }\n */\n // The options are optional, so adjust the call as needed\n if (typeof (options) === \"function\" && !progressCallback) {\n progressCallback = options;\n options = {};\n }\n if (!options) {\n options = {};\n }\n const privateKey = logger.getBytes(account.privateKey, \"privateKey\");\n const passwordBytes = getPassword(password);\n /*\n let mnemonic: null | Mnemonic = null;\n let entropy: Uint8Array = null\n let path: string = null;\n let locale: string = null;\n if (hasMnemonic(account)) {\n const srcMnemonic = account.mnemonic;\n entropy = arrayify(mnemonicToEntropy(srcMnemonic.phrase, srcMnemonic.locale || \"en\"));\n path = srcMnemonic.path || defaultPath;\n locale = srcMnemonic.locale || \"en\";\n mnemonic = Mnemonic.from(\n }\n */\n // Check/generate the salt\n const salt = (options.salt != null) ? logger.getBytes(options.salt, \"options.slat\") : randomBytes(32);\n // Override initialization vector\n const iv = (options.iv != null) ? logger.getBytes(options.iv, \"options.iv\") : randomBytes(16);\n if (iv.length !== 16) {\n logger.throwArgumentError(\"invalid options.iv\", \"options.iv\", options.iv);\n }\n // Override the uuid\n const uuidRandom = (options.uuid != null) ? logger.getBytes(options.uuid, \"options.uuid\") : randomBytes(16);\n if (uuidRandom.length !== 16) {\n logger.throwArgumentError(\"invalid options.uuid\", \"options.uuid\", options.iv);\n }\n if (uuidRandom.length !== 16) {\n throw new Error(\"invalid uuid\");\n }\n // Override the scrypt password-based key derivation function parameters\n let N = (1 << 17), r = 8, p = 1;\n if (options.scrypt) {\n if (options.scrypt.N) {\n N = options.scrypt.N;\n }\n if (options.scrypt.r) {\n r = options.scrypt.r;\n }\n if (options.scrypt.p) {\n p = options.scrypt.p;\n }\n }\n // We take 64 bytes:\n // - 32 bytes As normal for the Web3 secret storage (derivedKey, macPrefix)\n // - 32 bytes AES key to encrypt mnemonic with (required here to be Ethers Wallet)\n const _key = await scrypt(passwordBytes, salt, N, r, p, 64, progressCallback);\n const key = arrayify(_key);\n // This will be used to encrypt the wallet (as per Web3 secret storage)\n const derivedKey = key.slice(0, 16);\n const macPrefix = key.slice(16, 32);\n // Encrypt the private key\n const aesCtr = new CTR(derivedKey, iv);\n const ciphertext = arrayify(aesCtr.encrypt(privateKey));\n // Compute the message authentication code, used to check the password\n const mac = keccak256(concat([macPrefix, ciphertext]));\n // See: https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition\n const data = {\n address: account.address.substring(2).toLowerCase(),\n id: uuidV4(uuidRandom),\n version: 3,\n Crypto: {\n cipher: \"aes-128-ctr\",\n cipherparams: {\n iv: hexlify(iv).substring(2),\n },\n ciphertext: hexlify(ciphertext).substring(2),\n kdf: \"scrypt\",\n kdfparams: {\n salt: hexlify(salt).substring(2),\n n: N,\n dklen: 32,\n p: p,\n r: r\n },\n mac: mac.substring(2)\n }\n };\n // If we have a mnemonic, encrypt it into the JSON wallet\n if (account.mnemonic) {\n const client = (options.client != null) ? options.client : `ethers/${version}`;\n const path = account.mnemonic.path || defaultPath;\n const locale = account.mnemonic.locale || \"en\";\n const mnemonicKey = key.slice(32, 64);\n const entropy = logger.getBytes(account.mnemonic.entropy, \"account.mnemonic.entropy\");\n const mnemonicIv = randomBytes(16);\n const mnemonicAesCtr = new CTR(mnemonicKey, mnemonicIv);\n const mnemonicCiphertext = arrayify(mnemonicAesCtr.encrypt(entropy));\n const now = new Date();\n const timestamp = (now.getUTCFullYear() + \"-\" +\n zpad(now.getUTCMonth() + 1, 2) + \"-\" +\n zpad(now.getUTCDate(), 2) + \"T\" +\n zpad(now.getUTCHours(), 2) + \"-\" +\n zpad(now.getUTCMinutes(), 2) + \"-\" +\n zpad(now.getUTCSeconds(), 2) + \".0Z\");\n const gethFilename = (\"UTC--\" + timestamp + \"--\" + data.address);\n data[\"x-ethers\"] = {\n client, gethFilename, path, locale,\n mnemonicCounter: hexlify(mnemonicIv).substring(2),\n mnemonicCiphertext: hexlify(mnemonicCiphertext).substring(2),\n version: \"0.1\"\n };\n }\n return JSON.stringify(data);\n}\n//# sourceMappingURL=json-keystore.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Wallet_mnemonic;\nimport { isHexString } from \"@ethersproject/bytes\";\nimport { randomBytes } from \"@ethersproject/crypto\";\nimport { SigningKey } from \"@ethersproject/signing-key\";\nimport { computeAddress } from \"./address.js\";\nimport { BaseWallet } from \"./base-wallet.js\";\nimport { HDNodeWallet } from \"./hdwallet.js\";\nimport { decryptCrowdsaleJson, isCrowdsaleJson } from \"./json-crowdsale.js\";\nimport { decryptKeystoreJson, decryptKeystoreJsonSync, isKeystoreJson } from \"./json-keystore.js\";\nimport { logger } from \"./logger.js\";\nimport { Mnemonic } from \"./mnemonic.js\";\nfunction tryWallet(value) {\n try {\n if (!value || !value.signingKey) {\n return null;\n }\n const key = trySigningKey(value.signingKey);\n if (key == null || computeAddress(key.publicKey) !== value.address) {\n return null;\n }\n if (value.mnemonic) {\n const wallet = HDNodeWallet.fromMnemonic(value.mnemonic);\n if (wallet.privateKey !== key.privateKey) {\n return null;\n }\n }\n return value;\n }\n catch (e) {\n console.log(e);\n }\n return null;\n}\n// Try using value as mnemonic to derive the defaultPath HDodeWallet\nfunction tryMnemonic(value) {\n try {\n if (value == null || typeof (value.phrase) !== \"string\" ||\n typeof (value.password) !== \"string\" ||\n value.wordlist == null) {\n return null;\n }\n return HDNodeWallet.fromPhrase(value.phrase, value.password, null, value.wordlist);\n }\n catch (error) {\n console.log(error);\n }\n return null;\n}\nfunction trySigningKey(value) {\n try {\n if (!value || !isHexString(value.privateKey, 32)) {\n return null;\n }\n const key = value.privateKey;\n if (SigningKey.computePublicKey(key) !== value.publicKey) {\n return null;\n }\n return new SigningKey(key);\n }\n catch (e) {\n console.log(e);\n }\n return null;\n}\nfunction stall(duration) {\n return new Promise((resolve) => { setTimeout(() => { resolve(); }, duration); });\n}\nexport class Wallet extends BaseWallet {\n constructor(key, provider) {\n let signingKey = null;\n let mnemonic = null;\n // A normal private key\n if (typeof (key) === \"string\") {\n signingKey = new SigningKey(key);\n }\n // Try Wallet\n if (signingKey == null) {\n const wallet = tryWallet(key);\n if (wallet) {\n signingKey = wallet.signingKey;\n mnemonic = wallet.mnemonic || null;\n }\n }\n // Try Mnemonic, with the defaultPath wallet\n if (signingKey == null) {\n const wallet = tryMnemonic(key);\n if (wallet) {\n signingKey = wallet.signingKey;\n mnemonic = wallet.mnemonic || null;\n }\n }\n // A signing key\n if (signingKey == null) {\n signingKey = trySigningKey(key);\n }\n if (signingKey == null) {\n logger.throwArgumentError(\"invalid key\", \"key\", \"[ REDACTED ]\");\n }\n super(signingKey, provider);\n _Wallet_mnemonic.set(this, void 0);\n __classPrivateFieldSet(this, _Wallet_mnemonic, mnemonic, \"f\");\n }\n // Store this in a getter to reduce visibility in console.log\n get mnemonic() { return __classPrivateFieldGet(this, _Wallet_mnemonic, \"f\"); }\n connect(provider) {\n return new Wallet(this, provider);\n }\n async encrypt(password, options, progressCallback) {\n throw new Error(\"TODO\");\n }\n encryptSync(password, options) {\n throw new Error(\"TODO\");\n }\n static async fromEncryptedJson(json, password, progress) {\n let account = null;\n if (isKeystoreJson(json)) {\n account = await decryptKeystoreJson(json, password, progress);\n }\n else if (isCrowdsaleJson(json)) {\n if (progress) {\n progress(0);\n await stall(0);\n }\n account = decryptCrowdsaleJson(json, password);\n if (progress) {\n progress(1);\n await stall(0);\n }\n }\n else {\n return logger.throwArgumentError(\"invalid JSON wallet\", \"json\", \"[ REDACTED ]\");\n }\n const wallet = new Wallet(account.privateKey);\n if (wallet.address !== account.address) {\n logger.throwArgumentError(\"address/privateKey mismatch\", \"json\", \"[ REDACTED ]\");\n }\n // @TODO: mnemonic\n return wallet;\n }\n static fromEncryptedJsonSync(json, password) {\n let account = null;\n if (isKeystoreJson(json)) {\n account = decryptKeystoreJsonSync(json, password);\n }\n else if (isCrowdsaleJson(json)) {\n account = decryptCrowdsaleJson(json, password);\n }\n else {\n return logger.throwArgumentError(\"invalid JSON wallet\", \"json\", \"[ REDACTED ]\");\n }\n const wallet = new Wallet(account.privateKey);\n if (wallet.address !== account.address) {\n logger.throwArgumentError(\"address/privateKey mismatch\", \"json\", \"[ REDACTED ]\");\n }\n // @TODO: mnemonic\n return wallet;\n }\n static createRandom(provider, password, wordlist) {\n return new Wallet(Mnemonic.fromEntropy(randomBytes(16), password, wordlist), provider);\n }\n static fromMnemonic(mnemonic, provider) {\n return new Wallet(mnemonic, provider);\n }\n static fromPhrase(phrase, provider, password = \"\", wordlist) {\n return new Wallet(Mnemonic.fromPhrase(phrase, password, wordlist), provider);\n }\n}\n_Wallet_mnemonic = new WeakMap();\n//# sourceMappingURL=wallet.js.map","export const version = \"ethers@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map"],"names":["__classPrivateFieldSet","this","__classPrivateFieldGet","version","maxValue","logger","_guard","internal","nibbles","BN_0","BN_1","zeros","BN_255","passProperties","getValue","pbkdf2","sha256","u64.split","u64.rotrSH","u64.shrSH","u64.rotrSL","u64.shrSL","u64.rotrBH","u64.rotrBL","u64.add4L","u64.add4H","u64.add5L","u64.add5H","u64.add","u64.add3L","u64.add3H","sha512","getGlobal","crypto","randomBytes","locked","_0n","_1n","_2n","u64.rotlBH","u64.rotlSH","u64.rotlBL","u64.rotlSL","rotl","ripemd160","noble_ripemd160","crypto_random","scrypt","_nobleAsync","_nobleSync","H","Empty","BN_MAX_UINT256","getTime","_a","numPad","bytesPad","encodeBytes","BN_2","Signature","secp256k1.utils","secp256k1.signSync","secp256k1.Signature","secp256k1.getSharedSecret","secp256k1.getPublicKey","secp256k1.Point","secp256k1.recoverPublicKey","copyRequest","Network","copy","concisify","defaultApiKey","getHost","stall","WebSocket","_Network","en","defaultPath"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,iBAAiB,CAAC,KAAK,EAAE;AAC/C,IAAI,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpC,IAAI,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClF,IAAI,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,KAAK;AAC/C,QAAQ,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;AAC/B,QAAQ,OAAO,KAAK,CAAC;AACrB,KAAK,EAAE,EAAE,CAAC,CAAC;AACX,CAAC;AAQD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA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AG,CAAC,EAAE,EAAE,CAAC,CAAC;AACvC,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACtC,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACtC,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;AACvC,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;AACvC,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACtC,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACtC,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;AACvC,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;AACvC,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACtC,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACtC,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;AACvC,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;AACvC,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACtC,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACtC,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;AACvC,QAAQ,GAAG,IAAI,IAAI,CAAC,G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CAAC,EAAE;AACzC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,IAAI,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AACxC,IAAI,OAAO,IAAI,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;AACvC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACzC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;AACxC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AACpC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;AACxC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;AACxC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;AACxC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;AACxC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;AACxC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;AACxC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;AACxC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;AACxC,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;AACxC,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,IAAI,KAAK,CAAC,MAAM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,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;AAChE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE;AAChC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;AAClD,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;AAC3D,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE;AAChC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE;AAChC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE;AAChC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE;AAChC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE;AAChC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE;AAChC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;AACzC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;AACzC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EA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AE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC3gD,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC5gD;AACA,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAC5gG,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAC5gG,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAC5gG,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAC5gG;AACA,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAC5gG,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAC5gG,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAC5gG,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAC5gG;AACA,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAC5gG,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAC5gG,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAC5gG,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAC5gG,SAAS,cAAc,CAAC,KAAK,EAAE;AAC/B,IAAI,MAAM,MAAM,GAAG,EAAE,CAAC;AACtB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AAC9C,QAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAClG,KAAK;AACL,IAAI,OAAO,MAAM,CAAC;AAClB,CAAC;AACM,MAAM,GAAG,CAAC;AACjB,IAAI,WAAW,CAAC,GAAG,EAAE;AACrB,QAAQ,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AACnC,QAAQ,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAClC,QAAQ,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAClC,QAAQ,IAAI,EAAE,IAAI,YAAY,GAAG,CAAC,EAAE;AACpC,YAAY,MAAM,KAAK,CAAC,qCAAqC,CAAC,CAAC;AAC/D,SAAS;AACT,QAAQD,wBAAsB,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AACzE,QAAQ,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACvD,QAAQ,IAAI,MAAM,IAAI,IAAI,EAAE;AAC5B,YAAY,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC;AACjF,SAAS;AACT;AACA,QAAQA,wBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;AACvD;AACA,QAAQA,wBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;AACvD,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1C,YAAYE,wBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1E,YAAYA,wBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1E,SAAS;AACT,QAAQ,MAAM,aAAa,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;AAC/C,QAAQ,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;AACvC;AACA,QAAQ,MAAM,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5C;AACA,QAAQ,IAAI,KAAK,CAAC;AAClB,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;AACrC,YAAY,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;AAC3B,YAAYA,wBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7E,YAAYA,wBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACtF,SAAS;AACT;AACA,QAAQ,IAAI,WAAW,GAAG,CAAC,CAAC;AAC5B,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC;AACvB,QAAQ,OAAO,CAAC,GAAG,aAAa,EAAE;AAClC,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5B,YAAY,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE;AACjD,iBAAiB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAC3C,iBAAiB,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;AACnC,gBAAgB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;AACpC,iBAAiB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAC3C,YAAY,WAAW,IAAI,CAAC,CAAC;AAC7B;AACA,YAAY,IAAI,EAAE,IAAI,CAAC,EAAE;AACzB,gBAAgB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;AAC7C,oBAAoB,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,iBAAiB;AACjB;AACA,aAAa;AACb,iBAAiB;AACjB,gBAAgB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;AACnD,oBAAoB,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,iBAAiB;AACjB,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACtC,gBAAgB,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC;AAC3C,qBAAqB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9C,qBAAqB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChD,qBAAqB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAClD,gBAAgB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;AACxD,oBAAoB,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,iBAAiB;AACjB,aAAa;AACb;AACA,YAAY,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5B,YAAY,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,aAAa,EAAE;AAChD,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC3B,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC1B,gBAAgBA,wBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACzE,gBAAgBA,wBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACpF,gBAAgB,CAAC,EAAE,CAAC;AACpB,aAAa;AACb,SAAS;AACT;AACA,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACxC,gBAAgB,EAAE,GAAGA,wBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,gBAAgBA,wBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;AACzF,oBAAoB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;AACzC,oBAAoB,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC;AACxC,oBAAoB,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;AACnC,aAAa;AACb,SAAS;AACT,KAAK;AACL,IAAI,IAAI,GAAG,GAAG,EAAE,OAAOA,wBAAsB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE;AAC7E,IAAI,OAAO,CAAC,SAAS,EAAE;AACvB,QAAQ,IAAI,SAAS,CAAC,MAAM,IAAI,EAAE,EAAE;AACpC,YAAY,MAAM,IAAI,SAAS,CAAC,2CAA2C,CAAC,CAAC;AAC7E,SAAS;AACT,QAAQ,MAAM,MAAM,GAAGA,wBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7E,QAAQ,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/B;AACA,QAAQ,IAAI,CAAC,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;AAC1C,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACpC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAIA,wBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrE,SAAS;AACT;AACA,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACxC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;AAC/C,oBAAoB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;AACrD,oBAAoB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AACpD,oBAAoB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;AAC7C,oBAAoBA,wBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,aAAa;AACb,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AAC1B,SAAS;AACT;AACA,QAAQ,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;AAC1C,QAAQ,IAAI,EAAE,GAAG,CAAC,CAAC;AACnB,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACpC,YAAY,EAAE,GAAGA,wBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,YAAY,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC;AACzE,YAAY,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC;AACvF,YAAY,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC;AACrF,YAAY,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC;AACvE,SAAS;AACT,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,IAAI,OAAO,CAAC,UAAU,EAAE;AACxB,QAAQ,IAAI,UAAU,CAAC,MAAM,IAAI,EAAE,EAAE;AACrC,YAAY,MAAM,IAAI,SAAS,CAAC,4CAA4C,CAAC,CAAC;AAC9E,SAAS;AACT,QAAQ,MAAM,MAAM,GAAGA,wBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7E,QAAQ,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/B;AACA,QAAQ,IAAI,CAAC,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;AAC3C,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACpC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAIA,wBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrE,SAAS;AACT;AACA,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACxC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;AAC/C,oBAAoB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;AACrD,oBAAoB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AACpD,oBAAoB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;AAC7C,oBAAoBA,wBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,aAAa;AACb,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AAC1B,SAAS;AACT;AACA,QAAQ,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;AAC1C,QAAQ,IAAI,EAAE,GAAG,CAAC,CAAC;AACnB,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACpC,YAAY,EAAE,GAAGA,wBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,YAAY,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC;AAC1E,YAAY,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC;AACxF,YAAY,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC;AACtF,YAAY,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC;AACxE,SAAS;AACT,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,CAAC;AACD,QAAQ,GAAG,IAAI,OAAO,EAAE,EAAE,OAAO,GAAG,IAAI,OAAO,EAAE,EAAE,OAAO,GAAG,IAAI,OAAO,EAAE;;ACnMnE,MAAM,eAAe,CAAC;AAC7B,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE;AAChC,QAAQ,IAAI,GAAG,IAAI,EAAE,IAAI,YAAY,GAAG,CAAC,EAAE;AAC3C,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC;AACvE,SAAS;AACT,QAAQ,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE;AACtC,YAAY,GAAG,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE;AAC1D,YAAY,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;AACnD,SAAS,CAAC,CAAC;AACX,KAAK;AACL;;ACXA;AACA,IAAIF,wBAAsB,GAAG,CAACC,MAAI,IAAIA,MAAI,CAAC,sBAAsB,KAAK,UAAU,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE;AACjH,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC,CAAC;AAC5E,IAAI,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC;AACjG,IAAI,IAAI,OAAO,KAAK,KAAK,UAAU,GAAG,QAAQ,KAAK,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,yEAAyE,CAAC,CAAC;AACtL,IAAI,OAAO,CAAC,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;AAC9G,CAAC,CAAC;AACF,IAAIC,wBAAsB,GAAG,CAACD,MAAI,IAAIA,MAAI,CAAC,sBAAsB,KAAK,UAAU,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE;AAC1G,IAAI,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC;AACjG,IAAI,IAAI,OAAO,KAAK,KAAK,UAAU,GAAG,QAAQ,KAAK,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,0EAA0E,CAAC,CAAC;AACvL,IAAI,OAAO,IAAI,KAAK,GAAG,GAAG,CAAC,GAAG,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAClG,CAAC,CAAC;AACF,IAAI,OAAO,EAAE,cAAc,CAAC;AAErB,MAAM,GAAG,SAAS,eAAe,CAAC;AACzC,IAAI,WAAW,CAAC,GAAG,EAAE,EAAE,EAAE;AACzB,QAAQ,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAC/B,QAAQ,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAClC,QAAQ,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AACzC,QAAQ,IAAI,EAAE,EAAE;AAChB,YAAY,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,EAAE;AAChC,gBAAgB,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC;AAC1E,aAAa;AACb,YAAYD,wBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AAC3E,SAAS;AACT,aAAa;AACb,YAAYA,wBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AAC3E,SAAS;AACT,QAAQA,wBAAsB,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AACnE,KAAK;AACL,IAAI,IAAI,EAAE,GAAG,EAAE,OAAO,IAAI,UAAU,CAACE,wBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE;AACnF,IAAI,OAAO,CAAC,SAAS,EAAE;AACvB,QAAQ,IAAI,SAAS,CAAC,MAAM,GAAG,EAAE,EAAE;AACnC,YAAY,MAAM,IAAI,SAAS,CAAC,uDAAuD,CAAC,CAAC;AACzF,SAAS;AACT,QAAQ,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAC5D,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;AACvD,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;AACzC,gBAAgBA,wBAAsB,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzF,aAAa;AACb,YAAYF,wBAAsB,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAACE,wBAAsB,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACnI,YAAY,UAAU,CAAC,GAAG,CAACA,wBAAsB,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACjF,SAAS;AACT,QAAQ,OAAO,UAAU,CAAC;AAC1B,KAAK;AACL,IAAI,OAAO,CAAC,UAAU,EAAE;AACxB,QAAQ,IAAI,UAAU,CAAC,MAAM,GAAG,EAAE,EAAE;AACpC,YAAY,MAAM,IAAI,SAAS,CAAC,wDAAwD,CAAC,CAAC;AAC1F,SAAS;AACT,QAAQ,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC5D,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;AACxD,YAAY,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAC3E,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;AACzC,gBAAgB,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAGA,wBAAsB,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACnG,gBAAgBA,wBAAsB,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzF,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,SAAS,CAAC;AACzB,KAAK;AACL,CAAC;AACD,OAAO,GAAG,IAAI,OAAO,EAAE,EAAE,cAAc,GAAG,IAAI,OAAO,EAAE;;AC5DvD;AAC6B,CAACD,MAAI,IAAIA,MAAI,CAAC,sBAAsB,KAAK,UAAU,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE;AACjH,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC,CAAC;AAC5E,IAAI,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC;AACjG,IAAI,IAAI,OAAO,KAAK,KAAK,UAAU,GAAG,QAAQ,KAAK,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,yEAAyE,CAAC,CAAC;AACtL,IAAI,OAAO,CAAC,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;AAC9G,EAAE;AAC2B,CAACA,MAAI,IAAIA,MAAI,CAAC,sBAAsB,KAAK,UAAU,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE;AAC1G,IAAI,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC;AACjG,IAAI,IAAI,OAAO,KAAK,KAAK,UAAU,GAAG,QAAQ,KAAK,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,0EAA0E,CAAC,CAAC;AACvL,IAAI,OAAO,IAAI,KAAK,GAAG,GAAG,CAAC,GAAG,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAClG;;ACXA;AACA,IAAID,wBAAsB,GAAG,CAACC,MAAI,IAAIA,MAAI,CAAC,sBAAsB,KAAK,UAAU,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE;AACjH,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC,CAAC;AAC5E,IAAI,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC;AACjG,IAAI,IAAI,OAAO,KAAK,KAAK,UAAU,GAAG,QAAQ,KAAK,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,yEAAyE,CAAC,CAAC;AACtL,IAAI,OAAO,CAAC,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;AAC9G,CAAC,CAAC;AACF,IAAIC,wBAAsB,GAAG,CAACD,MAAI,IAAIA,MAAI,CAAC,sBAAsB,KAAK,UAAU,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE;AAC1G,IAAI,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC;AACjG,IAAI,IAAI,OAAO,KAAK,KAAK,UAAU,GAAG,QAAQ,KAAK,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,0EAA0E,CAAC,CAAC;AACvL,IAAI,OAAO,IAAI,KAAK,GAAG,GAAG,CAAC,GAAG,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAClG,CAAC,CAAC;AACF,IAAI,cAAc,EAAE,mBAAmB,EAAE,YAAY,CAAC;AAE/C,MAAM,GAAG,SAAS,eAAe,CAAC;AACzC,IAAI,WAAW,CAAC,GAAG,EAAE,YAAY,EAAE;AACnC,QAAQ,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAC/B;AACA,QAAQ,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AACzC,QAAQ,mBAAmB,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAC9C;AACA,QAAQ,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AACvC,QAAQD,wBAAsB,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AAC5E,QAAQE,wBAAsB,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChE,QAAQF,wBAAsB,CAAC,IAAI,EAAE,cAAc,EAAEE,wBAAsB,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AAC3G,QAAQF,wBAAsB,CAAC,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;AACnE,QAAQ,IAAI,YAAY,IAAI,IAAI,EAAE;AAClC,YAAY,YAAY,GAAG,CAAC,CAAC;AAC7B,SAAS;AACT,QAAQ,IAAI,QAAQ,YAAY,CAAC,KAAK,QAAQ,EAAE;AAChD,YAAY,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;AAC/C,SAAS;AACT,aAAa;AACb,YAAY,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;AAC/C,SAAS;AACT,KAAK;AACL,IAAI,IAAI,OAAO,GAAG,EAAE,OAAO,IAAI,UAAU,CAACE,wBAAsB,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE;AAC7F,IAAI,eAAe,CAAC,KAAK,EAAE;AAC3B,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,MAAM,CAAC,gBAAgB,EAAE;AACtF,YAAY,MAAM,IAAI,SAAS,CAAC,uCAAuC,CAAC,CAAC;AACzE,SAAS;AACT,QAAQ,KAAK,IAAI,KAAK,GAAG,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE;AAClD,YAAYA,wBAAsB,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC;AACjF,YAAY,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;AAC5C,SAAS;AACT,KAAK;AACL,IAAI,eAAe,CAAC,KAAK,EAAE;AAC3B,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,EAAE;AACjC,YAAY,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC;AACnF,SAAS;AACT,QAAQA,wBAAsB,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACnE,KAAK;AACL,IAAI,SAAS,GAAG;AAChB,QAAQ,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACtC,YAAY,IAAIA,wBAAsB,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AAC5E,gBAAgBA,wBAAsB,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACvE,aAAa;AACb,iBAAiB;AACjB,gBAAgBA,wBAAsB,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACrE,gBAAgB,MAAM;AACtB,aAAa;AACb,SAAS;AACT,KAAK;AACL,IAAI,OAAO,CAAC,SAAS,EAAE;AACvB,QAAQ,IAAI,EAAE,EAAE,EAAE,CAAC;AACnB,QAAQ,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC;AACpD,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnD,YAAY,IAAIA,wBAAsB,CAAC,IAAI,EAAE,mBAAmB,EAAE,GAAG,CAAC,KAAK,EAAE,EAAE;AAC/E,gBAAgBF,wBAAsB,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAACE,wBAAsB,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACrI,gBAAgBF,wBAAsB,CAAC,IAAI,EAAE,mBAAmB,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AAC1E,gBAAgB,IAAI,CAAC,SAAS,EAAE,CAAC;AACjC,aAAa;AACb,YAAY,SAAS,CAAC,CAAC,CAAC,IAAIE,wBAAsB,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,CAAC,CAACF,wBAAsB,CAAC,IAAI,EAAE,mBAAmB,GAAG,EAAE,GAAGE,wBAAsB,CAAC,IAAI,EAAE,mBAAmB,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;AACxN,SAAS;AACT,QAAQ,OAAO,SAAS,CAAC;AACzB,KAAK;AACL,IAAI,OAAO,CAAC,UAAU,EAAE;AACxB,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AACxC,KAAK;AACL,CAAC;AACD,cAAc,GAAG,IAAI,OAAO,EAAE,EAAE,mBAAmB,GAAG,IAAI,OAAO,EAAE,EAAE,YAAY,GAAG,IAAI,OAAO,EAAE;;AChFjG;AAC6B,CAACD,MAAI,IAAIA,MAAI,CAAC,sBAAsB,KAAK,UAAU,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE;AACjH,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC,CAAC;AAC5E,IAAI,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC;AACjG,IAAI,IAAI,OAAO,KAAK,KAAK,UAAU,GAAG,QAAQ,KAAK,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,yEAAyE,CAAC,CAAC;AACtL,IAAI,OAAO,CAAC,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;AAC9G,EAAE;AAC2B,CAACA,MAAI,IAAIA,MAAI,CAAC,sBAAsB,KAAK,UAAU,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE;AAC1G,IAAI,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC;AACjG,IAAI,IAAI,OAAO,KAAK,KAAK,UAAU,GAAG,QAAQ,KAAK,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,0EAA0E,CAAC,CAAC;AACvL,IAAI,OAAO,IAAI,KAAK,GAAG,GAAG,CAAC,GAAG,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAClG;;ACFO,SAAS,UAAU,CAAC,IAAI,EAAE;AACjC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE;AAC1B,QAAQ,MAAM,IAAI,SAAS,CAAC,uBAAuB,CAAC,CAAC;AACrD,KAAK;AACL,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACzC,IAAI,IAAI,MAAM,GAAG,EAAE,EAAE;AACrB,QAAQ,MAAM,IAAI,SAAS,CAAC,kCAAkC,CAAC,CAAC;AAChE,KAAK;AACL,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACxC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,MAAM,EAAE;AACzC,YAAY,MAAM,IAAI,SAAS,CAAC,6BAA6B,CAAC,CAAC;AAC/D,SAAS;AACT,KAAK;AACL,IAAI,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AACpD;;ACrBO,SAAS,aAAa,CAAC,SAAS,EAAE;AACzC,IAAI,IAAI,QAAQ,SAAS,CAAC,KAAK,QAAQ,IAAI,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;AAC/E,QAAQ,SAAS,GAAG,IAAI,GAAG,SAAS,CAAC;AACrC,KAAK;AACL,IAAI,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC/B,CAAC;AAQM,SAAS,WAAW,CAAC,QAAQ,EAAE;AACtC,IAAI,IAAI,QAAQ,QAAQ,CAAC,KAAK,QAAQ,EAAE;AACxC,QAAQ,OAAO,WAAW,CAAC,QAAQ,EAAE,wBAAwB,CAAC,IAAI,CAAC,CAAC;AACpE,KAAK;AACL,IAAI,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AACM,SAAS,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE;AACvC,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;AACpE,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE;AACvB,QAAQ,OAAO,MAAM,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AACxE,KAAK;AACL,IAAI,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1B,IAAI,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1B,IAAI,MAAM,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;AACpC,IAAI,IAAI,GAAG,GAAG,MAAM,CAAC;AACrB,IAAI,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;AACtD;AACA,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AAChC,YAAY,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE;AACzC,gBAAgB,MAAM;AACtB,aAAa;AACb,YAAY,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACtC,SAAS;AACT,aAAa,IAAI,QAAQ,GAAG,CAAC,KAAK,QAAQ,EAAE;AAC5C,YAAY,IAAI,KAAK,GAAG,IAAI,CAAC;AAC7B,YAAY,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE;AACnC,gBAAgB,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;AAChD,oBAAoB,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;AACrC,oBAAoB,MAAM;AAC1B,iBAAiB;AACjB,aAAa;AACb,YAAY,GAAG,GAAG,KAAK,CAAC;AACxB,SAAS;AACT,aAAa;AACb,YAAY,GAAG,GAAG,IAAI,CAAC;AACvB,SAAS;AACT,QAAQ,IAAI,GAAG,IAAI,IAAI,EAAE;AACzB,YAAY,MAAM;AAClB,SAAS;AACT,KAAK;AACL,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,EAAE;AAC7B,QAAQ,MAAM,CAAC,kBAAkB,CAAC,wBAAwB,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAC1E,KAAK;AACL,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,EAAE;AAC7B,QAAQ,IAAI,IAAI,KAAK,KAAK,EAAE;AAC5B,YAAY,IAAI,QAAQ,GAAG,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;AACtE,gBAAgB,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;AACrC,aAAa;AACb,iBAAiB,IAAI,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;AAChD,gBAAgB,OAAO,GAAG,CAAC;AAC3B,aAAa;AACb,SAAS;AACT,QAAQ,IAAI,IAAI,KAAK,QAAQ,EAAE;AAC/B,YAAY,IAAI,QAAQ,GAAG,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE;AACvE,gBAAgB,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;AACvC,aAAa;AACb,SAAS;AACT,QAAQ,IAAI,IAAI,KAAK,MAAM,EAAE;AAC7B,YAAY,IAAI,QAAQ,GAAG,CAAC,KAAK,QAAQ,EAAE;AAC3C,gBAAgB,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;AAC1C,aAAa;AACb,SAAS;AACT,QAAQ,IAAI,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACpD,YAAY,OAAO,GAAG,CAAC;AACvB,SAAS;AACT,QAAQ,IAAI,IAAI,KAAK,QAAQ,GAAG,CAAC,EAAE;AACnC,YAAY,OAAO,GAAG,CAAC;AACvB,SAAS;AACT,QAAQ,MAAM,CAAC,kBAAkB,CAAC,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AACjF,KAAK;AACL,IAAI,OAAO,GAAG,CAAC;AACf;;AChFO,SAAS,eAAe,CAAC,IAAI,EAAE;AACtC,IAAI,IAAI;AACR,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACtC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;AAC1B,YAAY,OAAO,IAAI,CAAC;AACxB,SAAS;AACT,KAAK;AACL,IAAI,OAAO,KAAK,EAAE,GAAG;AACrB,IAAI,OAAO,KAAK,CAAC;AACjB,CAAC;AACD;AACO,SAAS,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE;AACtD,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAClC,IAAI,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;AAC5C;AACA,IAAI,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC;AACjE;AACA,IAAI,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC;AACpE,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,MAAM,CAAC,EAAE;AACjD,QAAQ,MAAM,CAAC,kBAAkB,CAAC,iBAAiB,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AACnE,KAAK;AACL,IAAI,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACtF,IAAI,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACpC,IAAI,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAC5C;AACA,IAAI,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACpC,IAAI,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AACrE;AACA,IAAI,IAAI,OAAO,GAAG,EAAE,CAAC;AACrB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1C,QAAQ,OAAO,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,KAAK;AACL,IAAI,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;AAChD;;AChCA,MAAM,WAAW,GAAG,kBAAkB,CAAC;AAChC,SAAS,cAAc,CAAC,IAAI,EAAE;AACrC,IAAI,IAAI;AACR,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACtC,QAAQ,MAAM,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9E,QAAQ,IAAI,OAAO,KAAK,CAAC,EAAE;AAC3B,YAAY,OAAO,IAAI,CAAC;AACxB,SAAS;AACT,KAAK;AACL,IAAI,OAAO,KAAK,EAAE,GAAG;AACrB,IAAI,OAAO,KAAK,CAAC;AACjB,CAAC;AACD,SAAS,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE;AACxC,IAAI,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;AACzD,IAAI,IAAI,MAAM,KAAK,aAAa,EAAE;AAClC,QAAQ,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,8BAA8B,CAAC,CAAC;AACjE,QAAQ,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACxC,QAAQ,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;AACnD,KAAK;AACL,IAAI,OAAO,MAAM,CAAC,UAAU,CAAC,oBAAoB,EAAE,uBAAuB,EAAE;AAC5E,QAAQ,SAAS,EAAE,SAAS;AAC5B,KAAK,CAAC,CAAC;AACP,CAAC;AACD,SAAS,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE;AAChC,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACtC,IAAI,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAC;AAChE,IAAI,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACjG,IAAI,IAAI,WAAW,KAAK,OAAO,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC,WAAW,EAAE,EAAE;AAC3E,QAAQ,OAAO,MAAM,CAAC,kBAAkB,CAAC,oBAAoB,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;AAC3F,KAAK;AACL,IAAI,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;AACnE,IAAI,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;AAC/C,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;AACtB,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;AAC/C,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;AAC5C,YAAY,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC;AACjC,SAAS;AACT,QAAQ,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,OAAO,EAAE;AAC3C,YAAY,MAAM,CAAC,kBAAkB,CAAC,sCAAsC,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AACvG,SAAS;AACT,KAAK;AACL,IAAI,MAAM,OAAO,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AAC5C;AACA,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAC;AAC7D,IAAI,IAAI,OAAO,KAAK,KAAK,EAAE;AAC3B,QAAQ,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC9C,QAAQ,MAAM,kBAAkB,GAAG,OAAO,CAAC,IAAI,EAAE,mCAAmC,CAAC,CAAC;AACtF,QAAQ,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,gCAAgC,CAAC,CAAC;AAC3E,QAAQ,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;AAChE,QAAQ,OAAO,CAAC,QAAQ,GAAG;AAC3B,YAAY,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,sBAAsB,CAAC,IAAI,WAAW,CAAC;AACxE,YAAY,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,wBAAwB,CAAC,IAAI,IAAI,CAAC;AACrE,YAAY,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAClF,SAAS,CAAC;AACV,KAAK;AACL,IAAI,OAAO,OAAO,CAAC;AACnB,CAAC;AACD,SAAS,YAAY,CAAC,IAAI,EAAE;AAC5B,IAAI,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;AACnD,IAAI,IAAI,GAAG,IAAI,QAAQ,GAAG,CAAC,KAAK,QAAQ,EAAE;AAC1C,QAAQ,MAAM,UAAU,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE;AAClD,YAAY,OAAO,MAAM,CAAC,kBAAkB,CAAC,4CAA4C,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AACxG,SAAS,CAAC;AACV,QAAQ,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE;AAC5C,YAAY,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,6BAA6B,CAAC,CAAC;AACtE,YAAY,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAC;AAC/D,YAAY,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAC;AAC/D,YAAY,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAC;AAC/D;AACA,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;AAChC,gBAAgB,OAAO,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC9C,aAAa;AACb;AACA,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE;AACrC,gBAAgB,OAAO,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAC1C,aAAa;AACb,YAAY,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,6BAA6B,CAAC,CAAC;AACvE,YAAY,IAAI,KAAK,KAAK,EAAE,EAAE;AAC9B,gBAAgB,OAAO,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAClD,aAAa;AACb,YAAY,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAChE,SAAS;AACT,aAAa,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE;AACjD,YAAY,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,6BAA6B,CAAC,CAAC;AACtE,YAAY,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,8BAA8B,CAAC,CAAC;AACtE,YAAY,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;AACnD,YAAY,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,QAAQ,EAAE;AAClE,gBAAgB,OAAO,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC9C,aAAa;AACb,YAAY,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAC;AACnE,YAAY,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,6BAA6B,CAAC,CAAC;AACvE,YAAY,IAAI,KAAK,KAAK,EAAE,EAAE;AAC9B,gBAAgB,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC3C,aAAa;AACb,YAAY,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AACrE,SAAS;AACT,KAAK;AACL,IAAI,OAAO,MAAM,CAAC,kBAAkB,CAAC,qCAAqC,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;AACxF,CAAC;AACM,SAAS,uBAAuB,CAAC,IAAI,EAAE,SAAS,EAAE;AACzD,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAClC,IAAI,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;AAC5C,IAAI,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;AACtC,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;AAClC,QAAQ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;AACzD,QAAQ,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AACpE,QAAQ,OAAO,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACrC,KAAK;AACL,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;AACvC,QAAQ,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;AAChD,QAAQ,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AAC/D,QAAQ,OAAO,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACrC,KAAK;AACL,IAAI,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;AACnC,CAAC;AACD,SAASwE,OAAK,CAAC,QAAQ,EAAE;AACzB,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;AACrF,CAAC;AACM,eAAe,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE;AACrE,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAClC,IAAI,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;AAC5C,IAAI,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;AACtC,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;AAClC,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,QAAQ,CAAC,CAAC,CAAC,CAAC;AACxB,YAAY,MAAMA,OAAK,CAAC,CAAC,CAAC,CAAC;AAC3B,SAAS;AACT,QAAQ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;AACzD,QAAQ,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AACpE,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,QAAQ,CAAC,CAAC,CAAC,CAAC;AACxB,YAAY,MAAMA,OAAK,CAAC,CAAC,CAAC,CAAC;AAC3B,SAAS;AACT,QAAQ,OAAO,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACrC,KAAK;AACL,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;AACvC,QAAQ,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;AAChD,QAAQ,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC3E,QAAQ,OAAO,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACrC,KAAK;AACL,IAAI,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;AACnC;;ACrJA,IAAI,sBAAsB,GAAG,CAACxE,MAAI,IAAIA,MAAI,CAAC,sBAAsB,KAAK,UAAU,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE;AACjH,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC,CAAC;AAC5E,IAAI,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC;AACjG,IAAI,IAAI,OAAO,KAAK,KAAK,UAAU,GAAG,QAAQ,KAAK,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,yEAAyE,CAAC,CAAC;AACtL,IAAI,OAAO,CAAC,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;AAC9G,CAAC,CAAC;AACF,IAAI,sBAAsB,GAAG,CAACA,MAAI,IAAIA,MAAI,CAAC,sBAAsB,KAAK,UAAU,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE;AAC1G,IAAI,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC;AACjG,IAAI,IAAI,OAAO,KAAK,KAAK,UAAU,GAAG,QAAQ,KAAK,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,0EAA0E,CAAC,CAAC;AACvL,IAAI,OAAO,IAAI,KAAK,GAAG,GAAG,CAAC,GAAG,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAClG,CAAC,CAAC;AACF,IAAI,gBAAgB,CAAC;AAWrB,SAAS,SAAS,CAAC,KAAK,EAAE;AAC1B,IAAI,IAAI;AACR,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;AACzC,YAAY,OAAO,IAAI,CAAC;AACxB,SAAS;AACT,QAAQ,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AACpD,QAAQ,IAAI,GAAG,IAAI,IAAI,IAAI,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE;AAC5E,YAAY,OAAO,IAAI,CAAC;AACxB,SAAS;AACT,QAAQ,IAAI,KAAK,CAAC,QAAQ,EAAE;AAC5B,YAAY,MAAM,MAAM,GAAG,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACrE,YAAY,IAAI,MAAM,CAAC,UAAU,KAAK,GAAG,CAAC,UAAU,EAAE;AACtD,gBAAgB,OAAO,IAAI,CAAC;AAC5B,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,KAAK,CAAC;AACrB,KAAK;AACL,IAAI,OAAO,CAAC,EAAE;AACd,QAAQ,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACvB,KAAK;AACL,IAAI,OAAO,IAAI,CAAC;AAChB,CAAC;AACD;AACA,SAAS,WAAW,CAAC,KAAK,EAAE;AAC5B,IAAI,IAAI;AACR,QAAQ,IAAI,KAAK,IAAI,IAAI,IAAI,QAAQ,KAAK,CAAC,MAAM,CAAC,KAAK,QAAQ;AAC/D,YAAY,QAAQ,KAAK,CAAC,QAAQ,CAAC,KAAK,QAAQ;AAChD,YAAY,KAAK,CAAC,QAAQ,IAAI,IAAI,EAAE;AACpC,YAAY,OAAO,IAAI,CAAC;AACxB,SAAS;AACT,QAAQ,OAAO,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC3F,KAAK;AACL,IAAI,OAAO,KAAK,EAAE;AAClB,QAAQ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC3B,KAAK;AACL,IAAI,OAAO,IAAI,CAAC;AAChB,CAAC;AACD,SAAS,aAAa,CAAC,KAAK,EAAE;AAC9B,IAAI,IAAI;AACR,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE;AAC1D,YAAY,OAAO,IAAI,CAAC;AACxB,SAAS;AACT,QAAQ,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC;AACrC,QAAQ,IAAI,UAAU,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,SAAS,EAAE;AAClE,YAAY,OAAO,IAAI,CAAC;AACxB,SAAS;AACT,QAAQ,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;AACnC,KAAK;AACL,IAAI,OAAO,CAAC,EAAE;AACd,QAAQ,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACvB,KAAK;AACL,IAAI,OAAO,IAAI,CAAC;AAChB,CAAC;AACD,SAAS,KAAK,CAAC,QAAQ,EAAE;AACzB,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;AACrF,CAAC;AACM,MAAM,MAAM,SAAS,UAAU,CAAC;AACvC,IAAI,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE;AAC/B,QAAQ,IAAI,UAAU,GAAG,IAAI,CAAC;AAC9B,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAAC;AAC5B;AACA,QAAQ,IAAI,QAAQ,GAAG,CAAC,KAAK,QAAQ,EAAE;AACvC,YAAY,UAAU,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;AAC7C,SAAS;AACT;AACA,QAAQ,IAAI,UAAU,IAAI,IAAI,EAAE;AAChC,YAAY,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;AAC1C,YAAY,IAAI,MAAM,EAAE;AACxB,gBAAgB,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/C,gBAAgB,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC;AACnD,aAAa;AACb,SAAS;AACT;AACA,QAAQ,IAAI,UAAU,IAAI,IAAI,EAAE;AAChC,YAAY,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;AAC5C,YAAY,IAAI,MAAM,EAAE;AACxB,gBAAgB,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/C,gBAAgB,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC;AACnD,aAAa;AACb,SAAS;AACT;AACA,QAAQ,IAAI,UAAU,IAAI,IAAI,EAAE;AAChC,YAAY,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;AAC5C,SAAS;AACT,QAAQ,IAAI,UAAU,IAAI,IAAI,EAAE;AAChC,YAAY,MAAM,CAAC,kBAAkB,CAAC,aAAa,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;AAC5E,SAAS;AACT,QAAQ,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AACpC,QAAQ,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAC3C,QAAQ,sBAAsB,CAAC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;AACtE,KAAK;AACL;AACA,IAAI,IAAI,QAAQ,GAAG,EAAE,OAAO,sBAAsB,CAAC,IAAI,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC,EAAE;AAClF,IAAI,OAAO,CAAC,QAAQ,EAAE;AACtB,QAAQ,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC1C,KAAK;AACL,IAAI,MAAM,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE;AACvD,QAAQ,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;AAChC,KAAK;AACL,IAAI,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE;AACnC,QAAQ,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;AAChC,KAAK;AACL,IAAI,aAAa,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAC7D,QAAQ,IAAI,OAAO,GAAG,IAAI,CAAC;AAC3B,QAAQ,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE;AAClC,YAAY,OAAO,GAAG,MAAM,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC1E,SAAS;AACT,aAAa,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE;AACxC,YAAY,IAAI,QAAQ,EAAE;AAC1B,gBAAgB,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5B,gBAAgB,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/B,aAAa;AACb,YAAY,OAAO,GAAG,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC3D,YAAY,IAAI,QAAQ,EAAE;AAC1B,gBAAgB,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5B,gBAAgB,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/B,aAAa;AACb,SAAS;AACT,aAAa;AACb,YAAY,OAAO,MAAM,CAAC,kBAAkB,CAAC,qBAAqB,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;AAC5F,SAAS;AACT,QAAQ,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AACtD,QAAQ,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,EAAE;AAChD,YAAY,MAAM,CAAC,kBAAkB,CAAC,6BAA6B,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;AAC7F,SAAS;AACT;AACA,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,IAAI,OAAO,qBAAqB,CAAC,IAAI,EAAE,QAAQ,EAAE;AACjD,QAAQ,IAAI,OAAO,GAAG,IAAI,CAAC;AAC3B,QAAQ,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE;AAClC,YAAY,OAAO,GAAG,uBAAuB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC9D,SAAS;AACT,aAAa,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE;AACxC,YAAY,OAAO,GAAG,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC3D,SAAS;AACT,aAAa;AACb,YAAY,OAAO,MAAM,CAAC,kBAAkB,CAAC,qBAAqB,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;AAC5F,SAAS;AACT,QAAQ,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AACtD,QAAQ,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,EAAE;AAChD,YAAY,MAAM,CAAC,kBAAkB,CAAC,6BAA6B,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;AAC7F,SAAS;AACT;AACA,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,IAAI,OAAO,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE;AACtD,QAAQ,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC/F,KAAK;AACL,IAAI,OAAO,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE;AAC5C,QAAQ,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC9C,KAAK;AACL,IAAI,OAAO,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,EAAE,EAAE,QAAQ,EAAE;AACjE,QAAQ,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;AACrF,KAAK;AACL,CAAC;AACD,gBAAgB,GAAG,IAAI,OAAO,EAAE;;AClLpB,MAAC,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/packages/ethers/dist/ethers.min.js b/packages/ethers/dist/ethers.min.js new file mode 100644 index 000000000..da83e4c1c --- /dev/null +++ b/packages/ethers/dist/ethers.min.js @@ -0,0 +1,6 @@ +async function t(t){const e=Object.keys(t);return(await Promise.all(e.map((e=>Promise.resolve(t[e]))))).reduce(((t,r,n)=>(t[e[n]]=r,t)),{})}function e(t,e){const r=e.split("|").map((t=>t.trim()));for(let n=0;n{try{if("test"!=="test".normalize(e))throw new Error("bad");if("NFD"===e){const t=String.fromCharCode(233).normalize("NFD");if(t!==String.fromCharCode(101,769))throw new Error("broken")}t.push(e)}catch(t){}return t}),[]);function E(t,e,r){Object.defineProperty(t,e,{enumerable:!0,writable:!1,value:r})}const T=9007199254740991,k={};k.INVALID_ARGUMENT=TypeError,k.NUMERIC_FAULT=RangeError,k.BUFFER_OVERRUN=RangeError;class A{constructor(t){h.add(this),E(this,"version",t||"_")}makeError(t,e,r){{const s=[];if(r)for(const t in r){const e=r[t];try{s.push(t+"="+JSON.stringify(e))}catch(n){s.push(t+"=[could not serialize object]")}}s.push(`code=${e}`),s.push(`version=${this.version}`),s.length&&(t+=" ("+s.join(", ")+")")}const n=new(k[e]||Error)(t);if(E(n,"code",e),r)for(const t in r)E(n,t,r[t]);return n}throwError(t,e,r){throw this.makeError(t,e,r)}throwArgumentError(t,e,r){return this.throwError(t,"INVALID_ARGUMENT",{argument:e,value:r})}assert(t,e,r,n){t||this.throwError(e,r||"UNKNOWN_ERROR",n)}assertArgument(t,e,r,n){return this.assert(t,e,"INVALID_ARGUMENT",{argument:r,value:n})}assertIntegerArgument(t,e,r,n){let s=null;"number"!=typeof e?s="expected a number":Number.isInteger(e)?(null!=r&&en)&&(s="value is out of range"):s="invalid integer",s&&this.throwArgumentError(s,t,e)}assertSafeUint53(t,e){this.assertArgument("number"==typeof t,"invalid number","value",t),null==e&&(e="value not safe");const r="assertSafeInteger";this.assert(t>=0&&t<9007199254740991,e,"NUMERIC_FAULT",{operation:r,fault:"out-of-safe-range",value:t}),this.assert(t%1==0,e,"NUMERIC_FAULT",{operation:r,fault:"non-integer",value:t})}assertNormalize(t){-1===v.indexOf(t)&&this.throwError("platform missing String.prototype.normalize","UNSUPPORTED_OPERATION",{operation:"String.prototype.normalize",info:{form:t}})}assertPrivate(t,e,r=""){if(t!==e){let t=r,e="new";r&&(t+=".",e+=" "+r),this.throwError(`private constructor; use ${t}from* methods`,"UNSUPPORTED_OPERATION",{operation:e})}}assertArgumentCount(t,e,r=""){r&&(r=": "+r),this.assert(t>=e,"missing arguemnt"+r,"MISSING_ARGUMENT",{count:t,expectedCount:e}),this.assert(t>=e,"too many arguemnts"+r,"UNEXPECTED_ARGUMENT",{count:t,expectedCount:e})}assertInt53(t,e){g(this,h,"m",f).call(this,"Int53",t,e||"unknown",-T)}assertUint53(t,e){g(this,h,"m",f).call(this,"Int53",t,e||"unknown",0)}assertInteger(t,e="unknown",r=0,n=T){}getBytes(t,e){return g(this,h,"m",d).call(this,t,e,!1)}getBytesCopy(t,e){return g(this,h,"m",d).call(this,t,e,!0)}getNumber(t,e){switch(typeof t){case"bigint":return(t<-T||t>T)&&this.throwArgumentError("overflow",e||"value",t),Number(t);case"number":return Number.isInteger(t)?(t<-T||t>T)&&this.throwArgumentError("overflow",e||"value",t):this.throwArgumentError("underflow",e||"value",t),t;case"string":try{return this.getNumber(BigInt(t),e)}catch(r){this.throwArgumentError(`invalid numeric string: ${r.message}`,e||"value",t)}}return this.throwArgumentError("invalid numeric value",e||"value",t)}getBigInt(t,e){switch(typeof t){case"bigint":return t;case"number":return Number.isInteger(t)?(t<-T||t>T)&&this.throwArgumentError("overflow",e||"value",t):this.throwArgumentError("underflow",e||"value",t),BigInt(t);case"string":try{return BigInt(t)}catch(r){this.throwArgumentError(`invalid BigNumberish string: ${r.message}`,e||"value",t)}}return this.throwArgumentError("invalid BigNumberish value",e||"value",t)}debug(...t){g(this,h,"m",p).call(this,w.DEBUG,t)}info(...t){g(this,h,"m",p).call(this,w.INFO,t)}warn(...t){g(this,h,"m",p).call(this,w.WARNING,t)}static globalLogger(){return b||(b=new A("@ethersproject/logger@6.0.0-beta.1")),b}static setLogLevel(t){const e=m[t.toLowerCase()];null!=e?y=e:A.globalLogger().warn("invalid log level - "+t)}}h=new WeakSet,f=function(t,e,r,n){("number"!=typeof e||isNaN(e))&&this.throwArgumentError(`invalid ${t}`,"INVALID_ARGUMENT",{name:"value",value:e});let s=`invalid ${t} value`,i=null;isNaN(e)?i="not-a-number":eT?(s=`unsafe ${t} value`,i="overflow"):Math.floor(e)!==e&&(i="underflow"),i&&this.throwError(s,"NUMERIC_FAULT",{operation:r,fault:i,value:e})},d=function(t,e,r){if(t instanceof Uint8Array)return r?new Uint8Array(t):t;if("string"==typeof t&&t.match(/^0x([0-9a-f][0-9a-f])*$/i)){const e=new Uint8Array((t.length-2)/2);let r=2;for(let n=0;nm[r]||console.log.apply(console,e)},A.LogLevels=w;const N=new A("@ethersproject/abi@6.0.0-beta.1");var P,x,O,I,S,R,_,C=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},B=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};function F(t){const e=new Set;return t.forEach((t=>e.add(t))),Object.freeze(e)}!function(t){t.sighash="sighash",t.minimal="minimal",t.full="full",t.json="json"}(_||(_={}));const U="constant external internal payable private public pure view",L=F(U.split(" ")),D="constructor error event function struct",M=F(D.split(" ")),j="calldata memory storage payable indexed",G=F(j.split(" ")),$=F([D,j,"tuple returns",U].join(" ").split(" ")),W={"(":"OPEN_PAREN",")":"CLOSE_PAREN","[":"OPEN_BRACKET","]":"CLOSE_BRACKET",",":"COMMA","@":"AT"},z=new RegExp("^(\\s*)"),H=new RegExp("^([0-9]+)"),V=new RegExp("^([a-zA-Z$_][a-zA-Z0-9$_]*)"),K=new RegExp("^(address|bool|bytes(0-9*)|string|u?int([0-9]*))");class J{constructor(t){P.add(this),x.set(this,void 0),O.set(this,void 0),C(this,x,0,"f"),C(this,O,t.slice(),"f")}get offset(){return B(this,x,"f")}get length(){return B(this,O,"f").length-B(this,x,"f")}clone(){return new J(B(this,O,"f"))}reset(){C(this,x,0,"f")}popKeyword(t){const e=this.peek();if("KEYWORD"!==e.type||!t.has(e.text))throw new Error(`expected keyword ${e.text}`);return this.pop().text}popType(t){if(this.peek().type!==t)throw new Error(`expected ${t}; got ${JSON.stringify(this.peek())}`);return this.pop().text}popParen(){const t=this.peek();if("OPEN_PAREN"!==t.type)throw new Error("bad start");const e=B(this,P,"m",I).call(this,B(this,x,"f")+1,t.match+1);return C(this,x,t.match+1,"f"),e}popParams(){const t=this.peek();if("OPEN_PAREN"!==t.type)throw new Error("bad start");const e=[];for(;B(this,x,"f")=B(this,O,"f").length)throw new Error("out-of-bounds");return B(this,O,"f")[B(this,x,"f")]}peekKeyword(t){const e=this.peekType("KEYWORD");return null!=e&&t.has(e)?e:null}peekType(t){if(0===this.length)return null;const e=this.peek();return e.type===t?e.text:null}pop(){var t;const e=this.peek();return C(this,x,(t=B(this,x,"f"),++t),"f"),e}toString(){const t=[];for(let e=B(this,x,"f");e`}}function q(t){const e=[],r=e=>{const r=i0&&"NUMBER"===e[e.length-1].type){const r=e.pop().text;t=r+t,e[e.length-1].value=N.getNumber(r)}if(0===e.length||"BRACKET"!==e[e.length-1].type)throw new Error("missing opening bracket");e[e.length-1].text+=t}}else if(a=o.match(V),a){if(c.text=a[1],i+=c.text.length,$.has(c.text)){c.type="KEYWORD";continue}if(c.text.match(K)){c.type="TYPE";continue}c.type="ID"}else{if(a=o.match(H),!a)throw new Error(`unexpected token ${JSON.stringify(o[0])} at position ${i}`);c.text=a[1],c.type="NUMBER",i+=c.text.length}}return new J(e.map((t=>Object.freeze(t))))}function X(t,e){let r=[];for(const n in e.keys())t.has(n)&&r.push(n);if(r.length>1)throw new Error(`conflicting types: ${r.join(", ")}`)}function Y(t,e){if(e.peekKeyword(M)){const r=e.pop().text;if(r!==t)throw new Error(`expected ${t}, got ${r}`)}return e.popType("ID")}function Z(t,e){const r=new Set;for(;;){const n=t.peekType("KEYWORD");if(null==n||e&&!e.has(n))break;if(t.pop(),r.has(n))throw new Error(`duplicate keywords: ${JSON.stringify(n)}`);r.add(n)}return Object.freeze(r)}function Q(t,e){return t.popParams().map((t=>ot.fromTokens(t,e)))}function tt(t){if(t.peekType("AT")){if(t.pop(),t.peekType("NUMBER"))return N.getBigInt(t.pop().text);throw new Error("invalid gas")}return null}function et(t){if(t.length)throw new Error(`unexpected tokens: ${t.toString()}`)}x=new WeakMap,O=new WeakMap,P=new WeakSet,I=function(t=0,e=0){return new J(B(this,O,"f").slice(t,e).map((e=>Object.freeze(Object.assign({},e,{match:e.match-t,linkBack:e.linkBack-t,linkNext:e.linkNext-t})))))};const rt=new RegExp(/^(.*)\[([0-9]*)\]$/);function nt(t){const e=t.match(K);if(!e)return N.throwArgumentError("invalid type","type",t);if("uint"===t)return"uint256";if("int"===t)return"int256";if(e[2]){const r=parseInt(e[2]);(0===r||r>32)&&N.throwArgumentError("invalid bytes length","type",t)}else if(e[3]){const r=parseInt(e[3]);(0===r||r>256||r%8)&&N.throwArgumentError("invalid numeric width","type",t)}return t}const st={},it=Symbol.for("_ethers_internal");class ot{constructor(t,e,n,s,i,o,a,c){if(S.add(this),N.assertPrivate(t,st,"ParamType"),Object.defineProperty(this,it,{value:"_ParamTypeInternal"}),o&&(o=Object.freeze(o.slice())),"array"===s){if(null==a||null==c)throw new Error("")}else if(null!=a||null!=c)throw new Error("");if("tuple"===s){if(null==o)throw new Error("")}else if(null!=o)throw new Error("");r(this,{name:e,type:n,baseType:s,indexed:i,components:o,arrayLength:a,arrayChildren:c})}format(t=_.sighash){if(_[t]||N.throwArgumentError("invalid format type","format",t),t===_.json){let e={type:"tuple"===this.baseType?"tuple":this.type,name:this.name||void 0};return"boolean"==typeof this.indexed&&(e.indexed=this.indexed),this.isTuple()&&(e.components=this.components.map((e=>JSON.parse(e.format(t))))),JSON.stringify(e)}let e="";return this.isArray()?(e+=this.arrayChildren.format(t),e+=`[${this.arrayLength<0?"":String(this.arrayLength)}]`):this.isTuple()?(t!==_.sighash&&(e+=this.type),e+="("+this.components.map((e=>e.format(t))).join(t===_.full?", ":",")+")"):e+=this.type,t!==_.sighash&&(!0===this.indexed&&(e+=" indexed"),t===_.full&&this.name&&(e+=" "+this.name)),e}static isArray(t){return t&&"array"===t.baseType}isArray(){return"array"===this.baseType}isTuple(){return"tuple"===this.baseType}isIndexable(){return null!=this.indexed}walk(t,e){if(this.isArray()){if(!Array.isArray(t))throw new Error("invlaid array value");if(-1!==this.arrayLength&&t.length!==this.arrayLength)throw new Error("array is wrong length");return t.map((t=>this.arrayChildren.walk(t,e)))}if(this.isTuple()){if(!Array.isArray(t))throw new Error("invlaid tuple value");if(t.length!==this.components.length)throw new Error("array is wrong length");return t.map(((t,r)=>this.components[r].walk(t,e)))}return e(this.type,t)}async walkAsync(t,e){const r=[],n=[t];return B(this,S,"m",R).call(this,r,t,e,(t=>{n[0]=t})),r.length&&await Promise.all(r),n[0]}static from(t,e){if(ot.isParamType(t))return t;if("string"==typeof t)return ot.fromTokens(q(t),e);if(t instanceof J)return ot.fromTokens(t,e);const r=t.name;!r||"string"==typeof r&&r.match(V)||N.throwArgumentError("invalid name","obj.name",r);let n=t.indexed;null!=n&&(e||N.throwArgumentError("parameter cannot be indexed","obj.indexed",t.indexed),n=!!n);let s=t.type,i=s.match(rt);if(i){const e=i[2],o=ot.from({type:i[1],components:t.components});return new ot(st,r,s,"array",n,null,e,o)}if("tuple("===s.substring(0,5)||"("===s[0]){const e=null!=t.components?t.components.map((t=>ot.from(t))):null;return new ot(st,r,s,"tuple",n,e,null,null)}return s=nt(t.type),new ot(st,r,s,s,n,null,null,null)}static fromObject(t,e){throw new Error("@TODO")}static fromTokens(t,e){let r="",n="",s=null;Z(t,F(["tuple"])).has("tuple")||t.peekType("OPEN_PAREN")?(n="tuple",s=t.popParams().map((t=>ot.from(t))),r=`tuple(${s.map((t=>t.format())).join(",")})`):(r=nt(t.popType("TYPE")),n=r);let i=null,o=null;for(;t.length&&t.peekType("BRACKET");){const e=t.pop();i=new ot(st,"",r,n,null,s,o,i),o=e.value,r+=e.text,n="array",s=null}let a=null;if(Z(t,G).has("indexed")){if(!e)throw new Error("");a=!0}const c=t.peekType("ID")?t.pop().text:"";if(t.length)throw new Error("leftover tokens");return new ot(st,c,r,n,a,s,o,i)}static isParamType(t){return t&&"_ParamTypeInternal"===t[it]}}var at;S=new WeakSet,R=function t(e,r,n,s){if(this.isArray()){if(!Array.isArray(r))throw new Error("invlaid array value");if(-1!==this.arrayLength&&r.length!==this.arrayLength)throw new Error("array is wrong length");const i=this.arrayChildren,o=r.slice();return o.forEach(((r,s)=>{B(i,S,"m",t).call(i,e,r,n,(t=>{o[s]=t}))})),void s(o)}if(this.isTuple()){const i=this.components;let o;if(Array.isArray(r))o=r.slice();else{if(null==r||"object"!=typeof r)throw new Error("invlaid tuple value");o=i.map((t=>{if(!t.name)throw new Error("cannot use object value with unnamed components");if(!(t.name in r))throw new Error(`missing value for component ${t.name}`);return r[t.name]}))}if(r.length!==this.components.length)throw new Error("array is wrong length");return o.forEach(((r,s)=>{var a;B(a=i[s],S,"m",t).call(a,e,r,n,(t=>{o[s]=t}))})),void s(o)}const i=n(this.type,r);i.then?e.push(async function(){s(await i)}()):s(i)},function(t){t.constructor="constructor",t.error="error",t.event="event",t.function="function",t.struct="struct"}(at||(at={}));class ct{constructor(t,e,n){N.assertPrivate(t,st,"Fragment"),r(this,{type:e,inputs:n=Object.freeze(n.slice())})}static from(t){if("string"==typeof t)return this.fromString(t);if(t instanceof J)return this.fromTokens(t);if("object"==typeof t)return this.fromObject(t);throw new Error(`unsupported type: ${t}`)}static fromObject(t){switch(t.type){case"constructor":return dt.fromObject(t);case"error":return ht.fromObject(t);case"event":return ft.fromObject(t);case"function":return pt.fromObject(t);case"struct":return wt.fromObject(t)}throw new Error("not implemented yet")}static fromString(t){try{ct.from(JSON.parse(t))}catch(t){}return ct.fromTokens(q(t))}static fromTokens(t){const e=t.popKeyword(M);switch(e){case"constructor":return dt.fromTokens(t);case"error":return ht.fromTokens(t);case"event":return ft.fromTokens(t);case"function":return pt.fromTokens(t);case"struct":return wt.fromTokens(t)}throw new Error(`unsupported type: ${e}`)}static isConstructor(t){return t&&"constructor"===t.type}static isError(t){return t&&"error"===t.type}static isEvent(t){return t&&"event"===t.type}static isFunction(t){return t&&"function"===t.type}static isStruct(t){return t&&"struct"===t.type}}class lt extends ct{constructor(t,e,n,s){super(t,e,s),s=Object.freeze(s.slice()),r(this,{name:n})}}function ut(t,e){return"("+e.map((e=>e.format(t))).join(t===_.full?", ":",")+")"}class ht extends lt{constructor(t,e,r){super(t,at.error,e,r)}format(t=_.sighash){if(_[t]||N.throwArgumentError("invalid format type","format",t),t===_.json)return JSON.stringify({type:"error",name:this.name,inputs:this.inputs.map((e=>JSON.parse(e.format(t))))});const e=[];return t!==_.sighash&&e.push("error"),e.push(this.name+ut(t,this.inputs)),e.join(" ")}static fromString(t){return ht.fromTokens(q(t))}static fromTokens(t){const e=Y("error",t),r=Q(t);return et(t),new ht(st,e,r)}}class ft extends lt{constructor(t,e,n,s){super(t,at.event,e,n),r(this,{anonymous:s})}format(t=_.sighash){if(_[t]||N.throwArgumentError("invalid format type","format",t),t===_.json)return JSON.stringify({type:"event",anonymous:this.anonymous,name:this.name,inputs:this.inputs.map((e=>JSON.parse(e.format(t))))});const e=[];return t!==_.sighash&&e.push("event"),e.push(this.name+ut(t,this.inputs)),t!==_.sighash&&this.anonymous&&e.push("anonymous"),e.join(" ")}static fromString(t){return ft.fromTokens(q(t))}static fromTokens(t){const e=Y("event",t),r=Q(t,!0),n=!!Z(t,F(["anonymous"])).has("anonymous");return et(t),new ft(st,e,r,n)}}class dt extends ct{constructor(t,e,n,s,i){super(t,e,n),r(this,{payable:s,gas:i})}format(t=_.sighash){if(_[t]||N.throwArgumentError("invalid format type","format",t),t===_.sighash&&N.throwError("cannot format a constructor for sighash","UNSUPPORTED_OPERATION",{operation:"format(sighash)"}),t===_.json)return JSON.stringify({type:"constructor",stateMutability:this.payable?"payable":"undefined",payable:this.payable,gas:null!=this.gas?this.gas:void 0,inputs:this.inputs.map((e=>JSON.parse(e.format(t))))});const e=[`constructor${ut(t,this.inputs)}`];return e.push(this.payable?"payable":"nonpayable"),null!=this.gas&&e.push(`@${this.gas.toString()}`),e.join(" ")}static fromString(t){return dt.fromTokens(q(t))}static fromObject(t){throw new Error("TODO")}static fromTokens(t){Z(t,F(["constructor"]));const e=Q(t),r=!!Z(t,F(["payable"])).has("payable"),n=tt(t);return et(t),new dt(st,at.constructor,e,r,n)}}class pt extends lt{constructor(t,e,n,s,i,o){super(t,at.function,e,s);r(this,{constant:"view"===n||"pure"===n,gas:o,outputs:i=Object.freeze(i.slice()),payable:"payable"===n,stateMutability:n})}format(t=_.sighash){if(_[t]||N.throwArgumentError("invalid format type","format",t),t===_.json)return JSON.stringify({type:"function",name:this.name,constant:this.constant,stateMutability:"nonpayable"!==this.stateMutability?this.stateMutability:void 0,payable:this.payable,gas:null!=this.gas?this.gas:void 0,inputs:this.inputs.map((e=>JSON.parse(e.format(t)))),outputs:this.outputs.map((e=>JSON.parse(e.format(t))))});const e=[];return t!==_.sighash&&e.push("function"),e.push(this.name+ut(t,this.inputs)),t!==_.sighash&&("nonpayable"!==this.stateMutability&&e.push(this.stateMutability),this.outputs&&this.outputs.length&&(e.push("returns"),e.push(ut(t,this.outputs))),null!=this.gas&&e.push(`@${this.gas.toString()}`)),e.join(" ")}static fromString(t){return pt.fromTokens(q(t))}static fromTokens(t){const e=Y("function",t),r=Q(t),n=function(t){let e=Z(t,L);return X(e,F("constant payable nonpayable".split(" "))),X(e,F("pure view payable nonpayable".split(" "))),e.has("view")?"view":e.has("pure")?"pure":e.has("payable")?"payable":e.has("nonpayable")?"nonpayable":e.has("constant")?"view":"nonpayable"}(t);let s=[];Z(t,F(["returns"])).has("returns")&&(s=Q(t));const i=tt(t);return et(t),new pt(st,e,n,r,s,i)}}class wt extends lt{format(){throw new Error("@TODO")}static fromString(t){return wt.fromTokens(q(t))}static fromTokens(t){const e=Y("struct",t),r=Q(t);return et(t),new wt(st,at.struct,e,r)}}const gt=new A("@ethersproject/math@6.0.0-beta.1"),mt=BigInt(0);function yt(t){if(t instanceof Uint8Array){let e="0x0";for(const r of t)e+="0123456789abcdef"[r>>4],e+="0123456789abcdef"[15&r];return BigInt(e)}return gt.getBigInt(t,"value")}function bt(t){const e=yt(t);return(e<-9007199254740991||e>9007199254740991)&>.throwArgumentError("overflow","value",t),Number(e)}function vt(t,e){const r=gt.getBigInt(t,"value");if(r<0)throw new Error("cannot convert negative value to hex");let n=r.toString(16);if(null==e)n.length%2&&(n="0"+n);else{const t=gt.getNumber(e,"width");if(2*t>n-kt){return-((~r&(kt<256||t%1)&>.throwArgumentError("invalid decimal length","decimals",t),BigInt("1"+Ft.substring(0,t))}function Lt(t,e=0){let r=gt.getBigInt(t,"value");const n=Ut(gt.getNumber(e,"decimals")),s=String(n),i=r<0;i&&(r*=Ct);let o=String(r%n);for(;o.length1&&"0"===o.substring(o.length-1);)o=o.substring(0,o.length-1);let a=String(r/n);return 1!==s.length&&(a+="."+o),i&&(a="-"+a),a}function Dt(t,e=0){const r=Ut(gt.getNumber(e,"decimals"));"string"==typeof t&&t.match(/^-?[0-9.]+$/)||gt.throwArgumentError("invalid decimal value","value",t);const n="-"===t.substring(0,1);n&&(t=t.substring(1)),"."===t&>.throwArgumentError("missing value","value",t);const s=t.split(".");s.length>2&>.throwArgumentError("too many decimal points","value",t);let i=s[0]||"0",o=s[1]||"0";for(;"0"===o[o.length-1];)o=o.substring(0,o.length-1);for(o.length>String(r).length-1&&Bt("fractional component exceeds decimals","underflow","parseFixed"),""===o&&(o="0");o.lengthnull==t[e]?n:(typeof t[e]!==r&>.throwArgumentError("invalid fixed format ("+e+" not "+r+")","format."+e,t[e]),t[e]);e=s("signed","boolean",e),r=s("width","number",r),n=s("decimals","number",n)}return r%8&>.throwArgumentError("invalid fixed format width (not byte aligned)","format.width",r),n>80&>.throwArgumentError("invalid fixed format (decimals too large)","format.decimals",n),new Mt(_t,e,r,n)}}class jt{constructor(t,e,r,n){xt.add(this),Ot.set(this,void 0),t!==_t&>.throwError("cannot use FixedNumber constructor; use FixedNumber.from","UNSUPPORTED_OPERATION",{operation:"new FixedFormat"}),this.format=Mt.from(n),St(this,Ot,r,"f"),this._isFixedNumber=!0,Object.freeze(this)}addUnsafe(t){Rt(this,xt,"m",It).call(this,t);const e=Dt(Rt(this,Ot,"f"),this.format.decimals),r=Dt(Rt(t,Ot,"f"),t.format.decimals);return jt.fromValue(e+r,this.format.decimals,this.format)}subUnsafe(t){Rt(this,xt,"m",It).call(this,t);const e=Dt(Rt(this,Ot,"f"),this.format.decimals),r=Dt(Rt(t,Ot,"f"),t.format.decimals);return jt.fromValue(e-r,this.format.decimals,this.format)}mulUnsafe(t){Rt(this,xt,"m",It).call(this,t);const e=Dt(Rt(this,Ot,"f"),this.format.decimals),r=Dt(Rt(t,Ot,"f"),t.format.decimals);return jt.fromValue(e*r/this.format._multiplier,this.format.decimals,this.format)}divUnsafe(t){Rt(this,xt,"m",It).call(this,t);const e=Dt(Rt(this,Ot,"f"),this.format.decimals),r=Dt(Rt(t,Ot,"f"),t.format.decimals);return jt.fromValue(e*this.format._multiplier/r,this.format.decimals,this.format)}floor(){const t=this.toString().split(".");1===t.length&&t.push("0");let e=jt.from(t[0],this.format);const r=!t[1].match(/^(0*)$/);return this.isNegative()&&r&&(e=e.subUnsafe(Gt.toFormat(e.format))),e}ceiling(){const t=this.toString().split(".");1===t.length&&t.push("0");let e=jt.from(t[0],this.format);const r=!t[1].match(/^(0*)$/);return!this.isNegative()&&r&&(e=e.addUnsafe(Gt.toFormat(e.format))),e}round(t){null==t&&(t=0);const e=this.toString().split(".");if(1===e.length&&e.push("0"),(t<0||t>80||t%1)&>.throwArgumentError("invalid decimal count","decimals",t),e[1].length<=t)return this;const r=jt.from("1"+Ft.substring(0,t),this.format),n=$t.toFormat(this.format);return this.mulUnsafe(r).addUnsafe(n).floor().divUnsafe(r)}isZero(){return"0.0"===Rt(this,Ot,"f")||"0"===Rt(this,Ot,"f")}isNegative(){return"-"===Rt(this,Ot,"f")[0]}toString(){return Rt(this,Ot,"f")}toHexString(t){throw new Error("TODO")}toUnsafeFloat(){return parseFloat(this.toString())}toFormat(t){return jt.fromString(Rt(this,Ot,"f"),t)}static fromValue(t,e=0,r="fixed"){return jt.fromString(Lt(t,e),Mt.from(r))}static fromString(t,e="fixed"){const r=Mt.from(e),n=Dt(t,r.decimals);!r.signed&&n<0&&Bt("unsigned value cannot be negative","overflow","value",t);const s=r.signed?vt(Nt(n,r.width)):vt(n,r.width/8),i=Lt(n,r.decimals);return new jt(_t,s,i,r)}static fromBytes(t,e="fixed"){const r=gt.getBytes(t,"value"),n=Mt.from(e);if(r.length>n.width/8)throw new Error("overflow");let s=yt(r);n.signed&&(s=At(s,n.width));const i=vt(Nt(s,(n.signed?0:1)+n.width)),o=Lt(s,n.decimals);return new jt(_t,i,o,n)}static from(t,e){if("string"==typeof t)return jt.fromString(t,e);if(t instanceof Uint8Array)return jt.fromBytes(t,e);try{return jt.fromValue(t,0,e)}catch(t){if("INVALID_ARGUMENT"!==t.code)throw t}return gt.throwArgumentError("invalid FixedNumber value","value",t)}static isFixedNumber(t){return!(!t||!t._isFixedNumber)}}Ot=new WeakMap,xt=new WeakSet,It=function(t){this.format.name!==t.format.name&>.throwArgumentError("incompatible format; use fixedNumber.toFormat","other",t)};const Gt=jt.from(1),$t=jt.from("0.5"),Wt="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";let zt=null;function Ht(t){if(null==zt){zt={};for(let t=0;t>=Qt;return 0===e.length&&e.push(0),new Uint8Array(e)}if((e=t)&&"function"==typeof e.toHexString)return ee(t.toHexString());var e;if("string"==typeof t){let e=t;if(!e.match(/^0x[0-9a-f]*$/i))throw new RangeError(`invalid hex data string (${JSON.stringify(t)})`);const r=[];for(let t=2;t>4]+"0123456789abcdef"[15&n]}return r}function oe(t){let e=ie(ee(t)).substring(2);for(;"0"===e.substring(0,1);)e=e.substring(1);return""===e&&(e="0"),"0x"+e}function ae(t){return"0x"+t.map((t=>ie(t).substring(2))).join("")}function ce(t){return Xt(t,!0)?(t.length-2)/2:re(t).length}function le(t,e,r){const n=re(t);return null!=r&&r>n.length&&Zt.throwError("cannot slice beyond data bounds","BUFFER_OVERRUN",{buffer:n,length:n.length,offset:r}),ie(n.slice(null==e?0:e,null==r?n.length:r))}function ue(t){let e=ie(t).substring(2);for(;"00"==e.substring(0,2);)e=e.substring(2);return"0x"+e}function he(t,e,r){const n=re(t);e{null!=t&&(xe(this,we,"f").has(t)?xe(this,we,"f").get(t).push(e):xe(this,we,"f").set(t,[e]))})),Object.freeze(this),new Proxy(this,{get:(t,e,r)=>{if("string"==typeof e){if(e.match(/^[0-9]+$/)){const r=N.getNumber(e,"%index");if(r<0||r>=this.length)throw new RangeError("out of result range");const n=t[r];return n instanceof Error&&xe(this,pe,"m",ge).call(this,`index ${r}`,n),n}if(e in t||Ie.indexOf(e)>=0)return Reflect.get(t,e,r);if(!(e in t))return t.getValue(e)}return Reflect.get(t,e,r)}})}slice(t,e){null==t&&(t=0),null==e&&(e=this.length);const r=[];for(let n=t;n32&&N.throwError("value out-of-bounds","BUFFER_OVERRUN",{buffer:e,length:32,offset:e.length}),e.length%32&&(e=ee(ae([Oe.slice(e.length%32),e]))),e}we=new WeakMap,pe=new WeakSet,ge=function(t,e){const r=new Error(`deferred error during ABI decoding triggered accessing ${t}`);throw r.error=e,r};class Ce{constructor(t,e,n,s){r(this,{name:t,type:e,localName:n,dynamic:s},{name:"string",type:"string",localName:"string",dynamic:"boolean"})}_throwError(t,e){return N.throwArgumentError(t,this.localName,e)}}class Be{constructor(){me.add(this),ye.set(this,void 0),be.set(this,void 0),Pe(this,ye,[],"f"),Pe(this,be,0,"f")}get data(){return ae(xe(this,ye,"f"))}get length(){return xe(this,be,"f")}appendWriter(t){return xe(this,me,"m",ve).call(this,ee(t.data))}writeBytes(t){let e=ee(t);const r=e.length%32;return r&&(e=ee(ae([e,Oe.slice(r)]))),xe(this,me,"m",ve).call(this,e)}writeValue(t){return xe(this,me,"m",ve).call(this,_e(t))}writeUpdatableValue(){const t=xe(this,ye,"f").length;return xe(this,ye,"f").push(Oe),Pe(this,be,xe(this,be,"f")+32,"f"),e=>{xe(this,ye,"f")[t]=_e(e)}}}ye=new WeakMap,be=new WeakMap,me=new WeakSet,ve=function(t){return xe(this,ye,"f").push(t),Pe(this,be,xe(this,be,"f")+t.length,"f"),t.length};class Fe{constructor(t,e,n){Ee.add(this),Te.set(this,void 0),ke.set(this,void 0),Ae.set(this,void 0),r(this,{allowLoose:!!n}),Pe(this,Te,ee(t),"f"),Pe(this,Ae,e||Fe.coerce,"f"),Pe(this,ke,0,"f")}get data(){return ie(xe(this,Te,"f"))}get dataLength(){return xe(this,Te,"f").length}get consumed(){return xe(this,ke,"f")}get bytes(){return new Uint8Array(xe(this,Te,"f"))}static coerce(t,e){let r=t.match("^u?int([0-9]+)$");return r&&parseInt(r[1])<=48&&(e=e.toNumber()),e}coerce(t,e){return xe(this,Ae,"f").call(this,t,e)}subReader(t){return new Fe(xe(this,Te,"f").slice(xe(this,ke,"f")+t),xe(this,Ae,"f"),this.allowLoose)}readBytes(t,e){let r=xe(this,Ee,"m",Ne).call(this,0,t,!!e);return Pe(this,ke,xe(this,ke,"f")+r.length,"f"),r.slice(0,t)}readValue(){return yt(this.readBytes(32))}readIndex(){return bt(this.readBytes(32))}}Te=new WeakMap,ke=new WeakMap,Ae=new WeakMap,Ee=new WeakSet,Ne=function(t,e,r){let n=32*Math.ceil(e/32);return xe(this,ke,"f")+n>xe(this,Te,"f").length&&(this.allowLoose&&r&&xe(this,ke,"f")+e<=xe(this,Te,"f").length?n=e:N.throwError("data out-of-bounds","BUFFER_OVERRUN",{buffer:ee(xe(this,Te,"f")),length:xe(this,Te,"f").length,offset:xe(this,ke,"f")+n})),xe(this,Te,"f").slice(xe(this,ke,"f"),xe(this,ke,"f")+n)}; +/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */ +const Ue=t=>new Uint32Array(t.buffer,t.byteOffset,Math.floor(t.byteLength/4)),Le=t=>new DataView(t.buffer,t.byteOffset,t.byteLength),De=(t,e)=>t<<32-e|t>>>e;if(!(68===new Uint8Array(new Uint32Array([287454020]).buffer)[0]))throw new Error("Non little-endian hardware is not supported");Array.from({length:256},((t,e)=>e.toString(16).padStart(2,"0")));const Me=(()=>{const t="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);try{if(t){const{setImmediate:e}=t("timers");return()=>new Promise((t=>e(t)))}}catch(t){}return()=>new Promise((t=>setTimeout(t,0)))})();async function je(t,e,r){let n=Date.now();for(let s=0;s=0&&tt().update(Ge(e)).digest(),r=t();return e.outputLen=r.outputLen,e.blockLen=r.blockLen,e.create=()=>t(),e}class Ke extends ze{constructor(t,e){super(),this.finished=!1,this.destroyed=!1,We(t);const r=Ge(e);if(this.iHash=t.create(),!(this.iHash instanceof ze))throw new TypeError("Expected instance of class which extends utils.Hash");const n=this.blockLen=this.iHash.blockLen;this.outputLen=this.iHash.outputLen;const s=new Uint8Array(n);s.set(r.length>this.iHash.blockLen?t.create().update(r).digest():r);for(let t=0;tnew Ke(t,e).update(r).digest();function qe(t,e,r,n){const{c:s,dkLen:i,DK:o,PRF:a,PRFSalt:c}=function(t,e,r,n){We(t);const s=He({dkLen:32,asyncTick:10},n),{c:i,dkLen:o,asyncTick:a}=s;if($e(i),$e(o),$e(a),i<1)throw new Error("PBKDF2: iterations (c) should be >= 1");const c=Ge(e),l=Ge(r),u=new Uint8Array(o),h=Je.create(t,c),f=h._cloneInto().update(l);return{c:i,dkLen:o,asyncTick:a,DK:u,PRF:h,PRFSalt:f}}(t,e,r,n);let l;const u=new Uint8Array(4),h=Le(u),f=new Uint8Array(a.outputLen);for(let t=1,e=0;enew Ke(t,e);class Xe extends ze{constructor(t,e,r,n){super(),this.blockLen=t,this.outputLen=e,this.padOffset=r,this.isLE=n,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(t),this.view=Le(this.buffer)}update(t){if(this.destroyed)throw new Error("instance is destroyed");const{view:e,buffer:r,blockLen:n,finished:s}=this;if(s)throw new Error("digest() was already called");const i=(t=Ge(t)).length;for(let s=0;sn-i&&(this.process(r,0),i=0);for(let t=i;t>s&i),a=Number(r&i),c=n?4:0,l=n?0:4;t.setUint32(e+c,o,n),t.setUint32(e+l,a,n)}(r,n-8,BigInt(8*this.length),s),this.process(r,0);const o=Le(t);this.get().forEach(((t,e)=>o.setUint32(4*e,t,s)))}digest(){const{buffer:t,outputLen:e}=this;this.digestInto(t);const r=t.slice(0,e);return this.destroy(),r}_cloneInto(t){t||(t=new this.constructor),t.set(...this.get());const{blockLen:e,buffer:r,length:n,finished:s,destroyed:i,pos:o}=this;return t.length=n,t.pos=o,t.finished=s,t.destroyed=i,n%e&&t.buffer.set(r),t}}const Ye=(t,e,r)=>t&e^~t&r,Ze=(t,e,r)=>t&e^t&r^e&r,Qe=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),tr=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),er=new Uint32Array(64);class rr extends Xe{constructor(){super(64,32,8,!1),this.A=0|tr[0],this.B=0|tr[1],this.C=0|tr[2],this.D=0|tr[3],this.E=0|tr[4],this.F=0|tr[5],this.G=0|tr[6],this.H=0|tr[7]}get(){const{A:t,B:e,C:r,D:n,E:s,F:i,G:o,H:a}=this;return[t,e,r,n,s,i,o,a]}set(t,e,r,n,s,i,o,a){this.A=0|t,this.B=0|e,this.C=0|r,this.D=0|n,this.E=0|s,this.F=0|i,this.G=0|o,this.H=0|a}process(t,e){for(let r=0;r<16;r++,e+=4)er[r]=t.getUint32(e,!1);for(let t=16;t<64;t++){const e=er[t-15],r=er[t-2],n=De(e,7)^De(e,18)^e>>>3,s=De(r,17)^De(r,19)^r>>>10;er[t]=s+er[t-7]+n+er[t-16]|0}let{A:r,B:n,C:s,D:i,E:o,F:a,G:c,H:l}=this;for(let t=0;t<64;t++){const e=l+(De(o,6)^De(o,11)^De(o,25))+Ye(o,a,c)+Qe[t]+er[t]|0,u=(De(r,2)^De(r,13)^De(r,22))+Ze(r,n,s)|0;l=c,c=a,a=o,o=i+e|0,i=s,s=n,n=r,r=e+u|0}r=r+this.A|0,n=n+this.B|0,s=s+this.C|0,i=i+this.D|0,o=o+this.E|0,a=a+this.F|0,c=c+this.G|0,l=l+this.H|0,this.set(r,n,s,i,o,a,c,l)}roundClean(){er.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}}const nr=Ve((()=>new rr)),sr=BigInt(2**32-1),ir=BigInt(32);function or(t,e=!1){return e?{h:Number(t&sr),l:Number(t>>ir&sr)}:{h:0|Number(t>>ir&sr),l:0|Number(t&sr)}}function ar(t,e=!1){let r=new Uint32Array(t.length),n=new Uint32Array(t.length);for(let s=0;st>>>r,lr=(t,e,r)=>t<<32-r|e>>>r,ur=(t,e,r)=>t>>>r|e<<32-r,hr=(t,e,r)=>t<<32-r|e>>>r,fr=(t,e,r)=>t<<64-r|e>>>r-32,dr=(t,e,r)=>t>>>r-32|e<<64-r;function pr(t,e,r,n){const s=(e>>>0)+(n>>>0);return{h:t+r+(s/2**32|0)|0,l:0|s}}const wr=(t,e,r)=>(t>>>0)+(e>>>0)+(r>>>0),gr=(t,e,r,n)=>e+r+n+(t/2**32|0)|0,mr=(t,e,r,n)=>(t>>>0)+(e>>>0)+(r>>>0)+(n>>>0),yr=(t,e,r,n,s)=>e+r+n+s+(t/2**32|0)|0,br=(t,e,r,n,s)=>(t>>>0)+(e>>>0)+(r>>>0)+(n>>>0)+(s>>>0),vr=(t,e,r,n,s,i)=>e+r+n+s+i+(t/2**32|0)|0,[Er,Tr]=ar(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map((t=>BigInt(t)))),kr=new Uint32Array(80),Ar=new Uint32Array(80);class Nr extends Xe{constructor(){super(128,64,16,!1),this.Ah=1779033703,this.Al=-205731576,this.Bh=-1150833019,this.Bl=-2067093701,this.Ch=1013904242,this.Cl=-23791573,this.Dh=-1521486534,this.Dl=1595750129,this.Eh=1359893119,this.El=-1377402159,this.Fh=-1694144372,this.Fl=725511199,this.Gh=528734635,this.Gl=-79577749,this.Hh=1541459225,this.Hl=327033209}get(){const{Ah:t,Al:e,Bh:r,Bl:n,Ch:s,Cl:i,Dh:o,Dl:a,Eh:c,El:l,Fh:u,Fl:h,Gh:f,Gl:d,Hh:p,Hl:w}=this;return[t,e,r,n,s,i,o,a,c,l,u,h,f,d,p,w]}set(t,e,r,n,s,i,o,a,c,l,u,h,f,d,p,w){this.Ah=0|t,this.Al=0|e,this.Bh=0|r,this.Bl=0|n,this.Ch=0|s,this.Cl=0|i,this.Dh=0|o,this.Dl=0|a,this.Eh=0|c,this.El=0|l,this.Fh=0|u,this.Fl=0|h,this.Gh=0|f,this.Gl=0|d,this.Hh=0|p,this.Hl=0|w}process(t,e){for(let r=0;r<16;r++,e+=4)kr[r]=t.getUint32(e),Ar[r]=t.getUint32(e+=4);for(let t=16;t<80;t++){const e=0|kr[t-15],r=0|Ar[t-15],n=ur(e,r,1)^ur(e,r,8)^cr(e,0,7),s=hr(e,r,1)^hr(e,r,8)^lr(e,r,7),i=0|kr[t-2],o=0|Ar[t-2],a=ur(i,o,19)^fr(i,o,61)^cr(i,0,6),c=hr(i,o,19)^dr(i,o,61)^lr(i,o,6),l=mr(s,c,Ar[t-7],Ar[t-16]),u=yr(l,n,a,kr[t-7],kr[t-16]);kr[t]=0|u,Ar[t]=0|l}let{Ah:r,Al:n,Bh:s,Bl:i,Ch:o,Cl:a,Dh:c,Dl:l,Eh:u,El:h,Fh:f,Fl:d,Gh:p,Gl:w,Hh:g,Hl:m}=this;for(let t=0;t<80;t++){const e=ur(u,h,14)^ur(u,h,18)^fr(u,h,41),y=hr(u,h,14)^hr(u,h,18)^dr(u,h,41),b=u&f^~u&p,v=br(m,y,h&d^~h&w,Tr[t],Ar[t]),E=vr(v,g,e,b,Er[t],kr[t]),T=0|v,k=ur(r,n,28)^fr(r,n,34)^fr(r,n,39),A=hr(r,n,28)^dr(r,n,34)^dr(r,n,39),N=r&s^r&o^s&o,P=n&i^n&a^i&a;g=0|p,m=0|w,p=0|f,w=0|d,f=0|u,d=0|h,({h:u,l:h}=pr(0|c,0|l,0|E,0|T)),c=0|o,l=0|a,o=0|s,a=0|i,s=0|r,i=0|n;const x=wr(T,A,P);r=gr(x,E,k,N),n=0|x}({h:r,l:n}=pr(0|this.Ah,0|this.Al,0|r,0|n)),({h:s,l:i}=pr(0|this.Bh,0|this.Bl,0|s,0|i)),({h:o,l:a}=pr(0|this.Ch,0|this.Cl,0|o,0|a)),({h:c,l:l}=pr(0|this.Dh,0|this.Dl,0|c,0|l)),({h:u,l:h}=pr(0|this.Eh,0|this.El,0|u,0|h)),({h:f,l:d}=pr(0|this.Fh,0|this.Fl,0|f,0|d)),({h:p,l:w}=pr(0|this.Gh,0|this.Gl,0|p,0|w)),({h:g,l:m}=pr(0|this.Hh,0|this.Hl,0|g,0|m)),this.set(r,n,s,i,o,a,c,l,u,h,f,d,p,w,g,m)}roundClean(){kr.fill(0),Ar.fill(0)}destroy(){this.buffer.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}}class Pr extends Nr{constructor(){super(),this.Ah=573645204,this.Al=-64227540,this.Bh=-1621794909,this.Bl=-934517566,this.Ch=596883563,this.Cl=1867755857,this.Dh=-1774684391,this.Dl=1497426621,this.Eh=-1775747358,this.El=-1467023389,this.Fh=-1101128155,this.Fl=1401305490,this.Gh=721525244,this.Gl=746961066,this.Hh=246885852,this.Hl=-2117784414,this.outputLen=32}}class xr extends Nr{constructor(){super(),this.Ah=-876896931,this.Al=-1056596264,this.Bh=1654270250,this.Bl=914150663,this.Ch=-1856437926,this.Cl=812702999,this.Dh=355462360,this.Dl=-150054599,this.Eh=1731405415,this.El=-4191439,this.Fh=-1900787065,this.Fl=1750603025,this.Gh=-619958771,this.Gl=1694076839,this.Hh=1203062813,this.Hl=-1090891868,this.outputLen=48}}const Or=Ve((()=>new Nr));Ve((()=>new Pr)),Ve((()=>new xr));const Ir=new A("@ethersproject/crypto@6.0.0-beta.1");const Sr=function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if("undefined"!=typeof global)return global;throw new Error("unable to locate global object")}();let Rr=Sr.crypto||Sr.msCrypto;function _r(t){switch(t){case"sha256":return nr.create();case"sha512":return Or.create()}return Ir.throwArgumentError("invalid hashing algorithm name","algorithm",t)}let Cr=!1;const Br=function(t,e,r){return"0x"+function(t,e){const r={sha256:nr,sha512:Or}[t];return null==r?Ir.throwArgumentError("invalid hmac algorithm","algorithm",t):Je.create(r,e)}(t,e).update(r).digest("hex")};let Fr=Br;function Ur(t,e,r){const n=Ir.getBytes(e,"key"),s=Ir.getBytes(r,"data");return ie(Fr(t,n,s))}Ur._=Br,Ur.lock=function(){Cr=!0},Ur.register=function(t){if(Cr)throw new Error("computeHmac is locked");Fr=t},Object.freeze(Ur);const[Lr,Dr,Mr]=[[],[],[]],jr=BigInt(0),Gr=BigInt(1),$r=BigInt(2),Wr=BigInt(7),zr=BigInt(256),Hr=BigInt(113);for(let t=0,e=Gr,r=1,n=0;t<24;t++){[r,n]=[n,(2*r+3*n)%5],Lr.push(2*(5*n+r)),Dr.push((t+1)*(t+2)/2%64);let s=jr;for(let t=0;t<7;t++)e=(e<>Wr)*Hr)%zr,e&$r&&(s^=Gr<<(Gr<r>32?((t,e,r)=>e<>>64-r)(t,e,r):((t,e,r)=>t<>>32-r)(t,e,r),qr=(t,e,r)=>r>32?((t,e,r)=>t<>>64-r)(t,e,r):((t,e,r)=>e<>>32-r)(t,e,r);class Xr extends ze{constructor(t,e,r,n=!1,s=24){if(super(),this.blockLen=t,this.suffix=e,this.outputLen=r,this.enableXOF=n,this.rounds=s,this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,$e(r),0>=this.blockLen||this.blockLen>=200)throw new Error("Sha3 supports only keccak-f1600 function");this.state=new Uint8Array(200),this.state32=Ue(this.state)}keccak(){!function(t,e=24){const r=new Uint32Array(10);for(let n=24-e;n<24;n++){for(let e=0;e<10;e++)r[e]=t[e]^t[e+10]^t[e+20]^t[e+30]^t[e+40];for(let e=0;e<10;e+=2){const n=(e+8)%10,s=(e+2)%10,i=r[s],o=r[s+1],a=Jr(i,o,1)^r[n],c=qr(i,o,1)^r[n+1];for(let r=0;r<50;r+=10)t[e+r]^=a,t[e+r+1]^=c}let e=t[2],s=t[3];for(let r=0;r<24;r++){const n=Dr[r],i=Jr(e,s,n),o=qr(e,s,n),a=Lr[r];e=t[a],s=t[a+1],t[a]=i,t[a+1]=o}for(let e=0;e<50;e+=10){for(let n=0;n<10;n++)r[n]=t[e+n];for(let n=0;n<10;n++)t[e+n]^=~r[(n+2)%10]&r[(n+4)%10]}t[0]^=Vr[n],t[1]^=Kr[n]}r.fill(0)}(this.state32,this.rounds),this.posOut=0,this.pos=0}update(t){if(this.destroyed)throw new Error("instance is destroyed");if(this.finished)throw new Error("digest() was already called");const{blockLen:e,state:r}=this,n=(t=Ge(t)).length;for(let s=0;s=this.blockLen&&this.keccak();const n=Math.min(this.blockLen-this.posOut,r-e);t.set(this.state.subarray(this.posOut,this.posOut+n),e),this.posOut+=n,e+=n}return t}xofInto(t){if(!this.enableXOF)throw new Error("XOF is not possible for this instance");return this.writeInto(t)}xof(t){return $e(t),this.xofInto(new Uint8Array(t))}digestInto(t){if(t.lengthVe((()=>new Xr(e,t,r)));Yr(6,144,28),Yr(6,136,32),Yr(6,104,48),Yr(6,72,64),Yr(1,144,28);const Zr=Yr(1,136,32);Yr(1,104,48),Yr(1,72,64);const Qr=(t,e,r)=>function(t){const e=(e,r)=>t(r).update(Ge(e)).digest(),r=t({});return e.outputLen=r.outputLen,e.blockLen=r.blockLen,e.create=e=>t(e),e}(((n={})=>new Xr(e,t,void 0!==n.dkLen?n.dkLen:r,!0)));Qr(31,168,16),Qr(31,136,32);let tn=!1;const en=function(t){return Zr(t)};let rn=en;function nn(t){const e=Ir.getBytes(t,"data");return ie(rn(e))}nn._=en,nn.lock=function(){tn=!0},nn.register=function(t){if(tn)throw new TypeError("keccak256 is locked");rn=t},Object.freeze(nn);const sn=new Uint8Array([7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8]),on=Uint8Array.from({length:16},((t,e)=>e)),an=on.map((t=>(9*t+5)%16));let cn=[on],ln=[an];for(let t=0;t<4;t++)for(let e of[cn,ln])e.push(e[t].map((t=>sn[t])));const un=[[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8],[12,13,11,15,6,9,9,7,12,15,11,13,7,8,7,7],[13,15,14,11,7,7,6,8,13,14,13,12,5,5,6,9],[14,11,12,14,8,6,5,5,15,12,15,14,9,9,8,6],[15,12,13,13,9,5,8,6,14,11,12,11,8,6,5,5]].map((t=>new Uint8Array(t))),hn=cn.map(((t,e)=>t.map((t=>un[e][t])))),fn=ln.map(((t,e)=>t.map((t=>un[e][t])))),dn=new Uint32Array([0,1518500249,1859775393,2400959708,2840853838]),pn=new Uint32Array([1352829926,1548603684,1836072691,2053994217,0]),wn=(t,e)=>t<>>32-e;function gn(t,e,r,n){return 0===t?e^r^n:1===t?e&r|~e&n:2===t?(e|~r)^n:3===t?e&n|r&~n:e^(r|~n)}const mn=new Uint32Array(16);class yn extends Xe{constructor(){super(64,20,8,!0),this.h0=1732584193,this.h1=-271733879,this.h2=-1732584194,this.h3=271733878,this.h4=-1009589776}get(){const{h0:t,h1:e,h2:r,h3:n,h4:s}=this;return[t,e,r,n,s]}set(t,e,r,n,s){this.h0=0|t,this.h1=0|e,this.h2=0|r,this.h3=0|n,this.h4=0|s}process(t,e){for(let r=0;r<16;r++,e+=4)mn[r]=t.getUint32(e,!0);let r=0|this.h0,n=r,s=0|this.h1,i=s,o=0|this.h2,a=o,c=0|this.h3,l=c,u=0|this.h4,h=u;for(let t=0;t<5;t++){const e=4-t,f=dn[t],d=pn[t],p=cn[t],w=ln[t],g=hn[t],m=fn[t];for(let e=0;e<16;e++){const n=wn(r+gn(t,s,o,c)+mn[p[e]]+f,g[e])+u|0;r=u,u=c,c=0|wn(o,10),o=s,s=n}for(let t=0;t<16;t++){const r=wn(n+gn(e,i,a,l)+mn[w[t]]+d,m[t])+h|0;n=h,h=l,l=0|wn(a,10),a=i,i=r}}this.set(this.h1+o+l|0,this.h2+c+h|0,this.h3+u+n|0,this.h4+r+i|0,this.h0+s+a|0)}roundClean(){mn.fill(0)}destroy(){this.destroyed=!0,this.buffer.fill(0),this.set(0,0,0,0,0)}}const bn=Ve((()=>new yn));let vn=!1;const En=function(t){return bn(t)};let Tn=En;function kn(t){const e=Ir.getBytes(t,"data");return ie(Tn(e))}kn._=En,kn.lock=function(){vn=!0},kn.register=function(t){if(vn)throw new TypeError("ripemd160 is locked");Tn=t},Object.freeze(kn);let An=!1;const Nn=function(t,e,r,n,s){return function(t,e,r,n,s){const i={sha256:nr,sha512:Or}[s];return null==i?Ir.throwArgumentError("invalid pbkdf2 algorithm","algorithm",s):qe(i,t,e,{c:r,dkLen:n})}(t,e,r,n,s)};let Pn=Nn;function xn(t,e,r,n,s){const i=Ir.getBytes(t,"password"),o=Ir.getBytes(e,"salt");return ie(Pn(i,o,r,n,s))}xn._=Nn,xn.lock=function(){An=!0},xn.register=function(t){if(An)throw new Error("pbkdf2 is locked");Pn=t},Object.freeze(xn);let On=!1;const In=function(t){return new Uint8Array(function(t){if(null==Rr)return Ir.throwError("platform does not support secure random numbers","UNSUPPORTED_OPERATION",{operation:"randomBytes"});(t<=0||t>1024||t%1||t!=t)&&Ir.throwArgumentError("invalid length","length",t);const e=new Uint8Array(t);return Rr.getRandomValues(e),e}(t))};let Sn=In;function Rn(t){return Sn(t)}Rn._=In,Rn.lock=function(){On=!0},Rn.register=function(t){if(On)throw new Error("random is locked");Sn=t},Object.freeze(Rn);const _n=(t,e)=>t<>>32-e;function Cn(t,e,r,n,s,i){let o=t[e++]^r[n++],a=t[e++]^r[n++],c=t[e++]^r[n++],l=t[e++]^r[n++],u=t[e++]^r[n++],h=t[e++]^r[n++],f=t[e++]^r[n++],d=t[e++]^r[n++],p=t[e++]^r[n++],w=t[e++]^r[n++],g=t[e++]^r[n++],m=t[e++]^r[n++],y=t[e++]^r[n++],b=t[e++]^r[n++],v=t[e++]^r[n++],E=t[e++]^r[n++],T=o,k=a,A=c,N=l,P=u,x=h,O=f,I=d,S=p,R=w,_=g,C=m,B=y,F=b,U=v,L=E;for(let t=0;t<8;t+=2)P^=_n(T+B|0,7),S^=_n(P+T|0,9),B^=_n(S+P|0,13),T^=_n(B+S|0,18),R^=_n(x+k|0,7),F^=_n(R+x|0,9),k^=_n(F+R|0,13),x^=_n(k+F|0,18),U^=_n(_+O|0,7),A^=_n(U+_|0,9),O^=_n(A+U|0,13),_^=_n(O+A|0,18),N^=_n(L+C|0,7),I^=_n(N+L|0,9),C^=_n(I+N|0,13),L^=_n(C+I|0,18),k^=_n(T+N|0,7),A^=_n(k+T|0,9),N^=_n(A+k|0,13),T^=_n(N+A|0,18),O^=_n(x+P|0,7),I^=_n(O+x|0,9),P^=_n(I+O|0,13),x^=_n(P+I|0,18),C^=_n(_+R|0,7),S^=_n(C+_|0,9),R^=_n(S+C|0,13),_^=_n(R+S|0,18),B^=_n(L+U|0,7),F^=_n(B+L|0,9),U^=_n(F+B|0,13),L^=_n(U+F|0,18);s[i++]=o+T|0,s[i++]=a+k|0,s[i++]=c+A|0,s[i++]=l+N|0,s[i++]=u+P|0,s[i++]=h+x|0,s[i++]=f+O|0,s[i++]=d+I|0,s[i++]=p+S|0,s[i++]=w+R|0,s[i++]=g+_|0,s[i++]=m+C|0,s[i++]=y+B|0,s[i++]=b+F|0,s[i++]=v+U|0,s[i++]=E+L|0}function Bn(t,e,r,n,s){let i=n+0,o=n+16*s;for(let n=0;n<16;n++)r[o+n]=t[e+16*(2*s-1)+n];for(let n=0;n0&&(o+=16),Cn(r,i,t,e+=16,r,o)}function Fn(t,e,r){const n=He({dkLen:32,asyncTick:10,maxmem:1073742848},r),{N:s,r:i,p:o,dkLen:a,asyncTick:c,maxmem:l,onProgress:u}=n;if($e(s),$e(i),$e(o),$e(a),$e(c),$e(l),void 0!==u&&"function"!=typeof u)throw new Error("progressCb should be function");const h=128*i,f=h/4;if(s<=1||0!=(s&s-1)||s>=2**(h/8)||s>2**32)throw new Error("Scrypt: N must be larger than 1, a power of 2, less than 2^(128 * r / 8) and less than 2^32");if(o<0||o>137438953440/h)throw new Error("Scrypt: p must be a positive integer less than or equal to ((2^32 - 1) * 32) / (128 * r)");if(a<0||a>137438953440)throw new Error("Scrypt: dkLen should be positive integer less than or equal to (2^32 - 1) * 32");const d=h*(s+o);if(d>l)throw new Error(`Scrypt: parameters too large, ${d} (128 * r * (N + p)) > ${l} (maxmem)`);const p=qe(nr,t,e,{c:1,dkLen:h*o}),w=Ue(p),g=Ue(new Uint8Array(h*s)),m=Ue(new Uint8Array(h));let y=()=>{};if(u){const t=2*s*o,e=Math.max(Math.floor(t/1e4),1);let r=0;y=()=>{r++,!u||r%e&&r!==t||u(r/t)}}return{N:s,r:i,p:o,dkLen:a,blockSize32:f,V:g,B32:w,B:p,tmp:m,blockMixCb:y,asyncTick:c}}function Un(t,e,r,n,s){const i=qe(nr,t,r,{c:1,dkLen:e});return r.fill(0),n.fill(0),s.fill(0),i}let Ln=!1,Dn=!1;const Mn=async function(t,e,r,n,s,i,o){return await async function(t,e,r){const{N:n,r:s,p:i,dkLen:o,blockSize32:a,V:c,B32:l,B:u,tmp:h,blockMixCb:f,asyncTick:d}=Fn(t,e,r);for(let t=0;t{Bn(c,r,c,r+=a,s),f()})),Bn(c,(n-1)*a,l,e,s),f(),await je(n,d,(t=>{const r=l[e+a-16]%n;for(let t=0;t>1]>>4>=8&&(e[t]=e[t].toUpperCase()),(15&n[t>>1])>=8&&(e[t+1]=e[t+1].toUpperCase());return"0x"+e.join("")}const ss={};for(let t=0;t<10;t++)ss[String(t)]=String(t);for(let t=0;t<26;t++)ss[String.fromCharCode(65+t)]=String(10+t);function is(t){let e=(t=(t=t.toUpperCase()).substring(4)+t.substring(0,2)+"00").split("").map((t=>ss[t])).join("");for(;e.length>=15;){let t=e.substring(0,15);e=parseInt(t,10)%97+e.substring(t.length)}let r=String(98-parseInt(e,10)%97);for(;r.length<2;)r="0"+r;return r}const os=function(){const t={};for(let e=0;e<36;e++){t["0123456789abcdefghijklmnopqrstuvwxyz"[e]]=BigInt(e)}return t}();function as(t){if("string"!=typeof t&&ts.throwArgumentError("invalid address","address",t),t.match(/^(0x)?[0-9a-fA-F]{40}$/)){"0x"!==t.substring(0,2)&&(t="0x"+t);const e=ns(t);return t.match(/([A-F].*[a-f])|([a-f].*[A-F])/)&&e!==t&&ts.throwArgumentError("bad address checksum","address",t),e}if(t.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)){t.substring(2,4)!==is(t)&&ts.throwArgumentError("bad icap checksum","address",t);let e=function(t){t=t.toLowerCase();let e=es;for(let r=0;r>=8;return e}function hs(t){if(Array.isArray(t)){let e=[];if(t.forEach((function(t){e=e.concat(hs(t))})),e.length<=55)return e.unshift(192+e.length),e;const r=us(e.length);return r.unshift(247+r.length),r.concat(e)}const e=Array.prototype.slice.call(ls.getBytes(t,"object"));if(1===e.length&&e[0]<=127)return e;if(e.length<=55)return e.unshift(128+e.length),e;const r=us(e.length);return r.unshift(183+r.length),r.concat(e)}function fs(t){let e="0x";for(const r of hs(t))e+="0123456789abcdef"[r>>4],e+="0123456789abcdef"[15&r];return e}function ds(t){let e=t.toString(16);for(;e.length<2;)e="0"+e;return"0x"+e}function ps(t,e,r){let n=0;for(let s=0;se+1+n&&ls.throwError("child data too short","BUFFER_OVERRUN",{buffer:t,length:n,offset:e})}return{consumed:1+n,result:s}}function gs(t,e){0===t.length&&ls.throwError("data too short","BUFFER_OVERRUN",{buffer:t,length:0,offset:1});const r=e=>{e>t.length&&ls.throwError("data short segment too short","BUFFER_OVERRUN",{buffer:t,length:t.length,offset:e})};if(t[e]>=248){const n=t[e]-247;r(e+1+n);const s=ps(t,e+1,n);return r(e+1+n+s),ws(t,e,e+1+n,n+s)}if(t[e]>=192){const n=t[e]-192;return r(e+1+n),ws(t,e,e+1,n)}if(t[e]>=184){const n=t[e]-183;r(e+1+n);const s=ps(t,e+1,n);r(e+1+n+s);return{consumed:1+n+s,result:ie(t.slice(e+1+n,e+1+n+s))}}if(t[e]>=128){const n=t[e]-128;r(e+1+n);return{consumed:1+n,result:ie(t.slice(e+1,e+1+n))}}return{consumed:1,result:ds(t[e])}}function ms(t){const e=ls.getBytes(t,"data"),r=gs(e,0);return r.consumed!==e.length&&ls.throwArgumentError("unexpected junk after rlp payload","data",t),r.result}function ys(t){const e=as(t.from);let r=ts.getBigInt(t.nonce,"tx.nonce").toString(16);return r="0"===r?"0x":r.length%2?"0x0"+r:"0x"+r,as(le(nn(fs([e,r])),12))}function bs(t,e,r){const n=as(t),s=ts.getBytes(e,"salt"),i=ts.getBytes(r,"initCodeHash");return 32!==s.length&&ts.throwArgumentError("salt must be 32 bytes","salt",e),32!==i.length&&ts.throwArgumentError("initCodeHash must be 32 bytes","initCodeHash",r),as(le(nn(ae(["0xff",n,s,i])),12))}function vs(t){return t&&"function"==typeof t.getAddress}function Es(t){try{return as(t),!0}catch(t){}return!1}async function Ts(t,e){if("string"==typeof t){if(t.match(/^0x[0-9a-f]{40}$/i))return as(t);if(null==e)return ts.throwError("ENS resolution requires a provider","UNSUPPORTED_OPERATION",{operation:"resolveName"});const r=await e.resolveName(t);return null==r||"0x0000000000000000000000000000000000000000"===r?ts.throwError("unconfigured name","UNCONFIGURED_NAME",{value:t}):as(r)}if(vs(t)){const e=await t.getAddress();return null==e&&ts.throwArgumentError("addressable resolved to null","target",t),as(e)}return ts.throwArgumentError("unsupported addressable value","target",t)}var ks,As=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Ns=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const Ps={};function xs(t,e){let r=!1;return e<0&&(r=!0,e*=-1),new Ss(Ps,`${r?"":"u"}int${e}`,t,{signed:r,width:e})}function Os(t,e){return new Ss(Ps,`bytes${e||""}`,t,{size:e})}const Is=Symbol.for("_ethers_typed");class Ss{constructor(t,e,n,s=null){if(ks.set(this,void 0),t!==Ps)throw new Error("private constructor");r(this,{_typedSymbol:Is,type:e,value:n}),As(this,ks,s,"f"),this.format()}format(){if("array"===this.type)throw new Error("");if("dynamicArray"===this.type)throw new Error("");return"tuple"===this.type?`tuple(${this.value.map((t=>t.format())).join(",")})`:this.type}defaultValue(){return 0}minValue(){return 0}maxValue(){return 0}isBigInt(){return!!this.type.match(/^u?int[0-9]+$/)}isData(){return"bytes"===this.type.substring(0,5)}isString(){return"string"===this.type}get tupleName(){if("tuple"!==this.type)throw TypeError("not a tuple");return Ns(this,ks,"f")}get arrayLength(){if("array"!==this.type)throw TypeError("not an array");return!0===Ns(this,ks,"f")?-1:!1===Ns(this,ks,"f")?this.value.length:null}static from(t,e){return new Ss(Ps,t,e)}static uint8(t){return xs(t,8)}static uint16(t){return xs(t,16)}static uint24(t){return xs(t,24)}static uint32(t){return xs(t,32)}static uint40(t){return xs(t,40)}static uint48(t){return xs(t,46)}static uint56(t){return xs(t,56)}static uint64(t){return xs(t,64)}static uint72(t){return xs(t,72)}static uint80(t){return xs(t,80)}static uint88(t){return xs(t,88)}static uint96(t){return xs(t,96)}static uint104(t){return xs(t,104)}static uint112(t){return xs(t,112)}static uint120(t){return xs(t,120)}static uint128(t){return xs(t,128)}static uint136(t){return xs(t,136)}static uint144(t){return xs(t,144)}static uint152(t){return xs(t,152)}static uint160(t){return xs(t,160)}static uint168(t){return xs(t,168)}static uint176(t){return xs(t,176)}static uint184(t){return xs(t,184)}static uint192(t){return xs(t,192)}static uint200(t){return xs(t,200)}static uint208(t){return xs(t,208)}static uint216(t){return xs(t,216)}static uint224(t){return xs(t,224)}static uint232(t){return xs(t,232)}static uint240(t){return xs(t,240)}static uint248(t){return xs(t,248)}static uint256(t){return xs(t,256)}static uint(t){return xs(t,256)}static int8(t){return xs(t,-8)}static int16(t){return xs(t,-16)}static int24(t){return xs(t,-24)}static int32(t){return xs(t,-32)}static int40(t){return xs(t,-40)}static int48(t){return xs(t,-46)}static int56(t){return xs(t,-56)}static int64(t){return xs(t,-64)}static int72(t){return xs(t,-72)}static int80(t){return xs(t,-80)}static int88(t){return xs(t,-88)}static int96(t){return xs(t,-96)}static int104(t){return xs(t,-104)}static int112(t){return xs(t,-112)}static int120(t){return xs(t,-120)}static int128(t){return xs(t,-128)}static int136(t){return xs(t,-136)}static int144(t){return xs(t,-144)}static int152(t){return xs(t,-152)}static int160(t){return xs(t,-160)}static int168(t){return xs(t,-168)}static int176(t){return xs(t,-176)}static int184(t){return xs(t,-184)}static int192(t){return xs(t,-192)}static int200(t){return xs(t,-200)}static int208(t){return xs(t,-208)}static int216(t){return xs(t,-216)}static int224(t){return xs(t,-224)}static int232(t){return xs(t,-232)}static int240(t){return xs(t,-240)}static int248(t){return xs(t,-248)}static int256(t){return xs(t,-256)}static int(t){return xs(t,-256)}static bytes(t){return Os(t)}static bytes1(t){return Os(t,1)}static bytes2(t){return Os(t,2)}static bytes3(t){return Os(t,3)}static bytes4(t){return Os(t,4)}static bytes5(t){return Os(t,5)}static bytes6(t){return Os(t,6)}static bytes7(t){return Os(t,7)}static bytes8(t){return Os(t,8)}static bytes9(t){return Os(t,9)}static bytes10(t){return Os(t,10)}static bytes11(t){return Os(t,11)}static bytes12(t){return Os(t,12)}static bytes13(t){return Os(t,13)}static bytes14(t){return Os(t,14)}static bytes15(t){return Os(t,15)}static bytes16(t){return Os(t,16)}static bytes17(t){return Os(t,17)}static bytes18(t){return Os(t,18)}static bytes19(t){return Os(t,19)}static bytes20(t){return Os(t,20)}static bytes21(t){return Os(t,21)}static bytes22(t){return Os(t,22)}static bytes23(t){return Os(t,23)}static bytes24(t){return Os(t,24)}static bytes25(t){return Os(t,25)}static bytes26(t){return Os(t,26)}static bytes27(t){return Os(t,27)}static bytes28(t){return Os(t,28)}static bytes29(t){return Os(t,29)}static bytes30(t){return Os(t,30)}static bytes31(t){return Os(t,31)}static bytes32(t){return Os(t,32)}static address(t){return new Ss(Ps,"address",t)}static bool(t){return new Ss(Ps,"bool",!!t)}static string(t){return new Ss(Ps,"string",t)}static array(t,e){throw new Error("not implemented yet")}static tuple(t,e){throw new Error("not implemented yet")}static overrides(t){return new Ss(Ps,"overrides",Object.assign({},t))}static isTyped(t){return t&&t._typedSymbol===Is}static dereference(t,e){if(Ss.isTyped(t)){if(t.type!==e)throw new Error(`invalid type: expecetd ${e}, got ${t.type}`);return t.value}return t}}ks=new WeakMap;class Rs extends Ce{constructor(t){super("address","address",t,!1)}defaultValue(){return"0x0000000000000000000000000000000000000000"}encode(t,e){let r=Ss.dereference(e,"string");try{r=as(r)}catch(t){return this._throwError(t.message,e)}return t.writeValue(r)}decode(t){return as(vt(t.readValue(),20))}}class _s extends Ce{constructor(t){super(t.name,t.type,"_",t.dynamic),this.coder=t}defaultValue(){return this.coder.defaultValue()}encode(t,e){return this.coder.encode(t,e)}decode(t){return this.coder.decode(t)}}function Cs(t,e,r){let n=[];if(Array.isArray(r))n=r;else if(r&&"object"==typeof r){let t={};n=e.map((e=>{const n=e.localName;return n||N.throwError("cannot encode object for signature with missing names","INVALID_ARGUMENT",{argument:"values",info:{coder:e},value:r}),t[n]&&N.throwError("cannot encode object for signature with duplicate names","INVALID_ARGUMENT",{argument:"values",info:{coder:e},value:r}),t[n]=!0,r[n]}))}else N.throwArgumentError("invalid tuple value","tuple",r);e.length!==n.length&&N.throwArgumentError("types/value length mismatch","tuple",r);let s=new Be,i=new Be,o=[];e.forEach(((t,e)=>{let r=n[e];if(t.dynamic){let e=i.length;t.encode(i,r);let n=s.writeUpdatableValue();o.push((t=>{n(t+e)}))}else t.encode(s,r)})),o.forEach((t=>{t(s.length)}));let a=t.appendWriter(s);return a+=t.appendWriter(i),a}function Bs(t,e){let r=[],n=[],s=t.subReader(0);return e.forEach((e=>{let i=null;if(e.dynamic){let r=t.readIndex(),n=s.subReader(r);try{i=e.decode(n)}catch(t){if(l(t,"BUFFER_OVERRUN"))throw t;i=t,i.baseType=e.name,i.name=e.localName,i.type=e.type}}else try{i=e.decode(t)}catch(t){if(l(t,"BUFFER_OVERRUN"))throw t;i=t,i.baseType=e.name,i.name=e.localName,i.type=e.type}if(null==i)throw new Error("investigate");r.push(i),n.push(e.localName||null)})),Re.fromItems(r,n)}class Fs extends Ce{constructor(t,e,n){super("array",t.type+"["+(e>=0?e:"")+"]",n,-1===e||t.dynamic),r(this,{coder:t,length:e})}defaultValue(){const t=this.coder.defaultValue(),e=[];for(let r=0;rt.dataLength&&N.throwError("insufficient data length","BUFFER_OVERRUN",{buffer:t.bytes,offset:32*e,length:t.dataLength}));let r=[];for(let t=0;tt||r<-(t+Ws))&&this._throwError("value out-of-bounds",e)}else(r<$s||r>Pt(n,8*this.size))&&this._throwError("value out-of-bounds",e);return r=Pt(Nt(r,8*this.size),8*this.size),this.signed&&(r=Nt(At(r,8*this.size),256)),t.writeValue(r)}decode(t){let e=Pt(t.readValue(),8*this.size);return this.signed&&(e=At(e,8*this.size)),t.coerce(this.name,e)}}const Vs=new A("@ethersproject/strings@6.0.0-beta.1");var Ks,Js;function qs(t,e,r,n,s){if(t===Js.BAD_PREFIX||t===Js.UNEXPECTED_CONTINUE){let t=0;for(let n=e+1;n>6==2;n++)t++;return t}return t===Js.OVERRUN?r.length-e-1:0}!function(t){t.current="",t.NFC="NFC",t.NFD="NFD",t.NFKC="NFKC",t.NFKD="NFKD"}(Ks||(Ks={})),function(t){t.UNEXPECTED_CONTINUE="unexpected continuation byte",t.BAD_PREFIX="bad codepoint prefix",t.OVERRUN="string overrun",t.MISSING_CONTINUE="missing continuation byte",t.OUT_OF_RANGE="out of UTF-8 range",t.UTF16_SURROGATE="UTF-16 surrogate",t.OVERLONG="overlong representation"}(Js||(Js={}));const Xs=Object.freeze({error:function(t,e,r,n,s){return Vs.throwArgumentError(`invalid codepoint at offset ${e}; ${t}`,"bytes",r)},ignore:qs,replace:function(t,e,r,n,s){return t===Js.OVERLONG?(n.push(null!=s?s:-1),0):(n.push(65533),qs(t,e,r))}});function Ys(t,e){null==e&&(e=Xs.error);const r=Vs.getBytes(t,"bytes"),n=[];let s=0;for(;s>7==0){n.push(t);continue}let i=null,o=null;if(192==(224&t))i=1,o=127;else if(224==(240&t))i=2,o=2047;else{if(240!=(248&t)){s+=e(128==(192&t)?Js.UNEXPECTED_CONTINUE:Js.BAD_PREFIX,s-1,r,n);continue}i=3,o=65535}if(s-1+i>=r.length){s+=e(Js.OVERRUN,s-1,r,n);continue}let a=t&(1<<8-i-1)-1;for(let t=0;t1114111?s+=e(Js.OUT_OF_RANGE,s-1-i,r,n,a):a>=55296&&a<=57343?s+=e(Js.UTF16_SURROGATE,s-1-i,r,n,a):a<=o?s+=e(Js.OVERLONG,s-1-i,r,n,a):n.push(a))}return n}function Zs(t,e=Ks.current){e!=Ks.current&&(Vs.assertNormalize(e),t=t.normalize(e));let r=[];for(let e=0;e>6|192),r.push(63&n|128);else if(55296==(64512&n)){e++;const s=t.charCodeAt(e);if(e>=t.length||56320!=(64512&s))throw new Error("invalid utf-8 string");const i=65536+((1023&n)<<10)+(1023&s);r.push(i>>18|240),r.push(i>>12&63|128),r.push(i>>6&63|128),r.push(63&i|128)}else r.push(n>>12|224),r.push(n>>6&63|128),r.push(63&n|128)}return new Uint8Array(r)}function Qs(t){const e="0000"+t.toString(16);return"\\u"+e.substring(e.length-4)}function ti(t,e){return'"'+Ys(t,e).map((t=>{if(t<256){switch(t){case 8:return"\\b";case 9:return"\\t";case 10:return"\\n";case 13:return"\\r";case 34:return'\\"';case 92:return"\\\\"}if(t>=32&&t<127)return String.fromCharCode(t)}return t<=65535?Qs(t):Qs(55296+((t-=65536)>>10&1023))+Qs(56320+(1023&t))})).join("")+'"'}function ei(t){return t.map((t=>t<=65535?String.fromCharCode(t):(t-=65536,String.fromCharCode(55296+(t>>10&1023),56320+(1023&t))))).join("")}function ri(t,e){return ei(Ys(t,e))}function ni(t,e=Ks.current){return Ys(Zs(t,e))}function si(t){const e=Zs(t);if(e.length>31)throw new Error("bytes32 string must be less than 32 bytes");return de(e,32)}function ii(t){const e=Vs.getBytes(t,"bytes");if(32!==e.length)throw new Error("invalid bytes32 - not 32 bytes long");if(0!==e[31])throw new Error("invalid bytes32 string - no null terminator");let r=31;for(;0===e[r-1];)r--;return ri(e.slice(0,r))}function oi(t,e){const r=e||function(t){return[parseInt(t,16)]};let n=0,s={};return t.split(",").forEach((t=>{let e=t.split(":");n+=parseInt(e[0],16),s[n]=r(e[1])})),s}function ai(t){let e=0;return t.split(",").map((t=>{let r=t.split("-");1===r.length?r[1]="0":""===r[1]&&(r[1]="1");let n=e+parseInt(r[0],16);return e=parseInt(r[1],16),{l:n,h:e}}))}function ci(t,e){let r=0;for(let n=0;n=r&&t<=r+s.h&&(t-r)%(s.d||1)==0){if(s.e&&-1!==s.e.indexOf(t-r))continue;return s}}return null}const li=ai("221,13-1b,5f-,40-10,51-f,11-3,3-3,2-2,2-4,8,2,15,2d,28-8,88,48,27-,3-5,11-20,27-,8,28,3-5,12,18,b-a,1c-4,6-16,2-d,2-2,2,1b-4,17-9,8f-,10,f,1f-2,1c-34,33-14e,4,36-,13-,6-2,1a-f,4,9-,3-,17,8,2-2,5-,2,8-,3-,4-8,2-3,3,6-,16-6,2-,7-3,3-,17,8,3,3,3-,2,6-3,3-,4-a,5,2-6,10-b,4,8,2,4,17,8,3,6-,b,4,4-,2-e,2-4,b-10,4,9-,3-,17,8,3-,5-,9-2,3-,4-7,3-3,3,4-3,c-10,3,7-2,4,5-2,3,2,3-2,3-2,4-2,9,4-3,6-2,4,5-8,2-e,d-d,4,9,4,18,b,6-3,8,4,5-6,3-8,3-3,b-11,3,9,4,18,b,6-3,8,4,5-6,3-6,2,3-3,b-11,3,9,4,18,11-3,7-,4,5-8,2-7,3-3,b-11,3,13-2,19,a,2-,8-2,2-3,7,2,9-11,4-b,3b-3,1e-24,3,2-,3,2-,2-5,5,8,4,2,2-,3,e,4-,6,2,7-,b-,3-21,49,23-5,1c-3,9,25,10-,2-2f,23,6,3,8-2,5-5,1b-45,27-9,2a-,2-3,5b-4,45-4,53-5,8,40,2,5-,8,2,5-,28,2,5-,20,2,5-,8,2,5-,8,8,18,20,2,5-,8,28,14-5,1d-22,56-b,277-8,1e-2,52-e,e,8-a,18-8,15-b,e,4,3-b,5e-2,b-15,10,b-5,59-7,2b-555,9d-3,5b-5,17-,7-,27-,7-,9,2,2,2,20-,36,10,f-,7,14-,4,a,54-3,2-6,6-5,9-,1c-10,13-1d,1c-14,3c-,10-6,32-b,240-30,28-18,c-14,a0,115-,3,66-,b-76,5,5-,1d,24,2,5-2,2,8-,35-2,19,f-10,1d-3,311-37f,1b,5a-b,d7-19,d-3,41,57-,68-4,29-3,5f,29-37,2e-2,25-c,2c-2,4e-3,30,78-3,64-,20,19b7-49,51a7-59,48e-2,38-738,2ba5-5b,222f-,3c-94,8-b,6-4,1b,6,2,3,3,6d-20,16e-f,41-,37-7,2e-2,11-f,5-b,18-,b,14,5-3,6,88-,2,bf-2,7-,7-,7-,4-2,8,8-9,8-2ff,20,5-b,1c-b4,27-,27-cbb1,f7-9,28-2,b5-221,56,48,3-,2-,3-,5,d,2,5,3,42,5-,9,8,1d,5,6,2-2,8,153-3,123-3,33-27fd,a6da-5128,21f-5df,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3,2-1d,61-ff7d"),ui="ad,34f,1806,180b,180c,180d,200b,200c,200d,2060,feff".split(",").map((t=>parseInt(t,16))),hi=[{h:25,s:32,l:65},{h:30,s:32,e:[23],l:127},{h:54,s:1,e:[48],l:64,d:2},{h:14,s:1,l:57,d:2},{h:44,s:1,l:17,d:2},{h:10,s:1,e:[2,6,8],l:61,d:2},{h:16,s:1,l:68,d:2},{h:84,s:1,e:[18,24,66],l:19,d:2},{h:26,s:32,e:[17],l:435},{h:22,s:1,l:71,d:2},{h:15,s:80,l:40},{h:31,s:32,l:16},{h:32,s:1,l:80,d:2},{h:52,s:1,l:42,d:2},{h:12,s:1,l:55,d:2},{h:40,s:1,e:[38],l:15,d:2},{h:14,s:1,l:48,d:2},{h:37,s:48,l:49},{h:148,s:1,l:6351,d:2},{h:88,s:1,l:160,d:2},{h:15,s:16,l:704},{h:25,s:26,l:854},{h:25,s:32,l:55915},{h:37,s:40,l:1247},{h:25,s:-119711,l:53248},{h:25,s:-119763,l:52},{h:25,s:-119815,l:52},{h:25,s:-119867,e:[1,4,5,7,8,11,12,17],l:52},{h:25,s:-119919,l:52},{h:24,s:-119971,e:[2,7,8,17],l:52},{h:24,s:-120023,e:[2,7,13,15,16,17],l:52},{h:25,s:-120075,l:52},{h:25,s:-120127,l:52},{h:25,s:-120179,l:52},{h:25,s:-120231,l:52},{h:25,s:-120283,l:52},{h:25,s:-120335,l:52},{h:24,s:-119543,e:[17],l:56},{h:24,s:-119601,e:[17],l:58},{h:24,s:-119659,e:[17],l:58},{h:24,s:-119717,e:[17],l:58},{h:24,s:-119775,e:[17],l:58}],fi=oi("b5:3bc,c3:ff,7:73,2:253,5:254,3:256,1:257,5:259,1:25b,3:260,1:263,2:269,1:268,5:26f,1:272,2:275,7:280,3:283,5:288,3:28a,1:28b,5:292,3f:195,1:1bf,29:19e,125:3b9,8b:3b2,1:3b8,1:3c5,3:3c6,1:3c0,1a:3ba,1:3c1,1:3c3,2:3b8,1:3b5,1bc9:3b9,1c:1f76,1:1f77,f:1f7a,1:1f7b,d:1f78,1:1f79,1:1f7c,1:1f7d,107:63,5:25b,4:68,1:68,1:68,3:69,1:69,1:6c,3:6e,4:70,1:71,1:72,1:72,1:72,7:7a,2:3c9,2:7a,2:6b,1:e5,1:62,1:63,3:65,1:66,2:6d,b:3b3,1:3c0,6:64,1b574:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3"),di=oi("179:1,2:1,2:1,5:1,2:1,a:4f,a:1,8:1,2:1,2:1,3:1,5:1,3:1,4:1,2:1,3:1,4:1,8:2,1:1,2:2,1:1,2:2,27:2,195:26,2:25,1:25,1:25,2:40,2:3f,1:3f,33:1,11:-6,1:-9,1ac7:-3a,6d:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,b:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,c:-8,2:-8,2:-8,2:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,49:-8,1:-8,1:-4a,1:-4a,d:-56,1:-56,1:-56,1:-56,d:-8,1:-8,f:-8,1:-8,3:-7"),pi=oi("df:00730073,51:00690307,19:02BC006E,a7:006A030C,18a:002003B9,16:03B903080301,20:03C503080301,1d7:05650582,190f:00680331,1:00740308,1:0077030A,1:0079030A,1:006102BE,b6:03C50313,2:03C503130300,2:03C503130301,2:03C503130342,2a:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,3:1F7003B9,1:03B103B9,1:03AC03B9,2:03B10342,1:03B1034203B9,5:03B103B9,6:1F7403B9,1:03B703B9,1:03AE03B9,2:03B70342,1:03B7034203B9,5:03B703B9,6:03B903080300,1:03B903080301,3:03B90342,1:03B903080342,b:03C503080300,1:03C503080301,1:03C10313,2:03C50342,1:03C503080342,b:1F7C03B9,1:03C903B9,1:03CE03B9,2:03C90342,1:03C9034203B9,5:03C903B9,ac:00720073,5b:00B00063,6:00B00066,d:006E006F,a:0073006D,1:00740065006C,1:0074006D,124f:006800700061,2:00610075,2:006F0076,b:00700061,1:006E0061,1:03BC0061,1:006D0061,1:006B0061,1:006B0062,1:006D0062,1:00670062,3:00700066,1:006E0066,1:03BC0066,4:0068007A,1:006B0068007A,1:006D0068007A,1:00670068007A,1:00740068007A,15:00700061,1:006B00700061,1:006D00700061,1:006700700061,8:00700076,1:006E0076,1:03BC0076,1:006D0076,1:006B0076,1:006D0076,1:00700077,1:006E0077,1:03BC0077,1:006D0077,1:006B0077,1:006D0077,1:006B03C9,1:006D03C9,2:00620071,3:00632215006B0067,1:0063006F002E,1:00640062,1:00670079,2:00680070,2:006B006B,1:006B006D,9:00700068,2:00700070006D,1:00700072,2:00730076,1:00770062,c723:00660066,1:00660069,1:0066006C,1:006600660069,1:00660066006C,1:00730074,1:00730074,d:05740576,1:05740565,1:0574056B,1:057E0576,1:0574056D",(function(t){if(t.length%4!=0)throw new Error("should not happen; bad data");let e=[];for(let r=0;r{if(ui.indexOf(t)>=0)return[];if(t>=65024&&t<=65039)return[];let e=function(t){const e=ci(t,hi);if(e){if(null==e.s)throw new Error("should not happenl bad range");return[t+e.s]}const r=fi[t];if(r)return r;const n=di[t];return n?[t+n[0]]:pi[t]||null}(t);return e||[t]})),e=r.reduce(((t,e)=>(e.forEach((e=>{t.push(e)})),t)),[]),e=ni(ei(e),Ks.NFKC),e.forEach((e=>{ci(e,wi)&&Vs.throwArgumentError("STRINGPREP_CONTAINS_PROHIBITED","value",t)})),e.forEach((e=>{ci(e,li)&&Vs.throwArgumentError("STRINGPREP_CONTAINS_UNASSIGNED","value",t)}));let n=ei(e);return"-"!==n.substring(0,1)&&"--"!==n.substring(2,4)&&"-"!==n.substring(n.length-1)||Vs.throwArgumentError("invalid hyphen","value",t),n.length>63&&Vs.throwArgumentError("too long","value",t),n}class mi extends Ls{constructor(t){super("string",t)}defaultValue(){return""}encode(t,e){return super.encode(t,Zs(Ss.dereference(e,"string")))}decode(t){return ri(super.decode(t))}}class yi extends Ce{constructor(t,e){let n=!1;const s=[];t.forEach((t=>{t.dynamic&&(n=!0),s.push(t.type)}));super("tuple","tuple("+s.join(",")+")",e,n),r(this,{coders:Object.freeze(t.slice())})}defaultValue(){const t=[];this.coders.forEach((e=>{t.push(e.defaultValue())}));const e=this.coders.reduce(((t,e)=>{const r=e.localName;return r&&(t[r]||(t[r]=0),t[r]++),t}),{});return this.coders.forEach(((r,n)=>{let s=r.localName;s&&1===e[s]&&("length"===s&&(s="_length"),null==t[s]&&(t[s]=t[n]))})),Object.freeze(t)}encode(t,e){const r=Ss.dereference(e,"tuple");return Cs(t,this.coders,r)}decode(t){return t.coerce(this.name,Bs(t,this.coders))}}var bi,vi,Ei=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const Ti=new RegExp(/^bytes([0-9]*)$/),ki=new RegExp(/^(u?int)([0-9]*)$/);bi=new WeakSet,vi=function t(e){if(e.isArray())return new Fs(Ei(this,bi,"m",t).call(this,e.arrayChildren),e.arrayLength,e.name);if(e.isTuple())return new yi(e.components.map((e=>Ei(this,bi,"m",t).call(this,e))),e.name);switch(e.baseType){case"address":return new Rs(e.name);case"bool":return new Us(e.name);case"string":return new mi(e.name);case"bytes":return new Ds(e.name);case"":return new Gs(e.name)}let r=e.type.match(ki);if(r){let t=parseInt(r[2]||"256");return(0===t||t>256||t%8!=0)&&N.throwArgumentError("invalid "+r[1]+" bit length","param",e),new Hs(t/8,"int"===r[1],e.name)}if(r=e.type.match(Ti),r){let t=parseInt(r[1]);return(0===t||t>32)&&N.throwArgumentError("invalid bytes length","param",e),new Ms(t,e.name)}return N.throwArgumentError("invalid type","type",e.type)};const Ai=new class{constructor(t){bi.add(this),r(this,{coerceFunc:t},{},{coerceFunc:null})}getDefaultValue(t){const e=t.map((t=>Ei(this,bi,"m",vi).call(this,ot.from(t))));return new yi(e,"_").defaultValue()}encode(t,e){N.assertArgumentCount(e.length,t.length,"types/values length mismatch");const r=t.map((t=>Ei(this,bi,"m",vi).call(this,ot.from(t)))),n=new yi(r,"_"),s=new Be;return n.encode(s,e),s.data}decode(t,e,r){const n=t.map((t=>Ei(this,bi,"m",vi).call(this,ot.from(t))));return new yi(n,"_").decode(new Fe(e,this.coerceFunc,r))}};function Ni(t){return nn(Zs(t))}const Pi=new A("@ethersproject/hash@6.0.0-beta.1"),xi=new Uint8Array(32);xi.fill(0);const Oi=new RegExp("^((.*)\\.)?([^.]+)$");function Ii(t){try{const e=t.split(".");for(let t=0;t{""===e&&Pi.throwArgumentError("invalid DNS name; missing component","name",t);const r=Zs("_"+gi(e));return r[0]=r.length-1,r})))+"00"}const _i="Ethereum Signed Message:\n";function Ci(t){return"string"==typeof t&&(t=Zs(t)),nn(ae([Zs(_i),Zs(String(t.length)),t]))}var Bi,Fi,Ui,Li,Di,Mi=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},ji=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const Gi=new Uint8Array(32);Gi.fill(0);const $i=BigInt(-1),Wi=BigInt(0),zi=BigInt(1),Hi=BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");const Vi=vt(zi,32),Ki=vt(Wi,32),Ji={name:"string",version:"string",chainId:"uint256",verifyingContract:"address",salt:"bytes32"},qi=["name","version","chainId","verifyingContract","salt"];function Xi(t){return function(e){return"string"!=typeof e&&Pi.throwArgumentError(`invalid domain value for ${JSON.stringify(t)}`,`domain.${t}`,e),e}}const Yi={name:Xi("name"),version:Xi("version"),chainId:function(t){return Pi.getBigInt(t,"domain.chainId")},verifyingContract:function(t){try{return as(t).toLowerCase()}catch(t){}return Pi.throwArgumentError('invalid domain value "verifyingContract"',"domain.verifyingContract",t)},salt:function(t){const e=Pi.getBytes(t,"domain.salt");return 32!==e.length&&Pi.throwArgumentError('invalid domain value "salt"',"domain.salt",t),ie(e)}};function Zi(t){{const e=t.match(/^(u?)int(\d*)$/);if(e){const r=""===e[1],n=parseInt(e[2]||"256");(n%8!=0||n>256||e[2]&&e[2]!==String(n))&&Pi.throwArgumentError("invalid numeric width","type",t);const s=Pt(Hi,r?n-1:n),i=r?(s+zi)*$i:Wi;return function(e){const r=Pi.getBigInt(e,"value");return(rs)&&Pi.throwArgumentError(`value out-of-bounds for ${t}`,"value",r),vt(Nt(r,256),32)}}}{const e=t.match(/^bytes(\d+)$/);if(e){const r=parseInt(e[1]);return(0===r||r>32||e[1]!==String(r))&&Pi.throwArgumentError("invalid bytes width","type",t),function(e){return ee(e).length!==r&&Pi.throwArgumentError(`invalid length for ${t}`,"value",e),function(t){const e=ee(t),r=e.length%32;return r?ae([e,Gi.slice(r)]):ie(e)}(e)}}}switch(t){case"address":return function(t){return fe(as(t),32)};case"bool":return function(t){return t?Vi:Ki};case"bytes":return function(t){return nn(t)};case"string":return function(t){return Ni(t)}}return null}function Qi(t,e){return`${t}(${e.map((({name:t,type:e})=>e+" "+t)).join(",")})`}class to{constructor(t){Bi.add(this),Fi.set(this,void 0),Ui.set(this,void 0),Li.set(this,void 0),Mi(this,Fi,JSON.stringify(t),"f"),Mi(this,Ui,new Map,"f"),Mi(this,Li,new Map,"f");const e=new Map,n=new Map,s=new Map;Object.keys(t).forEach((t=>{e.set(t,new Set),n.set(t,[]),s.set(t,new Set)}));for(const r in t){const s=new Set;for(const i of t[r]){s.has(i.name)&&Pi.throwArgumentError(`duplicate variable name ${JSON.stringify(i.name)} in ${JSON.stringify(r)}`,"types",t),s.add(i.name);const o=i.type.match(/^([^\x5b]*)(\x5b|$)/)[1]||null;o===r&&Pi.throwArgumentError(`circular type reference to ${JSON.stringify(o)}`,"types",t);Zi(o)||(n.has(o)||Pi.throwArgumentError(`unknown type ${JSON.stringify(o)}`,"types",t),n.get(o).push(r),e.get(r).add(o))}}const i=Array.from(n.keys()).filter((t=>0===n.get(t).length));0===i.length?Pi.throwArgumentError("missing primary type","types",t):i.length>1&&Pi.throwArgumentError(`ambiguous primary types or unused types: ${i.map((t=>JSON.stringify(t))).join(", ")}`,"types",t),r(this,{primaryType:i[0]}),function r(i,o){o.has(i)&&Pi.throwArgumentError(`circular type reference to ${JSON.stringify(i)}`,"types",t),o.add(i);for(const t of e.get(i))if(n.has(t)){r(t,o);for(const e of o)s.get(e).add(t)}o.delete(i)}(this.primaryType,new Set);for(const[e,r]of s){const n=Array.from(r);n.sort(),ji(this,Ui,"f").set(e,Qi(e,t[e])+n.map((e=>Qi(e,t[e]))).join(""))}}get types(){return JSON.parse(ji(this,Fi,"f"))}getEncoder(t){let e=ji(this,Li,"f").get(t);return e||(e=ji(this,Bi,"m",Di).call(this,t),ji(this,Li,"f").set(t,e)),e}encodeType(t){const e=ji(this,Ui,"f").get(t);return e||Pi.throwArgumentError(`unknown type: ${JSON.stringify(t)}`,"name",t)}encodeData(t,e){return this.getEncoder(t)(e)}hashStruct(t,e){return nn(this.encodeData(t,e))}encode(t){return this.encodeData(this.primaryType,t)}hash(t){return this.hashStruct(this.primaryType,t)}_visit(t,e,r){if(Zi(t))return r(t,e);const n=t.match(/^(.*)(\x5b(\d*)\x5d)$/);if(n){const t=n[1],s=parseInt(n[3]);return s>=0&&e.length!==s&&Pi.throwArgumentError("array length mismatch; expected length ${ arrayLength }","value",e),e.map((e=>this._visit(t,e,r)))}const s=this.types[t];return s?s.reduce(((t,{name:n,type:s})=>(t[n]=this._visit(s,e[n],r),t)),{}):Pi.throwArgumentError(`unknown type: ${t}`,"type",t)}visit(t,e){return this._visit(this.primaryType,t,e)}static from(t){return new to(t)}static getPrimaryType(t){return to.from(t).primaryType}static hashStruct(t,e,r){return to.from(e).hashStruct(t,r)}static hashDomain(t){const e=[];for(const r in t){const n=Ji[r];n||Pi.throwArgumentError(`invalid typed-data domain key: ${JSON.stringify(r)}`,"domain",t),e.push({name:r,type:n})}return e.sort(((t,e)=>qi.indexOf(t.name)-qi.indexOf(e.name))),to.hashStruct("EIP712Domain",{EIP712Domain:e},t)}static encode(t,e,r){return ae(["0x1901",to.hashDomain(t),to.from(e).hash(r)])}static hash(t,e,r){return nn(to.encode(t,e,r))}static async resolveNames(t,e,r,n){t=Object.assign({},t);const s={};t.verifyingContract&&!Xt(t.verifyingContract,20)&&(s[t.verifyingContract]="0x");const i=to.from(e);i.visit(r,((t,e)=>("address"!==t||Xt(e,20)||(s[e]="0x"),e)));for(const t in s)s[t]=await n(t);return t.verifyingContract&&s[t.verifyingContract]&&(t.verifyingContract=s[t.verifyingContract]),{domain:t,value:r=i.visit(r,((t,e)=>"address"===t&&s[e]?s[e]:e))}}static getPayload(t,e,r){to.hashDomain(t);const n={},s=[];qi.forEach((e=>{const r=t[e];null!=r&&(n[e]=Yi[e](r),s.push({name:e,type:Ji[e]}))}));const i=to.from(e),o=Object.assign({},e);return o.EIP712Domain?Pi.throwArgumentError("types must not contain EIP712Domain type","types.EIP712Domain",e):o.EIP712Domain=s,i.encode(r),{types:o,domain:n,primaryType:i.primaryType,message:i.visit(r,((t,e)=>{if(t.match(/^bytes(\d*)/))return ie(Pi.getBytes(e));if(t.match(/^u?int/))return Pi.getBigInt(e).toString();switch(t){case"address":return e.toLowerCase();case"bool":return!!e;case"string":return"string"!=typeof e&&Pi.throwArgumentError("invalid string","value",e),e}return Pi.throwArgumentError("unsupported type","type",t)}))}}}Fi=new WeakMap,Ui=new WeakMap,Li=new WeakMap,Bi=new WeakSet,Di=function(t){{const e=Zi(t);if(e)return e}const e=t.match(/^(.*)(\x5b(\d*)\x5d)$/);if(e){const t=e[1],r=this.getEncoder(t),n=parseInt(e[3]);return e=>{n>=0&&e.length!==n&&Pi.throwArgumentError("array length mismatch; expected length ${ arrayLength }","value",e);let s=e.map(r);return ji(this,Ui,"f").has(t)&&(s=s.map(nn)),nn(ae(s))}}const r=this.types[t];if(r){const e=Ni(ji(this,Ui,"f").get(t));return t=>{const n=r.map((({name:e,type:r})=>{const n=this.getEncoder(r)(t[e]);return ji(this,Ui,"f").has(r)?nn(n):n}));return n.unshift(e),ae(n)}}return Pi.throwArgumentError(`unknown type: ${t}`,"type",t)};var eo,ro,no,so,io,oo,ao,co=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},lo=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class uo{constructor(t,e,n){const s=t.name,i=t.format();r(this,{fragment:t,name:s,signature:i,topic:e,args:n})}}class ho{constructor(t,e,n,s){const i=t.name,o=t.format();r(this,{fragment:t,name:i,args:n,signature:o,selector:e,value:s})}}class fo{constructor(t,e,n){const s=t.name,i=t.format();r(this,{fragment:t,name:s,args:n,signature:i,selector:e})}}class po{constructor(t){r(this,{hash:t,_isIndexed:!0})}static isIndexed(t){return!(!t||!t._isIndexed)}}const wo={0:"generic panic",1:"assert(false)",17:"arithmetic overflow",18:"division or modulo by zero",33:"enum overflow",34:"invalid encoded storage byte array accessed",49:"out-of-bounds array access; popping on an empty array",50:"out-of-bounds access of an array or bytesN",65:"out of memory",81:"uninitialized function"},go={"0x08c379a0":{signature:"Error(string)",name:"Error",inputs:["string"],reason:t=>`reverted with reason string ${JSON.stringify(t)}`},"0x4e487b71":{signature:"Panic(uint256)",name:"Panic",inputs:["uint256"],reason:t=>{let e="unknown panic code";return t>=0&&t<=255&&wo[t.toString()]&&(e=wo[t.toString()]),`reverted with panic code 0x${t.toString(16)} (${e})`}}};class mo{constructor(t){eo.add(this),ro.set(this,void 0),no.set(this,void 0),so.set(this,void 0),io.set(this,void 0);let e=[];e="string"==typeof t?JSON.parse(t):t,co(this,so,new Map,"f"),co(this,ro,new Map,"f"),co(this,no,new Map,"f"),r(this,{fragments:Object.freeze(e.map((t=>ct.from(t))).filter((t=>null!=t)))}),co(this,io,this.getAbiCoder(),"f"),this.fragments.forEach((t=>{let e;switch(t.type){case"constructor":return this.deploy?void N.warn("duplicate definition - constructor"):void r(this,{deploy:t});case"function":e=lo(this,so,"f");break;case"event":e=lo(this,no,"f");break;case"error":e=lo(this,ro,"f");break;default:return}const n=t.format();e.has(n)?N.warn("duplicate definition - "+n):e.set(n,t)})),this.deploy||r(this,{deploy:dt.fromString("constructor()")})}format(t){t||(t=_.full),t===_.sighash&&N.throwArgumentError("interface does not support formatting sighash","format",t);const e=this.fragments.map((e=>e.format(t)));return t===_.json?JSON.stringify(e.map((t=>JSON.parse(t)))):e}getAbiCoder(){return Ai}getFunctionName(t){return lo(this,eo,"m",oo).call(this,t,null,!1).name}getFunction(t,e){return lo(this,eo,"m",oo).call(this,t,e||null,!0)}getEventName(t){return lo(this,eo,"m",ao).call(this,t,null,!1).name}getEvent(t,e){return lo(this,eo,"m",ao).call(this,t,e||null,!0)}getError(t,e){if(Xt(t)){const e=t.toLowerCase();for(const t of lo(this,ro,"f").values())if(e===this.getSelector(t))return t;N.throwArgumentError("no matching error","selector",t)}if(-1===t.indexOf("(")){const e=[];for(const[r,n]of lo(this,ro,"f"))r.split("(")[0]===t&&e.push(n);return 0===e.length?N.throwArgumentError("no matching error","name",t):e.length>1&&N.throwArgumentError("multiple matching errors","name",t),e[0]}const r=lo(this,ro,"f").get(ht.fromString(t).format());return r||N.throwArgumentError("no matching error","signature",t)}getSelector(t){return le(Ni(t.format()),0,4)}getEventTopic(t){return Ni(t.format())}_decodeParams(t,e){return lo(this,io,"f").decode(t,e)}_encodeParams(t,e){return lo(this,io,"f").encode(t,e)}encodeDeploy(t){return this._encodeParams(this.deploy.inputs,t||[])}decodeErrorResult(t,e){return"string"==typeof t&&(t=this.getError(t)),le(e,0,4)!==this.getSelector(t)&&N.throwArgumentError(`data signature does not match error ${t.name}.`,"data",e),this._decodeParams(t.inputs,le(e,4))}encodeErrorResult(t,e){return"string"==typeof t&&(t=this.getError(t)),ae([this.getSelector(t),this._encodeParams(t.inputs,e||[])])}decodeFunctionData(t,e){return"string"==typeof t&&(t=this.getFunction(t)),le(e,0,4)!==this.getSelector(t)&&N.throwArgumentError(`data signature does not match function ${t.name}.`,"data",e),this._decodeParams(t.inputs,le(e,4))}encodeFunctionData(t,e){return"string"==typeof t&&(t=this.getFunction(t)),ae([this.getSelector(t),this._encodeParams(t.inputs,e||[])])}decodeFunctionResult(t,e){"string"==typeof t&&(t=this.getFunction(t));let r="invalid length for result data";const n=ee(e);if(n.length%32==0)try{return lo(this,io,"f").decode(t.outputs,n)}catch(t){r="could not decode result data"}return N.throwError(r,"BAD_DATA",{value:ie(n),info:{method:t.name,signature:t.format()}})}makeError(t,e,r){"string"==typeof t&&(t=this.getFunction(t));const n=N.getBytes(e);let s,i,o,a;if(r)try{s=lo(this,io,"f").decode(t.inputs,r.data||"0x")}catch(t){console.log(t)}let c="unknown reason";if(0===n.length)c="missing error reason";else if(n.length%32==4){const t=ie(n.slice(0,4)),e=go[t];if(e)try{o=e.name,a=e.signature,i=lo(this,io,"f").decode(e.inputs,n.slice(4)),c=e.reason(...i)}catch(t){console.log(t)}else{c="unknown custom error";try{const e=this.getError(t);o=e.name,a=e.format(),c=`custom error: ${a}`;try{i=lo(this,io,"f").decode(e.inputs,n.slice(4))}catch(t){c=`custom error: ${a} (coult not decode error data)`}}catch(t){console.log(t)}}}return N.makeError("call revert exception","CALL_EXCEPTION",{data:ie(n),transaction:null,method:t.name,signature:t.format(),args:s,errorArgs:i,errorName:o,errorSignature:a,reason:c})}encodeFunctionResult(t,e){return"string"==typeof t&&(t=this.getFunction(t)),ie(lo(this,io,"f").encode(t.outputs,e||[]))}encodeFilterTopics(t,e){"string"==typeof t&&(t=this.getEvent(t)),e.length>t.inputs.length&&N.throwError("too many arguments for "+t.format(),"UNEXPECTED_ARGUMENT",{count:e.length,expectedCount:t.inputs.length});const r=[];t.anonymous||r.push(this.getEventTopic(t));const n=(t,e)=>"string"===t.type?Ni(e):"bytes"===t.type?nn(ie(e)):("address"===t.type&&lo(this,io,"f").encode(["address"],[e]),fe(ie(e),32));for(e.forEach(((e,s)=>{const i=t.inputs[s];i.indexed?null==e?r.push(null):"array"===i.baseType||"tuple"===i.baseType?N.throwArgumentError("filtering with tuples or arrays not supported","contract."+i.name,e):Array.isArray(e)?r.push(e.map((t=>n(i,t)))):r.push(n(i,e)):null!=e&&N.throwArgumentError("cannot filter non-indexed parameters; must be null","contract."+i.name,e)}));r.length&&null===r[r.length-1];)r.pop();return r}encodeEventLog(t,e){"string"==typeof t&&(t=this.getEvent(t));const r=[],n=[],s=[];return t.anonymous||r.push(this.getEventTopic(t)),e.length!==t.inputs.length&&N.throwArgumentError("event arguments/values mismatch","values",e),t.inputs.forEach(((t,i)=>{const o=e[i];if(t.indexed)if("string"===t.type)r.push(Ni(o));else if("bytes"===t.type)r.push(nn(o));else{if("tuple"===t.baseType||"array"===t.baseType)throw new Error("not implemented");r.push(lo(this,io,"f").encode([t.type],[o]))}else n.push(t),s.push(o)})),{data:lo(this,io,"f").encode(n,s),topics:r}}decodeEventLog(t,e,r){if("string"==typeof t&&(t=this.getEvent(t)),null!=r&&!t.anonymous){const e=this.getEventTopic(t);Xt(r[0],32)&&r[0].toLowerCase()===e||N.throwArgumentError("fragment/topic mismatch","topics[0]",r[0]),r=r.slice(1)}const n=[],s=[],i=[];t.inputs.forEach(((t,e)=>{t.indexed?"string"===t.type||"bytes"===t.type||"tuple"===t.baseType||"array"===t.baseType?(n.push(ot.fromObject({type:"bytes32",name:t.name})),i.push(!0)):(n.push(t),i.push(!1)):(s.push(t),i.push(!1))}));const o=null!=r?lo(this,io,"f").decode(n,ae(r)):null,a=lo(this,io,"f").decode(s,e,!0),c=[],l=[];let u=0,h=0;return t.inputs.forEach(((t,e)=>{let r=null;if(t.indexed)if(null==o)r=new po(null);else if(i[e])r=new po(o[h++]);else try{r=o[h++]}catch(t){r=t}else try{r=a[u++]}catch(t){r=t}c.push(r),l.push(t.name||null)})),Re.fromItems(c,l)}parseTransaction(t){const e=N.getBytes(t.data,"tx.data"),r=N.getBigInt(null!=t.value?t.value:0,"tx.value"),n=this.getFunction(ie(e.slice(0,4)));if(!n)return null;const s=lo(this,io,"f").decode(n.inputs,e.slice(4));return new ho(n,this.getSelector(n),s,r)}parseLog(t){const e=this.getEvent(t.topics[0]);return!e||e.anonymous?null:new uo(e,this.getEventTopic(e),this.decodeEventLog(e,t.data,t.topics))}parseError(t){const e=ie(t),r=this.getError(le(e,0,4));if(!r)return null;const n=lo(this,io,"f").decode(r.inputs,le(e,4));return new fo(r,this.getSelector(r),n)}static from(t){return t instanceof mo?t:"string"==typeof t?new mo(JSON.parse(t)):"function"==typeof t.format?new mo(t.format(_.json)):new mo(t)}}ro=new WeakMap,no=new WeakMap,so=new WeakMap,io=new WeakMap,eo=new WeakSet,oo=function(t,e,r){if(Xt(t)){const e=t.toLowerCase();for(const t of lo(this,so,"f").values())if(e===this.getSelector(t))return t;N.throwArgumentError("no matching function","selector",t)}if(-1===t.indexOf("(")){const n=[];for(const[e,r]of lo(this,so,"f"))e.split("(")[0]===t&&n.push(r);if(e){const t=e.length>0?e[e.length-1]:null;let r=e.length,s=!0;Ss.isTyped(t)&&"overrides"===t.type&&(s=!1,r--);for(let t=n.length-1;t>=0;t--){const e=n[t].inputs.length;e===r||s&&e===r-1||n.splice(t,1)}for(let t=n.length-1;t>=0;t--){const r=n[t].inputs;for(let s=0;s=r.length){if("overrides"===e[s].type)continue;n.splice(t,1);break}if(e[s].type!==r[s].baseType){n.splice(t,1);break}}}}if(1===n.length&&e&&e.length!==n[0].inputs.length){const t=e[e.length-1];(null==t||Array.isArray(t)||"object"!=typeof t)&&n.splice(0,1)}if(0===n.length)N.throwArgumentError("no matching function","name",t);else if(n.length>1&&r){const e=n.map((t=>JSON.stringify(t.format()))).join(", ");N.throwArgumentError(`multiple matching functions (i.e. ${e})`,"name",t)}return n[0]}const n=lo(this,so,"f").get(pt.fromString(t).format());return n||N.throwArgumentError("no matching function","signature",t)},ao=function(t,e,r){if(Xt(t)){const e=t.toLowerCase();for(const t of lo(this,no,"f").values())if(e===this.getEventTopic(t))return t;N.throwArgumentError("no matching event","eventTopic",t)}if(-1===t.indexOf("(")){const n=[];for(const[e,r]of lo(this,no,"f"))e.split("(")[0]===t&&n.push(r);if(e){for(let t=n.length-1;t>=0;t--)n[t].inputs.length=0;t--){const r=n[t].inputs;for(let s=0;s1&&r&&N.throwArgumentError("multiple matching events","name",t),n[0]}const n=lo(this,no,"f").get(ft.fromString(t).format());return n||N.throwArgumentError("no matching event","signature",t)};const yo=new A("@ethersproject/web@6.0.0-beta.1");var bo,vo,Eo=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},To=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class ko{constructor(t,e,r,n,s){bo.set(this,void 0),vo.set(this,void 0),Eo(this,bo,{statusCode:t,statusMessage:e,headers:Object.freeze(Object.assign({},Object.keys(r).reduce(((t,e)=>(t[e.toLowerCase()]=r[e],t)),{}))),body:null==n?null:new Uint8Array(n),request:s||null},"f"),Eo(this,vo,{message:""},"f")}toString(){const t=a(To(this,bo,"f"),"body");return``}get statusCode(){return a(To(this,bo,"f"),"statusCode")}get statusMessage(){return a(To(this,bo,"f"),"statusMessage")}get headers(){return a(To(this,bo,"f"),"headers")}get body(){const t=a(To(this,bo,"f"),"body");return null==t?null:new Uint8Array(t)}get bodyText(){try{const t=a(To(this,bo,"f"),"body");return null==t?"":ri(t)}catch(t){return yo.throwError("response body is not valid UTF-8 data","UNSUPPORTED_OPERATION",{operation:"bodyText",info:{response:this}})}}get bodyJson(){try{return JSON.parse(this.bodyText)}catch(t){return yo.throwError("response body is not valid JSON","UNSUPPORTED_OPERATION",{operation:"bodyJson",info:{response:this}})}}[(bo=new WeakMap,vo=new WeakMap,Symbol.iterator)](){const t=this.headers,e=Object.keys(t);let r=0;return{next:()=>{if(r=200&&this.statusCode<300}assertOk(){if(this.ok())return;let{message:t,error:e}=To(this,vo,"f");""===t&&(t=`server response ${this.statusCode} ${this.statusMessage}`),yo.throwError(t,"SERVER_ERROR",{request:this.request||"unknown request",response:this,error:e})}}async function Ao(t,e){const r=t.url.split(":")[0].toLowerCase();"http"!==r&&"https"!==r&&yo.throwError(`unsupported protocol ${r}`,"UNSUPPORTED_OPERATION",{info:{protocol:r},operation:"request"}),t.credentials&&!t.allowInsecureAuthentication&&yo.throwError("insecure authorized connections unsupported","UNSUPPORTED_OPERATION",{operation:"request"});const n={method:t.method,headers:new Headers(Array.from(t)),body:t.body||void 0},s=await fetch(t.url,n),i={};s.headers.forEach(((t,e)=>{i[e.toLowerCase()]=t}));const o=new Uint8Array(await s.arrayBuffer());return new ko(s.status,s.statusText,i,o,t)}var No,Po=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},xo=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};function Oo(t,e,r){if(typeof t!==e)throw new Error(`invalid ${r}`);return t}class Io{constructor(t){No.set(this,void 0),Po(this,No,{allowInsecure:!1,gzip:!1,headers:{},method:"",timeout:300,url:Oo(t,"string","url")},"f")}get url(){return a(xo(this,No,"f"),"url")}set url(t){c(xo(this,No,"f"),"url",Oo(t,"string","url"))}get body(){const t=a(xo(this,No,"f"),"body");return null==t?null:this.isFrozen()?new Uint8Array(t):t}set body(t){if(null==t)c(xo(this,No,"f"),"body",void 0),c(xo(this,No,"f"),"bodyType",void 0);else if("string"==typeof t)c(xo(this,No,"f"),"body",Zs(t)),c(xo(this,No,"f"),"bodyType","text/plain");else if(t instanceof Uint8Array)c(xo(this,No,"f"),"body",t),c(xo(this,No,"f"),"bodyType","application/octet-stream");else{if("object"!=typeof t)throw new Error("invalid body");c(xo(this,No,"f"),"body",Zs(JSON.stringify(t))),c(xo(this,No,"f"),"bodyType","application/json")}}hasBody(){return null!=a(xo(this,No,"f"),"body")}get method(){const t=a(xo(this,No,"f"),"method");return t?t.toUpperCase():this.body?"POST":"GET"}set method(t){null==t&&(t=""),c(xo(this,No,"f"),"method",Oo(t,"string","method"))}get headers(){const t=Object.assign({},a(xo(this,No,"f"),"headers")),e=a(xo(this,No,"f"),"bodyType");return this.credentials,this.allowGzip&&(t["accept-encoding"]="gzip"),null==t["content-type"]&&e&&(t["content-type"]=e),this.body&&(t["content-length"]=String(this.body.length)),Object.freeze(t)}getHeader(t){return this.headers[t.toLowerCase()]}setHeader(t,e){const r=a(xo(this,No,"f"),"headers");c(xo(this,No,"f"),"headers",r),r[Oo(t,"string","key").toLowerCase()]=String(e)}clearHeaders(){c(xo(this,No,"f"),"headers",{})}[(No=new WeakMap,Symbol.iterator)](){const t=this.headers,e=Object.keys(t);let r=0;return{next:()=>{if(r ${JSON.stringify(t)})`});const n=new Io(t);return n.method="GET",n.allowGzip=this.allowGzip,n.timeout=this.timeout,c(xo(n,No,"f"),"body",a(xo(this,No,"f"),"body")),c(xo(n,No,"f"),"headers",Object.assign({},a(xo(this,No,"f"),"headers"))),c(xo(n,No,"f"),"bodyType",a(xo(this,No,"f"),"bodyType")),n}clone(){const t=new Io(this.url);c(xo(t,No,"f"),"method",a(xo(this,No,"f"),"method"));const e=a(xo(this,No,"f"),"body");return c(xo(t,No,"f"),"body",null==e?void 0:new Uint8Array(e)),c(xo(t,No,"f"),"bodyType",a(xo(this,No,"f"),"bodyType")),c(xo(t,No,"f"),"headers",Object.assign({},a(xo(this,No,"f"),"headers"))),c(xo(t,No,"f"),"creds",a(xo(this,No,"f"),"creds")),this.allowGzip&&(t.allowGzip=!0),t.timeout=this.timeout,this.allowInsecureAuthentication&&(t.allowInsecureAuthentication=!0),t}freeze(){const t=a(xo(this,No,"f"),"body");return null!=t&&c(xo(this,No,"f"),"body",new Uint8Array(t)),Object.freeze(xo(this,No,"f").headers),Object.freeze(xo(this,No,"f")),this}isFrozen(){return Object.isFrozen(xo(this,No,"f"))}}async function So(t){return new Promise((e=>{setTimeout(e,t)}))}function Ro(){return(new Date).getTime()}let _o=!1;async function Co(t){const e="string"==typeof t?{request:new Io(t)}:t instanceof Io?{request:t}:Object.assign({},t);if(null==e.request)return yo.throwArgumentError("missing request","connection",t);let r=e.request.clone().freeze();switch(e.request.url.split(":")[0]){case"data":{const t=r.url.match(/^data:([^;:]*)?(;base64)?,(.*)$/i);if(t)try{const e={"content-type":t[1]?t[1]:"text/plain"},n=t[2]?ne(t[3]):Zs(t[3].replace(/%([0-9a-f][0-9a-f])/gi,((t,e)=>String.fromCharCode(parseInt(e,16)))));return new ko(200,"OK",e,n,r.clone())}catch(t){return new ko(400,"BAD REQUEST (invalid base64 encoded data)",{},null,r.clone())}return new ko(500,"INTERNAL SERVER ERROR (unsupported dara URI)",{},null,r.clone())}case"ipfs":case"ipns":case"ar":throw new Error("not implemented yet");case"http":case"https":break;default:throw new Error("unsupported scheme")}const n=null!=e.throttleLimit?e.throttleLimit:12;if(!Number.isInteger(n)||n<1)return yo.throwArgumentError("invalid throttleLimit","connection",t);const s=null!=e.throttleSlotInterval?e.throttleSlotInterval:100;if(!Number.isInteger(s)||n<0)return yo.throwArgumentError("invalid throttleSlotInterval","connection",t);const i=null!=e.throttleRetry?e.throttleRetry:null;if(i&&"function"!=typeof i)return yo.throwArgumentError("invalid throttleRetry callback","connection",t);const o=e.preflightRequest||null;if(o&&"function"!=typeof o)return yo.throwArgumentError("invalid preflightRequest callback","connection",t);const a=e.processResponse||null;if(a&&"function"!=typeof a)return yo.throwArgumentError("invalid processResponse callback","connection",t);const c=Ro();let l=null;for(let t=0;t32)throw new Error("internal; should not happen");const r=new Uint8Array(32);return r.set(e,32-e.length),r}function Vo(t){if(t.length%32==0)return t;const e=new Uint8Array(32*Math.ceil(t.length/32));return e.set(t),e}function Ko(t){const e=[];let r=0;for(let n=0;nBo.getBigInt(t)===jo)).catch((t=>{if("CALL_EXCEPTION"===t.code)return!1;throw Do(this,Uo,null,"f"),t})),"f"),await Mo(this,Uo,"f")}async _fetch(t,e="0x"){const r=ae([t,Si(this.name),e]),n={to:this.address,enableCcipRead:!0,data:r};let s=!1;await this.supportsWildcard()&&(s=!0,n.data=ae(["0x9061b923",Ko([Ri(this.name),r])]));try{let t=await this.provider.call(n);return Bo.getBytes(t).length%32==4?Bo.throwError("resolver threw error","CALL_EXCEPTION",{transaction:n,data:t}):s?Wo(t,0):t}catch(t){if("CALL_EXCEPTION"!==t.code)throw t}return null}async getAddress(t=60){if(60===t)try{const t=await this._fetch("0x3b3b57de");if("0x"===t||t===$o)return null;return(await this.provider.getNetwork()).formatter.callAddress(t)}catch(t){if("CALL_EXCEPTION"===t.code)return null;throw t}let e=null;for(const r of this.provider.plugins)if(r instanceof qo&&r.supportsCoinType(t)){e=r;break}if(null==e)return null;const r=Wo(await this._fetch("0xf1cb7e06",Ho(t))||"0x",0);if(null==r||"0x"===r)return null;const n=await e.encodeAddress(t,r);return null!=n?n:Bo.throwError("invalid coin data","UNSUPPORTED_OPERATION",{operation:`getAddress(${t})`,info:{coinType:t,data:r}})}async getText(t){let e=Zs(t);const r=Bo.getBytes(ae([Ho(64),Ho(e.length),e])),n=Wo(await this._fetch("0x59d1d43c",Vo(r))||"0x",0);return null==n||"0x"===n?null:ri(n)}async getContentHash(){const t=Wo(await this._fetch("0xbc1c58d1")||"0x",0);if(null==t||"0x"===t)return null;const e=t.match(/^0x(e3010170|e5010172)(([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f]*))$/);if(e){const t="e3010170"===e[1]?"ipfs":"ipns",r=parseInt(e[4],16);if(e[5].length===2*r)return`${t}://${Jt("0x"+e[2])}`}const r=t.match(/^0xe40101fa011b20([0-9a-f]*)$/);return r&&64===r[1].length?`bzz://${r[1]}`:Bo.throwError("invalid or unsupported content hash data","UNSUPPORTED_OPERATION",{operation:"getContentHash()",info:{data:t}})}async getAvatar(){return(await this._getAvatar()).url}async _getAvatar(){const t=[{type:"name",value:this.name}];try{const e=await this.getText("avatar");if(null==e)throw t.push({type:"!avatar",value:""}),new Error("!avatar");t.push({type:"avatar",value:e});for(let r=0;rQo.throwArgumentError(e,"signature",t);if("string"==typeof t){65!==ce(t)&&e("invlaid raw signature length");const r=le(t,0,32),n=le(t,32,64);BigInt(n)>>la&&e("non-canonical s");const s=da.getNormalizedV(le(t,64,65));return new da(ha,r,n,s)}if(t instanceof da)return t.clone();const r=t.r;null==r&&e("missing r"),Xt(r,32)||e("invalid r");const n=function(t,r){return t?(Xt(t,32)||e("invalid s"),t):r?(Xt(r,32)||e("invalid vs"),vt(BigInt(r)&ua,32)):e("missing s")}(t.s,t.vs);BigInt(n)>>la&&e("non-canonical s");const s=function(t,r,n){if(t)return da.getNormalizedV(t);if(r)return Xt(r,32)||e("invalid vs"),128&ee(r)[0]?28:27;if(n){switch(n){case 0:return 27;case 1:return 28}return e("invalid yParity")}return e("missing v")}(t.v,t.vs,t.yParity),i=new da(ha,r,n,s);return t.yParity&&(t.yParity,i.yParity),t.vs&&(t.vs,i.vs),i}} +/*! noble-secp256k1 - MIT License (c) 2019 Paul Miller (paulmillr.com) */const pa=BigInt(0),wa=BigInt(1),ga=BigInt(2),ma=BigInt(3),ya=BigInt(8),ba=ga**BigInt(256),va={a:pa,b:BigInt(7),P:ba-ga**BigInt(32)-BigInt(977),n:ba-BigInt("432420386565659656852420866394968145599"),h:wa,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee")};function Ea(t){const{a:e,b:r}=va,n=ja(t*t),s=ja(n*t);return ja(s+e*t+r)}const Ta=va.a===pa;class ka{constructor(t,e,r){this.x=t,this.y=e,this.z=r}static fromAffine(t){if(!(t instanceof Na))throw new TypeError("JacobianPoint#fromAffine: expected Point");return new ka(t.x,t.y,wa)}static toAffineBatch(t){const e=function(t,e=va.P){const r=new Array(t.length),n=$a(t.reduce(((t,n,s)=>n===pa?t:(r[s]=t,ja(t*n,e))),wa),e);return t.reduceRight(((t,n,s)=>n===pa?t:(r[s]=ja(t*r[s],e),ja(t*n,e))),n),r}(t.map((t=>t.z)));return t.map(((t,r)=>t.toAffine(e[r])))}static normalizeZ(t){return ka.toAffineBatch(t).map(ka.fromAffine)}equals(t){if(!(t instanceof ka))throw new TypeError("JacobianPoint expected");const{x:e,y:r,z:n}=this,{x:s,y:i,z:o}=t,a=ja(n**ga),c=ja(o**ga),l=ja(e*c),u=ja(s*a),h=ja(ja(r*o)*c),f=ja(ja(i*n)*a);return l===u&&h===f}negate(){return new ka(this.x,ja(-this.y),this.z)}double(){const{x:t,y:e,z:r}=this,n=ja(t**ga),s=ja(e**ga),i=ja(s**ga),o=ja(ga*(ja((t+s)**ga)-n-i)),a=ja(ma*n),c=ja(a**ga),l=ja(c-ga*o),u=ja(a*(o-l)-ya*i),h=ja(ga*e*r);return new ka(l,u,h)}add(t){if(!(t instanceof ka))throw new TypeError("JacobianPoint expected");const{x:e,y:r,z:n}=this,{x:s,y:i,z:o}=t;if(s===pa||i===pa)return this;if(e===pa||r===pa)return t;const a=ja(n**ga),c=ja(o**ga),l=ja(e*c),u=ja(s*a),h=ja(ja(r*o)*c),f=ja(ja(i*n)*a),d=ja(u-l),p=ja(f-h);if(d===pa)return p===pa?this.double():ka.ZERO;const w=ja(d**ga),g=ja(d*w),m=ja(l*w),y=ja(p**ga-g-ga*m),b=ja(p*(m-y)-h*g),v=ja(n*o*d);return new ka(y,b,v)}subtract(t){return this.add(t.negate())}multiplyUnsafe(t){let e=Ma(t);const r=ka.ZERO;if(e===pa)return r;if(e===wa)return this;if(!Ta){let t=r,n=this;for(;e>pa;)e&wa&&(t=t.add(n)),n=n.double(),e>>=wa;return t}let{k1neg:n,k1:s,k2neg:i,k2:o}=Ha(e),a=r,c=r,l=this;for(;s>pa||o>pa;)s&wa&&(a=a.add(l)),o&wa&&(c=c.add(l)),l=l.double(),s>>=wa,o>>=wa;return n&&(a=a.negate()),i&&(c=c.negate()),c=new ka(ja(c.x*va.beta),c.y,c.z),a.add(c)}precomputeWindow(t){const e=Ta?128/t+1:256/t+1,r=[];let n=this,s=n;for(let i=0;i>=u,o>a&&(o-=l,t+=wa),0===o){let t=n[r];e%2&&(t=t.negate()),i=i.add(t)}else{let t=n[r+Math.abs(o)-1];o<0&&(t=t.negate()),s=s.add(t)}}return{p:s,f:i}}multiply(t,e){let r,n,s=Ma(t);if(Ta){const{k1neg:t,k1:i,k2neg:o,k2:a}=Ha(s);let{p:c,f:l}=this.wNAF(i,e),{p:u,f:h}=this.wNAF(a,e);t&&(c=c.negate()),o&&(u=u.negate()),u=new ka(ja(u.x*va.beta),u.y,u.z),r=c.add(u),n=l.add(h)}else{const{p:t,f:i}=this.wNAF(s,e);r=t,n=i}return ka.normalizeZ([r,n])[0]}toAffine(t=$a(this.z)){const{x:e,y:r,z:n}=this,s=t,i=ja(s*s),o=ja(i*s),a=ja(e*i),c=ja(r*o);if(ja(n*s)!==wa)throw new Error("invZ was invalid");return new Na(a,c)}}ka.BASE=new ka(va.Gx,va.Gy,wa),ka.ZERO=new ka(pa,wa,pa);const Aa=new WeakMap;class Na{constructor(t,e){this.x=t,this.y=e}_setWindowSize(t){this._WINDOW_SIZE=t,Aa.delete(this)}static fromCompressedHex(t){const e=32===t.length,r=La(e?t:t.subarray(1));if(!Ja(r))throw new Error("Point is not on curve");let n=function(t){const{P:e}=va,r=BigInt(6),n=BigInt(11),s=BigInt(22),i=BigInt(23),o=BigInt(44),a=BigInt(88),c=t*t*t%e,l=c*c*t%e,u=Ga(l,ma)*l%e,h=Ga(u,ma)*l%e,f=Ga(h,ga)*c%e,d=Ga(f,n)*f%e,p=Ga(d,s)*d%e,w=Ga(p,o)*p%e,g=Ga(w,a)*w%e,m=Ga(g,o)*p%e,y=Ga(m,ma)*l%e,b=Ga(y,i)*d%e,v=Ga(b,r)*c%e;return Ga(v,ga)}(Ea(r));const s=(n&wa)===wa;if(e)s&&(n=ja(-n));else{1==(1&t[0])!==s&&(n=ja(-n))}const i=new Na(r,n);return i.assertValidity(),i}static fromUncompressedHex(t){const e=La(t.subarray(1,33)),r=La(t.subarray(33,65)),n=new Na(e,r);return n.assertValidity(),n}static fromHex(t){const e=Da(t),r=e.length,n=e[0];if(32===r||33===r&&(2===n||3===n))return this.fromCompressedHex(e);if(65===r&&4===n)return this.fromUncompressedHex(e);throw new Error(`Point.fromHex: received invalid point. Expected 32-33 compressed bytes or 65 uncompressed bytes, not ${r}`)}static fromPrivateKey(t){return Na.BASE.multiply(Xa(t))}static fromSignature(t,e,r){const n=function(t){const{n:e}=va,r=8*t.length-256;let n=La(t);r>0&&(n>>=BigInt(r));n>=e&&(n-=e);return n}(t=Da(t)),{r:s,s:i}=function(t){if(t instanceof Oa)return t.assertValidity(),t;try{return Oa.fromDER(t)}catch(e){return Oa.fromCompact(t)}}(e);if(0!==r&&1!==r)throw new Error("Cannot recover signature: invalid recovery bit");if(n===pa)throw new Error("Cannot recover signature: msgHash cannot be 0");const o=1&r?"03":"02",a=Na.fromHex(o+Ca(s)),{n:c}=va,l=$a(s,c),u=ja(-n*l,c),h=ja(i*l,c),f=Na.BASE.multiplyAndAddUnsafe(a,u,h);if(!f)throw new Error("Cannot recover signature: point at infinify");return f.assertValidity(),f}toRawBytes(t=!1){return Ua(this.toHex(t))}toHex(t=!1){const e=Ca(this.x);if(t){return`${this.y&wa?"03":"02"}${e}`}return`04${e}${Ca(this.y)}`}toHexX(){return this.toHex(!0).slice(2)}toRawX(){return this.toRawBytes(!0).slice(1)}assertValidity(){const t="Point is not on elliptic curve",{x:e,y:r}=this;if(!Ja(e)||!Ja(r))throw new Error(t);const n=ja(r*r);if(ja(n-Ea(e))!==pa)throw new Error(t)}equals(t){return this.x===t.x&&this.y===t.y}negate(){return new Na(this.x,ja(-this.y))}double(){return ka.fromAffine(this).double().toAffine()}add(t){return ka.fromAffine(this).add(ka.fromAffine(t)).toAffine()}subtract(t){return this.add(t.negate())}multiply(t){return ka.fromAffine(this).multiply(t,this).toAffine()}multiplyAndAddUnsafe(t,e,r){const n=ka.fromAffine(this).multiply(e),s=ka.fromAffine(t).multiplyUnsafe(r),i=n.add(s);return i.equals(ka.ZERO)?void 0:i.toAffine()}}function Pa(t){return Number.parseInt(t[0],16)>=8?"00"+t:t}function xa(t){if(t.length<2||2!==t[0])throw new Error(`Invalid signature integer tag: ${_a(t)}`);const e=t[1],r=t.subarray(2,e+2);if(!e||r.length!==e)throw new Error("Invalid signature integer: wrong length");if(0===r[0]&&r[1]<=127)throw new Error("Invalid signature integer: trailing length");return{data:La(r),left:t.subarray(e+2)}}Na.BASE=new Na(va.Gx,va.Gy),Na.ZERO=new Na(pa,pa);class Oa{constructor(t,e){this.r=t,this.s=e,this.assertValidity()}static fromCompact(t){const e=Sa(t),r="Signature.fromCompact";if("string"!=typeof t&&!e)throw new TypeError(`${r}: Expected string or Uint8Array`);const n=e?_a(t):t;if(128!==n.length)throw new Error(`${r}: Expected 64-byte hex`);return new Oa(Fa(n.slice(0,64)),Fa(n.slice(64,128)))}static fromDER(t){const e=Sa(t);if("string"!=typeof t&&!e)throw new TypeError("Signature.fromDER: Expected string or Uint8Array");const{r:r,s:n}=function(t){if(t.length<2||48!=t[0])throw new Error(`Invalid signature tag: ${_a(t)}`);if(t[1]!==t.length-2)throw new Error("Invalid signature: incorrect length");const{data:e,left:r}=xa(t.subarray(2)),{data:n,left:s}=xa(r);if(s.length)throw new Error(`Invalid signature: left bytes after parsing: ${_a(s)}`);return{r:e,s:n}}(e?t:Ua(t));return new Oa(r,n)}static fromHex(t){return this.fromDER(t)}assertValidity(){const{r:t,s:e}=this;if(!Ka(t))throw new Error("Invalid Signature: r must be 0 < r < n");if(!Ka(e))throw new Error("Invalid Signature: s must be 0 < s < n")}hasHighS(){const t=va.n>>wa;return this.s>t}normalizeS(){return this.hasHighS()?new Oa(this.r,va.n-this.s):this}toDERRawBytes(t=!1){return Ua(this.toDERHex(t))}toDERHex(t=!1){const e=Pa(Ba(this.s));if(t)return e;const r=Pa(Ba(this.r)),n=Ba(r.length/2),s=Ba(e.length/2);return`30${Ba(r.length/2+e.length/2+4)}02${n}${r}02${s}${e}`}toRawBytes(){return this.toDERRawBytes()}toHex(){return this.toDERHex()}toCompactRawBytes(){return Ua(this.toCompactHex())}toCompactHex(){return Ca(this.r)+Ca(this.s)}}function Ia(...t){if(!t.every(Sa))throw new Error("Uint8Array list expected");if(1===t.length)return t[0];const e=t.reduce(((t,e)=>t+e.length),0),r=new Uint8Array(e);for(let e=0,n=0;ee.toString(16).padStart(2,"0")));function _a(t){if(!(t instanceof Uint8Array))throw new Error("Expected Uint8Array");let e="";for(let r=0;rba)throw new Error("Expected number < 2^256");return t.toString(16).padStart(64,"0")}function Ba(t){const e=t.toString(16);return 1&e.length?`0${e}`:e}function Fa(t){if("string"!=typeof t)throw new TypeError("hexToNumber: expected string, got "+typeof t);return BigInt(`0x${t}`)}function Ua(t){if("string"!=typeof t)throw new TypeError("hexToBytes: expected string, got "+typeof t);if(t.length%2)throw new Error("hexToBytes: received invalid unpadded hex"+t.length);const e=new Uint8Array(t.length/2);for(let r=0;r0)return BigInt(t);if("bigint"==typeof t&&Ka(t))return t;throw new TypeError("Expected valid private scalar: 0 < scalar < curve.n")}function ja(t,e=va.P){const r=t%e;return r>=pa?r:e+r}function Ga(t,e){const{P:r}=va;let n=t;for(;e-- >pa;)n*=n,n%=r;return n}function $a(t,e=va.P){if(t===pa||e<=pa)throw new Error(`invert: expected positive integers, got n=${t} mod=${e}`);let r=ja(t,e),n=e,s=pa,i=wa;for(;r!==pa;){const t=n%r,e=s-i*(n/r);n=r,r=t,s=i,i=e}if(n!==wa)throw new Error("invert: does not exist");return ja(s,e)}const Wa=(t,e)=>(t+e/ga)/e,za=ga**BigInt(128);function Ha(t){const{n:e}=va,r=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-wa*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),s=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),i=r,o=Wa(i*t,e),a=Wa(-n*t,e);let c=ja(t-o*r-a*s,e),l=ja(-o*n-a*i,e);const u=c>za,h=l>za;if(u&&(c=e-c),h&&(l=e-l),c>za||l>za)throw new Error("splitScalarEndo: Endomorphism failed, k="+t);return{k1neg:u,k1:c,k2neg:h,k2:l}}class Va{constructor(){this.v=new Uint8Array(32).fill(1),this.k=new Uint8Array(32).fill(0),this.counter=0}hmac(...t){return sc.hmacSha256(this.k,...t)}hmacSync(...t){if("function"!=typeof sc.hmacSha256Sync)throw new Error("utils.hmacSha256Sync is undefined, you need to set it");const e=sc.hmacSha256Sync(this.k,...t);if(e instanceof Promise)throw new Error("To use sync sign(), ensure utils.hmacSha256 is sync");return e}incr(){if(this.counter>=1e3)throw new Error("Tried 1,000 k values for sign(), all were invalid");this.counter+=1}async reseed(t=new Uint8Array){this.k=await this.hmac(this.v,Uint8Array.from([0]),t),this.v=await this.hmac(this.v),0!==t.length&&(this.k=await this.hmac(this.v,Uint8Array.from([1]),t),this.v=await this.hmac(this.v))}reseedSync(t=new Uint8Array){this.k=this.hmacSync(this.v,Uint8Array.from([0]),t),this.v=this.hmacSync(this.v),0!==t.length&&(this.k=this.hmacSync(this.v,Uint8Array.from([1]),t),this.v=this.hmacSync(this.v))}async generate(){return this.incr(),this.v=await this.hmac(this.v),this.v}generateSync(){return this.incr(),this.v=this.hmacSync(this.v),this.v}}function Ka(t){return pa0)e=BigInt(t);else if("string"==typeof t){if(64!==t.length)throw new Error("Expected 32 bytes of private key");e=Fa(t)}else{if(!Sa(t))throw new TypeError("Expected valid private key");if(32!==t.length)throw new Error("Expected 32 bytes of private key");e=La(t)}if(!Ka(e))throw new Error("Expected private key: 0 < key < n");return e}function Ya(t){const e=Sa(t),r="string"==typeof t,n=(e||r)&&t.length;return e?33===n||65===n:r?66===n||130===n:t instanceof Na}function Za(t,e,r=!1){if(Ya(t))throw new TypeError("getSharedSecret: first arg must be private key");if(!Ya(e))throw new TypeError("getSharedSecret: second arg must be public key");const n=(s=e)instanceof Na?(s.assertValidity(),s):Na.fromHex(s);var s;return n.assertValidity(),n.multiply(Xa(t)).toRawBytes(r)}function Qa(t){return La(t.length>32?t.slice(0,32):t)}function tc(t){const e=Qa(t),r=ja(e,va.n);return ec(r{if((t=Da(t)).length<40||t.length>1024)throw new Error("Expected 40-1024 bytes of private key as per FIPS 186");const e=ja(La(t),va.n);if(e===pa||e===wa)throw new Error("Invalid private key");return function(t){return Ua(Ca(t))}(e)},randomBytes:(t=32)=>{if(nc.web)return nc.web.getRandomValues(new Uint8Array(t));throw new Error("The environment doesn't have randomBytes function")},randomPrivateKey:()=>sc.hashToPrivateKey(sc.randomBytes(40)),bytesToHex:_a,mod:ja,sha256:async t=>{if(nc.web){const e=await nc.web.subtle.digest("SHA-256",t.buffer);return new Uint8Array(e)}throw new Error("The environment doesn't have sha256 function")},hmacSha256:async(t,...e)=>{if(nc.web){const r=await nc.web.subtle.importKey("raw",t,{name:"HMAC",hash:{name:"SHA-256"}},!1,["sign"]),n=Ia(...e),s=await nc.web.subtle.sign("HMAC",r,n);return new Uint8Array(s)}throw new Error("The environment doesn't have hmac-sha256 function")},sha256Sync:void 0,hmacSha256Sync:void 0,precompute(t=8,e=Na.BASE){const r=e===Na.BASE?e:new Na(e.x,e.y);return r._setWindowSize(t),r.multiply(ma),r}};var ic,oc=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},ac=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};sc.hmacSha256Sync=function(t,...e){return ee(Ur("sha256",t,ae(e)))};class cc{constructor(t){ic.set(this,void 0),Qo.assertArgument(32===ce(t),"invalid private key length","privateKey","[REDACTED]"),oc(this,ic,ie(t),"f")}get privateKey(){return ac(this,ic,"f")}get publicKey(){return cc.computePublicKey(ac(this,ic,"f"))}get compressedPublicKey(){return cc.computePublicKey(ac(this,ic,"f"),!0)}sign(t){Qo.assertArgument(32===ce(t),"invalid digest length","digest",t);const[e,r]=rc(ee(t),ee(ac(this,ic,"f")),{recovered:!0,canonical:!0}),n=Oa.fromHex(e);return da.from({r:vt("0x"+n.r.toString(16),32),s:vt("0x"+n.s.toString(16),32),v:r?28:27}).freeze()}computeShardSecret(t){const e=cc.computePublicKey(t);return ie(Za(ee(ac(this,ic,"f")),e))}static computePublicKey(t,e){let r=Qo.getBytes(t,"key");if(32===r.length){return ie(function(t,e=!1){return Na.fromPrivateKey(t).toRawBytes(e)}(r,!!e))}if(64===r.length){const t=new Uint8Array(65);t[0]=4,t.set(r,1),r=t}return ie(Na.fromHex(r).toRawBytes(e))}static recoverPublicKey(t,e){const r=da.from(e),n=Oa.fromCompact(ee(ae([r.r,r.s]))).toDERRawBytes(),s=function(t,e,r,n=!1){return Na.fromSignature(t,e,r).toRawBytes(n)}(ee(t),n,r.yParity);return null!=s?ie(s):Qo.throwArgumentError("invalid signautre for digest","signature",e)}static _addPoints(t,e,r){const n=Na.fromHex(cc.computePublicKey(t).substring(2)),s=Na.fromHex(cc.computePublicKey(e).substring(2));return"0x"+n.add(s).toHex(!!r)}}function lc(t,e){return{address:as(t),storageKeys:(e||[]).map(((t,e)=>{if(32!==ce(t))throw new Error("");return t.toLowerCase()}))}}function uc(t){if(Array.isArray(t))return t.map(((t,e)=>{if(Array.isArray(t)){if(t.length>2)throw new Error("");return lc(t[0],t[1])}return lc(t.address,t.storageKeys)}));const e=Object.keys(t).map((e=>{const r=t[e].reduce(((t,e)=>(t[e]=!0,t)),{});return lc(e,Object.keys(r).sort())}));return e.sort(((t,e)=>t.address.localeCompare(e.address))),e}ic=new WeakMap;const hc=new A("@ethersproject/transactions@6.0.0-beta.1");var fc,dc=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},pc=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const wc=BigInt(0);function gc(t,e){const r=hc.getBigInt(t,"value"),n=Et(r);return n.length>32&&hc.throwArgumentError("value too large",`tx.${e}`,r),n}function mc(t){return uc(t).map((t=>[t.address,t.storageKeys]))}function yc(t,e){const r=[gc(t.nonce||0,"nonce"),gc(t.gasPrice||0,"gasPrice"),gc(t.gasLimit||0,"gasLimit"),null!=t.to?as(t.to):"0x",gc(t.value||0,"value"),t.data||"0x"];let n=wc;if(null!=t.chainId)n=hc.getBigInt(t.chainId,"tx.chainId"),e&&null!=e.networkV&&e.legacyChainId!==n&&hc.throwArgumentError("tx.chainId/sig.v mismatch","sig",e);else if(e){const t=e.legacyChainId;null!=t&&(n=t)}if(!e)return n!==wc&&(r.push(Et(n)),r.push("0x"),r.push("0x")),fs(r);let s=BigInt(27+e.yParity);return n!==wc?s=da.getChainIdV(n,e.v):BigInt(e.v)!==s&&hc.throwArgumentError("tx.chainId/sig.v mismatch","sig",e),r.push(Et(s)),r.push(Et(e.r)),r.push(Et(e.s)),fs(r)}function bc(t,e){const r=[gc(t.chainId||0,"chainId"),gc(t.nonce||0,"nonce"),gc(t.maxPriorityFeePerGas||0,"maxPriorityFeePerGas"),gc(t.maxFeePerGas||0,"maxFeePerGas"),gc(t.gasLimit||0,"gasLimit"),null!=t.to?as(t.to):"0x",gc(t.value||0,"value"),t.data||"0x",mc(t.accessList||[])];return e&&(r.push(gc(e.yParity,"yParity")),r.push(Et(e.r)),r.push(Et(e.s))),ae(["0x02",fs(r)])}function vc(t,e){const r=[gc(t.chainId||0,"chainId"),gc(t.nonce||0,"nonce"),gc(t.gasPrice||0,"gasPrice"),gc(t.gasLimit||0,"gasLimit"),null!=t.to?as(t.to):"0x",gc(t.value||0,"value"),t.data||"0x",mc(t.accessList||[])];return e&&(r.push(gc(e.yParity,"recoveryParam")),r.push(Et(e.r)),r.push(Et(e.s))),ae(["0x01",fs(r)])}class Ec{constructor(){fc.set(this,void 0),dc(this,fc,{type:null,to:null,nonce:0,gasLimit:BigInt(0),gasPrice:null,maxPriorityFeePerGas:null,maxFeePerGas:null,data:"0x",value:BigInt(0),chainId:BigInt(0),sig:null,accessList:null},"f")}get type(){return a(pc(this,fc,"f"),"type")}get typeName(){switch(this.type){case 0:return"legacy";case 1:return"eip-2930";case 2:return"eip-1559"}return null}set type(t){switch(t){case null:c(pc(this,fc,"f"),"type",null);break;case 0:case"legacy":c(pc(this,fc,"f"),"type",0);break;case 1:case"berlin":case"eip-2930":c(pc(this,fc,"f"),"type",1);break;case 2:case"london":case"eip-1559":c(pc(this,fc,"f"),"type",2);break;default:throw new Error("unsupported transaction type")}}get to(){return a(pc(this,fc,"f"),"to")}set to(t){c(pc(this,fc,"f"),"to",null==t?null:as(t))}get nonce(){return a(pc(this,fc,"f"),"nonce")}set nonce(t){c(pc(this,fc,"f"),"nonce",hc.getNumber(t,"value"))}get gasLimit(){return a(pc(this,fc,"f"),"gasLimit")}set gasLimit(t){c(pc(this,fc,"f"),"gasLimit",hc.getBigInt(t))}get gasPrice(){return a(pc(this,fc,"f"),"gasPrice")}set gasPrice(t){c(pc(this,fc,"f"),"gasPrice",null==t?null:hc.getBigInt(t))}get maxPriorityFeePerGas(){return a(pc(this,fc,"f"),"maxPriorityFeePerGas")}set maxPriorityFeePerGas(t){c(pc(this,fc,"f"),"maxPriorityFeePerGas",null==t?null:hc.getBigInt(t))}get maxFeePerGas(){return a(pc(this,fc,"f"),"maxFeePerGas")}set maxFeePerGas(t){c(pc(this,fc,"f"),"maxFeePerGas",null==t?null:hc.getBigInt(t))}get data(){return a(pc(this,fc,"f"),"data")}set data(t){c(pc(this,fc,"f"),"data",ie(t))}get value(){return a(pc(this,fc,"f"),"value")}set value(t){c(pc(this,fc,"f"),"value",hc.getBigInt(t))}get chainId(){return a(pc(this,fc,"f"),"chainId")}set chainId(t){c(pc(this,fc,"f"),"chainId",hc.getBigInt(t))}get signature(){return a(pc(this,fc,"f"),"sig")||null}set signature(t){c(pc(this,fc,"f"),"sig",null==t?null:da.from(t))}get accessList(){return a(pc(this,fc,"f"),"accessList")||null}set accessList(t){c(pc(this,fc,"f"),"accessList",null==t?null:uc(t))}get hash(){if(null==this.signature)throw new Error("cannot hash unsigned transaction; maybe you meant .unsignedHash");return nn(this.serialized)}get unsignedHash(){return nn(this.unsignedSerialized)}get from(){return null==this.signature?null:""}get fromPublicKey(){return null==this.signature?null:""}isSigned(){return null!=this.signature}get serialized(){if(null==this.signature)throw new Error("cannot serialize unsigned transaction; maybe you meant .unsignedSerialized");const t=this.inferTypes();if(1!==t.length)throw new Error("cannot determine transaction type; specify type manually");switch(t[0]){case 0:return yc(this,this.signature);case 1:return vc(this,this.signature);case 2:return bc(this,this.signature)}throw new Error("unsupported type")}get unsignedSerialized(){if(null!=this.signature)throw new Error("cannot serialize unsigned transaction; maybe you meant .unsignedSerialized");const t=this.inferTypes();if(1!==t.length)throw new Error("cannot determine transaction type; specify type manually");switch(t[0]){case 0:return yc(this);case 1:return vc(this);case 2:return bc(this)}throw new Error("unsupported type")}inferTypes(){const t=null!=this.gasPrice,e=null!=this.maxFeePerGas||null!=this.maxPriorityFeePerGas,r=null!=this.accessList;if(this.maxFeePerGas&&this.maxPriorityFeePerGas&&this.maxFeePerGas(Object.freeze(t.storageKeys),Object.freeze(t)))))),Object.freeze(pc(this,fc,"f")),this}isFrozen(){return Object.isFrozen(pc(this,fc,"f"))}static from(t){if("string"==typeof t){const e=ee(t);if(e[0]>=127)return Ec.from({});switch(e[0]){case 1:case 2:return Ec.from(function(t){throw new Error("@TODO")}(e.slice(1)))}throw new Error("unsupported transaction type")}const e=new Ec;return null!=t.type&&(e.type=t.type),null!=t.to&&(e.to=t.to),null!=t.nonce&&(e.nonce=t.nonce),null!=t.gasLimit&&(e.gasLimit=t.gasLimit),null!=t.gasPrice&&(e.gasPrice=t.gasPrice),null!=t.maxPriorityFeePerGas&&(e.maxPriorityFeePerGas=t.maxPriorityFeePerGas),null!=t.maxFeePerGas&&(e.maxFeePerGas=t.maxFeePerGas),null!=t.data&&(e.data=t.data),null!=t.value&&(e.value=t.value),null!=t.chainId&&(e.chainId=t.chainId),null!=t.signature&&(e.signature=da.from(t.signature)),null!=t.accessList&&(e.accessList=t.accessList),e}}fc=new WeakMap;var Tc,kc,Ac=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Nc=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};function Pc(t){return null==t?null:t}function xc(t){return null==t?null:t.toString()}class Oc{constructor(t,e,n){r(this,{gasPrice:Pc(t),maxFeePerGas:Pc(e),maxPriorityFeePerGas:Pc(n)})}toJSON(){const{gasPrice:t,maxFeePerGas:e,maxPriorityFeePerGas:r}=this;return{_type:"FeeData",gasPrice:xc(t),maxFeePerGas:xc(e),maxPriorityFeePerGas:xc(r)}}}class Ic{constructor(t,e){Tc.set(this,void 0),null==e&&(e=Uc),Ac(this,Tc,Object.freeze(t.transactions.map((t=>{if("string"!=typeof t&&t.provider!==e)throw new Error("provider mismatch");return t}))),"f"),r(this,{provider:e,hash:Pc(t.hash),number:t.number,timestamp:t.timestamp,parentHash:t.parentHash,nonce:t.nonce,difficulty:t.difficulty,gasLimit:t.gasLimit,gasUsed:t.gasUsed,miner:t.miner,extraData:t.extraData,baseFeePerGas:Pc(t.baseFeePerGas)})}get transactions(){return Nc(this,Tc,"f")}toJSON(){const{baseFeePerGas:t,difficulty:e,extraData:r,gasLimit:n,gasUsed:s,hash:i,miner:o,nonce:a,number:c,parentHash:l,timestamp:u,transactions:h}=this;return{_type:"Block",baseFeePerGas:xc(t),difficulty:xc(e),extraData:r,gasLimit:xc(n),gasUsed:xc(s),hash:i,miner:o,nonce:a,number:c,parentHash:l,timestamp:u,transactions:h}}[(Tc=new WeakMap,Symbol.iterator)](){let t=0;return{next:()=>t{if(e!==t.provider)throw new Error("provider mismatch");return t}))),"f"),r(this,{provider:e,to:t.to,from:t.from,contractAddress:t.contractAddress,hash:t.hash,index:t.index,blockHash:t.blockHash,blockNumber:t.blockNumber,logsBloom:t.logsBloom,gasUsed:t.gasUsed,cumulativeGasUsed:t.cumulativeGasUsed,gasPrice:t.effectiveGasPrice||t.gasPrice,byzantium:t.byzantium,status:t.status,root:t.root})}get logs(){return Nc(this,kc,"f")}toJSON(){const{to:t,from:e,contractAddress:r,hash:n,index:s,blockHash:i,blockNumber:o,logsBloom:a,logs:c,byzantium:l,status:u,root:h}=this;return{_type:"TransactionReceipt",blockHash:i,blockNumber:o,byzantium:l,contractAddress:r,cumulativeGasUsed:xc(this.cumulativeGasUsed),from:e,gasPrice:xc(this.gasPrice),gasUsed:xc(this.gasUsed),hash:n,index:s,logs:c,logsBloom:a,root:h,status:u,to:t}}get length(){return this.logs.length}[(kc=new WeakMap,Symbol.iterator)](){let t=0;return{next:()=>tthis.hash(t))),new Ic(r,e)}blockWithTransactions(t,e){throw new Error}transactionRequest(t,e){return jc(this,Lc,"f").transactionRequest(t)}transactionResponse(t,e){null==(t=Object.assign({},t)).data&&null!=t.input&&(t.data=t.input),null==t.gasLimit&&t.gas&&(t.gasLimit=t.gas),t=jc(this,Lc,"f").transactionResponse(t);const r=da.fromTransaction(t.r,t.s,t.v);return t.signature=r,null==t.chainId&&(t.chainId=r.legacyChainId),new _c(t,e)}log(t,e){const r=this.object({address:this.address,blockHash:this.hash,blockNumber:this.number,data:this.data,index:this.number,removed:this.boolean,topics:this.topics,transactionHash:this.hash,transactionIndex:this.number},{index:["logIndex"]})(t);return new Sc(r,e)}receipt(t,e){const r=this.object({blockHash:this.hash,blockNumber:this.number,contractAddress:this.allowNull(this.address),cumulativeGasUsed:this.bigNumber,from:this.address,gasUsed:this.bigNumber,logs:this.arrayOf((t=>this.log(t,e))),logsBloom:this.data,root:this.allowNull(this.data),status:this.allowNull(this.number),to:this.address,gasPrice:this.allowNull(this.bigNumber),hash:this.hash,index:this.number,type:this.allowNull(this.number,0)},{hash:["transactionHash"],gasPrice:["effectiveGasPrice"],index:["transactionIndex"]})(t);if(null!=r.root)if(r.root.length<=4){const t=parseInt(r.root);if(0!==t&&1!==t)return Bo.throwError("invalid alt-root-status","BAD_DATA",{value:r.root});if(null!=r.status&&r.status!==t)return Bo.throwError("alt-root-status/status mismatch","BAD_DATA",{value:{root:r.root,status:r.status}});r.status=t,delete r.root}else if(!Xt(r.root,32))return Bo.throwError("invalid receipt root hash","BAD_DATA",{value:r.root});return new Rc(r,e)}topics(t){return jc(this,Lc,"f").topics(t)}filter(t){return jc(this,Lc,"f").filter(t)}filterLog(t){return console.log("ME",t),null}transaction(t){throw new Error}accessList(t){return uc(t)}allowFalsish(t,e){return r=>r?t.call(this,r):e}allowNull(t,e){return r=>null==r?e:t.call(this,r)}arrayOf(t){return e=>{if(!Array.isArray(e))throw new Error("not an array");return e.map((e=>t.call(this,e)))}}bigNumber(t){return Bo.getBigInt(t,"value")}uint256(t){const e=this.bigNumber(t);return(e<0||e>Gc)&&Bo.throwArgumentError("invalid uint256","value",t),e}boolean(t){switch(t){case!0:case"true":return!0;case!1:case"false":return!1}return Bo.throwArgumentError(`invalid boolean; ${JSON.stringify(t)}`,"value",t)}_hexstring(t){return null==t&&(t=!1),function(e){if(Xt(e,t))return e.toLowerCase();throw new Error("bad hexstring")}}data(t){return null==ce(t)&&Bo.throwArgumentError("","value",t),t}hash(t){return 32!==ce(t)&&Bo.throwArgumentError("","value",t),jc(this,Lc,"f").data(t)}number(t){return Bo.getNumber(t)}object(t,e){return r=>{const n={};for(const s in t){let i=s;if(e&&s in e&&!(i in r))for(const t of e[s])if(t in r){i=t;break}try{const e=t[s].call(this,r[i]);void 0!==e&&(n[s]=e)}catch(t){const e=t instanceof Error?t.message:"not-an-error";Bo.throwError(`invalid value for value.${s} (${e})`,"BAD_DATA",{value:r})}}return n}}storageSlot(t){return vt(Bo.getBigInt(t),32)}}Lc=new WeakMap,Dc=new WeakMap;class zc{constructor(t){r(this,{name:t})}clone(){return new zc(this.name)}validate(t){return this}}class Hc extends zc{constructor(t=0,e){super(`org.ethers.plugins.gas-cost#${t||0}`);const n={effectiveBlock:t};function s(t,r){let s=(e||{})[t];null==s&&(s=r),"number"!=typeof s&&Bo.throwArgumentError(`invalud value for ${t}`,"costs",e),n[t]=s}s("txBase",21e3),s("txCreate",32e3),s("txDataZero",4),s("txDataNonzero",16),s("txAccessListStorageKey",1900),s("txAccessListAddress",2400),r(this,n)}clone(){return new Hc(this.effectiveBlock,this)}}class Vc extends zc{constructor(t,e){super("org.ethers.plugins.ens"),r(this,{address:t||"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",targetNetwork:null==e?1:e})}clone(){return new Vc(this.address,this.targetNetwork)}validate(t){return t.formatter.address(this.address),this}}class Kc extends zc{constructor(t){super("org.ethers.plugins.max-priority-fee"),r(this,{priorityFee:Bo.getBigInt(t)})}async getPriorityFee(t){return this.priorityFee}clone(){return new Kc(this.priorityFee)}}var Jc,qc=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Xc=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const Yc=new Map,Zc=new Wc;class Qc{constructor(t,e,r){Jc.set(this,void 0);const n=Bo.getBigInt(e);null==r&&(r=Zc);const s=new Map;qc(this,Jc,{name:t,chainId:n,formatter:r,plugins:s},"f")}toJSON(){return{name:this.name,chainId:this.chainId}}get name(){return a(Xc(this,Jc,"f"),"name")}set name(t){c(Xc(this,Jc,"f"),"name",t)}get chainId(){return a(Xc(this,Jc,"f"),"chainId")}set chainId(t){c(Xc(this,Jc,"f"),"chainId",Bo.getBigInt(t,"chainId"))}get formatter(){return a(Xc(this,Jc,"f"),"formatter")}set formatter(t){c(Xc(this,Jc,"f"),"formatter",t)}get plugins(){return Array.from(Xc(this,Jc,"f").plugins.values())}attachPlugin(t){if(this.isFrozen())throw new Error("frozen");if(Xc(this,Jc,"f").plugins.get(t.name))throw new Error(`cannot replace existing plugin: ${t.name} `);return Xc(this,Jc,"f").plugins.set(t.name,t.validate(this)),this}getPlugin(t){return Xc(this,Jc,"f").plugins.get(t)||null}getPlugins(t){return this.plugins.filter((e=>e.name.split("#")[0]===t))}clone(){const t=new Qc(this.name,this.chainId,this.formatter);return this.plugins.forEach((e=>{t.attachPlugin(e.clone())})),t}freeze(){return Object.freeze(Xc(this,Jc,"f")),this}isFrozen(){return Object.isFrozen(Xc(this,Jc,"f"))}computeIntrinsicGas(t){const e=this.getPlugin("org.ethers.gas-cost")||new Hc;let r=e.txBase;if(null==t.to&&(r+=e.txCreate),t.data)for(let n=2;n{this._poll(t,ml(this,ol,"f"))}),"f")}async _poll(t,e){throw new Error("sub-classes must override this")}start(){ml(this,al,"f").call(this,-2),ml(this,ol,"f").on("block",ml(this,al,"f"))}stop(){ml(this,ol,"f").off("block",ml(this,al,"f"))}pause(t){this.stop()}resume(){this.start()}}ol=new WeakMap,al=new WeakMap;class El extends vl{constructor(t,e){super(t),cl.set(this,void 0),gl(this,cl,yl(e),"f")}async _poll(t,e){throw console.log(ml(this,cl,"f")),new Error("@TODO")}}cl=new WeakMap;class Tl extends vl{constructor(t,e){super(t),ll.set(this,void 0),gl(this,ll,e,"f")}async _poll(t,e){const r=await e.getTransactionReceipt(ml(this,ll,"f"));r&&e.emit(ml(this,ll,"f"),r)}}ll=new WeakMap;class kl{constructor(t,e){ul.add(this),hl.set(this,void 0),fl.set(this,void 0),dl.set(this,void 0),pl.set(this,void 0),gl(this,hl,t,"f"),gl(this,fl,yl(e),"f"),gl(this,dl,ml(this,ul,"m",wl).bind(this),"f"),gl(this,pl,-2,"f")}start(){-2===ml(this,pl,"f")&&ml(this,hl,"f").getBlockNumber().then((t=>{gl(this,pl,t,"f")})),ml(this,hl,"f").on("block",ml(this,dl,"f"))}stop(){ml(this,hl,"f").off("block",ml(this,dl,"f"))}pause(t){this.stop(),t&&gl(this,pl,-2,"f")}resume(){this.start()}}hl=new WeakMap,fl=new WeakMap,dl=new WeakMap,pl=new WeakMap,ul=new WeakSet,wl=async function(t){if(-2===ml(this,pl,"f"))return;const e=yl(ml(this,fl,"f"));e.fromBlock=ml(this,pl,"f")+1,e.toBlock=t,gl(this,pl,t,"f");const r=await ml(this,hl,"f").getLogs(e);for(const t of r)ml(this,hl,"f").emit(ml(this,fl,"f"),t)};var Al,Nl,Pl,xl,Ol,Il,Sl,Rl,_l,Cl,Bl,Fl,Ul,Ll,Dl,Ml=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},jl=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const Gl=BigInt(2);function $l(t,e){return t+":"+JSON.stringify(e,((t,e)=>{if("bigint"==typeof e)return`bigint:${e.toString()}`;if("string"==typeof e)return e.toLowerCase();if("object"==typeof e&&!Array.isArray(e)){const t=Object.keys(e);return t.sort(),t.reduce(((t,r)=>(t[r]=e[r],t)),{})}return e}))}class Wl{constructor(t){r(this,{name:t})}start(){}stop(){}pause(t){}resume(){}}function zl(t){return(t=Array.from(new Set(t).values())).sort(),t}async function Hl(t,e){if(null==t)throw new Error("invalid event");if(Array.isArray(t)&&(t={topics:t}),"string"==typeof t)switch(t){case"block":case"pending":case"debug":case"network":return{type:t,tag:t}}if(Xt(t,32)){const e=t.toLowerCase();return{type:"transaction",tag:$l("tx",{hash:e}),hash:e}}if(t.orphan){const e=t;return{type:"orphan",tag:$l("orphan",e),filter:(r=e,JSON.parse(JSON.stringify(r)))}}var r;if(t.address||t.topics){const r=t,n={topics:(r.topics||[]).map((t=>null==t?null:Array.isArray(t)?zl(t.map((t=>t.toLowerCase()))):t.toLowerCase()))};if(r.address){const t=[],s=[],i=r=>{Xt(r)?t.push(r):s.push((async()=>{t.push(await Ts(r,e))})())};Array.isArray(r.address)?r.address.forEach(i):i(r.address),s.length&&await Promise.all(s),n.address=zl(t.map((t=>t.toLowerCase())))}return{filter:n,tag:$l("event",n),type:"event"}}return Bo.throwArgumentError("unknown ProviderEvent","event",t)}function Vl(){return(new Date).getTime()}class Kl{constructor(t){if(Al.add(this),Nl.set(this,void 0),Pl.set(this,void 0),xl.set(this,void 0),Ol.set(this,void 0),Il.set(this,void 0),Sl.set(this,void 0),Rl.set(this,void 0),_l.set(this,void 0),Cl.set(this,void 0),"any"===t)Ml(this,Il,!0,"f"),Ml(this,Ol,null,"f");else if(t){const e=Qc.from(t);Ml(this,Il,!1,"f"),Ml(this,Ol,Promise.resolve(e),"f"),setTimeout((()=>{this.emit("network",e,null)}),0)}else Ml(this,Il,!1,"f"),Ml(this,Ol,null,"f");Ml(this,Sl,new Map,"f"),Ml(this,Nl,new Map,"f"),Ml(this,Pl,new Map,"f"),Ml(this,xl,null,"f"),Ml(this,Rl,0,"f"),Ml(this,_l,new Map,"f"),Ml(this,Cl,!1,"f")}get plugins(){return Array.from(jl(this,Pl,"f").values())}attachPlugin(t){if(jl(this,Pl,"f").get(t.name))throw new Error(`cannot replace existing plugin: ${t.name} `);return jl(this,Pl,"f").set(t.name,t.validate(this)),this}getPlugin(t){return jl(this,Pl,"f").get(t)||null}set disableCcipRead(t){Ml(this,Cl,!!t,"f")}get disableCcipRead(){return jl(this,Cl,"f")}async ccipReadFetch(t,e,r){if(this.disableCcipRead||0===r.length||null==t.to)return null;const n=t.to.toLowerCase(),s=e.toLowerCase(),i=[];for(let e=0;e=400&&u.statusCode<500)return Bo.throwError(`response not found during CCIP fetch: ${l}`,"OFFCHAIN_FAULT",{reason:"404_MISSING_RESOURCE",transaction:t,info:{url:o,errorMessage:l}});i.push(l)}return Bo.throwError(`error encountered during CCIP fetch: ${i.map((t=>JSON.stringify(t))).join(", ")}`,"OFFCHAIN_FAULT",{reason:"500_SERVER_ERROR",transaction:t,info:{urls:r,errorMessages:i}})}_wrapTransaction(t,e,r){return t}_detectNetwork(){return Bo.throwError("sub-classes must implement this","UNSUPPORTED_OPERATION",{operation:"_detectNetwork"})}async _perform(t){return Bo.throwError(`unsupported method: ${t.method}`,"UNSUPPORTED_OPERATION",{operation:t.method,info:t})}async getBlockNumber(){return Bo.getNumber(await jl(this,Al,"m",Bl).call(this,{method:"getBlockNumber"}),"%response")}async _getAddress(t){return"string"==typeof t?t:await t.getAddress()}async _getBlockTag(t){const e=await this.getNetwork();if("number"==typeof t&&Number.isSafeInteger(t)&&t<0){let r=await this.getBlockNumber();return r+=t,r<0&&(r=0),e.formatter.blockTag(r)}return e.formatter.blockTag(t)}async getNetwork(){if(null==jl(this,Ol,"f")){const t=this._detectNetwork().then((t=>(this.emit("network",t,null),t)),(e=>{throw jl(this,Ol,"f")===t&&Ml(this,Ol,null,"f"),e}));return Ml(this,Ol,t,"f"),await t}const t=jl(this,Ol,"f"),[e,r]=await Promise.all([t,this._detectNetwork()]);return e.chainId!==r.chainId&&(jl(this,Il,"f")?(this.emit("network",r,e),jl(this,Ol,"f")===t&&Ml(this,Ol,Promise.resolve(r),"f")):Bo.throwError(`network changed: ${e.chainId} => ${r.chainId} `,"NETWORK_ERROR",{event:"changed"})),e.clone().freeze()}async getFeeData(){const{block:e,gasPrice:r}=await t({block:this.getBlock("latest"),gasPrice:(async()=>{try{const t=await jl(this,Al,"m",Bl).call(this,{method:"getGasPrice"});return Bo.getBigInt(t,"%response")}catch(t){}return null})()});let n=null,s=null;if(e&&e.baseFeePerGas){s=BigInt("1500000000");const t=(await this.getNetwork()).getPlugin("org.ethers.plugins.max-priority-fee");t&&(s=await t.getPriorityFee(this)),n=e.baseFeePerGas*Gl+s}return new Oc(r,n,s)}async _getTransaction(e){const r=await this.getNetwork(),n=Object.assign({},e,await t({to:e.to?Ts(e.to,this):void 0,from:e.from?Ts(e.from,this):void 0}));return r.formatter.transactionRequest(n)}async estimateGas(t){const e=await this._getTransaction(t);return Bo.getBigInt(await jl(this,Al,"m",Bl).call(this,{method:"estimateGas",transaction:e}),"%response")}async call(e){const{tx:r,blockTag:n}=await t({tx:this._getTransaction(e),blockTag:this._getBlockTag(e.blockTag)});return jl(this,Al,"m",Fl).call(this,r,n,e.enableCcipRead?0:-1)}async getBalanceOf(e,r){const{address:n,blockTag:s}=await t({address:Ts(e),blockTag:this._getBlockTag(r)});return Bo.getBigInt(await jl(this,Al,"m",Bl).call(this,{method:"getBalance",address:n,blockTag:s}),"%response")}async getTransactionCountOf(e,r){const{address:n,blockTag:s}=await t({address:Ts(e),blockTag:this._getBlockTag(r)});return Bo.getNumber(await jl(this,Al,"m",Bl).call(this,{method:"getTransactionCount",address:n,blockTag:s}),"%response")}async getCode(e,r){const{address:n,blockTag:s}=await t({address:Ts(e),blockTag:this._getBlockTag(r)});return ie(await jl(this,Al,"m",Bl).call(this,{method:"getCode",address:n,blockTag:s}))}async getStorageAt(e,r,n){const s=Bo.getBigInt(r),{address:i,blockTag:o}=await t({address:Ts(e),blockTag:this._getBlockTag(n)});return ie(await jl(this,Al,"m",Bl).call(this,{method:"getStorageAt",address:i,position:s,blockTag:o}))}async broadcastTransaction(t){throw new Error}async getBlock(t){const e=(await this.getNetwork()).formatter,r=await jl(this,Al,"m",Ul).call(this,t,!1);return null==r?null:e.block(r,this)}async getBlockWithTransactions(t){const e=(await this.getNetwork()).formatter,r=jl(this,Al,"m",Ul).call(this,t,!0);return null==r?null:e.blockWithTransactions(r,this)}async getTransaction(t){const e=(await this.getNetwork()).formatter,r=await jl(this,Al,"m",Bl).call(this,{method:"getTransaction",hash:t});return e.transactionResponse(r,this)}async getTransactionReceipt(t){const e=(await this.getNetwork()).formatter,r=await jl(this,Al,"m",Bl).call(this,{method:"getTransactionReceipt",hash:t});if(null==r)return null;if(null==r.gasPrice&&null==r.effectiveGasPrice){const e=await jl(this,Al,"m",Bl).call(this,{method:"getTransaction",hash:t});r.effectiveGasPrice=e.gasPrice}return e.receipt(r,this)}async _getFilter(e){const r={};e.address&&(Array.isArray(e.address)?r.address=Promise.all(e.address.map((t=>Ts(t,this)))):r.address=Ts(e.address,this));const n=t=>{null!=e[t]&&(r[t]=this._getBlockTag(e[t]))};n("fromBlock"),n("toBlock");const s=await t(r);if(Array.isArray(s.address)&&s.address.sort(),e.blockHash){if(e.fromBlock||e.toBlock)throw new Error("invalid filter");s.blockHash=e.blockHash}return s}async getLogs(e){const{network:r,filter:n}=await t({network:this.getNetwork(),filter:this._getFilter(e)});return(await jl(this,Al,"m",Bl).call(this,{method:"getLogs",filter:n})).map((t=>r.formatter.log(t,this)))}_getProvider(t){return Bo.throwError("provider cannot connect to target network","UNSUPPORTED_OPERATION",{operation:"_getProvider()"})}async getResolver(t){return await Zo.fromName(this,t)}async getAvatar(t){const e=await this.getResolver(t);return e?await e.getAvatar():null}async resolveName(t){if("string"!=typeof t){const e=await t.getAddress();return null==e?Bo.throwArgumentError("Addressable returned no address","name",t):e}{const e=await this.getResolver(t);if(e)return await e.getAddress()}return null}async lookupAddress(t){throw new Error}async waitForTransaction(t,e=1,r){return 0===e?this.getTransactionReceipt(t):new Promise((async(n,s)=>{let i=null;const o=async r=>{try{const s=await this.getTransactionReceipt(t);if(null!=s&&r-s.blockNumber+1>=e)return n(s),this.off("block",o),void(i&&(clearTimeout(i),i=null))}catch(t){console.log("EEE",t)}this.once("block",o)};null!=r&&(i=setTimeout((()=>{null!=i&&(i=null,this.off("block",o),s(Bo.makeError("timeout","TIMEOUT",{})))}),r)),o(await this.getBlockNumber())}))}async waitForBlock(t){throw new Error}_clearTimeout(t){const e=jl(this,_l,"f").get(t);e&&(e.timer&&clearTimeout(e.timer),jl(this,_l,"f").delete(t))}_setTimeout(t,e=0){var r,n;const s=(Ml(this,Rl,(n=jl(this,Rl,"f"),r=n++,n),"f"),r),i=()=>{jl(this,_l,"f").delete(s),t()};if(this.paused)jl(this,_l,"f").set(s,{timer:null,func:i,time:e});else{const t=setTimeout(i,e);jl(this,_l,"f").set(s,{timer:t,func:i,time:Vl()})}return s}_forEachSubscriber(t){for(const e of jl(this,Nl,"f").values())t(e.subscriber)}_getSubscriber(t){switch(t.type){case"debug":case"network":return new Wl(t.type);case"block":return new bl(this);case"event":return new kl(this,t.filter);case"transaction":return new Tl(this,t.hash);case"orphan":return new El(this,t.filter)}throw new Error(`unsupported event: ${t.type}`)}_recoverSubscriber(t,e){for(const r of jl(this,Nl,"f").values())if(r.subscriber===t){r.started&&r.subscriber.stop(),r.subscriber=e,r.started&&e.start(),null!=jl(this,xl,"f")&&e.pause(jl(this,xl,"f"));break}}async on(t,e){const r=await jl(this,Al,"m",Dl).call(this,t);return r.listeners.push({listener:e,once:!1}),r.started||(r.subscriber.start(),r.started=!0,null!=jl(this,xl,"f")&&r.subscriber.pause(jl(this,xl,"f"))),this}async once(t,e){const r=await jl(this,Al,"m",Dl).call(this,t);return r.listeners.push({listener:e,once:!0}),r.started||(r.subscriber.start(),r.started=!0,null!=jl(this,xl,"f")&&r.subscriber.pause(jl(this,xl,"f"))),this}async emit(t,...e){const r=await jl(this,Al,"m",Ll).call(this,t,e);if(!r)return!1;const n=r.listeners.length;return r.listeners=r.listeners.filter((({listener:r,once:n})=>{const s=new o(this,n?null:r,t);return setTimeout((()=>{r.call(this,...e,s)}),0),!n})),n>0}async listenerCount(t){if(t){const e=await jl(this,Al,"m",Ll).call(this,t);return e?e.listeners.length:0}let e=0;for(const{listeners:t}of jl(this,Nl,"f").values())e+=t.length;return e}async listeners(t){if(t){const e=await jl(this,Al,"m",Ll).call(this,t);return e?e.listeners.map((({listener:t})=>t)):[]}let e=[];for(const{listeners:t}of jl(this,Nl,"f").values())e=e.concat(t.map((({listener:t})=>t)));return e}async off(t,e){const r=await jl(this,Al,"m",Ll).call(this,t);if(!r)return this;if(e){const t=r.listeners.map((({listener:t})=>t)).indexOf(e);t>=0&&r.listeners.splice(t,1)}return e&&0!==r.listeners.length||(r.started&&r.subscriber.stop(),jl(this,Nl,"f").delete(r.tag)),this}async removeAllListeners(t){if(t){const{tag:e,started:r,subscriber:n}=await jl(this,Al,"m",Dl).call(this,t);r&&n.stop(),jl(this,Nl,"f").delete(e)}else for(const[t,{started:e,subscriber:r}]of jl(this,Nl,"f"))e&&r.stop(),jl(this,Nl,"f").delete(t);return this}async addListener(t,e){return await this.on(t,e)}async removeListener(t,e){return this.off(t,e)}async shutdown(){this.removeAllListeners();for(const t of jl(this,_l,"f").keys())this._clearTimeout(t)}get paused(){return null!=jl(this,xl,"f")}pause(t){if(null!=jl(this,xl,"f")){if(jl(this,xl,"f")==!!t)return;return Bo.throwError("cannot change pause type; resume first","UNSUPPORTED_OPERATION",{operation:"pause"})}this._forEachSubscriber((e=>e.pause(t))),Ml(this,xl,!!t,"f");for(const t of jl(this,_l,"f").values())t.timer&&clearTimeout(t.timer),t.time=Vl()-t.time}resume(){if(null!=jl(this,xl,"f")){this._forEachSubscriber((t=>t.resume())),Ml(this,xl,null,"f");for(const t of jl(this,_l,"f").values()){let e=t.time;e<0&&(e=0),t.time=Vl(),setTimeout(t.func,e)}}}}function Jl(t,e){try{const r=ql(t,e);if(r)return ri(r)}catch(t){}return null}function ql(t,e){if("0x"===t)return null;try{const r=Bo.getNumber(le(t,e,e+32)),n=Bo.getNumber(le(t,r,r+32));return le(t,r+32,r+32+n)}catch(t){}return null}function Xl(t){const e=Et(t);if(e.length>32)throw new Error("internal; should not happen");const r=new Uint8Array(32);return r.set(e,32-e.length),r}function Yl(t){if(t.length%32==0)return t;const e=new Uint8Array(32*Math.ceil(t.length/32));return e.set(t),e}Nl=new WeakMap,Pl=new WeakMap,xl=new WeakMap,Ol=new WeakMap,Il=new WeakMap,Sl=new WeakMap,Rl=new WeakMap,_l=new WeakMap,Cl=new WeakMap,Al=new WeakSet,Bl=async function(t){const e=$l(t.method,t);let r=jl(this,Sl,"f").get(e);return r||(r=this._perform(t),jl(this,Sl,"f").set(e,r),setTimeout((()=>{jl(this,Sl,"f").get(e)===r&&jl(this,Sl,"f").delete(e)}),250)),await r},Fl=async function t(e,r,n){n>=10&&Bo.throwError("CCIP read exceeded maximum redirections","OFFCHAIN_FAULT",{reason:"TOO_MANY_REDIRECTS",transaction:Object.assign({},e,{blockTag:r,enableCcipRead:!0})});const s=e;try{return ie(await this._perform({method:"call",transaction:s,blockTag:r}))}catch(e){if(!this.disableCcipRead&&u(e)&&n>=0&&"latest"===r&&null!=s.to&&"0x556f1830"===le(e.data,0,4)){const i=e.data,o=await Ts(s.to,this);let a;try{a=function(t){const e={sender:"",urls:[],calldata:"",selector:"",extraData:"",errorArgs:[]};if(ce(t)<160)throw new Error("insufficient OffchainLookup data");const r=le(t,0,32);if(le(r,0,12)!==le(tu,0,12))throw new Error("corrupt OffchainLookup sender");e.sender=le(r,12);try{const r=[],n=Bo.getNumber(le(t,32,64)),s=Bo.getNumber(le(t,n,n+32)),i=le(t,n+32);for(let t=0;te[t])),e}(le(e.data,4))}catch(t){return Bo.throwError(t.message,"OFFCHAIN_FAULT",{reason:"BAD_DATA",transaction:s,info:{data:i}})}if(a.sender.toLowerCase()!==o.toLowerCase())return Bo.throwError("CCIP Read sender mismatch","CALL_EXCEPTION",{data:i,transaction:s,errorSignature:"OffchainLookup(address,string[],bytes,bytes4,bytes)",errorName:"OffchainLookup",errorArgs:a.errorArgs});const c=await this.ccipReadFetch(s,a.calldata,a.urls);return null==c?Bo.throwError("CCIP Read failed to fetch data","OFFCHAIN_FAULT",{reason:"FETCH_FAILED",transaction:s,info:{data:e.data,errorArgs:a.errorArgs}}):jl(this,Al,"m",t).call(this,{to:o,data:ae([a.selector,Ql([c,a.extraData])])},r,n+1)}throw e}},Ul=async function(t,e){const r=(await this.getNetwork()).formatter;return Xt(t,32)?await jl(this,Al,"m",Bl).call(this,{method:"getBlock",blockHash:t,includeTransactions:e}):await jl(this,Al,"m",Bl).call(this,{method:"getBlock",blockTag:r.blockTag(t),includeTransactions:e})},Ll=async function(t,e){let r=await Hl(t,this);return"event"===r.type&&e&&e.length>0&&!0===e[0].removed&&(r=await Hl({orphan:"drop-log",log:e[0]},this)),jl(this,Nl,"f").get(r.tag)||null},Dl=async function(t){const e=await Hl(t,this),r=e.tag;let n=jl(this,Nl,"f").get(r);if(!n){n={subscriber:this._getSubscriber(e),tag:r,addressableMap:new WeakMap,nameMap:new Map,started:!1,listeners:[]},jl(this,Nl,"f").set(r,n)}return n};const Zl=new Uint8Array([]);function Ql(t){const e=[];let r=0;for(let n=0;nnull==t?Bo.throwArgumentError("transaction to ENS name not configured","tx.to",n.to):t))),null!=n.from){const t=n.from;n.from=Promise.all([this.getAddress(),this.resolveName(t)]).then((([t,e])=>e&&t.toLowerCase()===e.toLowerCase()?t:Bo.throwArgumentError("transaction from mismatch","tx.from",e)))}return null==n.nonce&&(n.nonce=this.getTransactionCount()),n=t(n),null==n.gasLimit&&(n.gasLimit=r.estimateGas(n)),n=t(n),await t(n)}async resolveName(t){const e=au(this,eu,"m",ru).call(this,"resolveName");return await e.resolveName(t)}async sendTransaction(t){const e=au(this,eu,"m",ru).call(this,"sendTransaction"),r=Ec.from(await this.populateTransaction(t));return await e.broadcastTransaction(await this.signTransaction(r))}}eu=new WeakSet,ru=function(t){return this.provider?this.provider:Bo.throwError("missing provider","UNSUPPORTED_OPERATION",{operation:t})},nu=async function(t){const e=[];if(null!=(t=Object.assign({},t)).from){const r=t.from;e.push(Promise.all([this.getAddress(),this.resolveName(r)]).then((([e,r])=>{r&&e.toLowerCase()===r.toLowerCase()||Bo.throwArgumentError("transaction from mismatch","tx.from",r),t.from=e})))}return await Promise.all(e),t};class uu extends lu{constructor(t,e){super(e),su.add(this),r(this,{address:t})}async getAddress(){return this.address}connect(t){return new uu(this.address,t)}async signTransaction(t){au(this,su,"m",iu).call(this,"transactions","signTransaction")}async signMessage(t){au(this,su,"m",iu).call(this,"messages","signMessage")}async signTypedData(t,e,r){au(this,su,"m",iu).call(this,"typed-data","signTypedData")}}su=new WeakSet,iu=function(t,e){return Bo.throwError(`VoidSigner cannot sign ${t}`,"UNSUPPORTED_OPERATION",{operation:e})};class hu extends lu{constructor(t){super(t.provider),ou.set(this,void 0),cu(this,ou,t,"f")}async getAddress(){return await au(this,ou,"f").getAddress()}connect(t){return new hu(au(this,ou,"f").connect(t))}async signTransaction(t){return await au(this,ou,"f").signTransaction(t)}async sendTransaction(t){return await au(this,ou,"f").sendTransaction(t)}async signMessage(t){return await au(this,ou,"f").signMessage(t)}async signTypedData(t,e,r){return await au(this,ou,"f").signTypedData(t,e,r)}}ou=new WeakMap;const fu=new Set;function du(t){fu.has(t)||(fu.add(t),console.log("========= NOTICE ========="),console.log(`Request-Rate Exceeded for ${t} (this message will not be repeated)`),console.log(""),console.log("The default API keys for each service are provided as a highly-throttled,"),console.log("community resource for low-traffic projects and early prototyping."),console.log(""),console.log("While your application will continue to function, we highly recommended"),console.log("signing up for your own API keys to improve performance, increase your"),console.log("request rate/limit and enable other perks, such as metrics and advanced APIs."),console.log(""),console.log("For more details: https://docs.ethers.io/api-keys/"),console.log("=========================="))}var pu,wu,gu,mu,yu,bu,vu,Eu,Tu=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},ku=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class Au{constructor(t){pu.add(this),wu.set(this,void 0),gu.set(this,void 0),mu.set(this,void 0),yu.set(this,void 0),Tu(this,wu,t,"f"),Tu(this,gu,null,"f"),Tu(this,mu,ku(this,pu,"m",bu).bind(this),"f"),Tu(this,yu,null,"f")}_subscribe(t){throw new Error("subclasses must override this")}_emitResults(t,e){throw new Error("subclasses must override this")}_recover(t){throw new Error("subclasses must override this")}start(){ku(this,pu,"m",bu).call(this,-2)}stop(){ku(this,pu,"m",vu).call(this),ku(this,wu,"f").off("block",ku(this,mu,"f"))}pause(t){t&&ku(this,pu,"m",vu).call(this),ku(this,wu,"f").off("block",ku(this,mu,"f"))}resume(){this.start()}}wu=new WeakMap,gu=new WeakMap,mu=new WeakMap,yu=new WeakMap,pu=new WeakSet,bu=async function(t){try{null==ku(this,gu,"f")&&Tu(this,gu,this._subscribe(ku(this,wu,"f")),"f");const t=await ku(this,gu,"f");if(null==t)return void ku(this,wu,"f")._recoverSubscriber(this,this._recover(ku(this,wu,"f")));const e=await ku(this,wu,"f").getNetwork();if(ku(this,yu,"f")||Tu(this,yu,e,"f"),ku(this,yu,"f").chainId!==e.chainId)throw new Error("chaid changed");const r=await ku(this,wu,"f").send("eth_getFilterChanges",[t]);await this._emitResults(ku(this,wu,"f"),r)}catch(t){console.log("@TODO",t)}ku(this,wu,"f").once("block",ku(this,mu,"f"))},vu=function(){const t=ku(this,gu,"f");t&&(Tu(this,gu,null,"f"),t.then((t=>{ku(this,wu,"f").send("eth_uninstallFilter",[t])})))};class Nu extends Au{constructor(t,e){var r;super(t),Eu.set(this,void 0),Tu(this,Eu,(r=e,JSON.parse(JSON.stringify(r))),"f")}_recover(t){return new kl(t,ku(this,Eu,"f"))}async _subscribe(t){const e=await t.send("eth_newFilter",[ku(this,Eu,"f")]);return console.log("____SUB",e),e}async _emitResults(t,e){const r=await t.getNetwork();for(const n of e){const e=r.formatter.log(n,t);t.emit(ku(this,Eu,"f"),e)}}}Eu=new WeakMap;class Pu extends Au{async _subscribe(t){return await t.send("eth_newPendingTransactionFilter",[])}async _emitResults(t,e){const r=await t.getNetwork();for(const n of e)t.emit("pending",r.formatter.hash(n))}}var xu,Ou,Iu,Su,Ru=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},_u=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const Cu="bigint,boolean,function,number,string,symbol".split(/,/g);function Bu(t){if(null==t||Cu.indexOf(typeof t)>=0)return t;if("function"==typeof t.getAddress)return t;if(Array.isArray(t))return t.map(Bu);if("object"==typeof t)return Object.keys(t).reduce(((e,r)=>(e[r]=t[r],e)),{});throw new Error(`should not happen: ${t} (${typeof t})`)}function Fu(t){return t?t.toLowerCase():t}const Uu={polling:!1,batchMaxSize:1<<20,batchStallTime:250};class Lu{constructor(t,e){r(this,{provider:t,address:e})}connect(t){return Bo.throwError("cannot reconnect JsonRpcSigner","UNSUPPORTED_OPERATION",{operation:"signer.connect"})}async getAddress(){return this.address}async getNetwork(){return await this.provider.getNetwork()}async getFeeData(){return await this.provider.getFeeData()}async estimateGas(t){return await this.provider.estimateGas(t)}async call(t){return await this.provider.call(t)}async resolveName(t){return await this.provider.resolveName(t)}async getBalance(t){return await this.provider.getBalanceOf(this.address)}async getTransactionCount(t){return await this.provider.getTransactionCountOf(this.address)}async sendUncheckedTransaction(t){const e=Bu(t),r=[];if(e.from){const n=e.from;r.push((async()=>{const r=await Ts(n,this.provider);null!=r&&r.toLowerCase()===this.address.toLowerCase()||Bo.throwArgumentError("from address mismatch","transaction",t),e.from=r})())}else e.from=this.address;if(null==e.gasLimit&&r.push((async()=>{e.gasLimit=await this.provider.estimateGas(Object.assign(Object.assign({},e),{from:this.address}))})()),null!=e.to){const t=e.to;r.push((async()=>{e.to=await Ts(t,this.provider)})())}r.length&&await Promise.all(r);const n=this.provider.getRpcTransaction(e);return this.provider.send("eth_sendTransaction",[n])}async sendTransaction(t){const e=await this.provider.getBlockNumber(),r=await this.sendUncheckedTransaction(t);return await new Promise(((t,n)=>{const s=async n=>{const i=await this.provider.getTransaction(r);null==i?this.provider._setTimeout((()=>{s(4e3)}),n):t(this.provider._wrapTransaction(i,r,e))};s(1e3)}))}async signTransaction(t){const e=Bu(t);if(e.from){const r=await Ts(e.from,this.provider);if(null==r||r.toLowerCase()!==this.address.toLowerCase())return Bo.throwArgumentError("from address mismatch","transaction",t);e.from=r}else e.from=this.address;const r=this.provider.getRpcTransaction(e);return await this.provider.send("eth_sign_Transaction",[r])}async signMessage(t){const e="string"==typeof t?Zs(t):t;return await this.provider.send("personal_sign",[ie(e),this.address.toLowerCase()])}async signTypedData(t,e,r){const n=Bu(r),s=await to.resolveNames(t,e,n,(async t=>{const e=await Ts(t);return null==e?Bo.throwArgumentError("TypedData does not support null address","value",t):e}));return await this.provider.send("eth_signTypedData_v4",[this.address.toLowerCase(),JSON.stringify(to.getPayload(s.domain,e,s.value))])}async unlock(t){return this.provider.send("personal_unlockAccount",[this.address.toLowerCase(),t,null])}async _legacySignMessage(t){const e="string"==typeof t?Zs(t):t;return await this.provider.send("eth_sign",[this.address.toLowerCase(),ie(e)])}}class Du extends Kl{constructor(t){super(t),xu.set(this,void 0),Ou.set(this,void 0),Ru(this,xu,1,"f"),Ru(this,Ou,Object.assign({},Uu),"f")}_getOptions(t){return _u(this,Ou,"f")[t]}_setOptions(t){for(const e in t){const r=e,n=t[r];if(typeof n!=typeof _u(this,Ou,"f")[r])return Bo.throwArgumentError("invalid option value",`options.${r}`,n)}for(const e in t){const r=e;_u(this,Ou,"f")[r]=t[r]}}prepareRequest(t,e){var r,n;return{method:t,params:e,id:(Ru(this,xu,(n=_u(this,xu,"f"),r=n++,n),"f"),r),jsonrpc:"2.0"}}async send(t,e){throw new Error("sub-class must implement this")}async getSigner(t=0){const e=await this.getNetwork(),r=await this.send("eth_accounts",[]);if("number"==typeof t){if(t>r.length)throw new Error("no such account");return new Lu(this,r[t])}t=e.formatter.address(t);for(const t of r)if(e.formatter.address(t)===t)return new Lu(this,t);throw new Error("invalid account")}async _detectNetwork(){return Qc.from(Bo.getBigInt(await this._perform({method:"chainId"})))}_getSubscriber(t){return"pending"===t.type?new Pu(this):"event"===t.type?new Nu(this,t.filter):"orphan"===t.type&&"drop-log"===t.filter.orphan?new Wl("orphan"):super._getSubscriber(t)}getRpcTransaction(t){const e={};return["chainId","gasLimit","gasPrice","type","maxFeePerGas","maxPriorityFeePerGas","nonce","value"].forEach((r=>{if(null==t[r])return;let n=r;"gasLimit"===r&&(n="gas"),e[n]=oe(t[r])})),["from","to","data"].forEach((r=>{null!=t[r]&&(e[r]=ie(t[r]))})),t.accessList&&(e.accessList=uc(t.accessList)),e}getRpcRequest(t){switch(t.method){case"chainId":return{method:"eth_chainId",args:[]};case"getBlockNumber":return{method:"eth_blockNumber",args:[]};case"getGasPrice":return{method:"eth_gasPrice",args:[]};case"getBalance":return{method:"eth_getBalance",args:[Fu(t.address),t.blockTag]};case"getTransactionCount":return{method:"eth_getTransactionCount",args:[Fu(t.address),t.blockTag]};case"getCode":return{method:"eth_getCode",args:[Fu(t.address),t.blockTag]};case"getStorageAt":return{method:"eth_getStorageAt",args:[Fu(t.address),"0x"+t.position.toString(16),t.blockTag]};case"sendTransaction":return{method:"eth_sendRawTransaction",args:[t.signedTransaction]};case"getBlock":if("blockTag"in t)return{method:"eth_getBlockByNumber",args:[t.blockTag,!!t.includeTransactions]};if("blockHash"in t)return{method:"eth_getBlockByHash",args:[t.blockHash,!!t.includeTransactions]};break;case"getTransaction":return{method:"eth_getTransactionByHash",args:[t.hash]};case"getTransactionReceipt":return{method:"eth_getTransactionReceipt",args:[t.hash]};case"call":return{method:"eth_call",args:[this.getRpcTransaction(t.transaction),t.blockTag]};case"estimateGas":return{method:"eth_estimateGas",args:[this.getRpcTransaction(t.transaction)]};case"getLogs":return t.filter&&null!=t.filter.address&&(Array.isArray(t.filter.address)?t.filter.address=t.filter.address.map(Fu):t.filter.address=Fu(t.filter.address)),{method:"eth_getLogs",args:[t.filter]}}return null}getRpcError(t,e,r){if("eth_call"===t){const t=Gu(r);return t?Bo.makeError("execution reverted during JSON-RPC call","CALL_EXCEPTION",{data:t.data,transaction:e[0]}):Bo.makeError("missing revert data during JSON-RPC call","CALL_EXCEPTION",{data:"0x",transaction:e[0],info:{error:r}})}const n=JSON.stringify(function(t){const e=[];return $u(t,e),e}(r));return n.match(/insufficient funds|base fee exceeds gas limit/)?Bo.makeError("insufficient funds for intrinsic transaction cost","INSUFFICIENT_FUNDS",{transaction:e[0]}):n.match(/nonce/)&&n.match(/too low/)?Bo.makeError("nonce has already been used","NONCE_EXPIRED",{transaction:e[0]}):n.match(/replacement transaction/)&&n.match(/underpriced/)?Bo.makeError("replacement fee too low","REPLACEMENT_UNDERPRICED",{transaction:e[0]}):n.match(/only replay-protected/)?Bo.makeError("legacy pre-eip-155 transactions not supported","UNSUPPORTED_OPERATION",{operation:t,info:{transaction:e[0]}}):"estimateGas"===t&&n.match(/gas required exceeds allowance|always failing transaction|execution reverted/)?Bo.makeError("cannot estimate gas; transaction may fail or may require manual gas limit","UNPREDICTABLE_GAS_LIMIT",{transaction:e[0]}):r}async _perform(t){if("call"===t.method||"estimateGas"===t.method){let e=t.transaction;if(e&&null!=e.type&&Bo.getBigInt(e.type)&&null==e.maxFeePerGas&&null==e.maxPriorityFeePerGas){const r=await this.getFeeData();null==r.maxFeePerGas&&null==r.maxPriorityFeePerGas&&(t=Object.assign({},t,{transaction:Object.assign({},e,{type:void 0})}))}}const e=this.getRpcRequest(t);if(null!=e){this.emit("debug",{type:"sendRequest",request:e});try{const t=await this.send(e.method,e.args);return this.emit("debug",{type:"getResponse",result:t}),t}catch(t){throw this.emit("debug",{type:"getError",error:t}),this.getRpcError(e.method,e.args,t)}}return super._perform(t)}}xu=new WeakMap,Ou=new WeakMap;class Mu extends Du{constructor(t,e){null==t&&(t="http://localhost:8545"),super(e),Iu.set(this,void 0),Su.set(this,void 0),"string"==typeof t?Ru(this,Iu,{request:new Io(t)},"f"):(Ru(this,Iu,Object.assign({},t),"f"),_u(this,Iu,"f").request=_u(this,Iu,"f").request.clone()),Ru(this,Su,4e3,"f")}async send(t,e){var r;r=e,e=JSON.parse(JSON.stringify(r));const n=Object.assign({},_u(this,Iu,"f"));n.request=n.request.clone(),n.request.body=this.prepareRequest(t,e);const s=(await Co(n)).bodyJson;return"error"in s?Bo.throwError("error from JSON-RPC","UNKNOWN_ERROR",{result:s}):s.result}get pollingInterval(){return _u(this,Su,"f")}set pollingInterval(t){if(!Number.isInteger(t)||t<0)throw new Error("invalid interval");Ru(this,Su,t,"f"),this._forEachSubscriber((t=>{(function(t){return t&&"number"==typeof t.pollingInterval})(t)&&(t.pollingInterval=_u(this,Su,"f"))}))}}Iu=new WeakMap,Su=new WeakMap;class ju extends Mu{constructor(t,e){super(t,e),r(this,{network:e})}async _detectNetwork(){return this.network}}function Gu(t){if(null==t)return null;if("string"==typeof t.message&&t.message.match("reverted")&&Xt(t.data))return{message:t.message,data:t.data};if("object"==typeof t){for(const e in t){const r=Gu(t[e]);if(r)return r}return null}if("string"==typeof t)try{return Gu(JSON.parse(t))}catch(t){}return null}function $u(t,e){if(null!=t){if("string"==typeof t.message&&e.push(t.message),"object"==typeof t)for(const r in t)$u(t[r],e);if("string"==typeof t)try{return $u(JSON.parse(t),e)}catch(t){}}}const Wu="9f7d929b018cdffb338517efa06f58359e86ff1ffd350bc889738523659e7972";class zu extends ju{constructor(t="homestead",e){const n=Qc.from(t);null==e&&(e=Wu);super(zu.getConnection(n,e),n),r(this,{apiKey:e}),super._setOptions({polling:!0})}_getProvider(t){try{return new zu(t,this.apiKey)}catch(t){}return super._getProvider(t)}static getConnection(t,e){null==e&&(e=Wu);const r=new Io(`https://${function(t){switch(t){case"homestead":return"rpc.ankr.com/eth";case"matic":return"rpc.ankr.com/polygon";case"arbitrum":return"rpc.ankr.com/arbitrum"}return Bo.throwArgumentError("unsupported network","network",t)}(t.name)}/${e}`);r.allowGzip=!0;return{request:r,throttleRetry:async(t,r,n)=>(e===Wu&&du("AnkrProvider"),!0)}}isCommunityResource(){return this.apiKey===Wu}}const Hu="_gg7wSSi0KMBsdKnGVfHDueq6xMB9EkC";class Vu extends ju{constructor(t="homestead",e){const n=Qc.from(t);null==e&&(e=Hu),super(Vu.getConnection(n,e),n),r(this,{apiKey:e})}_getProvider(t){try{return new Vu(t,this.apiKey)}catch(t){}return super._getProvider(t)}isCommunityResource(){return this.apiKey===Hu}static getConnection(t,e){null==e&&(e=Hu);const r=new Io(`https://${function(t){switch(t){case"homestead":return"eth-mainnet.alchemyapi.io";case"ropsten":return"eth-ropsten.alchemyapi.io";case"rinkeby":return"eth-rinkeby.alchemyapi.io";case"goerli":return"eth-goerli.alchemyapi.io";case"kovan":return"eth-kovan.alchemyapi.io";case"matic":return"polygon-mainnet.g.alchemy.com";case"maticmum":return"polygon-mumbai.g.alchemy.com";case"arbitrum":return"arb-mainnet.g.alchemy.com";case"arbitrum-rinkeby":return"arb-rinkeby.g.alchemy.com";case"optimism":return"opt-mainnet.g.alchemy.com";case"optimism-kovan":return"opt-kovan.g.alchemy.com"}return Bo.throwArgumentError("unsupported network","network",t)}(t.name)}/v2/${e}`);r.allowGzip=!0;return{request:r,throttleRetry:async(t,r,n)=>(e===Hu&&du("alchemy"),!0)}}}class Ku extends ju{constructor(t="homestead"){const e=Qc.from(t);if("homestead"!==e.name)return Bo.throwArgumentError("unsupported network","network",t);super("https://cloudflare-eth.com/",e)}}const Ju="org.ethers.plugins.etherscan";class qu extends zc{constructor(t,e){super(Ju),r(this,{baseUrl:t,communityApiKey:e})}clone(){return new qu(this.baseUrl,this.communityApiKey)}}class Xu extends Kl{constructor(t,e){super();const n=Qc.from(t);if(null==e){const t=n.getPlugin(Ju);e=t?t.communityApiKey:"9D13ZE7XSBTJ94N9BNJ2MA33VMAY2YPIRB"}r(this,{apiKey:e,network:n}),this.getBaseUrl()}getBaseUrl(){const t=this.network.getPlugin(Ju);if(t)return t.baseUrl;switch(this.network.name){case"homestead":return"https://api.etherscan.io";case"ropsten":return"https://api-ropsten.etherscan.io";case"rinkeby":return"https://api-rinkeby.etherscan.io";case"kovan":return"https://api-kovan.etherscan.io";case"goerli":return"https://api-goerli.etherscan.io"}return Bo.throwArgumentError("unsupported network","network",this.network)}getUrl(t,e){const r=Object.keys(e).reduce(((t,r)=>{const n=e[r];return null!=n&&(t+=`&${r}=${n}`),t}),""),n=this.apiKey?`&apikey=${this.apiKey}`:"";return`${this.getBaseUrl()}/api?module=${t}${r}${n}`}getPostUrl(){return`${this.getBaseUrl()}/api`}getPostData(t,e){return e.module=t,e.apikey=this.apiKey,e}async detectNetwork(){return this.network}async fetch(t,e,r){const n=r?this.getPostUrl():this.getUrl(t,e),s=r?this.getPostData(t,e):null,i=new Io(n),o={request:i,throttleSlotInterval:1e3,processResponse:async(e,r)=>{const n=r.hasBody()?JSON.parse(ri(r.body)):{},s=("string"==typeof n.result?n.result:"").toLowerCase().indexOf("rate limit")>=0;return"proxy"===t?n&&0==n.status&&"NOTOK"==n.message&&s&&r.throwThrottleError(n.result):s&&r.throwThrottleError(n.result),r}};s&&(i.setHeader("content-type","application/x-www-form-urlencoded; charset=UTF-8"),i.body=Object.keys(s).map((t=>`${t}=${s[t]}`)).join("&"));const a=await Co(o);if(!a.hasBody())throw new Error;const c=JSON.parse(ri(a.body));if("proxy"===t){if("2.0"!=c.jsonrpc){const t=new Error("invalid response");throw t.result=JSON.stringify(c),t}if(c.error){const t=new Error(c.error.message||"unknown error");throw c.error.code&&(t.code=c.error.code),c.error.data&&(t.data=c.error.data),t}return c.result}if(0==c.status&&("No records found"===c.message||"No transactions found"===c.message))return c.result;if(1!=c.status||"OK"!=c.message){const t=new Error("invalid response");throw t.result=JSON.stringify(c),t}return c.result}_getTransactionPostData(t){const e={};for(let r in t){if(null==t[r])continue;let n=t[r];"type"===r&&0===n||(n={type:!0,gasLimit:!0,gasPrice:!0,maxFeePerGs:!0,maxPriorityFeePerGas:!0,nonce:!0,value:!0}[r]?oe(ie(n)):"accessList"===r?"["+this.network.formatter.accessList(n).map((t=>`{address:"${t.address}",storageKeys:["${t.storageKeys.join('","')}"]}`)).join(",")+"]":ie(n),e[r]=n)}return e}_checkError(t,e,r){throw e}async _detectNetwork(){return this.network}async _perform(t){switch(t.method){case"chainId":return this.network.chainId;case"getBlockNumber":return this.fetch("proxy",{action:"eth_blockNumber"});case"getGasPrice":return this.fetch("proxy",{action:"eth_gasPrice"});case"getBalance":return this.fetch("account",{action:"balance",address:t.address,tag:t.blockTag});case"getTransactionCount":return this.fetch("proxy",{action:"eth_getTransactionCount",address:t.address,tag:t.blockTag});case"getCode":return this.fetch("proxy",{action:"eth_getCode",address:t.address,tag:t.blockTag});case"getStorageAt":return this.fetch("proxy",{action:"eth_getStorageAt",address:t.address,position:t.position,tag:t.blockTag});case"sendTransaction":return this.fetch("proxy",{action:"eth_sendRawTransaction",hex:t.signedTransaction},!0).catch((e=>this._checkError(t,e,t.signedTransaction)));case"getBlock":return"blockTag"in t?this.fetch("proxy",{action:"eth_getBlockByNumber",tag:t.blockTag,boolean:t.includeTransactions?"true":"false"}):Bo.throwError("getBlock by blockHash not supported by Etherscan","UNSUPPORTED_OPERATION",{operation:"getBlock(blockHash)"});case"getTransaction":return this.fetch("proxy",{action:"eth_getTransactionByHash",txhash:t.hash});case"getTransactionReceipt":return this.fetch("proxy",{action:"eth_getTransactionReceipt",txhash:t.hash});case"call":{if("latest"!==t.blockTag)throw new Error("EtherscanProvider does not support blockTag for call");const e=this._getTransactionPostData(t.transaction);e.module="proxy",e.action="eth_call";try{return await this.fetch("proxy",e,!0)}catch(e){return this._checkError(t,e,t.transaction)}}case"estimateGas":{const e=this._getTransactionPostData(t.transaction);e.module="proxy",e.action="eth_estimateGas";try{return await this.fetch("proxy",e,!0)}catch(e){return this._checkError(t,e,t.transaction)}}}return super._perform(t)}async getNetwork(){return this.network}async getEtherPrice(){return"homestead"!==this.network.name?0:parseFloat((await this.fetch("stats",{action:"ethprice"})).ethusd)}isCommunityResource(){const t=this.network.getPlugin(Ju);return t?t.communityApiKey===this.apiKey:"9D13ZE7XSBTJ94N9BNJ2MA33VMAY2YPIRB"===this.apiKey}}const Yu="84842078b09946638c03157f83405213";class Zu extends ju{constructor(t="homestead",e,n){const s=Qc.from(t);null==e&&(e=Yu),null==n&&(n=null);super(Zu.getConnection(s,e,n),s),r(this,{projectId:e,projectSecret:n})}_getProvider(t){try{return new Zu(t,this.projectId,this.projectSecret)}catch(t){}return super._getProvider(t)}static getConnection(t,e,r){null==e&&(e=Yu),null==r&&(r=null);const n=new Io(`https://${function(t){switch(t){case"homestead":return"mainnet.infura.io";case"ropsten":return"ropsten.infura.io";case"rinkeby":return"rinkeby.infura.io";case"kovan":return"kovan.infura.io";case"goerli":return"goerli.infura.io";case"matic":return"polygon-mainnet.infura.io";case"maticmum":return"polygon-mumbai.infura.io";case"optimism":return"optimism-mainnet.infura.io";case"optimism-kovan":return"optimism-kovan.infura.io";case"arbitrum":return"arbitrum-mainnet.infura.io";case"arbitrum-rinkeby":return"arbitrum-rinkeby.infura.io"}return Bo.throwArgumentError("unsupported network","network",t)}(t.name)}/v3/${e}`);n.allowGzip=!0,r&&n.setCredentials("",r);return{request:n,throttleRetry:async(t,r,n)=>(e===Yu&&du("InfuraProvider"),!0)}}isCommunityResource(){return this.projectId===Yu}}const Qu={homestead:"6004bcd10040261633ade990",ropsten:"6004bd4d0040261633ade991",rinkeby:"6004bda20040261633ade994",goerli:"6004bd860040261633ade992"};function th(t,e,r,n){n=!!n;let s=!1,i=e;return null==i?(i=Qu[t.name],null==i&&Bo.throwArgumentError("network does not support default applicationId","applicationId",e),n=!0,s=!0):i===Qu[t.name]&&(n=!0,s=!0),null==r&&(r=null),{applicationId:i,applicationSecretKey:r,community:s,loadBalancer:n}}class eh extends ju{constructor(t="homestead",e,n,s){const i=Qc.from(t),{applicationId:o,applicationSecretKey:a,loadBalancer:c}=th(i,e,n,s);super(eh.getConnection(i,o,a,c),i),r(this,{applicationId:o,applicationSecretKey:a,loadBalancer:c})}static getConnection(t,e,r,n){const{applicationId:s,applicationSecretKey:i,community:o,loadBalancer:a}=th(t,e,r,n);let c=`https://${function(t){switch(t){case"homestead":return"eth-mainnet.gateway.pokt.network";case"ropsten":return"eth-ropsten.gateway.pokt.network";case"rinkeby":return"eth-rinkeby.gateway.pokt.network";case"goerli":return"eth-goerli.gateway.pokt.network"}return Bo.throwArgumentError("unsupported network","network",t)}(t.name)}/v1/`;a&&(c+="lb/"),c+=s;const l=new Io(c);l.allowGzip=!0,i&&l.setCredentials("",i);return{request:l,throttleRetry:async(t,e,r)=>(o&&du("PocketProvider"),!0)}}isCommunityResource(){return this.applicationId===Qu[this.network.name]}}var rh,nh,sh,ih,oh,ah,ch,lh,uh=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},hh=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const fh=BigInt("1"),dh=BigInt("2");function ph(){return(new Date).getTime()}const wh={stallTimeout:400,priority:1,weight:1},gh={blockNumber:-2,requests:0,lateResponses:0,errorResponses:0,outOfSync:-1,unsupportedEvents:0,rollingDuration:0,score:0,_network:null,_updateNumber:null,_totalTime:0};function mh(t,e,r){switch(r.method){case"chainId":case"getGasPrice":case"getBalance":case"estimateGas":return Bo.getBigInt(e).toString();case"getBlockNumber":case"getTransactionCount":return Bo.getNumber(e).toString();case"getCode":case"getStorageAt":case"call":return ie(e);case"getBlock":return r.includeTransactions?JSON.stringify(t.formatter.blockWithTransactions(e)):JSON.stringify(t.formatter.block(e));case"getTransaction":return JSON.stringify(t.formatter.transactionResponse(e));case"getTransactionReceipt":return JSON.stringify(t.formatter.receipt(e));case"getLogs":return JSON.stringify(e.map((e=>t.formatter.log(e))))}return Bo.throwError("unsupported method","UNSUPPORTED_OPERATION",{operation:`_perform(${JSON.stringify(r.method)})`})}function yh(t,e){const r=new Map;for(const{result:t,normal:n,weight:s}of e){const e=r.get(n)||{result:t,weight:0};e.weight+=s,r.set(n,e)}let n,s=0;for(const{weight:e,result:i}of r.values())e>=t&&e>s&&(s=e,n=i);return n}class bh extends Kl{constructor(t,e){super(e),rh.add(this),nh.set(this,void 0),sh.set(this,void 0),uh(this,nh,t.map((t=>t instanceof Kl?Object.assign({provider:t},wh,gh):Object.assign({},wh,t,gh))),"f"),uh(this,sh,null,"f"),this.quorum=2,this.eventQuorum=1,this.eventWorkers=1,this.quorum>hh(this,nh,"f").reduce(((t,e)=>t+e.weight),0)&&Bo.throwArgumentError("quorum exceed provider wieght","quorum",this.quorum)}async _detectNetwork(){return Qc.from(Bo.getBigInt(await this._perform({method:"chainId"}))).freeze()}_getSubscriber(t){throw new Error("@TODO")}async _perform(t){await hh(this,rh,"m",ah).call(this);const e=new Set;for(let r=0;r0;e--){const r=Math.floor(Math.random()*(e+1)),n=t[e];t[e]=t[r],t[r]=n}}(e),e.sort(((t,e)=>e.priority-t.priority));for(const r of e)if(-1===t.indexOf(r))return r;return null},oh=function(t,e){const r=hh(this,rh,"m",ih).call(this,Array.from(t).map((t=>t.config)));if(null==r)return null;const n={},s={config:r,result:n,didBump:!1,done:!1,perform:null,staller:null},i=ph();return s.perform=(async()=>{try{r.requests++,n.result=await r.provider._perform(e)}catch(t){r.errorResponses++,n.error=t}s.done&&r.lateResponses++;const t=ph()-i;r._totalTime+=t,r.rollingDuration=.95*r.rollingDuration+.05*t,s.perform=null})(),s.staller=(async()=>{var t;await(t=r.stallTimeout,new Promise((e=>{setTimeout(e,t)}))),s.staller=null})(),t.add(s),s},ah=async function(){let t=hh(this,sh,"f");if(!t){const e=[];hh(this,nh,"f").forEach((t=>{e.push(async function(t,e){for(;t.blockNumber<0||t.blockNumber{const e=await t.provider.getBlockNumber();e>t.blockNumber&&(t.blockNumber=e),t._updateNumber=null})()),await t._updateNumber,t.outOfSync++}(t,0)),e.push((async()=>{t._network=await t.provider.getNetwork()})())})),uh(this,sh,t=(async()=>{await Promise.all(e);let t=null;for(const e of hh(this,nh,"f")){const r=e._network;null==t?t=r.chainId:r.chainId!==t&&Bo.throwError("cannot mix providers on different networks","UNSUPPORTED_OPERATION",{operation:"new FallbackProvider"})}})(),"f")}await t},ch=async function(t,e){const r=[];for(const n of t)if("result"in n.result){const t=n.result.result;r.push({result:t,normal:mh(n.config._network,t,e),weight:n.config.weight})}if(!(r.reduce(((t,e)=>t+e.weight),0)BigInt(t.result)));e.sort(((t,e)=>tt?1:0));const r=e.length/2;return e.length%2?e[r]:(e[r-1]+e[r]+fh)/dh}(r);case"getBlock":return"blockTag"in e&&"pending"===e.blockTag?r[0].result:yh(this.quorum,r);case"chainId":case"getBalance":case"getTransactionCount":case"getCode":case"getStorageAt":case"getTransaction":case"getTransactionReceipt":case"getLogs":case"call":return yh(this.quorum,r)}return Bo.throwError("unsupported method","UNSUPPORTED_OPERATION",{operation:`_perform(${JSON.stringify(e.method)})`})}},lh=async function t(e,r){if(0===e.size)throw new Error("no runners?!");const n=[];let s=0;for(const t of e)t.perform&&n.push(t.perform),t.staller?n.push(t.staller):t.didBump||(t.didBump=!0,s++);const i=await hh(this,rh,"m",ch).call(this,e,r);if(void 0!==i){if(i instanceof Error)throw i;return i}for(let t=0;t(Ch(this,Eh,"f")._register(t,this),t))),"f")}stop(){Ch(this,kh,"f").then((t=>{Ch(this,Eh,"f").send("eth_unsubscribe",[t])})),_h(this,kh,null,"f")}pause(t){t||Bo.throwError("preserve logs while paused not supported by SocketSubscriber yet","UNSUPPORTED_OPERATION",{operation:"pause(false)"}),_h(this,Ah,!!t,"f")}resume(){_h(this,Ah,null,"f")}_handleMessage(t){if(null!=Ch(this,kh,"f")&&null===Ch(this,Ah,"f")){let e=Ch(this,Nh,"f");e=null==e?this._emit(Ch(this,Eh,"f"),t):e.then((async()=>{await this._emit(Ch(this,Eh,"f"),t)})),_h(this,Nh,e.then((()=>{Ch(this,Nh,"f")===e&&_h(this,Nh,null,"f")})),"f")}}async _emit(t,e){throw new Error("sub-classes must implemente this; _emit")}}Eh=new WeakMap,Th=new WeakMap,kh=new WeakMap,Ah=new WeakMap,Nh=new WeakMap;class Fh extends Bh{constructor(t){super(t,["newHeads"])}async _emit(t,e){t.emit("block",parseInt(e.number))}}class Uh extends Bh{constructor(t){super(t,["newPendingTransactions"])}async _emit(t,e){t.emit("pending",e)}}class Lh extends Bh{constructor(t,e){super(t,["logs",e]),Ph.set(this,void 0),xh.set(this,void 0),_h(this,Ph,JSON.stringify(e),"f"),_h(this,xh,t.getNetwork().then((t=>t.formatter)),"f")}get logFilter(){return JSON.parse(Ch(this,Ph,"f"))}async _emit(t,e){const r=await Ch(this,xh,"f");t.emit(Ch(this,Ph,"f"),r.log(e,t))}}Ph=new WeakMap,xh=new WeakMap;class Dh extends Du{constructor(t){super(t),Oh.set(this,void 0),Ih.set(this,void 0),Sh.set(this,void 0),Rh.set(this,void 0),_h(this,Oh,new Map,"f"),_h(this,Ih,!1,"f"),_h(this,Sh,new Map,"f"),_h(this,Rh,new Map,"f")}_getSubscriber(t){switch(t.type){case"close":return new Wl("close");case"block":return new Fh(this);case"pending":return new Uh(this);case"event":return new Lh(this,t.filter);case"orphan":if("drop-log"===t.filter.orphan)return new Wl("drop-log")}return super._getSubscriber(t)}_register(t,e){Ch(this,Sh,"f").set(t,e);const r=Ch(this,Rh,"f").get(t);if(r){for(const t of r)e._handleMessage(t);Ch(this,Rh,"f").delete(t)}}async send(t,e){const r=this.prepareRequest(t,e),n=new Promise(((t,e)=>{Ch(this,Oh,"f").set(r.id,{payload:r,resolve:t,reject:e})}));return Ch(this,Ih,"f")&&await this._write(JSON.stringify(r)),await n}async _start(){if(!Ch(this,Ih,"f")){_h(this,Ih,!0,"f");for(const{payload:t}of Ch(this,Oh,"f").values())await this._write(JSON.stringify(t))}}async _processMessage(t){const e=JSON.parse(t);if("id"in e){const t=Ch(this,Oh,"f").get(e.id);if(!t)return void console.log("Weird... Response for not a thing we sent");if(Ch(this,Oh,"f").delete(e.id),"error"in e){const{message:r,code:n,data:s}=e.error,i=Bo.makeError(r||"unkonwn error","SERVER_ERROR",{request:`ws:${JSON.stringify(t.payload)}`,info:{code:n,data:s}});t.reject(i)}else t.resolve(e.result)}else if("eth_subscription"===e.method){const t=e.params.subscription,r=Ch(this,Sh,"f").get(t);if(r)r._handleMessage(e.params.result);else{let r=Ch(this,Rh,"f").get(t);null==r&&(r=[],Ch(this,Rh,"f").set(t,r)),r.push(e.params.result)}}}async _write(t){throw new Error("sub-classes must override this")}}Oh=new WeakMap,Ih=new WeakMap,Sh=new WeakMap,Rh=new WeakMap;var Mh,jh=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Gh=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class $h extends Dh{constructor(t,e){super(e),Mh.set(this,void 0),jh(this,Mh,"string"==typeof t?new vh(t):t,"f"),this.websocket.onopen=()=>{this._start()},this.websocket.onmessage=t=>{this._processMessage(t.data)}}get websocket(){return Gh(this,Mh,"f")}async _write(t){this.websocket.send(t)}}Mh=new WeakMap;const Wh=function(t){function e(e,r,n){const s=function(){const s=new t(e,r);if(null!=n.ensNetwork&&s.attachPlugin(new Vc(null,n.ensNetwork)),n.priorityFee&&s.attachPlugin(new Kc(n.priorityFee)),n.etherscan){const{url:t,apiKey:e}=n.etherscan;s.attachPlugin(new qu(t,e))}return s.attachPlugin(new Hc),s};t.register(e,s),t.register(r,s),n.altNames&&n.altNames.forEach((e=>{t.register(e,s)}))}return e("homestead",1,{ensNetwork:1,altNames:["mainnet"]}),e("ropsten",3,{ensNetwork:3}),e("rinkeby",4,{ensNetwork:4}),e("goerli",5,{ensNetwork:5}),e("kovan",42,{ensNetwork:42}),e("classic",61,{}),e("classicKotti",6,{}),e("xdai",100,{ensNetwork:1}),e("matic",137,{ensNetwork:1,priorityFee:35e9,etherscan:{apiKey:"W6T8DJW654GNTQ34EFEYYP3EZD9DD27CT7",url:"https://api.polygonscan.com/"}}),e("maticMumbai",80001,{priorityFee:35e9,etherscan:{apiKey:"W6T8DJW654GNTQ34EFEYYP3EZD9DD27CT7",url:"https://api-testnet.polygonscan.com/"}}),e("bnb",56,{ensNetwork:1,etherscan:{apiKey:"EVTS3CU31AATZV72YQ55TPGXGMVIFUQ9M9",url:"http://api.bscscan.com"}}),e("bnbt",97,{etherscan:{apiKey:"EVTS3CU31AATZV72YQ55TPGXGMVIFUQ9M9",url:"http://api-testnet.bscscan.com"}}),t}(Qc),zh=void 0;var Hh,Vh,Kh=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Jh=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class qh extends Sc{constructor(t,e,n){super(t,t.provider);r(this,{args:e.decodeEventLog(n,t.data,t.topics),fragment:n,interface:e})}get eventName(){return this.fragment.name}get eventSignature(){return this.fragment.format()}}class Xh extends Rc{constructor(t,e,r){super(r,e),Hh.set(this,void 0),Kh(this,Hh,t,"f")}get logs(){return super.logs.map((t=>{const e=t.topics.length?Jh(this,Hh,"f").getEvent(t.topics[0]):null;return e?new qh(t,Jh(this,Hh,"f"),e):t}))}}Hh=new WeakMap;class Yh extends _c{constructor(t,e,r){super(r,e),Vh.set(this,void 0),Kh(this,Vh,t,"f")}async wait(t){const e=await super.wait();return null==e?null:new Xh(Jh(this,Vh,"f"),this.provider,e)}}Vh=new WeakMap;class Zh extends o{constructor(t,e,n,s,i){super(t,e,n);const o=new qh(i,t.interface,s);r(this,{args:t.interface.decodeEventLog(s,o.data,o.topics),fragment:s,log:o})}get eventName(){return this.fragment.name}get eventSignature(){return this.fragment.format()}async getBlock(){return await this.log.getBlock()}async getTransaction(){return await this.log.getTransaction()}async getTransactionReceipt(){return await this.log.getTransactionReceipt()}}const Qh=new A("@ethersproject/contract@6.0.0-beta.1");var tf,ef=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},rf=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};function nf(t){return t&&"function"==typeof t.resolveName}class sf{constructor(t,e,n){if(tf.set(this,void 0),r(this,{fragment:e}),e.inputs.lengtht.walkAsync(n[e],((t,e)=>"address"===t?Ts(e,i):e)))));return t.interface.encodeFilterTopics(e,r)}(),"f")}getTopicFilter(){return rf(this,tf,"f")}}function of(t,e){return null==t?null:"function"==typeof t[e]?t:t.provider&&"function"==typeof t.provider[e]?t.provider:null}async function af(t){const e=function(t){const e={};t.to&&(e.to=t.to),t.from&&(e.from=t.from),t.data&&(e.data=ie(t.data));const r="chainId,gasLimit,gasPrice,maxFeePerGas, maxPriorityFeePerGas,value".split(/,/);for(const n in r)n in t&&null!=t[n]&&(e[n]=Bo.getBigInt(t[n],`request.${n}`));const n="type,nonce".split(/,/);for(const r in n)r in t&&null!=t[r]&&(e[r]=Bo.getNumber(t[r],`request.${r}`));return t.accessList&&(e.accessList=uc(t.accessList)),"blockTag"in t&&(e.blockTag=t.blockTag),"enableCcipRead"in t&&(e.enableCcipReadEnabled=!!t.enableCcipRead),"customData"in t&&(e.customData=t.customData),e}(Ss.dereference(t,"overrides"));return e.to?Qh.throwArgumentError("cannot override to","overrides.to",e.to):e.data&&Qh.throwArgumentError("cannot override data","overrides.data",e.data),e.from&&(e.from=await Ts(e.from)),e}tf=new WeakMap;class cf extends(function(){return Function}()){constructor(t,e){super(),r(this,{name:t.interface.getFunctionName(e),_contract:t,_key:e});return new Proxy(this,{apply:async(t,e,r)=>t.getFragment(...r).constant?await t.staticCall(...r):await t.send(...r)})}get fragment(){return this._contract.interface.getFunction(this._key)}getFragment(...t){return this._contract.interface.getFunction(this._key,t)}async populateTransaction(...e){const r=this.getFragment(...e);let n={};if(r.inputs.length+1===e.length&&(n=await af(e.pop())),r.inputs.length!==e.length)throw new Error("internal error: fragment inputs doesn't match arguments; should not happen");const s=await async function(t,e,r){const n=of(t,"resolveName"),s=nf(n)?n:null;return await Promise.all(e.map(((t,e)=>t.walkAsync(r[e],((t,e)=>"address"===t?Ts(e,s):e)))))}(this._contract.runner,r.inputs,e);return Object.assign({},n,await t({to:this._contract.getAddress(),data:this._contract.interface.encodeFunctionData(r,s)}))}async staticCall(...t){const e=await this.staticCallResult(...t);return 1===e.length?e[0]:e}async send(...t){const e=of(this._contract.runner,"sendTransaction");if(!(r=e)||"function"!=typeof r.sendTransaction)return Qh.throwError("contract runner does not support sending transactions","UNSUPPORTED_OPERATION",{operation:"sendTransaction"});var r;const n=await e.sendTransaction(await this.populateTransaction(...t)),s=of(this._contract.runner,"getLogs");return new Yh(this._contract.interface,s,n)}async estimateGas(...t){const e=of(this._contract.runner,"estimateGas");return(r=e)&&"function"==typeof r.estimateGas?await e.estimateGas(await this.populateTransaction(...t)):Qh.throwError("contract runner does not support gas estimation","UNSUPPORTED_OPERATION",{operation:"estimateGas"});var r}async staticCallResult(...t){const e=of(this._contract.runner,"call");if(!(r=e)||"function"!=typeof r.call)return Qh.throwError("contract runner does not support calling","UNSUPPORTED_OPERATION",{operation:"call"});var r;const n=this.getFragment(...t),s=await this.populateTransaction(...t);let i="0x";try{i=await e.call(s)}catch(t){if(u(t))throw this._contract.interface.makeError(n,t.data,s);throw t}return this._contract.interface.decodeFunctionResult(n,i)}}class lf extends(function(){return Function}()){constructor(t,e){return super(),r(this,{name:t.interface.getEventName(e),_contract:t,_key:e}),new Proxy(this,{apply:async(e,r,n)=>new sf(t,e.getFragment(...n),n)})}get fragment(){return this._contract.interface.getEvent(this._key)}getFragment(...t){return this._contract.interface.getEvent(this._key,t)}}const uf=Symbol.for("_ethersInternal_contract"),hf=new WeakMap;function ff(t){return hf.get(t[uf])}async function df(t,e){let r,n;if(Array.isArray(e))r=t.interface.getEvent(e[0]),n=e;else if("string"==typeof e)r=t.interface.getEvent(e),n=[t.interface.getEventTopic(r)];else if((s=e)&&"object"==typeof s&&"getTopicFilter"in s&&"function"==typeof s.getTopicFilter&&s.fragment)r=e.fragment,n=await e.getTopicFilter();else{if(!("fragment"in e))throw console.log(e),new Error("TODO");r=e.fragment,n=[t.interface.getEventTopic(r)]}var s;n=n.map((t=>{return null==t?null:Array.isArray(t)?(e=t.map((t=>t.toLowerCase())),(e=Array.from(new Set(e).values())).sort(),e):t.toLowerCase();var e}));return{fragment:r,tag:n.map((t=>null==t?"null":Array.isArray(t)?t.join("|"):t)).join("&"),topics:n}}async function pf(t,e){const{subs:r}=ff(t);return r.get((await df(t,e)).tag)||null}async function wf(t,e){const r=of(t.runner,"on"),n=of(t.runner,"off");if(!r||r!==n||(!(s=r)||"function"!=typeof s.on||"function"!=typeof s.off))return Qh.throwError("contract runner does not support subscribing","UNSUPPORTED_OPERATION",{operation:"on"});var s;const{fragment:i,tag:o,topics:a}=await df(t,e),{addr:c,subs:l}=ff(t);let u=l.get(o);if(!u){const n={address:c||t,topics:a},s=r=>{const n=new Zh(t,null,e,i,r);mf(t,e,n.args,n)};let h=!1;u={tag:o,listeners:[],start:()=>{h||(r.on(n,s),h=!0)},stop:()=>{h&&(r.off(n,s),h=!1)}},l.set(o,u)}return u}let gf=Promise.resolve();async function mf(t,e,r,n){try{await gf}catch(t){}const s=async function(t,e,r,n){await gf;const s=await pf(t,e);if(!s)return!1;const i=s.listeners.length;return s.listeners=s.listeners.filter((({listener:s,once:i})=>{const o=r.slice();return n&&o.push(new Zh(t,i?null:s,e,n.fragment,n.log)),setTimeout((()=>{s.call(t,...o)}),0),!i})),i>0}(t,e,r,n);return gf=s,await s}const yf=["then"];class bf{constructor(t,e,n=null,s){let i;r(this,{target:t,runner:n,interface:mo.from(e)}),Object.defineProperty(this,uf,{value:{}});let o=null,a=null;if(s){const t=of(n,"getLogs");a=new Yh(this.interface,t,s)}let c=new Map;if("string"==typeof t)if(Xt(t))o=t,i=Promise.resolve(t);else{const e=of(n,"resolveName");if(!nf(e))throw Qh.makeError("contract runner does not support name resolution","UNSUPPORTED_OPERATION",{operation:"resolveName"});i=e.resolveName(t).then((t=>{if(null==t)throw new Error("TODO");return ff(this).addr=t,t}))}else i=t.getAddress().then((t=>{if(null==t)throw new Error("TODO");return ff(this).addr=t,t}));var l,u;l=this,u={addrPromise:i,addr:o,deployTx:a,subs:c},hf.set(l[uf],u);const h=new Proxy({},{get:(t,e,r)=>{if(yf.indexOf(e)>=0)return Reflect.get(t,e,r);const n=String(e),s=this.getEvent(n);if(s)return s;throw new Error(`unknown contract event: ${n}`)}});return r(this,{filters:h}),new Proxy(this,{get:(t,e,r)=>{if(e in t||yf.indexOf(e)>=0)return Reflect.get(t,e,r);const n=String(e),s=t.getFunction(n);if(s)return s;throw new Error(`unknown contract method: ${n}`)}})}async getAddress(){return await ff(this).addrPromise}deploymentTransaction(){return ff(this).deployTx}getFunction(t){return"string"!=typeof t&&(t=t.format()),new cf(this,t)}getEvent(t){return"string"!=typeof t&&(t=t.format()),new lf(this,t)}async queryFilter(t,e=0,r="latest"){const{addr:n,addrPromise:s}=ff(this),i=n||await s,{fragment:o,topics:a}=await df(this,t),c={address:i,topics:a,fromBlock:e,toBlock:r},l=of(this.runner,"getLogs");return(u=l)&&"function"==typeof u.getLogs?(await l.getLogs(c)).map((t=>new qh(t,this.interface,o))):Qh.throwError("contract runner does not support querying","UNSUPPORTED_OPERATION",{operation:"getLogs"});var u}async on(t,e){const r=await wf(this,t);return r.listeners.push({listener:e,once:!1}),r.start(),this}async once(t,e){const r=await wf(this,t);return r.listeners.push({listener:e,once:!0}),r.start(),this}async emit(t,...e){return await mf(this,t,e,null)}async listenerCount(t){if(t){const e=await pf(this,t);return e?e.listeners.length:0}const{subs:e}=ff(this);let r=0;for(const{listeners:t}of e.values())r+=t.length;return r}async listeners(t){if(t){const e=await pf(this,t);return e?e.listeners.map((({listener:t})=>t)):[]}const{subs:e}=ff(this);let r=[];for(const{listeners:t}of e.values())r=r.concat(t.map((({listener:t})=>t)));return r}async off(t,e){const r=await pf(this,t);if(!r)return this;if(e){const t=r.listeners.map((({listener:t})=>t)).indexOf(e);t>=0&&r.listeners.splice(t,1)}return null!=e&&0!==r.listeners.length||(r.stop(),ff(this).subs.delete(r.tag)),this}async removeAllListeners(t){if(t){const e=await pf(this,t);if(!e)return this;e.stop(),ff(this).subs.delete(e.tag)}else{const{subs:t}=ff(this);for(const{tag:e,stop:r}of t.values())r(),t.delete(e)}return this}async addListener(t,e){return await this.on(t,e)}async removeListener(t,e){return await this.off(t,e)}static buildClass(t){return class extends bf{constructor(e,r=null){super(e,t,r)}}}static from(t,e,r=null){return new this(t,e,r)}}class vf extends(function(){return bf}()){}function Ef(t){return as(nn("0x"+cc.computePublicKey(t,!1).substring(4)).substring(26))}const Tf=" !#$%&'()*+,-./<=>?@[]^_`{|}~",kf=/^[a-z]*$/i;function Af(t,e){let r=97;return t.reduce(((t,n)=>(n===e?r++:n.match(kf)?t.push(String.fromCharCode(r)+n):(r=97,t.push(n)),t)),[])}function Nf(t){if("0"!==t[0])throw TypeError("unsupported auwl data");return function(t,e){for(let r=Tf.length-1;r>=0;r--)t=t.split(Tf[r]).join(e.substring(2*r,2*r+2));const r=[],n=t.replace(/(:|([0-9])|([A-Z][a-z]*))/g,((t,e,n,s)=>{if(n)for(let t=parseInt(n);t>=0;t--)r.push(";");else r.push(e.toLowerCase());return""}));if(n)throw new Error(`leftovers: ${JSON.stringify(n)}`);return Af(Af(r,";"),":")}(t.substring(1+2*Tf.length),t.substring(1,1+2*Tf.length))}const Pf=new A("@ethersproject/wordlists@6.0.0-beta.1");class xf{constructor(t){r(this,{locale:t})}split(t){return t.toLowerCase().split(/ +/g)}join(t){return t.join(" ")}}var Of,If,Sf,Rf,_f,Cf=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Bf=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class Ff extends xf{constructor(t,e,r){super(t),Of.add(this),If.set(this,void 0),Sf.set(this,void 0),Rf.set(this,void 0),Cf(this,If,e,"f"),Cf(this,Sf,r,"f"),Cf(this,Rf,null,"f")}get _data(){return Bf(this,If,"f")}_decodeWords(){return Nf(Bf(this,If,"f"))}getWord(t){const e=Bf(this,Of,"m",_f).call(this);return(t<0||t>=e.length)&&Pf.throwArgumentError(`invalid word index: ${t}`,"index",t),e[t]}getWordIndex(t){return Bf(this,Of,"m",_f).call(this).indexOf(t)}}If=new WeakMap,Sf=new WeakMap,Rf=new WeakMap,Of=new WeakSet,_f=function(){if(null==Bf(this,Rf,"f")){const t=this._decodeWords();if(Ni(t.join("\n")+"\n")!==Bf(this,Sf,"f"))throw new Error(`BIP39 Wordlist for ${this.locale} FAILED`);Cf(this,Rf,t,"f")}return Bf(this,Rf,"f")};const Uf=new class extends Ff{constructor(){super("en","0erleonalorenseinceregesticitStanvetearctssi#ch2Athck&tneLl0And#Il.yLeOutO=S|S%b/ra@SurdU'0Ce[Cid|CountCu'Hie=IdOu,-Qui*Ro[TT]T%T*[Tu$0AptDD-tD*[Ju,M.UltV<)Vi)0Rob-0FairF%dRaid0A(EEntRee0Ead0MRRp%tS!_rmBumCoholErtI&LLeyLowMo,O}PhaReadySoT Ways0A>urAz(gOngOuntU'd0Aly,Ch%Ci|G G!GryIm$K!Noun)Nu$O` Sw T&naTiqueXietyY1ArtOlogyPe?P!Pro=Ril1ChCt-EaEnaGueMMedM%MyOundR<+Re,Ri=RowTTefa@Ti,Tw%k0KPe@SaultSetSi,SumeThma0H!>OmTa{T&dT.udeTra@0Ct]D.Gu,NtTh%ToTumn0Era+OcadoOid0AkeA*AyEsomeFulKw?d0Is:ByChel%C#D+GL<)Lc#y~MbooN_{Ad!AftAmA}AshAt AwlAzyEamEd.EekEwI{etImeIspIt-OpO[Ou^OwdUci$UelUi'Umb!Un^UshYY,$2BeLtu*PPbo?dRiousRr|Rta(R=Sh]/omTe3C!:DMa+MpN)Ng R(gShUght WnY3AlBa>BrisCadeCemb CideCl(eC%a>C*a'ErF&'F(eFyG*eLayLiv M3AgramAlAm#dAryCeE'lEtFf G.$Gn.yLemmaNn NosaurRe@RtSag*eScov Sea'ShSmi[S%d Splay/<)V tVideV%)Zzy5Ct%Cum|G~Lph(Ma(Na>NkeyN%OrSeUb!Ve_ftAg#AmaA,-AwEamE[IftIllInkIpI=OpUmY2CkMbNeR(g/T^Ty1Arf1Nam-:G G!RlyRnR`Sily/Sy1HoOlogyOnomy0GeItUca>1F%t0G1GhtTh 2BowD E@r-EgSe0B?kBodyBra)Er+Ot]PloyPow Pty0Ab!A@DD![D%'EmyErgyF%)Ga+G(eH<)JoyLi,OughR-hRollSu*T Ti*TryVelope1Isode0U$Uip0AA'OdeOs]R%Upt0CapeSayS&)Ta>0Ern$H-s1Id&)IlOkeOl=1A@Amp!Ce[Ch<+C.eCludeCu'Ecu>Erci'Hau,Hib.I!I,ItOt-PM&'Mu}Pa@Po'Pro=Pul'0ChCludeComeC*a'DexD-a>Do%Du,ryFN Noc|PutQuirySSue0Em1Ory:CketGu?RZz3AlousAns~yWel9BInKeUr}yY5D+I)MpNg!Ni%Nk/:Ng?oo3EnEpT^upY3CkDD}yNdNgdomSsTT^&TeTt&Wi4EeIfeO{Ow:BBelB%Dd DyKeMpNgua+PtopR+T T(UghUndryVaWWnWsu.Y Zy3Ad AfArnA=Ctu*FtGG$G&dIsu*M#NdNg`NsOp?dSs#Tt Vel3ArB tyBr?yC&'FeFtGhtKeMbM.NkOnQuid/Tt!VeZ?d5AdAnB, C$CkG-NelyNgOpTt yUdUn+VeY$5CkyGga+Mb N?N^Xury3R-s:Ch(eDG-G}tIdIlInJ%KeMm$NNa+Nda>NgoNs]Nu$P!Rb!R^Rg(R(eRketRria+SkSs/ T^T i$ThTrixTt XimumZe3AdowAnAsu*AtCh<-D$DiaLodyLtMb M%yNt]NuRcyR+R.RryShSsa+T$Thod3Dd!DnightLk~]M-NdNimumN%Nu>Rac!Rr%S ySs/akeXXedXtu*5Bi!DelDifyMM|N.%NkeyN, N`OnR$ReRn(gSqu.oTh T]T%Unta(U'VeVie5ChFf(LeLtiplySc!SeumShroomS-/Tu$3Self/ yTh:I=MePk(Rrow/yT]Tu*3ArCkEdGati=G!@I` PhewR=/TTw%kUtr$V WsXt3CeGht5B!I'M(eeOd!Rm$R`SeTab!TeTh(gTi)VelW5C!?Mb R'T:K0EyJe@Li+Scu*S =Ta(Vious0CurEAyEa'Ed+U{UgUn+2EmEtIntL?LeLi)NdNyOlPul?Rt]S.]Ssib!/TatoTt yV tyWd W _@i)Ai'Ed-tEf Epa*Es|EttyEv|I)IdeIm?yIntI%.yIs#Iva>IzeOb!mO)[Odu)Of.OgramOje@Omo>OofOp tyOsp O>@OudOvide2Bl-Dd(g~LpL'Mpk(N^PilPpyR^a'R.yRpo'R'ShTZz!3Ramid:99Al.yAntumArt E,]I{ItIzO>:Bb.Cco#CeCkD?DioIlInI'~yMpN^NdomN+PidReTeTh V&WZ%3AdyAlAs#BelBuildC$lCei=CipeC%dCyc!Du)F!@F%mFu'G]G*tGul?Je@LaxLea'LiefLyMa(Memb M(dMo=Nd NewNtOp&PairPeatPla)P%tQui*ScueSemb!Si,Sour)Sp#'SultTi*T*atTurnUn]Ve$ViewW?d2Y`m0BBb#CeChDeD+F!GhtGidNgOtPp!SkTu$V$V 5AdA,BotBu,CketM<)OfOkieOmSeTa>UghUndU>Y$5Bb DeGLeNNwayR$:DDd!D}[FeIlLadLm#L#LtLu>MeMp!NdTisfyToshiU)Usa+VeY1A!AnA*Att E}HemeHoolI&)I[%sOrp]OutRapRe&RiptRub1AAr^As#AtC#dC*tCt]Cur.yEdEkGm|Le@~M(?Ni%N'Nt&)RiesRvi)Ss]Tt!TupV&_dowAftAllowA*EdEllEriffIeldIftI}IpIv O{OeOotOpOrtOuld O=RimpRugUff!Y0Bl(gCkDeE+GhtGnL|Lk~yLv Mil?Mp!N)NgR&/ Tua>XZe1A>Et^IIllInIrtUll0AbAmEepEnd I)IdeIghtImOgAyEakEelEmEpE*oI{IllIngO{Oma^O}OolOryO=Ra>gyReetRikeR#gRugg!Ud|UffUmb!Y!0Bje@Bm.BwayC)[ChDd&Ff G?G+,ItMm NNnyN'tP PplyP*meReRfa)R+Rpri'RroundR=ySpe@/a(1AllowAmpApArmE?EetIftImIngIt^Ord1MbolMptomRup/em:B!Ck!GIlL|LkNkPeR+tSk/eTtooXi3A^Am~NNGradeHoldOnP Set1BOng::Rd3Ar~ow9UUngU`:3BraRo9NeO","0x3c8acc1e7b08d8e76f9fda015ef48dc8c710a73cb7e0f77b2c18a9b5a7adde60")}},Lf=new A("@ethersproject/wallet@6.0.0-beta.1"),Df=Object.freeze({en:Uf});var Mf,jf=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Gf=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class $f extends Ff{constructor(t,e,r,n){super(t,e,n),Mf.set(this,void 0),jf(this,Mf,r,"f")}get _accent(){return Gf(this,Mf,"f")}_decodeWords(){return function(t,e){let r=Nf(t).join(",");return e.split(/,/g).forEach((t=>{const e=t.match(/^([a-z]*)([0-9]+)([0-9])(.*)$/);if(!e)throw new Error("internal error parsing accents");let n=0;const s=function(t,e){const r=(1<=t;){const e=s>>i-t;s&=(1<(0==--s[n]&&(e=String.fromCharCode(e.charCodeAt(0),i),n++),e)))})),r.split(",")}(this._data,this._accent)}}function Wf(t){return(1<24)&&Lf.throwArgumentError("invalid mnemonic length","mnemonic","[ REDACTED ]");const n=ee(new Uint8Array(Math.ceil(11*r.length/8)));let s=0;for(let t=0;t>3]|=1<<7-s%8),s++}const i=32*r.length/3,o=Wf(r.length/3);return(ee(Yn(n.slice(0,i/8)))[0]&o)!==(n[n.length-1]&o)&&Lf.throwArgumentError("invalid mnemonic checksum","mnemonic","[ REDACTED ]"),ie(n.slice(0,i/8))}function Hf(t,e=Uf){(t.length%4||t.length<16||t.length>32)&&Lf.throwArgumentError("invalid entropy size","entropy","[ REDACTED ]"),null==e&&(e=Uf);const r=[0];let n=11;for(let e=0;e8?(r[r.length-1]<<=8,r[r.length-1]|=t[e],n-=8):(r[r.length-1]<<=n,r[r.length-1]|=t[e]>>8-n,r.push(t[e]&((1<<8-n)-1&255)),n+=3);const s=t.length/4,i=parseInt(Yn(t).substring(2,4),16)&Wf(s);return r[r.length-1]<<=s,r[r.length-1]|=i>>8-s,e.join(r.map((t=>e.getWord(t))))}Mf=new WeakMap;const Vf={};class Kf{constructor(t,e,n,s,i){null==s&&(s=""),null==i&&(i=Uf),Lf.assertPrivate(t,Vf,"Mnemonic"),r(this,{phrase:n,password:s,wordlist:i,entropy:e})}computeSeed(){const t=Zs("mnemonic"+this.password,Ks.NFKD);return xn(Zs(this.phrase,Ks.NFKD),t,2048,64,"sha512")}static fromPhrase(t,e,r){const n=zf(t,r);return t=Hf(Lf.getBytes(n),r),new Kf(Vf,n,t,e,r)}static fromEntropy(t,e,r){const n=Lf.getBytes(t,"entropy"),s=Hf(n,r);return new Kf(Vf,ie(n),s,e,r)}static entropyToPhrase(t,e){return Hf(Lf.getBytes(t,"entropy"),e)}static phraseToEntropy(t,e){return zf(t,e)}static isValidMnemonic(t,e){try{return zf(t,e),!0}catch(t){}return!1}}var Jf,qf=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Xf=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class Yf extends lu{constructor(t,e){super(e),Jf.set(this,void 0),qf(this,Jf,t,"f");r(this,{address:Ef(this.signingKey.publicKey)})}get signingKey(){return Xf(this,Jf,"f")}get privateKey(){return this.signingKey.privateKey}async getAddress(){return this.address}connect(t){return new Yf(Xf(this,Jf,"f"),t)}async signTransaction(e){const r=Object.assign({},e,await t({to:e.to?Ts(e.to,this.provider):void 0,from:e.from?Ts(e.from,this.provider):void 0}));null!=r.from&&(as(r.from)!==this.address&&Lf.throwArgumentError("transaction from address mismatch","tx.from",e.from),delete r.from);const n=Ec.from(r);return n.signature=this.signingKey.sign(n.unsignedHash),n.serialized}async signMessage(t){return this.signingKey.sign(Ci(t)).serialized}async signTypedData(t,e,r){const n=await to.resolveNames(t,e,r,(async t=>{if(null==this.provider)return Lf.throwError("cannot resolve ENS names without a provider","UNSUPPORTED_OPERATION",{operation:"resolveName",info:{name:t}});const e=await this.provider.resolveName(t);return null==e?Lf.throwError("unconfigured ENS name","UNCONFIGURED_NAME",{value:t}):e}));return this.signingKey.sign(to.hash(n.domain,e,n.value)).serialized}}Jf=new WeakMap;var Zf,Qf,td,ed=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)},rd=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r};const nd="m/44'/60'/0'/0/0",sd=new Uint8Array([66,105,116,99,111,105,110,32,115,101,101,100]),id=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141");function od(t,e){let r="";for(;t;)r="0123456789abcdef"[t%16]+r,t=Math.trunc(t/16);for(;r.length<2*e;)r="0"+r;return"0x"+r}function ad(t){const e=Lf.getBytes(t);return Jt(ae([e,le(Yn(Yn(e)),0,4)]))}const cd={};function ld(t,e,r,n){const s=new Uint8Array(37);if(2147483648&t){if(null==n)return Lf.throwError("cannot derive child of neutered node","UNSUPPORTED_OPERATION",{operation:"deriveChild"});s.set(ee(n),1)}else s.set(ee(r));for(let e=24;e>=0;e-=8)s[33+(e>>3)]=t>>24-e&255;const i=ee(Ur("sha512",e,s));return{IL:i.slice(0,32),IR:i.slice(32)}}function ud(t,e){const r=e.split("/");if(0===r.length||"m"===r[0]&&0!==t.depth)throw new Error("invalid path - "+e);"m"===r[0]&&r.shift();let n=t;for(let t=0;t=2147483648)throw new Error("invalid path index - "+e);n=n.deriveChild(2147483648+t)}else{if(!e.match(/^[0-9]+$/))throw new Error("invalid path component - "+e);{const t=parseInt(e);if(t>=2147483648)throw new Error("invalid path index - "+e);n=n.deriveChild(t)}}}return n}class hd extends Yf{constructor(t,e,n,s,i,o,a,c,l){super(e,l),Lf.assertPrivate(t,cd,"HDNodeWallet"),r(this,{publicKey:e.compressedPublicKey});r(this,{parentFingerprint:n,fingerprint:le(kn(Yn(this.publicKey)),0,4),chainCode:s,path:i,index:o,depth:a}),r(this,{mnemonic:c})}connect(t){return new hd(cd,this.signingKey,this.parentFingerprint,this.chainCode,this.path,this.index,this.depth,this.mnemonic,t)}get extendedKey(){if(this.depth>=256)throw new Error("Depth too large!");return ad(ae(["0x0488ADE4",od(this.depth,1),this.parentFingerprint,od(this.index,4),this.chainCode,ae(["0x00",this.privateKey])]))}hasPath(){return null!=this.path}neuter(){return new fd(cd,this.address,this.publicKey,this.parentFingerprint,this.chainCode,this.path,this.index,this.depth,this.provider)}deriveChild(t){const e=Lf.getNumber(t,"index");if(e>4294967295)throw new Error("invalid index - "+String(e));let r=this.path;r&&(r+="/"+(2147483647&e),2147483648&e&&(r+="'"));const{IR:n,IL:s}=ld(e,this.chainCode,this.publicKey,this.privateKey),i=new cc(vt((yt(s)+BigInt(this.privateKey))%id,32));return new hd(cd,i,this.fingerprint,ie(n),r,e,this.depth+1,this.mnemonic,this.provider)}derivePath(t){return ud(this,t)}static fromSeed(t){return ed(hd,Zf,"m",Qf).call(hd,t,null)}static fromPhrase(t,e="",r=nd,n=Uf){r||(r=nd);const s=Kf.fromPhrase(t,e,n);return ed(hd,Zf,"m",Qf).call(hd,s.computeSeed(),s).derivePath(r)}static fromMnemonic(t,e=nd){return e||(e=nd),ed(hd,Zf,"m",Qf).call(hd,t.computeSeed(),t).derivePath(e)}static fromExtendedKey(t){const e=ee(qt(t));82===e.length&&ad(e.slice(0,78))===t||Lf.throwArgumentError("invalid extended key","extendedKey","[ REDACTED ]");const r=e[4],n=ie(e.slice(5,9)),s=parseInt(ie(e.slice(9,13)).substring(2),16),i=ie(e.slice(13,45)),o=e.slice(45,78);switch(ie(e.slice(0,4))){case"0x0488b21e":case"0x043587cf":{const t=ie(o);return new fd(cd,Ef(t),t,n,i,null,s,r,null)}case"0x0488ade4":case"0x04358394 ":if(0!==o[0])break;return new hd(cd,new cc(o.slice(1)),n,i,null,s,r,null,null)}return Lf.throwArgumentError("invalid extended key prefix","extendedKey","[ REDACTED ]")}static createRandom(t="",e=nd,r=Uf){e||(e=nd);const n=Kf.fromEntropy(Rn(16),t,r);return ed(hd,Zf,"m",Qf).call(hd,n.computeSeed(),n).derivePath(e)}}Zf=hd,Qf=function(t,e){const r=Lf.getBytes(t,"seed");if(r.length<16||r.length>64)throw new Error("invalid seed");const n=ee(Ur("sha512",sd,r)),s=new cc(ie(n.slice(0,32)));return new hd(cd,s,"0x00000000",ie(n.slice(32)),"m",0,0,e,null)};class fd extends uu{constructor(t,e,n,s,i,o,a,c,l){super(e,l),Lf.assertPrivate(t,cd,"HDNodeVoidWallet"),r(this,{publicKey:n});r(this,{publicKey:n,fingerprint:le(kn(Yn(n)),0,4),parentFingerprint:s,chainCode:i,path:o,index:a,depth:c})}connect(t){return new fd(cd,this.address,this.publicKey,this.parentFingerprint,this.chainCode,this.path,this.index,this.depth,t)}get extendedKey(){if(this.depth>=256)throw new Error("Depth too large!");return ad(ae(["0x0488B21E",od(this.depth,1),this.parentFingerprint,od(this.index,4),this.chainCode,this.publicKey]))}hasPath(){return null!=this.path}deriveChild(t){const e=Lf.getNumber(t,"index");if(e>4294967295)throw new Error("invalid index - "+String(e));let r=this.path;r&&(r+="/"+(2147483647&e),2147483648&e&&(r+="'"));const{IR:n,IL:s}=ld(e,this.chainCode,this.publicKey,null),i=cc._addPoints(s,this.publicKey,!0),o=Ef(i);return new fd(cd,o,i,this.fingerprint,ie(n),r,e,this.depth+1,this.provider)}derivePath(t){return ud(this,t)}}class dd{constructor(t,e="",r="m/44'/60'/0'/0",n=Uf){td.set(this,void 0),rd(this,td,hd.fromPhrase(t,e,r,n),"f")}getSigner(t=0){return ed(this,td,"f").deriveChild(t)}}function pd(t){const e=Lf.getNumber(t,"index");return(e<0||e>=2147483648)&&Lf.throwArgumentError("invalid account index","index",e),`m/44'/60'/${e}'/0/0`} +/*! MIT License. Copyright 2015-2022 Richard Moore . See LICENSE.txt. */td=new WeakMap;var wd,gd,md,yd=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},bd=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const vd={16:10,24:12,32:14},Ed=[1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145],Td=[99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22],kd=[82,9,106,213,48,54,165,56,191,64,163,158,129,243,215,251,124,227,57,130,155,47,255,135,52,142,67,68,196,222,233,203,84,123,148,50,166,194,35,61,238,76,149,11,66,250,195,78,8,46,161,102,40,217,36,178,118,91,162,73,109,139,209,37,114,248,246,100,134,104,152,22,212,164,92,204,93,101,182,146,108,112,72,80,253,237,185,218,94,21,70,87,167,141,157,132,144,216,171,0,140,188,211,10,247,228,88,5,184,179,69,6,208,44,30,143,202,63,15,2,193,175,189,3,1,19,138,107,58,145,17,65,79,103,220,234,151,242,207,206,240,180,230,115,150,172,116,34,231,173,53,133,226,249,55,232,28,117,223,110,71,241,26,113,29,41,197,137,111,183,98,14,170,24,190,27,252,86,62,75,198,210,121,32,154,219,192,254,120,205,90,244,31,221,168,51,136,7,199,49,177,18,16,89,39,128,236,95,96,81,127,169,25,181,74,13,45,229,122,159,147,201,156,239,160,224,59,77,174,42,245,176,200,235,187,60,131,83,153,97,23,43,4,126,186,119,214,38,225,105,20,99,85,33,12,125],Ad=[3328402341,4168907908,4000806809,4135287693,4294111757,3597364157,3731845041,2445657428,1613770832,33620227,3462883241,1445669757,3892248089,3050821474,1303096294,3967186586,2412431941,528646813,2311702848,4202528135,4026202645,2992200171,2387036105,4226871307,1101901292,3017069671,1604494077,1169141738,597466303,1403299063,3832705686,2613100635,1974974402,3791519004,1033081774,1277568618,1815492186,2118074177,4126668546,2211236943,1748251740,1369810420,3521504564,4193382664,3799085459,2883115123,1647391059,706024767,134480908,2512897874,1176707941,2646852446,806885416,932615841,168101135,798661301,235341577,605164086,461406363,3756188221,3454790438,1311188841,2142417613,3933566367,302582043,495158174,1479289972,874125870,907746093,3698224818,3025820398,1537253627,2756858614,1983593293,3084310113,2108928974,1378429307,3722699582,1580150641,327451799,2790478837,3117535592,0,3253595436,1075847264,3825007647,2041688520,3059440621,3563743934,2378943302,1740553945,1916352843,2487896798,2555137236,2958579944,2244988746,3151024235,3320835882,1336584933,3992714006,2252555205,2588757463,1714631509,293963156,2319795663,3925473552,67240454,4269768577,2689618160,2017213508,631218106,1269344483,2723238387,1571005438,2151694528,93294474,1066570413,563977660,1882732616,4059428100,1673313503,2008463041,2950355573,1109467491,537923632,3858759450,4260623118,3218264685,2177748300,403442708,638784309,3287084079,3193921505,899127202,2286175436,773265209,2479146071,1437050866,4236148354,2050833735,3362022572,3126681063,840505643,3866325909,3227541664,427917720,2655997905,2749160575,1143087718,1412049534,999329963,193497219,2353415882,3354324521,1807268051,672404540,2816401017,3160301282,369822493,2916866934,3688947771,1681011286,1949973070,336202270,2454276571,201721354,1210328172,3093060836,2680341085,3184776046,1135389935,3294782118,965841320,831886756,3554993207,4068047243,3588745010,2345191491,1849112409,3664604599,26054028,2983581028,2622377682,1235855840,3630984372,2891339514,4092916743,3488279077,3395642799,4101667470,1202630377,268961816,1874508501,4034427016,1243948399,1546530418,941366308,1470539505,1941222599,2546386513,3421038627,2715671932,3899946140,1042226977,2521517021,1639824860,227249030,260737669,3765465232,2084453954,1907733956,3429263018,2420656344,100860677,4160157185,470683154,3261161891,1781871967,2924959737,1773779408,394692241,2579611992,974986535,664706745,3655459128,3958962195,731420851,571543859,3530123707,2849626480,126783113,865375399,765172662,1008606754,361203602,3387549984,2278477385,2857719295,1344809080,2782912378,59542671,1503764984,160008576,437062935,1707065306,3622233649,2218934982,3496503480,2185314755,697932208,1512910199,504303377,2075177163,2824099068,1841019862,739644986],Nd=[2781242211,2230877308,2582542199,2381740923,234877682,3184946027,2984144751,1418839493,1348481072,50462977,2848876391,2102799147,434634494,1656084439,3863849899,2599188086,1167051466,2636087938,1082771913,2281340285,368048890,3954334041,3381544775,201060592,3963727277,1739838676,4250903202,3930435503,3206782108,4149453988,2531553906,1536934080,3262494647,484572669,2923271059,1783375398,1517041206,1098792767,49674231,1334037708,1550332980,4098991525,886171109,150598129,2481090929,1940642008,1398944049,1059722517,201851908,1385547719,1699095331,1587397571,674240536,2704774806,252314885,3039795866,151914247,908333586,2602270848,1038082786,651029483,1766729511,3447698098,2682942837,454166793,2652734339,1951935532,775166490,758520603,3000790638,4004797018,4217086112,4137964114,1299594043,1639438038,3464344499,2068982057,1054729187,1901997871,2534638724,4121318227,1757008337,0,750906861,1614815264,535035132,3363418545,3988151131,3201591914,1183697867,3647454910,1265776953,3734260298,3566750796,3903871064,1250283471,1807470800,717615087,3847203498,384695291,3313910595,3617213773,1432761139,2484176261,3481945413,283769337,100925954,2180939647,4037038160,1148730428,3123027871,3813386408,4087501137,4267549603,3229630528,2315620239,2906624658,3156319645,1215313976,82966005,3747855548,3245848246,1974459098,1665278241,807407632,451280895,251524083,1841287890,1283575245,337120268,891687699,801369324,3787349855,2721421207,3431482436,959321879,1469301956,4065699751,2197585534,1199193405,2898814052,3887750493,724703513,2514908019,2696962144,2551808385,3516813135,2141445340,1715741218,2119445034,2872807568,2198571144,3398190662,700968686,3547052216,1009259540,2041044702,3803995742,487983883,1991105499,1004265696,1449407026,1316239930,504629770,3683797321,168560134,1816667172,3837287516,1570751170,1857934291,4014189740,2797888098,2822345105,2754712981,936633572,2347923833,852879335,1133234376,1500395319,3084545389,2348912013,1689376213,3533459022,3762923945,3034082412,4205598294,133428468,634383082,2949277029,2398386810,3913789102,403703816,3580869306,2297460856,1867130149,1918643758,607656988,4049053350,3346248884,1368901318,600565992,2090982877,2632479860,557719327,3717614411,3697393085,2249034635,2232388234,2430627952,1115438654,3295786421,2865522278,3633334344,84280067,33027830,303828494,2747425121,1600795957,4188952407,3496589753,2434238086,1486471617,658119965,3106381470,953803233,334231800,3005978776,857870609,3151128937,1890179545,2298973838,2805175444,3056442267,574365214,2450884487,550103529,1233637070,4289353045,2018519080,2057691103,2399374476,4166623649,2148108681,387583245,3664101311,836232934,3330556482,3100665960,3280093505,2955516313,2002398509,287182607,3413881008,4238890068,3597515707,975967766],Pd=[1671808611,2089089148,2006576759,2072901243,4061003762,1807603307,1873927791,3310653893,810573872,16974337,1739181671,729634347,4263110654,3613570519,2883997099,1989864566,3393556426,2191335298,3376449993,2106063485,4195741690,1508618841,1204391495,4027317232,2917941677,3563566036,2734514082,2951366063,2629772188,2767672228,1922491506,3227229120,3082974647,4246528509,2477669779,644500518,911895606,1061256767,4144166391,3427763148,878471220,2784252325,3845444069,4043897329,1905517169,3631459288,827548209,356461077,67897348,3344078279,593839651,3277757891,405286936,2527147926,84871685,2595565466,118033927,305538066,2157648768,3795705826,3945188843,661212711,2999812018,1973414517,152769033,2208177539,745822252,439235610,455947803,1857215598,1525593178,2700827552,1391895634,994932283,3596728278,3016654259,695947817,3812548067,795958831,2224493444,1408607827,3513301457,0,3979133421,543178784,4229948412,2982705585,1542305371,1790891114,3410398667,3201918910,961245753,1256100938,1289001036,1491644504,3477767631,3496721360,4012557807,2867154858,4212583931,1137018435,1305975373,861234739,2241073541,1171229253,4178635257,33948674,2139225727,1357946960,1011120188,2679776671,2833468328,1374921297,2751356323,1086357568,2408187279,2460827538,2646352285,944271416,4110742005,3168756668,3066132406,3665145818,560153121,271589392,4279952895,4077846003,3530407890,3444343245,202643468,322250259,3962553324,1608629855,2543990167,1154254916,389623319,3294073796,2817676711,2122513534,1028094525,1689045092,1575467613,422261273,1939203699,1621147744,2174228865,1339137615,3699352540,577127458,712922154,2427141008,2290289544,1187679302,3995715566,3100863416,339486740,3732514782,1591917662,186455563,3681988059,3762019296,844522546,978220090,169743370,1239126601,101321734,611076132,1558493276,3260915650,3547250131,2901361580,1655096418,2443721105,2510565781,3828863972,2039214713,3878868455,3359869896,928607799,1840765549,2374762893,3580146133,1322425422,2850048425,1823791212,1459268694,4094161908,3928346602,1706019429,2056189050,2934523822,135794696,3134549946,2022240376,628050469,779246638,472135708,2800834470,3032970164,3327236038,3894660072,3715932637,1956440180,522272287,1272813131,3185336765,2340818315,2323976074,1888542832,1044544574,3049550261,1722469478,1222152264,50660867,4127324150,236067854,1638122081,895445557,1475980887,3117443513,2257655686,3243809217,489110045,2662934430,3778599393,4162055160,2561878936,288563729,1773916777,3648039385,2391345038,2493985684,2612407707,505560094,2274497927,3911240169,3460925390,1442818645,678973480,3749357023,2358182796,2717407649,2306869641,219617805,3218761151,3862026214,1120306242,1756942440,1103331905,2578459033,762796589,252780047,2966125488,1425844308,3151392187,372911126],xd=[1667474886,2088535288,2004326894,2071694838,4075949567,1802223062,1869591006,3318043793,808472672,16843522,1734846926,724270422,4278065639,3621216949,2880169549,1987484396,3402253711,2189597983,3385409673,2105378810,4210693615,1499065266,1195886990,4042263547,2913856577,3570689971,2728590687,2947541573,2627518243,2762274643,1920112356,3233831835,3082273397,4261223649,2475929149,640051788,909531756,1061110142,4160160501,3435941763,875846760,2779116625,3857003729,4059105529,1903268834,3638064043,825316194,353713962,67374088,3351728789,589522246,3284360861,404236336,2526454071,84217610,2593830191,117901582,303183396,2155911963,3806477791,3958056653,656894286,2998062463,1970642922,151591698,2206440989,741110872,437923380,454765878,1852748508,1515908788,2694904667,1381168804,993742198,3604373943,3014905469,690584402,3823320797,791638366,2223281939,1398011302,3520161977,0,3991743681,538992704,4244381667,2981218425,1532751286,1785380564,3419096717,3200178535,960056178,1246420628,1280103576,1482221744,3486468741,3503319995,4025428677,2863326543,4227536621,1128514950,1296947098,859002214,2240123921,1162203018,4193849577,33687044,2139062782,1347481760,1010582648,2678045221,2829640523,1364325282,2745433693,1077985408,2408548869,2459086143,2644360225,943212656,4126475505,3166494563,3065430391,3671750063,555836226,269496352,4294908645,4092792573,3537006015,3452783745,202118168,320025894,3974901699,1600119230,2543297077,1145359496,387397934,3301201811,2812801621,2122220284,1027426170,1684319432,1566435258,421079858,1936954854,1616945344,2172753945,1330631070,3705438115,572679748,707427924,2425400123,2290647819,1179044492,4008585671,3099120491,336870440,3739122087,1583276732,185277718,3688593069,3772791771,842159716,976899700,168435220,1229577106,101059084,606366792,1549591736,3267517855,3553849021,2897014595,1650632388,2442242105,2509612081,3840161747,2038008818,3890688725,3368567691,926374254,1835907034,2374863873,3587531953,1313788572,2846482505,1819063512,1448540844,4109633523,3941213647,1701162954,2054852340,2930698567,134748176,3132806511,2021165296,623210314,774795868,471606328,2795958615,3031746419,3334885783,3907527627,3722280097,1953799400,522133822,1263263126,3183336545,2341176845,2324333839,1886425312,1044267644,3048588401,1718004428,1212733584,50529542,4143317495,235803164,1633788866,892690282,1465383342,3115962473,2256965911,3250673817,488449850,2661202215,3789633753,4177007595,2560144171,286339874,1768537042,3654906025,2391705863,2492770099,2610673197,505291324,2273808917,3924369609,3469625735,1431699370,673740880,3755965093,2358021891,2711746649,2307489801,218961690,3217021541,3873845719,1111672452,1751693520,1094828930,2576986153,757954394,252645662,2964376443,1414855848,3149649517,370555436],Od=[1374988112,2118214995,437757123,975658646,1001089995,530400753,2902087851,1273168787,540080725,2910219766,2295101073,4110568485,1340463100,3307916247,641025152,3043140495,3736164937,632953703,1172967064,1576976609,3274667266,2169303058,2370213795,1809054150,59727847,361929877,3211623147,2505202138,3569255213,1484005843,1239443753,2395588676,1975683434,4102977912,2572697195,666464733,3202437046,4035489047,3374361702,2110667444,1675577880,3843699074,2538681184,1649639237,2976151520,3144396420,4269907996,4178062228,1883793496,2403728665,2497604743,1383856311,2876494627,1917518562,3810496343,1716890410,3001755655,800440835,2261089178,3543599269,807962610,599762354,33778362,3977675356,2328828971,2809771154,4077384432,1315562145,1708848333,101039829,3509871135,3299278474,875451293,2733856160,92987698,2767645557,193195065,1080094634,1584504582,3178106961,1042385657,2531067453,3711829422,1306967366,2438237621,1908694277,67556463,1615861247,429456164,3602770327,2302690252,1742315127,2968011453,126454664,3877198648,2043211483,2709260871,2084704233,4169408201,0,159417987,841739592,504459436,1817866830,4245618683,260388950,1034867998,908933415,168810852,1750902305,2606453969,607530554,202008497,2472011535,3035535058,463180190,2160117071,1641816226,1517767529,470948374,3801332234,3231722213,1008918595,303765277,235474187,4069246893,766945465,337553864,1475418501,2943682380,4003061179,2743034109,4144047775,1551037884,1147550661,1543208500,2336434550,3408119516,3069049960,3102011747,3610369226,1113818384,328671808,2227573024,2236228733,3535486456,2935566865,3341394285,496906059,3702665459,226906860,2009195472,733156972,2842737049,294930682,1206477858,2835123396,2700099354,1451044056,573804783,2269728455,3644379585,2362090238,2564033334,2801107407,2776292904,3669462566,1068351396,742039012,1350078989,1784663195,1417561698,4136440770,2430122216,775550814,2193862645,2673705150,1775276924,1876241833,3475313331,3366754619,270040487,3902563182,3678124923,3441850377,1851332852,3969562369,2203032232,3868552805,2868897406,566021896,4011190502,3135740889,1248802510,3936291284,699432150,832877231,708780849,3332740144,899835584,1951317047,4236429990,3767586992,866637845,4043610186,1106041591,2144161806,395441711,1984812685,1139781709,3433712980,3835036895,2664543715,1282050075,3240894392,1181045119,2640243204,25965917,4203181171,4211818798,3009879386,2463879762,3910161971,1842759443,2597806476,933301370,1509430414,3943906441,3467192302,3076639029,3776767469,2051518780,2631065433,1441952575,404016761,1942435775,1408749034,1610459739,3745345300,2017778566,3400528769,3110650942,941896748,3265478751,371049330,3168937228,675039627,4279080257,967311729,135050206,3635733660,1683407248,2076935265,3576870512,1215061108,3501741890],Id=[1347548327,1400783205,3273267108,2520393566,3409685355,4045380933,2880240216,2471224067,1428173050,4138563181,2441661558,636813900,4233094615,3620022987,2149987652,2411029155,1239331162,1730525723,2554718734,3781033664,46346101,310463728,2743944855,3328955385,3875770207,2501218972,3955191162,3667219033,768917123,3545789473,692707433,1150208456,1786102409,2029293177,1805211710,3710368113,3065962831,401639597,1724457132,3028143674,409198410,2196052529,1620529459,1164071807,3769721975,2226875310,486441376,2499348523,1483753576,428819965,2274680428,3075636216,598438867,3799141122,1474502543,711349675,129166120,53458370,2592523643,2782082824,4063242375,2988687269,3120694122,1559041666,730517276,2460449204,4042459122,2706270690,3446004468,3573941694,533804130,2328143614,2637442643,2695033685,839224033,1973745387,957055980,2856345839,106852767,1371368976,4181598602,1033297158,2933734917,1179510461,3046200461,91341917,1862534868,4284502037,605657339,2547432937,3431546947,2003294622,3182487618,2282195339,954669403,3682191598,1201765386,3917234703,3388507166,0,2198438022,1211247597,2887651696,1315723890,4227665663,1443857720,507358933,657861945,1678381017,560487590,3516619604,975451694,2970356327,261314535,3535072918,2652609425,1333838021,2724322336,1767536459,370938394,182621114,3854606378,1128014560,487725847,185469197,2918353863,3106780840,3356761769,2237133081,1286567175,3152976349,4255350624,2683765030,3160175349,3309594171,878443390,1988838185,3704300486,1756818940,1673061617,3403100636,272786309,1075025698,545572369,2105887268,4174560061,296679730,1841768865,1260232239,4091327024,3960309330,3497509347,1814803222,2578018489,4195456072,575138148,3299409036,446754879,3629546796,4011996048,3347532110,3252238545,4270639778,915985419,3483825537,681933534,651868046,2755636671,3828103837,223377554,2607439820,1649704518,3270937875,3901806776,1580087799,4118987695,3198115200,2087309459,2842678573,3016697106,1003007129,2802849917,1860738147,2077965243,164439672,4100872472,32283319,2827177882,1709610350,2125135846,136428751,3874428392,3652904859,3460984630,3572145929,3593056380,2939266226,824852259,818324884,3224740454,930369212,2801566410,2967507152,355706840,1257309336,4148292826,243256656,790073846,2373340630,1296297904,1422699085,3756299780,3818836405,457992840,3099667487,2135319889,77422314,1560382517,1945798516,788204353,1521706781,1385356242,870912086,325965383,2358957921,2050466060,2388260884,2313884476,4006521127,901210569,3990953189,1014646705,1503449823,1062597235,2031621326,3212035895,3931371469,1533017514,350174575,2256028891,2177544179,1052338372,741876788,1606591296,1914052035,213705253,2334669897,1107234197,1899603969,3725069491,2631447780,2422494913,1635502980,1893020342,1950903388,1120974935],Sd=[2807058932,1699970625,2764249623,1586903591,1808481195,1173430173,1487645946,59984867,4199882800,1844882806,1989249228,1277555970,3623636965,3419915562,1149249077,2744104290,1514790577,459744698,244860394,3235995134,1963115311,4027744588,2544078150,4190530515,1608975247,2627016082,2062270317,1507497298,2200818878,567498868,1764313568,3359936201,2305455554,2037970062,1047239e3,1910319033,1337376481,2904027272,2892417312,984907214,1243112415,830661914,861968209,2135253587,2011214180,2927934315,2686254721,731183368,1750626376,4246310725,1820824798,4172763771,3542330227,48394827,2404901663,2871682645,671593195,3254988725,2073724613,145085239,2280796200,2779915199,1790575107,2187128086,472615631,3029510009,4075877127,3802222185,4107101658,3201631749,1646252340,4270507174,1402811438,1436590835,3778151818,3950355702,3963161475,4020912224,2667994737,273792366,2331590177,104699613,95345982,3175501286,2377486676,1560637892,3564045318,369057872,4213447064,3919042237,1137477952,2658625497,1119727848,2340947849,1530455833,4007360968,172466556,266959938,516552836,0,2256734592,3980931627,1890328081,1917742170,4294704398,945164165,3575528878,958871085,3647212047,2787207260,1423022939,775562294,1739656202,3876557655,2530391278,2443058075,3310321856,547512796,1265195639,437656594,3121275539,719700128,3762502690,387781147,218828297,3350065803,2830708150,2848461854,428169201,122466165,3720081049,1627235199,648017665,4122762354,1002783846,2117360635,695634755,3336358691,4234721005,4049844452,3704280881,2232435299,574624663,287343814,612205898,1039717051,840019705,2708326185,793451934,821288114,1391201670,3822090177,376187827,3113855344,1224348052,1679968233,2361698556,1058709744,752375421,2431590963,1321699145,3519142200,2734591178,188127444,2177869557,3727205754,2384911031,3215212461,2648976442,2450346104,3432737375,1180849278,331544205,3102249176,4150144569,2952102595,2159976285,2474404304,766078933,313773861,2570832044,2108100632,1668212892,3145456443,2013908262,418672217,3070356634,2594734927,1852171925,3867060991,3473416636,3907448597,2614737639,919489135,164948639,2094410160,2997825956,590424639,2486224549,1723872674,3157750862,3399941250,3501252752,3625268135,2555048196,3673637356,1343127501,4130281361,3599595085,2957853679,1297403050,81781910,3051593425,2283490410,532201772,1367295589,3926170974,895287692,1953757831,1093597963,492483431,3528626907,1446242576,1192455638,1636604631,209336225,344873464,1015671571,669961897,3375740769,3857572124,2973530695,3747192018,1933530610,3464042516,935293895,3454686199,2858115069,1863638845,3683022916,4085369519,3292445032,875313188,1080017571,3279033885,621591778,1233856572,2504130317,24197544,3017672716,3835484340,3247465558,2220981195,3060847922,1551124588,1463996600],Rd=[4104605777,1097159550,396673818,660510266,2875968315,2638606623,4200115116,3808662347,821712160,1986918061,3430322568,38544885,3856137295,718002117,893681702,1654886325,2975484382,3122358053,3926825029,4274053469,796197571,1290801793,1184342925,3556361835,2405426947,2459735317,1836772287,1381620373,3196267988,1948373848,3764988233,3385345166,3263785589,2390325492,1480485785,3111247143,3780097726,2293045232,548169417,3459953789,3746175075,439452389,1362321559,1400849762,1685577905,1806599355,2174754046,137073913,1214797936,1174215055,3731654548,2079897426,1943217067,1258480242,529487843,1437280870,3945269170,3049390895,3313212038,923313619,679998e3,3215307299,57326082,377642221,3474729866,2041877159,133361907,1776460110,3673476453,96392454,878845905,2801699524,777231668,4082475170,2330014213,4142626212,2213296395,1626319424,1906247262,1846563261,562755902,3708173718,1040559837,3871163981,1418573201,3294430577,114585348,1343618912,2566595609,3186202582,1078185097,3651041127,3896688048,2307622919,425408743,3371096953,2081048481,1108339068,2216610296,0,2156299017,736970802,292596766,1517440620,251657213,2235061775,2933202493,758720310,265905162,1554391400,1532285339,908999204,174567692,1474760595,4002861748,2610011675,3234156416,3693126241,2001430874,303699484,2478443234,2687165888,585122620,454499602,151849742,2345119218,3064510765,514443284,4044981591,1963412655,2581445614,2137062819,19308535,1928707164,1715193156,4219352155,1126790795,600235211,3992742070,3841024952,836553431,1669664834,2535604243,3323011204,1243905413,3141400786,4180808110,698445255,2653899549,2989552604,2253581325,3252932727,3004591147,1891211689,2487810577,3915653703,4237083816,4030667424,2100090966,865136418,1229899655,953270745,3399679628,3557504664,4118925222,2061379749,3079546586,2915017791,983426092,2022837584,1607244650,2118541908,2366882550,3635996816,972512814,3283088770,1568718495,3499326569,3576539503,621982671,2895723464,410887952,2623762152,1002142683,645401037,1494807662,2595684844,1335535747,2507040230,4293295786,3167684641,367585007,3885750714,1865862730,2668221674,2960971305,2763173681,1059270954,2777952454,2724642869,1320957812,2194319100,2429595872,2815956275,77089521,3973773121,3444575871,2448830231,1305906550,4021308739,2857194700,2516901860,3518358430,1787304780,740276417,1699839814,1592394909,2352307457,2272556026,188821243,1729977011,3687994002,274084841,3594982253,3613494426,2701949495,4162096729,322734571,2837966542,1640576439,484830689,1202797690,3537852828,4067639125,349075736,3342319475,4157467219,4255800159,1030690015,1155237496,2951971274,1757691577,607398968,2738905026,499347990,3794078908,1011452712,227885567,2818666809,213114376,3034881240,1455525988,3414450555,850817237,1817998408,3092726480],_d=[0,235474187,470948374,303765277,941896748,908933415,607530554,708780849,1883793496,2118214995,1817866830,1649639237,1215061108,1181045119,1417561698,1517767529,3767586992,4003061179,4236429990,4069246893,3635733660,3602770327,3299278474,3400528769,2430122216,2664543715,2362090238,2193862645,2835123396,2801107407,3035535058,3135740889,3678124923,3576870512,3341394285,3374361702,3810496343,3977675356,4279080257,4043610186,2876494627,2776292904,3076639029,3110650942,2472011535,2640243204,2403728665,2169303058,1001089995,899835584,666464733,699432150,59727847,226906860,530400753,294930682,1273168787,1172967064,1475418501,1509430414,1942435775,2110667444,1876241833,1641816226,2910219766,2743034109,2976151520,3211623147,2505202138,2606453969,2302690252,2269728455,3711829422,3543599269,3240894392,3475313331,3843699074,3943906441,4178062228,4144047775,1306967366,1139781709,1374988112,1610459739,1975683434,2076935265,1775276924,1742315127,1034867998,866637845,566021896,800440835,92987698,193195065,429456164,395441711,1984812685,2017778566,1784663195,1683407248,1315562145,1080094634,1383856311,1551037884,101039829,135050206,437757123,337553864,1042385657,807962610,573804783,742039012,2531067453,2564033334,2328828971,2227573024,2935566865,2700099354,3001755655,3168937228,3868552805,3902563182,4203181171,4102977912,3736164937,3501741890,3265478751,3433712980,1106041591,1340463100,1576976609,1408749034,2043211483,2009195472,1708848333,1809054150,832877231,1068351396,766945465,599762354,159417987,126454664,361929877,463180190,2709260871,2943682380,3178106961,3009879386,2572697195,2538681184,2236228733,2336434550,3509871135,3745345300,3441850377,3274667266,3910161971,3877198648,4110568485,4211818798,2597806476,2497604743,2261089178,2295101073,2733856160,2902087851,3202437046,2968011453,3936291284,3835036895,4136440770,4169408201,3535486456,3702665459,3467192302,3231722213,2051518780,1951317047,1716890410,1750902305,1113818384,1282050075,1584504582,1350078989,168810852,67556463,371049330,404016761,841739592,1008918595,775550814,540080725,3969562369,3801332234,4035489047,4269907996,3569255213,3669462566,3366754619,3332740144,2631065433,2463879762,2160117071,2395588676,2767645557,2868897406,3102011747,3069049960,202008497,33778362,270040487,504459436,875451293,975658646,675039627,641025152,2084704233,1917518562,1615861247,1851332852,1147550661,1248802510,1484005843,1451044056,933301370,967311729,733156972,632953703,260388950,25965917,328671808,496906059,1206477858,1239443753,1543208500,1441952575,2144161806,1908694277,1675577880,1842759443,3610369226,3644379585,3408119516,3307916247,4011190502,3776767469,4077384432,4245618683,2809771154,2842737049,3144396420,3043140495,2673705150,2438237621,2203032232,2370213795],Cd=[0,185469197,370938394,487725847,741876788,657861945,975451694,824852259,1483753576,1400783205,1315723890,1164071807,1950903388,2135319889,1649704518,1767536459,2967507152,3152976349,2801566410,2918353863,2631447780,2547432937,2328143614,2177544179,3901806776,3818836405,4270639778,4118987695,3299409036,3483825537,3535072918,3652904859,2077965243,1893020342,1841768865,1724457132,1474502543,1559041666,1107234197,1257309336,598438867,681933534,901210569,1052338372,261314535,77422314,428819965,310463728,3409685355,3224740454,3710368113,3593056380,3875770207,3960309330,4045380933,4195456072,2471224067,2554718734,2237133081,2388260884,3212035895,3028143674,2842678573,2724322336,4138563181,4255350624,3769721975,3955191162,3667219033,3516619604,3431546947,3347532110,2933734917,2782082824,3099667487,3016697106,2196052529,2313884476,2499348523,2683765030,1179510461,1296297904,1347548327,1533017514,1786102409,1635502980,2087309459,2003294622,507358933,355706840,136428751,53458370,839224033,957055980,605657339,790073846,2373340630,2256028891,2607439820,2422494913,2706270690,2856345839,3075636216,3160175349,3573941694,3725069491,3273267108,3356761769,4181598602,4063242375,4011996048,3828103837,1033297158,915985419,730517276,545572369,296679730,446754879,129166120,213705253,1709610350,1860738147,1945798516,2029293177,1239331162,1120974935,1606591296,1422699085,4148292826,4233094615,3781033664,3931371469,3682191598,3497509347,3446004468,3328955385,2939266226,2755636671,3106780840,2988687269,2198438022,2282195339,2501218972,2652609425,1201765386,1286567175,1371368976,1521706781,1805211710,1620529459,2105887268,1988838185,533804130,350174575,164439672,46346101,870912086,954669403,636813900,788204353,2358957921,2274680428,2592523643,2441661558,2695033685,2880240216,3065962831,3182487618,3572145929,3756299780,3270937875,3388507166,4174560061,4091327024,4006521127,3854606378,1014646705,930369212,711349675,560487590,272786309,457992840,106852767,223377554,1678381017,1862534868,1914052035,2031621326,1211247597,1128014560,1580087799,1428173050,32283319,182621114,401639597,486441376,768917123,651868046,1003007129,818324884,1503449823,1385356242,1333838021,1150208456,1973745387,2125135846,1673061617,1756818940,2970356327,3120694122,2802849917,2887651696,2637442643,2520393566,2334669897,2149987652,3917234703,3799141122,4284502037,4100872472,3309594171,3460984630,3545789473,3629546796,2050466060,1899603969,1814803222,1730525723,1443857720,1560382517,1075025698,1260232239,575138148,692707433,878443390,1062597235,243256656,91341917,409198410,325965383,3403100636,3252238545,3704300486,3620022987,3874428392,3990953189,4042459122,4227665663,2460449204,2578018489,2226875310,2411029155,3198115200,3046200461,2827177882,2743944855],Bd=[0,218828297,437656594,387781147,875313188,958871085,775562294,590424639,1750626376,1699970625,1917742170,2135253587,1551124588,1367295589,1180849278,1265195639,3501252752,3720081049,3399941250,3350065803,3835484340,3919042237,4270507174,4085369519,3102249176,3051593425,2734591178,2952102595,2361698556,2177869557,2530391278,2614737639,3145456443,3060847922,2708326185,2892417312,2404901663,2187128086,2504130317,2555048196,3542330227,3727205754,3375740769,3292445032,3876557655,3926170974,4246310725,4027744588,1808481195,1723872674,1910319033,2094410160,1608975247,1391201670,1173430173,1224348052,59984867,244860394,428169201,344873464,935293895,984907214,766078933,547512796,1844882806,1627235199,2011214180,2062270317,1507497298,1423022939,1137477952,1321699145,95345982,145085239,532201772,313773861,830661914,1015671571,731183368,648017665,3175501286,2957853679,2807058932,2858115069,2305455554,2220981195,2474404304,2658625497,3575528878,3625268135,3473416636,3254988725,3778151818,3963161475,4213447064,4130281361,3599595085,3683022916,3432737375,3247465558,3802222185,4020912224,4172763771,4122762354,3201631749,3017672716,2764249623,2848461854,2331590177,2280796200,2431590963,2648976442,104699613,188127444,472615631,287343814,840019705,1058709744,671593195,621591778,1852171925,1668212892,1953757831,2037970062,1514790577,1463996600,1080017571,1297403050,3673637356,3623636965,3235995134,3454686199,4007360968,3822090177,4107101658,4190530515,2997825956,3215212461,2830708150,2779915199,2256734592,2340947849,2627016082,2443058075,172466556,122466165,273792366,492483431,1047239e3,861968209,612205898,695634755,1646252340,1863638845,2013908262,1963115311,1446242576,1530455833,1277555970,1093597963,1636604631,1820824798,2073724613,1989249228,1436590835,1487645946,1337376481,1119727848,164948639,81781910,331544205,516552836,1039717051,821288114,669961897,719700128,2973530695,3157750862,2871682645,2787207260,2232435299,2283490410,2667994737,2450346104,3647212047,3564045318,3279033885,3464042516,3980931627,3762502690,4150144569,4199882800,3070356634,3121275539,2904027272,2686254721,2200818878,2384911031,2570832044,2486224549,3747192018,3528626907,3310321856,3359936201,3950355702,3867060991,4049844452,4234721005,1739656202,1790575107,2108100632,1890328081,1402811438,1586903591,1233856572,1149249077,266959938,48394827,369057872,418672217,1002783846,919489135,567498868,752375421,209336225,24197544,376187827,459744698,945164165,895287692,574624663,793451934,1679968233,1764313568,2117360635,1933530610,1343127501,1560637892,1243112415,1192455638,3704280881,3519142200,3336358691,3419915562,3907448597,3857572124,4075877127,4294704398,3029510009,3113855344,2927934315,2744104290,2159976285,2377486676,2594734927,2544078150],Fd=[0,151849742,303699484,454499602,607398968,758720310,908999204,1059270954,1214797936,1097159550,1517440620,1400849762,1817998408,1699839814,2118541908,2001430874,2429595872,2581445614,2194319100,2345119218,3034881240,3186202582,2801699524,2951971274,3635996816,3518358430,3399679628,3283088770,4237083816,4118925222,4002861748,3885750714,1002142683,850817237,698445255,548169417,529487843,377642221,227885567,77089521,1943217067,2061379749,1640576439,1757691577,1474760595,1592394909,1174215055,1290801793,2875968315,2724642869,3111247143,2960971305,2405426947,2253581325,2638606623,2487810577,3808662347,3926825029,4044981591,4162096729,3342319475,3459953789,3576539503,3693126241,1986918061,2137062819,1685577905,1836772287,1381620373,1532285339,1078185097,1229899655,1040559837,923313619,740276417,621982671,439452389,322734571,137073913,19308535,3871163981,4021308739,4104605777,4255800159,3263785589,3414450555,3499326569,3651041127,2933202493,2815956275,3167684641,3049390895,2330014213,2213296395,2566595609,2448830231,1305906550,1155237496,1607244650,1455525988,1776460110,1626319424,2079897426,1928707164,96392454,213114376,396673818,514443284,562755902,679998e3,865136418,983426092,3708173718,3557504664,3474729866,3323011204,4180808110,4030667424,3945269170,3794078908,2507040230,2623762152,2272556026,2390325492,2975484382,3092726480,2738905026,2857194700,3973773121,3856137295,4274053469,4157467219,3371096953,3252932727,3673476453,3556361835,2763173681,2915017791,3064510765,3215307299,2156299017,2307622919,2459735317,2610011675,2081048481,1963412655,1846563261,1729977011,1480485785,1362321559,1243905413,1126790795,878845905,1030690015,645401037,796197571,274084841,425408743,38544885,188821243,3613494426,3731654548,3313212038,3430322568,4082475170,4200115116,3780097726,3896688048,2668221674,2516901860,2366882550,2216610296,3141400786,2989552604,2837966542,2687165888,1202797690,1320957812,1437280870,1554391400,1669664834,1787304780,1906247262,2022837584,265905162,114585348,499347990,349075736,736970802,585122620,972512814,821712160,2595684844,2478443234,2293045232,2174754046,3196267988,3079546586,2895723464,2777952454,3537852828,3687994002,3234156416,3385345166,4142626212,4293295786,3841024952,3992742070,174567692,57326082,410887952,292596766,777231668,660510266,1011452712,893681702,1108339068,1258480242,1343618912,1494807662,1715193156,1865862730,1948373848,2100090966,2701949495,2818666809,3004591147,3122358053,2235061775,2352307457,2535604243,2653899549,3915653703,3764988233,4219352155,4067639125,3444575871,3294430577,3746175075,3594982253,836553431,953270745,600235211,718002117,367585007,484830689,133361907,251657213,2041877159,1891211689,1806599355,1654886325,1568718495,1418573201,1335535747,1184342925];function Ud(t){const e=[];for(let r=0;r>2,bd(this,md,"f")[i][t%4]=s[t],bd(this,gd,"f")[e-i][t%4]=s[t];let o,a=0,c=n;for(;c>16&255]<<24^Td[o>>8&255]<<16^Td[255&o]<<8^Td[o>>24&255]^Ed[a]<<24,a+=1,8!=n)for(let t=1;t>8&255]<<8^Td[o>>16&255]<<16^Td[o>>24&255]<<24;for(let t=n/2+1;t>2,i=c%4,bd(this,md,"f")[t][i]=s[l],bd(this,gd,"f")[e-t][i]=s[l++],c++}for(let t=1;t>24&255]^Cd[o>>16&255]^Bd[o>>8&255]^Fd[255&o]}get key(){return bd(this,wd,"f").slice()}encrypt(t){if(16!=t.length)throw new TypeError("invalid plaintext size (must be 16 bytes)");const e=bd(this,md,"f").length-1,r=[0,0,0,0];let n=Ud(t);for(let t=0;t<4;t++)n[t]^=bd(this,md,"f")[0][t];for(let t=1;t>24&255]^Nd[n[(e+1)%4]>>16&255]^Pd[n[(e+2)%4]>>8&255]^xd[255&n[(e+3)%4]]^bd(this,md,"f")[t][e];n=r.slice()}const s=new Uint8Array(16);let i=0;for(let t=0;t<4;t++)i=bd(this,md,"f")[e][t],s[4*t]=255&(Td[n[t]>>24&255]^i>>24),s[4*t+1]=255&(Td[n[(t+1)%4]>>16&255]^i>>16),s[4*t+2]=255&(Td[n[(t+2)%4]>>8&255]^i>>8),s[4*t+3]=255&(Td[255&n[(t+3)%4]]^i);return s}decrypt(t){if(16!=t.length)throw new TypeError("invalid ciphertext size (must be 16 bytes)");const e=bd(this,gd,"f").length-1,r=[0,0,0,0];let n=Ud(t);for(let t=0;t<4;t++)n[t]^=bd(this,gd,"f")[0][t];for(let t=1;t>24&255]^Id[n[(e+3)%4]>>16&255]^Sd[n[(e+2)%4]>>8&255]^Rd[255&n[(e+1)%4]]^bd(this,gd,"f")[t][e];n=r.slice()}const s=new Uint8Array(16);let i=0;for(let t=0;t<4;t++)i=bd(this,gd,"f")[e][t],s[4*t]=255&(kd[n[t]>>24&255]^i>>24),s[4*t+1]=255&(kd[n[(t+3)%4]>>16&255]^i>>16),s[4*t+2]=255&(kd[n[(t+2)%4]>>8&255]^i>>8),s[4*t+3]=255&(kd[255&n[(t+1)%4]]^i);return s}}wd=new WeakMap,gd=new WeakMap,md=new WeakMap;class Dd{constructor(t,e,r){if(r&&!(this instanceof r))throw new Error(`${t} must be instantiated with "new"`);Object.defineProperties(this,{aes:{enumerable:!0,value:new Ld(e)},name:{enumerable:!0,value:t}})}}var Md,jd,Gd=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},$d=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class Wd extends Dd{constructor(t,e){if(super("ECC",t,Wd),Md.set(this,void 0),jd.set(this,void 0),e){if(e.length%16)throw new TypeError("invalid iv size (must be 16 bytes)");Gd(this,Md,new Uint8Array(e),"f")}else Gd(this,Md,new Uint8Array(16),"f");Gd(this,jd,this.iv,"f")}get iv(){return new Uint8Array($d(this,Md,"f"))}encrypt(t){if(t.length%16)throw new TypeError("invalid plaintext size (must be multiple of 16 bytes)");const e=new Uint8Array(t.length);for(let r=0;rNumber.MAX_SAFE_INTEGER)throw new TypeError("invalid counter initial integer value");for(let e=15;e>=0;--e)Jd(this,Vd,"f")[e]=t%256,t=Math.floor(t/256)}setCounterBytes(t){if(16!==t.length)throw new TypeError("invalid counter initial Uint8Array value length");Jd(this,Vd,"f").set(t)}increment(){for(let t=15;t>=0;t--){if(255!==Jd(this,Vd,"f")[t]){Jd(this,Vd,"f")[t]++;break}Jd(this,Vd,"f")[t]=0}}encrypt(t){var e,r;const n=new Uint8Array(t);for(let t=0;t16)throw new TypeError("PKCS#7 padding byte out of range");const r=t.length-e;for(let n=0;n{setTimeout((()=>{e()}),t)}))}var ip,op=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},ap=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};function cp(t){try{if(!t||!Xt(t.privateKey,32))return null;const e=t.privateKey;return cc.computePublicKey(e)!==t.publicKey?null:new cc(e)}catch(t){console.log(t)}return null}function lp(t){return new Promise((e=>{setTimeout((()=>{e()}),t)}))}class up extends Yf{constructor(t,e){let r=null,n=null;if("string"==typeof t&&(r=new cc(t)),null==r){const e=function(t){try{if(!t||!t.signingKey)return null;const e=cp(t.signingKey);return null==e||Ef(e.publicKey)!==t.address||t.mnemonic&&hd.fromMnemonic(t.mnemonic).privateKey!==e.privateKey?null:t}catch(t){console.log(t)}return null}(t);e&&(r=e.signingKey,n=e.mnemonic||null)}if(null==r){const e=function(t){try{return null==t||"string"!=typeof t.phrase||"string"!=typeof t.password||null==t.wordlist?null:hd.fromPhrase(t.phrase,t.password,null,t.wordlist)}catch(t){console.log(t)}return null}(t);e&&(r=e.signingKey,n=e.mnemonic||null)}null==r&&(r=cp(t)),null==r&&Lf.throwArgumentError("invalid key","key","[ REDACTED ]"),super(r,e),ip.set(this,void 0),op(this,ip,n,"f")}get mnemonic(){return ap(this,ip,"f")}connect(t){return new up(this,t)}async encrypt(t,e,r){throw new Error("TODO")}encryptSync(t,e){throw new Error("TODO")}static async fromEncryptedJson(t,e,r){let n=null;if(ep(t))n=await async function(t,e,r){const n=JSON.parse(t),s=Yd(e),i=np(n);if("pbkdf2"===i.name){r&&(r(0),await sp(0));const{salt:t,count:e,dkLen:o,algorithm:a}=i,c=xn(s,t,e,o,a);return r&&(r(1),await sp(0)),rp(n,c)}if("scrypt"===i.name){const{salt:t,N:e,r:o,p:a,dkLen:c}=i;return rp(n,await Wn(s,t,e,o,a,c,r))}throw new Error("unreachable")}(t,e,r);else{if(!Qd(t))return Lf.throwArgumentError("invalid JSON wallet","json","[ REDACTED ]");r&&(r(0),await lp(0)),n=tp(t,e),r&&(r(1),await lp(0))}const s=new up(n.privateKey);return s.address!==n.address&&Lf.throwArgumentError("address/privateKey mismatch","json","[ REDACTED ]"),s}static fromEncryptedJsonSync(t,e){let r=null;if(ep(t))r=function(t,e){const r=JSON.parse(t),n=Yd(e),s=np(r);if("pbkdf2"===s.name){const{salt:t,count:e,dkLen:i,algorithm:o}=s;return rp(r,xn(n,t,e,i,o))}if("scrypt"===s.name){const{salt:t,N:e,r:i,p:o,dkLen:a}=s;return rp(r,zn(n,t,e,i,o,a))}throw new Error("unreachable")}(t,e);else{if(!Qd(t))return Lf.throwArgumentError("invalid JSON wallet","json","[ REDACTED ]");r=tp(t,e)}const n=new up(r.privateKey);return n.address!==r.address&&Lf.throwArgumentError("address/privateKey mismatch","json","[ REDACTED ]"),n}static createRandom(t,e,r){return new up(Kf.fromEntropy(Rn(16),e,r),t)}static fromMnemonic(t,e){return new up(t,e)}static fromPhrase(t,e,r="",n){return new up(Kf.fromPhrase(t,r,n),e)}}ip=new WeakMap;const hp="ethers@6.0.0-beta.1";var fp=Object.freeze({__proto__:null,Interface:mo,getAddress:as,getIcapAddress:cs,getCreateAddress:ys,getCreate2Address:bs,isAddressable:vs,isAddress:Es,resolveAddress:Ts,arrayify:ee,decodeBase64:ne,encodeBase64:se,isHexString:Xt,isBytesLike:Yt,concat:ae,dataLength:ce,dataSlice:le,stripZerosLeft:ue,hexlify:ie,quantity:oe,zeroPadLeft:fe,zeroPadRight:de,BaseContract:bf,Contract:vf,ContractEventPayload:Zh,ContractTransactionReceipt:Xh,ContractTransactionResponse:Yh,EventLog:qh,computeHmac:Ur,keccak256:nn,ripemd160:kn,sha256:Yn,sha512:Zn,pbkdf2:xn,scrypt:Wn,scryptSync:zn,randomBytes:Rn,lock:Qn,id:Ni,isValidName:Ii,namehash:Si,dnsEncode:Ri,messagePrefix:_i,hashMessage:Ci,TypedDataEncoder:to,FixedFormat:Mt,FixedNumber:jt,formatFixed:Lt,parseFixed:Dt,fromTwos:At,toTwos:Nt,mask:Pt,toArray:Et,toBigInt:yt,toHex:vt,toNumber:bt,decodeBase58:qt,encodeBase58:Jt,defineProperties:r,resolveProperties:t,getStore:a,setStore:c,AbstractProvider:Kl,UnmanagedSubscriber:Wl,AbstractSigner:lu,VoidSigner:uu,WrappedSigner:hu,showThrottleMessage:du,EnsResolver:Zo,Formatter:Wc,NetworkPlugin:zc,GasCostPlugin:Hc,EnsPlugin:Vc,MaxPriorityFeePlugin:Kc,Network:Wh,Block:Ic,FeeData:Oc,Log:Sc,TransactionReceipt:Rc,TransactionResponse:_c,dummyProvider:Uc,FallbackProvider:bh,JsonRpcProvider:Mu,JsonRpcSigner:Lu,StaticJsonRpcProvider:ju,AlchemyProvider:Vu,AnkrProvider:zu,CloudflareProvider:Ku,EtherscanProvider:Xu,InfuraProvider:Zu,PocketProvider:eh,IpcSocketProvider:undefined,SocketProvider:Dh,WebSocketProvider:$h,encodeRlp:fs,decodeRlp:ms,Signature:da,SigningKey:cc,formatBytes32String:si,parseBytes32String:ii,nameprep:gi,_toEscapedUtf8String:ti,toUtf8Bytes:Zs,toUtf8CodePoints:ni,toUtf8String:ri,get UnicodeNormalizationForm(){return Ks},Utf8ErrorFuncs:Xs,get Utf8ErrorReason(){return Js},Transaction:Ec,computeAddress:Ef,defaultPath:nd,getAccountPath:pd,HDNodeWallet:hd,HDNodeVoidWallet:fd,HDNodeWalletManager:dd,Mnemonic:Kf,Wallet:up,fetchData:Co,FetchRequest:Io,FetchResponse:ko,Wordlist:xf,WordlistOwl:Ff,WordlistOwlA:$f,wordlists:Df,version:"ethers@6.0.0-beta.1"});export{Kl as AbstractProvider,lu as AbstractSigner,Vu as AlchemyProvider,zu as AnkrProvider,bf as BaseContract,Ic as Block,Ku as CloudflareProvider,vf as Contract,Zh as ContractEventPayload,Xh as ContractTransactionReceipt,Yh as ContractTransactionResponse,Vc as EnsPlugin,Zo as EnsResolver,Xu as EtherscanProvider,qh as EventLog,bh as FallbackProvider,Oc as FeeData,Io as FetchRequest,ko as FetchResponse,Mt as FixedFormat,jt as FixedNumber,Wc as Formatter,Hc as GasCostPlugin,fd as HDNodeVoidWallet,hd as HDNodeWallet,dd as HDNodeWalletManager,Zu as InfuraProvider,mo as Interface,zh as IpcSocketProvider,Mu as JsonRpcProvider,Lu as JsonRpcSigner,Sc as Log,Kc as MaxPriorityFeePlugin,Kf as Mnemonic,Wh as Network,zc as NetworkPlugin,eh as PocketProvider,da as Signature,cc as SigningKey,Dh as SocketProvider,ju as StaticJsonRpcProvider,Ec as Transaction,Rc as TransactionReceipt,_c as TransactionResponse,to as TypedDataEncoder,Ks as UnicodeNormalizationForm,Wl as UnmanagedSubscriber,Xs as Utf8ErrorFuncs,Js as Utf8ErrorReason,uu as VoidSigner,up as Wallet,$h as WebSocketProvider,xf as Wordlist,Ff as WordlistOwl,$f as WordlistOwlA,hu as WrappedSigner,ti as _toEscapedUtf8String,ee as arrayify,Ef as computeAddress,Ur as computeHmac,ae as concat,ce as dataLength,le as dataSlice,qt as decodeBase58,ne as decodeBase64,ms as decodeRlp,nd as defaultPath,r as defineProperties,Ri as dnsEncode,Uc as dummyProvider,Jt as encodeBase58,se as encodeBase64,fs as encodeRlp,fp as ethers,Co as fetchData,si as formatBytes32String,Lt as formatFixed,At as fromTwos,pd as getAccountPath,as as getAddress,bs as getCreate2Address,ys as getCreateAddress,cs as getIcapAddress,a as getStore,Ci as hashMessage,ie as hexlify,Ni as id,Es as isAddress,vs as isAddressable,Yt as isBytesLike,Xt as isHexString,Ii as isValidName,nn as keccak256,Qn as lock,Pt as mask,_i as messagePrefix,Si as namehash,gi as nameprep,ii as parseBytes32String,Dt as parseFixed,xn as pbkdf2,oe as quantity,Rn as randomBytes,Ts as resolveAddress,t as resolveProperties,kn as ripemd160,Wn as scrypt,zn as scryptSync,c as setStore,Yn as sha256,Zn as sha512,du as showThrottleMessage,ue as stripZerosLeft,Et as toArray,yt as toBigInt,vt as toHex,bt as toNumber,Nt as toTwos,Zs as toUtf8Bytes,ni as toUtf8CodePoints,ri as toUtf8String,hp as version,Df as wordlists,fe as zeroPadLeft,de as zeroPadRight}; +//# sourceMappingURL=ethers.min.js.map diff --git a/packages/ethers/dist/ethers.min.js.map b/packages/ethers/dist/ethers.min.js.map new file mode 100644 index 000000000..4623aaf9a --- /dev/null +++ b/packages/ethers/dist/ethers.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ethers.min.js","sources":["../../properties/lib/properties.js","../../properties/lib/events.js","../../properties/lib/storage.js","../../logger/lib/errors.js","../../logger/lib/logger.js","../../logger/lib/_version.js","../../abi/lib/_version.js","../../abi/lib/logger.js","../../abi/lib/fragments.js","../../math/lib/_version.js","../../math/lib/logger.js","../../math/lib/convert.js","../../math/lib/maths.js","../../math/lib/fixednumber.js","../../math/lib/base58.js","../../bytes/lib/check.js","../../bytes/lib/_version.js","../../bytes/lib/logger.js","../../bytes/lib/array.js","../../bytes/lib/base64.js","../../bytes/lib/hex.js","../../bytes/lib/data.js","../../bytes/lib/pad.js","../../abi/lib/coders/abstract-coder.js","../../../node_modules/@noble/hashes/esm/utils.js","../../../node_modules/@noble/hashes/esm/hmac.js","../../../node_modules/@noble/hashes/esm/pbkdf2.js","../../../node_modules/@noble/hashes/esm/_sha2.js","../../../node_modules/@noble/hashes/esm/sha256.js","../../../node_modules/@noble/hashes/esm/_u64.js","../../../node_modules/@noble/hashes/esm/sha512.js","../../crypto/lib/_version.js","../../crypto/lib/logger.js","../../crypto/lib/crypto-browser.js","../../crypto/lib/hmac.js","../../../node_modules/@noble/hashes/esm/sha3.js","../../crypto/lib/keccak.js","../../../node_modules/@noble/hashes/esm/ripemd160.js","../../crypto/lib/ripemd160.js","../../crypto/lib/pbkdf2.js","../../crypto/lib/random.js","../../../node_modules/@noble/hashes/esm/scrypt.js","../../crypto/lib/scrypt.js","../../crypto/lib/sha2.js","../../crypto/lib/index.js","../../address/lib/_version.js","../../address/lib/logger.js","../../address/lib/address.js","../../rlp/lib/_version.js","../../rlp/lib/logger.js","../../rlp/lib/encode.js","../../rlp/lib/decode.js","../../address/lib/contract-address.js","../../address/lib/checks.js","../../abi/lib/typed.js","../../abi/lib/coders/address.js","../../abi/lib/coders/anonymous.js","../../abi/lib/coders/array.js","../../abi/lib/coders/boolean.js","../../abi/lib/coders/bytes.js","../../abi/lib/coders/fixed-bytes.js","../../abi/lib/coders/null.js","../../abi/lib/coders/number.js","../../strings/lib/_version.js","../../strings/lib/logger.js","../../strings/lib/utf8.js","../../strings/lib/bytes32.js","../../strings/lib/idna.js","../../abi/lib/coders/string.js","../../abi/lib/coders/tuple.js","../../abi/lib/abi-coder.js","../../hash/lib/id.js","../../hash/lib/_version.js","../../hash/lib/logger.js","../../hash/lib/namehash.js","../../hash/lib/message.js","../../hash/lib/typed-data.js","../../abi/lib/interface.js","../../web/lib/_version.js","../../web/lib/logger.js","../../web/lib/response.js","../../web/lib/get-url-browser.js","../../web/lib/request.js","../../web/lib/fetch-data.js","../../providers/lib/_version.js","../../providers/lib/logger.js","../../providers/lib/ens-resolver.js","../../signing-key/lib/_version.js","../../signing-key/lib/logger.js","../../signing-key/lib/signature.js","../../../node_modules/@noble/secp256k1/lib/esm/index.js","../../signing-key/lib/signing-key.js","../../transactions/lib/accesslist.js","../../transactions/lib/_version.js","../../transactions/lib/logger.js","../../transactions/lib/transaction.js","../../providers/lib/provider.js","../../providers/lib/formatter.js","../../providers/lib/plugins-network.js","../../providers/lib/network.js","../../providers/lib/subscriber-polling.js","../../providers/lib/abstract-provider.js","../../providers/lib/abstract-signer.js","../../providers/lib/community.js","../../providers/lib/subscriber-filterid.js","../../providers/lib/provider-jsonrpc.js","../../providers/lib/provider-ankr.js","../../providers/lib/provider-alchemy.js","../../providers/lib/provider-cloudflare.js","../../providers/lib/provider-etherscan.js","../../providers/lib/provider-infura.js","../../providers/lib/provider-pocket.js","../../providers/lib/provider-fallback.js","../../providers/lib/shuffle.js","../../providers/lib/ws-browser.js","../../providers/lib/provider-socket.js","../../providers/lib/provider-websocket.js","../../providers/lib/common-networks.js","../../providers/lib/provider-ipcsocket-browser.js","../../contract/lib/wrappers.js","../../contract/lib/_version.js","../../contract/lib/logger.js","../../contract/lib/contract.js","../../wallet/lib/address.js","../../wordlists/lib/decode-owl.js","../../wordlists/lib/_version.js","../../wordlists/lib/logger.js","../../wordlists/lib/wordlist.js","../../wordlists/lib/wordlist-owl.js","../../wordlists/lib/lang-en.js","../../wallet/lib/logger.js","../../wallet/lib/_version.js","../../wordlists/lib/wordlists-en.js","../../wordlists/lib/wordlist-owla.js","../../wordlists/lib/decode-owla.js","../../wordlists/lib/bit-reader.js","../../wallet/lib/mnemonic.js","../../wallet/lib/base-wallet.js","../../wallet/lib/hdwallet.js","../../../node_modules/aes-js/lib/aes.js","../../../node_modules/aes-js/lib/mode.js","../../../node_modules/aes-js/lib/mode-cbc.js","../../../node_modules/aes-js/lib/mode-cfb.js","../../../node_modules/aes-js/lib/mode-ctr.js","../../wallet/lib/utils.js","../../wallet/lib/json-crowdsale.js","../../../node_modules/aes-js/lib/padding.js","../../../node_modules/aes-js/lib/mode-ofb.js","../../wallet/lib/json-keystore.js","../../wallet/lib/wallet.js","../lib/_version.js"],"sourcesContent":["//import type { BigNumber, BigNumberish } from \"./big-number\";\n//import type { Bytes, BytesLike } from \"./bytes\";\n//import type { Signature, SignatureLike } from \"./signature\";\n/*\nexport type Loose = T extends BigNumber ? BigNumberish:\n T extends number ? BigNumberish:\n T extends Bytes ? BytesLike:\n T extends Signature ? SignatureLike:\n T;\nexport type LooseObject = { [P in keyof T]?: Loose; };\n*/\n//export type Deferrable = T | Promise;\n/*\nexport type DeferrableObject = {\n [ P in keyof T ]: Deferrable\n};\n*/\n/*\nexport type Frozen = Readonly<{\n [ P in keyof T ]: T[P] extends Freezable ? Frozen: T[P];\n}>;\n\nexport interface Freezable {\n clone(): T;\n freeze(): Frozen;\n isFrozen(): boolean;\n}\n*/\n/*\nconst _data: WeakMap = new WeakMap();\n\nexport class Data implements Freezable {\n #props: {\n data: Uint8Array\n };\n\n [ index: number ]: number;\n\n constructor(lengthOrData: number | Uint8Array) {\n if (typeof(lengthOrData) === \"number\") {\n _data[this] = new Uint8Array(lengthOrData);\n } else {\n _data[this] = lengthOrData;\n }\n\n return new Proxy(this, {\n get: (target, prop, receiver) => {\n const index = parseInt(String(prop));\n if (String(index) !== prop) { return Reflect.get(target, prop, receiver); }\n\n const data = _data[this];\n if (index < 0 || index > data.length || index % 1) {\n throw new Error(\"\");\n }\n return data[index];\n },\n\n set: (target, prop, value, receiver) => {\n const index = parseInt(String(prop));\n if (String(index) !== prop) { return false; }\n\n if (value < 0 || value > 255 || value % 1) { return false; }\n\n const data = _data[this];\n if (index < 0 || index > data.length || index % 1) {\n return false;\n }\n\n data[index] = value;\n\n return true;\n },\n });\n }\n\n toString(): string {\n return this.slice().toString();\n }\n\n slice(): Uint8Array {\n return _data.get(this).slice();\n }\n\n clone(): Data {\n return new Data(this.slice());\n }\n\n freeze(): Frozen {\n //Object.freeze(this.#props);\n return this;\n }\n\n isFrozen(): boolean {\n return Object.isFrozen(this.#props);\n }\n}\nconst d = new Data(4);\nconsole.log(d.toString());\nd[0] = 45;\nconsole.log(d.toString());\n*/\n/*\nexport type DeferrableObject = {\n [ P in keyof T ]: Deferrable\n};\n*/\nexport async function resolveProperties(value) {\n const keys = Object.keys(value);\n const results = await Promise.all(keys.map((k) => Promise.resolve(value[k])));\n return results.reduce((accum, v, index) => {\n accum[keys[index]] = v;\n return accum;\n }, {});\n}\nexport function defineReadOnly(object, name, value) {\n Object.defineProperty(object, name, {\n enumerable: true,\n value: value,\n writable: false,\n });\n}\n/*\nexport type IsCancelled = () => Promise;\n\nexport function createPromise(resolve: (isCancelled: IsCancelled, (result: T) => void) => void, reject: (error: Error) => void, isCancelled: IsCancelled): CancellablePromise {\n let cancelled = false;\n\n const promise = new Promise((resolve, reject) => {\n \n });\n\n (>promise).cancel = function() {\n cancelled = true;\n };\n\n return (>promise);\n}\n*/\n/*\nexport class A implements Freezable {\n foo: number;\n constructor(foo: number) {\n this.foo = foo;\n }\n freeze(): Frozen {\n Object.freeze(this);\n return this;\n }\n clone(): A {\n return new A(this.foo);\n }\n}\n\nexport class B implements Freezable {\n a: A;\n constructor(a: A) {\n this.a = a;\n }\n freeze(): Frozen {\n this.a.freeze();\n Object.freeze(this);\n return this;\n }\n clone(): B {\n return new B(this.a);\n }\n}\n\nexport function test() {\n const a = new A(123);\n const b = new B(a);\n b.a = new A(234);\n const b2 = b.freeze();\n b2.a.foo = 123; // = a;\n}\n*/\nfunction checkType(value, type) {\n const types = type.split(\"|\").map(t => t.trim());\n for (let i = 0; i < types.length; i++) {\n switch (type) {\n case \"any\":\n return;\n case \"boolean\":\n case \"number\":\n case \"string\":\n if (typeof (value) === type) {\n return;\n }\n }\n }\n throw new Error(\"invalid value for type\");\n}\nexport function defineProperties(target, values, types, defaults) {\n for (let key in values) {\n let value = values[key];\n const fallback = (defaults ? defaults[key] : undefined);\n if (fallback !== undefined) {\n value = fallback;\n }\n else {\n const type = (types ? types[key] : null);\n if (type) {\n checkType(value, type);\n }\n }\n Object.defineProperty(target, key, { enumerable: true, value, writable: false });\n }\n}\n//# sourceMappingURL=properties.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _EventPayload_listener;\nimport { defineProperties } from \"./properties.js\";\nexport class EventPayload {\n constructor(emitter, listener, filter) {\n _EventPayload_listener.set(this, void 0);\n __classPrivateFieldSet(this, _EventPayload_listener, listener, \"f\");\n defineProperties(this, { emitter, filter });\n }\n async removeListener() {\n if (__classPrivateFieldGet(this, _EventPayload_listener, \"f\") == null) {\n return;\n }\n await this.emitter.off(this.filter, __classPrivateFieldGet(this, _EventPayload_listener, \"f\"));\n }\n}\n_EventPayload_listener = new WeakMap();\n//# sourceMappingURL=events.js.map","export function getStore(store, key) {\n return store[key];\n}\nexport function setStore(store, key, value) {\n if (Object.isFrozen(store)) {\n throw new Error(\"frozen object is immuatable; cannot set \" + key);\n }\n store[key] = value;\n}\n//# sourceMappingURL=storage.js.map","//export type TransactionReceipt {\n//}\n/**\n * try {\n * // code....\n * } catch (e) {\n * if (isError(e, errors.CALL_EXCEPTION)) {\n * console.log(e.data);\n * }\n * }\n */\nexport function isError(error, code) {\n return (error && error.code === code);\n}\nexport function isCallException(error) {\n return isError(error, \"CALL_EXCEPTION\");\n}\n/*\nexport function isContractCallException(error: any): error is ContractCallExceptionError {\n return isError(error, \"CALL_EXCEPTION\") && (error).method;\n}\n*/\n//# sourceMappingURL=errors.js.map","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Logger_instances, _Logger_assertIntRange, _Logger_getBytes, _Logger_log;\nimport { version } from \"./_version.js\";\nexport var LogLevel;\n(function (LogLevel) {\n LogLevel[\"DEBUG\"] = \"DEBUG\";\n LogLevel[\"INFO\"] = \"INFO\";\n LogLevel[\"WARNING\"] = \"WARNING\";\n LogLevel[\"ERROR\"] = \"ERROR\";\n LogLevel[\"OFF\"] = \"OFF\";\n})(LogLevel || (LogLevel = {}));\n;\nconst LogLevels = { debug: 1, \"default\": 2, info: 2, warning: 3, error: 4, off: 5 };\nlet _logLevel = LogLevels[\"default\"];\nlet _globalLogger = null;\nconst _normalizeForms = [\"NFD\", \"NFC\", \"NFKD\", \"NFKC\"].reduce((accum, form) => {\n try {\n // General test for normalize\n /* c8 ignore start */\n if (\"test\".normalize(form) !== \"test\") {\n throw new Error(\"bad\");\n }\n ;\n /* c8 ignore stop */\n if (form === \"NFD\") {\n const check = String.fromCharCode(0xe9).normalize(\"NFD\");\n const expected = String.fromCharCode(0x65, 0x0301);\n /* c8 ignore start */\n if (check !== expected) {\n throw new Error(\"broken\");\n }\n /* c8 ignore stop */\n }\n accum.push(form);\n }\n catch (error) { }\n return accum;\n}, []);\nfunction defineReadOnly(object, name, value) {\n Object.defineProperty(object, name, {\n enumerable: true, writable: false, value,\n });\n}\n/*\nenum Censor {\n OFF = 0,\n ON = 1,\n PERMANENT = 2\n};\nlet _censor = Censor.OFF;\n*/\n// IEEE 754 support 53-bits of mantissa\nconst maxValue = 0x1fffffffffffff;\n// The type of error to use for various error codes\nconst ErrorConstructors = {};\nErrorConstructors.INVALID_ARGUMENT = TypeError;\nErrorConstructors.NUMERIC_FAULT = RangeError;\nErrorConstructors.BUFFER_OVERRUN = RangeError;\nexport class Logger {\n constructor(version) {\n _Logger_instances.add(this);\n defineReadOnly(this, \"version\", version || \"_\");\n }\n makeError(message, code, info) {\n // Errors are being censored\n //if (_censor === Censor.ON || _censor === Censor.PERMANENT) {\n // return this.makeError(\"censored error\", code, { });\n //}\n {\n const details = [];\n if (info) {\n for (const key in info) {\n const value = (info[key]);\n try {\n details.push(key + \"=\" + JSON.stringify(value));\n }\n catch (error) {\n details.push(key + \"=[could not serialize object]\");\n }\n }\n }\n details.push(`code=${code}`);\n details.push(`version=${this.version}`);\n if (details.length) {\n message += \" (\" + details.join(\", \") + \")\";\n }\n }\n const create = ErrorConstructors[code] || Error;\n const error = (new create(message));\n defineReadOnly(error, \"code\", code);\n if (info) {\n for (const key in info) {\n defineReadOnly(error, key, (info[key]));\n }\n }\n return error;\n }\n throwError(message, code, info) {\n throw this.makeError(message, code, info);\n }\n throwArgumentError(message, name, value) {\n return this.throwError(message, \"INVALID_ARGUMENT\", {\n argument: name,\n value: value\n });\n }\n assert(condition, message, code, info) {\n if (!!condition) {\n return;\n }\n this.throwError(message, code || \"UNKNOWN_ERROR\", info);\n }\n assertArgument(condition, message, name, value) {\n return this.assert(condition, message, \"INVALID_ARGUMENT\", {\n argument: name,\n value\n });\n }\n assertIntegerArgument(name, value, lower, upper) {\n let message = null;\n if (typeof (value) !== \"number\") {\n message = \"expected a number\";\n }\n else if (!Number.isInteger(value)) {\n message = \"invalid integer\";\n }\n else if ((lower != null && value < lower) || (upper != null && value > upper)) {\n message = \"value is out of range\";\n }\n if (message) {\n this.throwArgumentError(message, name, value);\n }\n }\n assertSafeUint53(value, message) {\n this.assertArgument((typeof (value) === \"number\"), \"invalid number\", \"value\", value);\n if (message == null) {\n message = \"value not safe\";\n }\n const operation = \"assertSafeInteger\";\n this.assert((value >= 0 && value < 0x1fffffffffffff), message, \"NUMERIC_FAULT\", {\n operation, fault: \"out-of-safe-range\", value\n });\n this.assert((value % 1) === 0, message, \"NUMERIC_FAULT\", {\n operation, fault: \"non-integer\", value\n });\n }\n assertNormalize(form) {\n if (_normalizeForms.indexOf(form) === -1) {\n this.throwError(\"platform missing String.prototype.normalize\", \"UNSUPPORTED_OPERATION\", {\n operation: \"String.prototype.normalize\", info: { form }\n });\n }\n }\n assertPrivate(givenGuard, guard, className = \"\") {\n if (givenGuard !== guard) {\n let method = className, operation = \"new\";\n if (className) {\n method += \".\";\n operation += \" \" + className;\n }\n this.throwError(`private constructor; use ${method}from* methods`, \"UNSUPPORTED_OPERATION\", {\n operation\n });\n }\n }\n assertArgumentCount(count, expectedCount, message = \"\") {\n if (message) {\n message = \": \" + message;\n }\n this.assert((count >= expectedCount), \"missing arguemnt\" + message, \"MISSING_ARGUMENT\", {\n count: count,\n expectedCount: expectedCount\n });\n this.assert((count >= expectedCount), \"too many arguemnts\" + message, \"UNEXPECTED_ARGUMENT\", {\n count: count,\n expectedCount: expectedCount\n });\n }\n assertInt53(value, operation) {\n __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_assertIntRange).call(this, \"Int53\", value, operation || \"unknown\", -maxValue);\n }\n assertUint53(value, operation) {\n __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_assertIntRange).call(this, \"Int53\", value, operation || \"unknown\", 0);\n }\n assertInteger(value, operation = \"unknown\", min = 0, max = maxValue) {\n //this.#assertIntRange(\"Int53\", value, operation || \"unknown\", 0);\n }\n getBytes(value, name) {\n return __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_getBytes).call(this, value, name, false);\n }\n getBytesCopy(value, name) {\n return __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_getBytes).call(this, value, name, true);\n }\n getNumber(value, name) {\n switch (typeof (value)) {\n case \"bigint\":\n if (value < -maxValue || value > maxValue) {\n this.throwArgumentError(\"overflow\", name || \"value\", value);\n }\n return Number(value);\n case \"number\":\n if (!Number.isInteger(value)) {\n this.throwArgumentError(\"underflow\", name || \"value\", value);\n }\n else if (value < -maxValue || value > maxValue) {\n this.throwArgumentError(\"overflow\", name || \"value\", value);\n }\n return value;\n case \"string\":\n try {\n return this.getNumber(BigInt(value), name);\n }\n catch (e) {\n this.throwArgumentError(`invalid numeric string: ${e.message}`, name || \"value\", value);\n }\n }\n return this.throwArgumentError(\"invalid numeric value\", name || \"value\", value);\n }\n getBigInt(value, name) {\n switch (typeof (value)) {\n case \"bigint\": return value;\n case \"number\":\n if (!Number.isInteger(value)) {\n this.throwArgumentError(\"underflow\", name || \"value\", value);\n }\n else if (value < -maxValue || value > maxValue) {\n this.throwArgumentError(\"overflow\", name || \"value\", value);\n }\n return BigInt(value);\n case \"string\":\n try {\n return BigInt(value);\n }\n catch (e) {\n this.throwArgumentError(`invalid BigNumberish string: ${e.message}`, name || \"value\", value);\n }\n }\n return this.throwArgumentError(\"invalid BigNumberish value\", name || \"value\", value);\n }\n debug(...args) {\n __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_log).call(this, LogLevel.DEBUG, args);\n }\n info(...args) {\n __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_log).call(this, LogLevel.INFO, args);\n }\n warn(...args) {\n __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_log).call(this, LogLevel.WARNING, args);\n }\n static globalLogger() {\n if (!_globalLogger) {\n _globalLogger = new Logger(version);\n }\n return _globalLogger;\n }\n static setLogLevel(logLevel) {\n const level = LogLevels[logLevel.toLowerCase()];\n if (level == null) {\n Logger.globalLogger().warn(\"invalid log level - \" + logLevel);\n return;\n }\n _logLevel = level;\n }\n}\n_Logger_instances = new WeakSet(), _Logger_assertIntRange = function _Logger_assertIntRange(name, value, operation, minValue) {\n if (typeof (value) !== \"number\" || isNaN(value)) {\n this.throwArgumentError(`invalid ${name}`, \"INVALID_ARGUMENT\", {\n name: \"value\", value\n });\n }\n let message = `invalid ${name} value`;\n let fault = null;\n if (isNaN(value)) {\n fault = \"not-a-number\";\n }\n else if (value < minValue || value > maxValue) {\n message = `unsafe ${name} value`;\n fault = \"overflow\";\n }\n else if (Math.floor(value) !== value) {\n fault = \"underflow\";\n }\n if (fault) {\n this.throwError(message, \"NUMERIC_FAULT\", {\n operation, fault, value\n });\n }\n}, _Logger_getBytes = function _Logger_getBytes(value, name, copy) {\n if (value instanceof Uint8Array) {\n if (copy) {\n return new Uint8Array(value);\n }\n return value;\n }\n if (typeof (value) === \"string\" && value.match(/^0x([0-9a-f][0-9a-f])*$/i)) {\n const result = new Uint8Array((value.length - 2) / 2);\n let offset = 2;\n for (let i = 0; i < result.length; i++) {\n result[i] = parseInt(value.substring(offset, offset + 2), 16);\n offset += 2;\n }\n return result;\n }\n return this.throwArgumentError(\"invalid BytesLike value\", name || \"value\", value);\n}, _Logger_log = function _Logger_log(logLevel, args) {\n const level = logLevel.toLowerCase();\n if (LogLevels[level] == null) {\n this.throwArgumentError(\"invalid log level name\", \"logLevel\", logLevel);\n }\n if (_logLevel > LogLevels[level]) {\n return;\n }\n console.log.apply(console, args);\n};\n//static readonly Errors = ErrorCode;\nLogger.LogLevels = LogLevel;\n//const l = new Logger();\n//l.makeError(\"foo\", Logger.Errors.NUMERIC_FAULT, { fault: \"foo\", operation: \"bar\", value: 3 });\n//l.makeError(\"foo\", Logger.Errors.UNPREDICTABLE_GAS_LIMIT, { transaction: null });\n//l.makeError(\"foo\", ErrorCode.NUMERIC_FAULT, { fault: \"foo\", operation: \"bar\" });\n//l.makeError(\"foo\", ErrorCode.NUMERIC_FAULT, { fault: \"foo\", operation: \"bar\", gii: \"5\" });\n//console.log(LogLevel);\n//# sourceMappingURL=logger.js.map","export const version = \"@ethersproject/logger@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","export const version = \"@ethersproject/abi@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _TokenString_instances, _TokenString_offset, _TokenString_tokens, _TokenString_subTokenString, _ParamType_instances, _ParamType_walkAsync;\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { logger } from \"./logger.js\";\n;\nexport var FormatType;\n(function (FormatType) {\n // Bare formatting, as is needed for computing a sighash of an event or function\n FormatType[\"sighash\"] = \"sighash\";\n // Human-Readable with Minimal spacing and without names (compact human-readable)\n FormatType[\"minimal\"] = \"minimal\";\n // Human-Readable with nice spacing, including all names\n FormatType[\"full\"] = \"full\";\n // JSON-format a la Solidity\n FormatType[\"json\"] = \"json\";\n})(FormatType || (FormatType = {}));\n;\n// [ \"a\", \"b\" ] => { \"a\": 1, \"b\": 1 }\nfunction setify(items) {\n const result = new Set();\n items.forEach((k) => result.add(k));\n return Object.freeze(result);\n}\n// Visibility Keywords\nconst _kwVisib = \"constant external internal payable private public pure view\";\nconst KwVisib = setify(_kwVisib.split(\" \"));\nconst _kwTypes = \"constructor error event function struct\";\nconst KwTypes = setify(_kwTypes.split(\" \"));\nconst _kwModifiers = \"calldata memory storage payable indexed\";\nconst KwModifiers = setify(_kwModifiers.split(\" \"));\nconst _kwOther = \"tuple returns\";\n// All Keywords\nconst _keywords = [_kwTypes, _kwModifiers, _kwOther, _kwVisib].join(\" \");\nconst Keywords = setify(_keywords.split(\" \"));\n// Single character tokens\nconst SimpleTokens = {\n \"(\": \"OPEN_PAREN\", \")\": \"CLOSE_PAREN\",\n \"[\": \"OPEN_BRACKET\", \"]\": \"CLOSE_BRACKET\",\n \",\": \"COMMA\", \"@\": \"AT\"\n};\n// Parser regexes to consume the next token\nconst regexWhitespace = new RegExp(\"^(\\\\s*)\");\nconst regexNumber = new RegExp(\"^([0-9]+)\");\nconst regexIdentifier = new RegExp(\"^([a-zA-Z$_][a-zA-Z0-9$_]*)\");\nconst regexType = new RegExp(\"^(address|bool|bytes(0-9*)|string|u?int([0-9]*))\");\nexport class TokenString {\n constructor(tokens) {\n _TokenString_instances.add(this);\n _TokenString_offset.set(this, void 0);\n _TokenString_tokens.set(this, void 0);\n __classPrivateFieldSet(this, _TokenString_offset, 0, \"f\");\n __classPrivateFieldSet(this, _TokenString_tokens, tokens.slice(), \"f\");\n }\n get offset() { return __classPrivateFieldGet(this, _TokenString_offset, \"f\"); }\n get length() { return __classPrivateFieldGet(this, _TokenString_tokens, \"f\").length - __classPrivateFieldGet(this, _TokenString_offset, \"f\"); }\n clone() { return new TokenString(__classPrivateFieldGet(this, _TokenString_tokens, \"f\")); }\n reset() { __classPrivateFieldSet(this, _TokenString_offset, 0, \"f\"); }\n // Pops and returns the value of the next token, if it is a keyword in allowed; throws if out of tokens\n popKeyword(allowed) {\n const top = this.peek();\n if (top.type !== \"KEYWORD\" || !allowed.has(top.text)) {\n throw new Error(`expected keyword ${top.text}`);\n }\n return this.pop().text;\n }\n // Pops and returns the value of the next token if it is `type`; throws if out of tokens\n popType(type) {\n if (this.peek().type !== type) {\n throw new Error(`expected ${type}; got ${JSON.stringify(this.peek())}`);\n }\n return this.pop().text;\n }\n // Pops and returns a \"(\" TOKENS \")\"\n popParen() {\n const top = this.peek();\n if (top.type !== \"OPEN_PAREN\") {\n throw new Error(\"bad start\");\n }\n const result = __classPrivateFieldGet(this, _TokenString_instances, \"m\", _TokenString_subTokenString).call(this, __classPrivateFieldGet(this, _TokenString_offset, \"f\") + 1, top.match + 1);\n __classPrivateFieldSet(this, _TokenString_offset, top.match + 1, \"f\");\n return result;\n }\n // Pops and returns the items within \"(\" ITEM1 \",\" ITEM2 \",\" ... \")\"\n popParams() {\n const top = this.peek();\n if (top.type !== \"OPEN_PAREN\") {\n throw new Error(\"bad start\");\n }\n const result = [];\n while (__classPrivateFieldGet(this, _TokenString_offset, \"f\") < top.match - 1) {\n const link = this.peek().linkNext;\n result.push(__classPrivateFieldGet(this, _TokenString_instances, \"m\", _TokenString_subTokenString).call(this, __classPrivateFieldGet(this, _TokenString_offset, \"f\") + 1, link));\n __classPrivateFieldSet(this, _TokenString_offset, link, \"f\");\n }\n __classPrivateFieldSet(this, _TokenString_offset, top.match + 1, \"f\");\n return result;\n }\n // Returns the top Token, throwing if out of tokens\n peek() {\n if (__classPrivateFieldGet(this, _TokenString_offset, \"f\") >= __classPrivateFieldGet(this, _TokenString_tokens, \"f\").length) {\n throw new Error(\"out-of-bounds\");\n }\n return __classPrivateFieldGet(this, _TokenString_tokens, \"f\")[__classPrivateFieldGet(this, _TokenString_offset, \"f\")];\n }\n // Returns the next value, if it is a keyword in `allowed`\n peekKeyword(allowed) {\n const top = this.peekType(\"KEYWORD\");\n return (top != null && allowed.has(top)) ? top : null;\n }\n // Returns the value of the next token if it is `type`\n peekType(type) {\n if (this.length === 0) {\n return null;\n }\n const top = this.peek();\n return (top.type === type) ? top.text : null;\n }\n // Returns the next token; throws if out of tokens\n pop() {\n var _a;\n const result = this.peek();\n __classPrivateFieldSet(this, _TokenString_offset, (_a = __classPrivateFieldGet(this, _TokenString_offset, \"f\"), _a++, _a), \"f\");\n return result;\n }\n toString() {\n const tokens = [];\n for (let i = __classPrivateFieldGet(this, _TokenString_offset, \"f\"); i < __classPrivateFieldGet(this, _TokenString_tokens, \"f\").length; i++) {\n const token = __classPrivateFieldGet(this, _TokenString_tokens, \"f\")[i];\n tokens.push(`${token.type}:${token.text}`);\n }\n return ``;\n }\n}\n_TokenString_offset = new WeakMap(), _TokenString_tokens = new WeakMap(), _TokenString_instances = new WeakSet(), _TokenString_subTokenString = function _TokenString_subTokenString(from = 0, to = 0) {\n return new TokenString(__classPrivateFieldGet(this, _TokenString_tokens, \"f\").slice(from, to).map((t) => {\n return Object.freeze(Object.assign({}, t, {\n match: (t.match - from),\n linkBack: (t.linkBack - from),\n linkNext: (t.linkNext - from),\n }));\n return t;\n }));\n};\nexport function lex(text) {\n const tokens = [];\n const throwError = (message) => {\n const token = (offset < text.length) ? JSON.stringify(text[offset]) : \"$EOI\";\n throw new Error(`invalid token ${token} at ${offset}: ${message}`);\n };\n let brackets = [];\n let commas = [];\n let offset = 0;\n while (offset < text.length) {\n // Strip off any leading whitespace\n let cur = text.substring(offset);\n let match = cur.match(regexWhitespace);\n if (match) {\n offset += match[1].length;\n cur = text.substring(offset);\n }\n const token = { depth: brackets.length, linkBack: -1, linkNext: -1, match: -1, type: \"\", text: \"\", offset, value: -1 };\n tokens.push(token);\n let type = (SimpleTokens[cur[0]] || \"\");\n if (type) {\n token.type = type;\n token.text = cur[0];\n offset++;\n if (type === \"OPEN_PAREN\") {\n brackets.push(tokens.length - 1);\n commas.push(tokens.length - 1);\n }\n else if (type == \"CLOSE_PAREN\") {\n if (brackets.length === 0) {\n throwError(\"no matching open bracket\");\n }\n token.match = brackets.pop();\n (tokens[token.match]).match = tokens.length - 1;\n token.depth--;\n token.linkBack = commas.pop();\n (tokens[token.linkBack]).linkNext = tokens.length - 1;\n }\n else if (type === \"COMMA\") {\n token.linkBack = commas.pop();\n (tokens[token.linkBack]).linkNext = tokens.length - 1;\n commas.push(tokens.length - 1);\n }\n else if (type === \"OPEN_BRACKET\") {\n token.type = \"BRACKET\";\n }\n else if (type === \"CLOSE_BRACKET\") {\n // Remove the CLOSE_BRACKET\n let suffix = tokens.pop().text;\n if (tokens.length > 0 && tokens[tokens.length - 1].type === \"NUMBER\") {\n const value = tokens.pop().text;\n suffix = value + suffix;\n (tokens[tokens.length - 1]).value = logger.getNumber(value);\n }\n if (tokens.length === 0 || tokens[tokens.length - 1].type !== \"BRACKET\") {\n throw new Error(\"missing opening bracket\");\n }\n (tokens[tokens.length - 1]).text += suffix;\n }\n continue;\n }\n match = cur.match(regexIdentifier);\n if (match) {\n token.text = match[1];\n offset += token.text.length;\n if (Keywords.has(token.text)) {\n token.type = \"KEYWORD\";\n continue;\n }\n if (token.text.match(regexType)) {\n token.type = \"TYPE\";\n continue;\n }\n token.type = \"ID\";\n continue;\n }\n match = cur.match(regexNumber);\n if (match) {\n token.text = match[1];\n token.type = \"NUMBER\";\n offset += token.text.length;\n continue;\n }\n throw new Error(`unexpected token ${JSON.stringify(cur[0])} at position ${offset}`);\n }\n return new TokenString(tokens.map((t) => Object.freeze(t)));\n}\n// Check only one of `allowed` is in `set`\nfunction allowSingle(set, allowed) {\n let included = [];\n for (const key in allowed.keys()) {\n if (set.has(key)) {\n included.push(key);\n }\n }\n if (included.length > 1) {\n throw new Error(`conflicting types: ${included.join(\", \")}`);\n }\n}\n// Functions to process a Solidity Signature TokenString from left-to-right for...\n// ...the name with an optional type, returning the name\nfunction consumeName(type, tokens) {\n if (tokens.peekKeyword(KwTypes)) {\n const keyword = tokens.pop().text;\n if (keyword !== type) {\n throw new Error(`expected ${type}, got ${keyword}`);\n }\n }\n return tokens.popType(\"ID\");\n}\n// ...all keywords matching allowed, returning the keywords\nfunction consumeKeywords(tokens, allowed) {\n const keywords = new Set();\n while (true) {\n const keyword = tokens.peekType(\"KEYWORD\");\n if (keyword == null || (allowed && !allowed.has(keyword))) {\n break;\n }\n tokens.pop();\n if (keywords.has(keyword)) {\n throw new Error(`duplicate keywords: ${JSON.stringify(keyword)}`);\n }\n keywords.add(keyword);\n }\n return Object.freeze(keywords);\n}\n// ...all visibility keywords, returning the coalesced mutability\nfunction consumeMutability(tokens) {\n let modifiers = consumeKeywords(tokens, KwVisib);\n // Detect conflicting modifiers\n allowSingle(modifiers, setify(\"constant payable nonpayable\".split(\" \")));\n allowSingle(modifiers, setify(\"pure view payable nonpayable\".split(\" \")));\n // Process mutability states\n if (modifiers.has(\"view\")) {\n return \"view\";\n }\n if (modifiers.has(\"pure\")) {\n return \"pure\";\n }\n if (modifiers.has(\"payable\")) {\n return \"payable\";\n }\n if (modifiers.has(\"nonpayable\")) {\n return \"nonpayable\";\n }\n // Process legacy `constant` last\n if (modifiers.has(\"constant\")) {\n return \"view\";\n }\n return \"nonpayable\";\n}\n// ...a parameter list, returning the ParamType list\nfunction consumeParams(tokens, allowIndexed) {\n return tokens.popParams().map((t) => ParamType.fromTokens(t, allowIndexed));\n}\n// ...a gas limit, returning a BigNumber or null if none\nfunction consumeGas(tokens) {\n if (tokens.peekType(\"AT\")) {\n tokens.pop();\n if (tokens.peekType(\"NUMBER\")) {\n return logger.getBigInt(tokens.pop().text);\n }\n throw new Error(\"invalid gas\");\n }\n return null;\n}\nfunction consumeEoi(tokens) {\n if (tokens.length) {\n throw new Error(`unexpected tokens: ${tokens.toString()}`);\n }\n}\nconst regexArrayType = new RegExp(/^(.*)\\[([0-9]*)\\]$/);\nfunction verifyBasicType(type) {\n const match = type.match(regexType);\n if (!match) {\n return logger.throwArgumentError(\"invalid type\", \"type\", type);\n }\n if (type === \"uint\") {\n return \"uint256\";\n }\n if (type === \"int\") {\n return \"int256\";\n }\n if (match[2]) {\n // bytesXX\n const length = parseInt(match[2]);\n if (length === 0 || length > 32) {\n logger.throwArgumentError(\"invalid bytes length\", \"type\", type);\n }\n }\n else if (match[3]) {\n // intXX or uintXX\n const size = parseInt(match[3]);\n if (size === 0 || size > 256 || size % 8) {\n logger.throwArgumentError(\"invalid numeric width\", \"type\", type);\n }\n }\n return type;\n}\n// Make the Fragment constructors effectively private\nconst _guard = {};\nconst internal = Symbol.for(\"_ethers_internal\");\nconst ParamTypeInternal = \"_ParamTypeInternal\";\nexport class ParamType {\n constructor(guard, name, type, baseType, indexed, components, arrayLength, arrayChildren) {\n _ParamType_instances.add(this);\n logger.assertPrivate(guard, _guard, \"ParamType\");\n Object.defineProperty(this, internal, { value: ParamTypeInternal });\n if (components) {\n components = Object.freeze(components.slice());\n }\n if (baseType === \"array\") {\n if (arrayLength == null || arrayChildren == null) {\n throw new Error(\"\");\n }\n }\n else if (arrayLength != null || arrayChildren != null) {\n throw new Error(\"\");\n }\n if (baseType === \"tuple\") {\n if (components == null) {\n throw new Error(\"\");\n }\n }\n else if (components != null) {\n throw new Error(\"\");\n }\n defineProperties(this, {\n name, type, baseType, indexed, components, arrayLength, arrayChildren\n });\n }\n // Format the parameter fragment\n // - sighash: \"(uint256,address)\"\n // - minimal: \"tuple(uint256,address) indexed\"\n // - full: \"tuple(uint256 foo, address bar) indexed baz\"\n format(format = FormatType.sighash) {\n if (!FormatType[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatType.json) {\n let result = {\n type: ((this.baseType === \"tuple\") ? \"tuple\" : this.type),\n name: (this.name || undefined)\n };\n if (typeof (this.indexed) === \"boolean\") {\n result.indexed = this.indexed;\n }\n if (this.isTuple()) {\n result.components = this.components.map((c) => JSON.parse(c.format(format)));\n }\n return JSON.stringify(result);\n }\n let result = \"\";\n // Array\n if (this.isArray()) {\n result += this.arrayChildren.format(format);\n result += `[${(this.arrayLength < 0 ? \"\" : String(this.arrayLength))}]`;\n }\n else {\n if (this.isTuple()) {\n if (format !== FormatType.sighash) {\n result += this.type;\n }\n result += \"(\" + this.components.map((comp) => comp.format(format)).join((format === FormatType.full) ? \", \" : \",\") + \")\";\n }\n else {\n result += this.type;\n }\n }\n if (format !== FormatType.sighash) {\n if (this.indexed === true) {\n result += \" indexed\";\n }\n if (format === FormatType.full && this.name) {\n result += \" \" + this.name;\n }\n }\n return result;\n }\n static isArray(value) {\n return value && (value.baseType === \"array\");\n }\n isArray() {\n return (this.baseType === \"array\");\n }\n isTuple() {\n return (this.baseType === \"tuple\");\n }\n isIndexable() {\n return (this.indexed != null);\n }\n walk(value, process) {\n if (this.isArray()) {\n if (!Array.isArray(value)) {\n throw new Error(\"invlaid array value\");\n }\n if (this.arrayLength !== -1 && value.length !== this.arrayLength) {\n throw new Error(\"array is wrong length\");\n }\n return value.map((v) => (this.arrayChildren.walk(v, process)));\n }\n if (this.isTuple()) {\n if (!Array.isArray(value)) {\n throw new Error(\"invlaid tuple value\");\n }\n if (value.length !== this.components.length) {\n throw new Error(\"array is wrong length\");\n }\n return value.map((v, i) => (this.components[i].walk(v, process)));\n }\n return process(this.type, value);\n }\n async walkAsync(value, process) {\n const promises = [];\n const result = [value];\n __classPrivateFieldGet(this, _ParamType_instances, \"m\", _ParamType_walkAsync).call(this, promises, value, process, (value) => {\n result[0] = value;\n });\n if (promises.length) {\n await Promise.all(promises);\n }\n return result[0];\n }\n static from(obj, allowIndexed) {\n if (ParamType.isParamType(obj)) {\n return obj;\n }\n if (typeof (obj) === \"string\") {\n return ParamType.fromTokens(lex(obj), allowIndexed);\n }\n if (obj instanceof TokenString) {\n return ParamType.fromTokens(obj, allowIndexed);\n }\n const name = obj.name;\n if (name && (typeof (name) !== \"string\" || !name.match(regexIdentifier))) {\n logger.throwArgumentError(\"invalid name\", \"obj.name\", name);\n }\n let indexed = obj.indexed;\n if (indexed != null) {\n if (!allowIndexed) {\n logger.throwArgumentError(\"parameter cannot be indexed\", \"obj.indexed\", obj.indexed);\n }\n indexed = !!indexed;\n }\n let type = obj.type;\n let arrayMatch = type.match(regexArrayType);\n if (arrayMatch) {\n const arrayLength = arrayMatch[2];\n const arrayChildren = ParamType.from({\n type: arrayMatch[1],\n components: obj.components\n });\n return new ParamType(_guard, name, type, \"array\", indexed, null, arrayLength, arrayChildren);\n }\n if (type.substring(0, 5) === \"tuple(\" || type[0] === \"(\") {\n const comps = (obj.components != null) ? obj.components.map((c) => ParamType.from(c)) : null;\n const tuple = new ParamType(_guard, name, type, \"tuple\", indexed, comps, null, null);\n // @TODO: use lexer to validate and normalize type\n return tuple;\n }\n type = verifyBasicType(obj.type);\n return new ParamType(_guard, name, type, type, indexed, null, null, null);\n }\n static fromObject(obj, allowIndexed) {\n throw new Error(\"@TODO\");\n }\n static fromTokens(tokens, allowIndexed) {\n let type = \"\", baseType = \"\";\n let comps = null;\n if (consumeKeywords(tokens, setify([\"tuple\"])).has(\"tuple\") || tokens.peekType(\"OPEN_PAREN\")) {\n // Tuple\n baseType = \"tuple\";\n comps = tokens.popParams().map((t) => ParamType.from(t));\n type = `tuple(${comps.map((c) => c.format()).join(\",\")})`;\n }\n else {\n // Normal\n type = verifyBasicType(tokens.popType(\"TYPE\"));\n baseType = type;\n }\n // Check for Array\n let arrayChildren = null;\n let arrayLength = null;\n while (tokens.length && tokens.peekType(\"BRACKET\")) {\n const bracket = tokens.pop(); //arrays[i];\n arrayChildren = new ParamType(_guard, \"\", type, baseType, null, comps, arrayLength, arrayChildren);\n arrayLength = bracket.value;\n type += bracket.text;\n baseType = \"array\";\n comps = null;\n }\n let indexed = null;\n const keywords = consumeKeywords(tokens, KwModifiers);\n if (keywords.has(\"indexed\")) {\n if (!allowIndexed) {\n throw new Error(\"\");\n }\n indexed = true;\n }\n const name = (tokens.peekType(\"ID\") ? tokens.pop().text : \"\");\n if (tokens.length) {\n throw new Error(\"leftover tokens\");\n }\n return new ParamType(_guard, name, type, baseType, indexed, comps, arrayLength, arrayChildren);\n }\n static isParamType(value) {\n return (value && value[internal] === ParamTypeInternal);\n }\n}\n_ParamType_instances = new WeakSet(), _ParamType_walkAsync = function _ParamType_walkAsync(promises, value, process, setValue) {\n if (this.isArray()) {\n if (!Array.isArray(value)) {\n throw new Error(\"invlaid array value\");\n }\n if (this.arrayLength !== -1 && value.length !== this.arrayLength) {\n throw new Error(\"array is wrong length\");\n }\n const childType = this.arrayChildren;\n const result = value.slice();\n result.forEach((value, index) => {\n __classPrivateFieldGet(childType, _ParamType_instances, \"m\", _ParamType_walkAsync).call(childType, promises, value, process, (value) => {\n result[index] = value;\n });\n });\n setValue(result);\n return;\n }\n if (this.isTuple()) {\n const components = this.components;\n // Convert the object into an array\n let result;\n if (Array.isArray(value)) {\n result = value.slice();\n }\n else {\n if (value == null || typeof (value) !== \"object\") {\n throw new Error(\"invlaid tuple value\");\n }\n result = components.map((param) => {\n if (!param.name) {\n throw new Error(\"cannot use object value with unnamed components\");\n }\n if (!(param.name in value)) {\n throw new Error(`missing value for component ${param.name}`);\n }\n return value[param.name];\n });\n }\n if (value.length !== this.components.length) {\n throw new Error(\"array is wrong length\");\n }\n result.forEach((value, index) => {\n var _a;\n __classPrivateFieldGet((_a = components[index]), _ParamType_instances, \"m\", _ParamType_walkAsync).call(_a, promises, value, process, (value) => {\n result[index] = value;\n });\n });\n setValue(result);\n return;\n }\n const result = process(this.type, value);\n if (result.then) {\n promises.push((async function () { setValue(await result); })());\n }\n else {\n setValue(result);\n }\n};\nexport var FragmentType;\n(function (FragmentType) {\n FragmentType[\"constructor\"] = \"constructor\";\n FragmentType[\"error\"] = \"error\";\n FragmentType[\"event\"] = \"event\";\n FragmentType[\"function\"] = \"function\";\n FragmentType[\"struct\"] = \"struct\";\n})(FragmentType || (FragmentType = {}));\n;\nexport class Fragment {\n constructor(guard, type, inputs) {\n logger.assertPrivate(guard, _guard, \"Fragment\");\n inputs = Object.freeze(inputs.slice());\n defineProperties(this, { type, inputs });\n }\n static from(obj) {\n if (typeof (obj) === \"string\") {\n return this.fromString(obj);\n }\n if (obj instanceof TokenString) {\n return this.fromTokens(obj);\n }\n if (typeof (obj) === \"object\") {\n return this.fromObject(obj);\n }\n throw new Error(`unsupported type: ${obj}`);\n }\n static fromObject(obj) {\n switch (obj.type) {\n case \"constructor\": return ConstructorFragment.fromObject(obj);\n case \"error\": return ErrorFragment.fromObject(obj);\n case \"event\": return EventFragment.fromObject(obj);\n case \"function\": return FunctionFragment.fromObject(obj);\n case \"struct\": return StructFragment.fromObject(obj);\n }\n throw new Error(\"not implemented yet\");\n }\n static fromString(text) {\n try {\n Fragment.from(JSON.parse(text));\n }\n catch (e) { }\n return Fragment.fromTokens(lex(text));\n }\n static fromTokens(tokens) {\n const type = tokens.popKeyword(KwTypes);\n switch (type) {\n case \"constructor\": return ConstructorFragment.fromTokens(tokens);\n case \"error\": return ErrorFragment.fromTokens(tokens);\n case \"event\": return EventFragment.fromTokens(tokens);\n case \"function\": return FunctionFragment.fromTokens(tokens);\n case \"struct\": return StructFragment.fromTokens(tokens);\n }\n throw new Error(`unsupported type: ${type}`);\n }\n /*\n static fromTokens(tokens: TokenString): Fragment {\n const assertDone = () => {\n if (tokens.length) { throw new Error(`unexpected tokens: ${ tokens.toString() }`); }\n });\n\n const type = (tokens.length && tokens.peek().type === \"KEYWORD\") ? tokens.peek().text: \"unknown\";\n\n const name = consumeName(\"error\", tokens);\n const inputs = consumeParams(tokens, type === \"event\");\n\n switch (type) {\n case \"event\": case \"struct\":\n assertDone();\n }\n\n }\n */\n static isConstructor(value) {\n return (value && value.type === \"constructor\");\n }\n static isError(value) {\n return (value && value.type === \"error\");\n }\n static isEvent(value) {\n return (value && value.type === \"event\");\n }\n static isFunction(value) {\n return (value && value.type === \"function\");\n }\n static isStruct(value) {\n return (value && value.type === \"struct\");\n }\n}\nexport class NamedFragment extends Fragment {\n constructor(guard, type, name, inputs) {\n super(guard, type, inputs);\n inputs = Object.freeze(inputs.slice());\n defineProperties(this, { name });\n }\n}\nfunction joinParams(format, params) {\n return \"(\" + params.map((p) => p.format(format)).join((format === FormatType.full) ? \", \" : \",\") + \")\";\n}\nexport class ErrorFragment extends NamedFragment {\n constructor(guard, name, inputs) {\n super(guard, FragmentType.error, name, inputs);\n }\n format(format = FormatType.sighash) {\n if (!FormatType[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatType.json) {\n return JSON.stringify({\n type: \"error\",\n name: this.name,\n inputs: this.inputs.map((input) => JSON.parse(input.format(format))),\n });\n }\n const result = [];\n if (format !== FormatType.sighash) {\n result.push(\"error\");\n }\n result.push(this.name + joinParams(format, this.inputs));\n return result.join(\" \");\n }\n static fromString(text) {\n return ErrorFragment.fromTokens(lex(text));\n }\n static fromTokens(tokens) {\n const name = consumeName(\"error\", tokens);\n const inputs = consumeParams(tokens);\n consumeEoi(tokens);\n return new ErrorFragment(_guard, name, inputs);\n }\n}\nexport class EventFragment extends NamedFragment {\n constructor(guard, name, inputs, anonymous) {\n super(guard, FragmentType.event, name, inputs);\n defineProperties(this, { anonymous });\n }\n format(format = FormatType.sighash) {\n if (!FormatType[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatType.json) {\n return JSON.stringify({\n type: \"event\",\n anonymous: this.anonymous,\n name: this.name,\n inputs: this.inputs.map((i) => JSON.parse(i.format(format)))\n });\n }\n const result = [];\n if (format !== FormatType.sighash) {\n result.push(\"event\");\n }\n result.push(this.name + joinParams(format, this.inputs));\n if (format !== FormatType.sighash && this.anonymous) {\n result.push(\"anonymous\");\n }\n return result.join(\" \");\n }\n static fromString(text) {\n return EventFragment.fromTokens(lex(text));\n }\n static fromTokens(tokens) {\n const name = consumeName(\"event\", tokens);\n const inputs = consumeParams(tokens, true);\n const anonymous = !!consumeKeywords(tokens, setify([\"anonymous\"])).has(\"anonymous\");\n consumeEoi(tokens);\n return new EventFragment(_guard, name, inputs, anonymous);\n }\n}\nexport class ConstructorFragment extends Fragment {\n constructor(guard, type, inputs, payable, gas) {\n super(guard, type, inputs);\n defineProperties(this, { payable, gas });\n }\n format(format = FormatType.sighash) {\n if (!FormatType[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatType.sighash) {\n logger.throwError(\"cannot format a constructor for sighash\", \"UNSUPPORTED_OPERATION\", {\n operation: \"format(sighash)\"\n });\n }\n if (format === FormatType.json) {\n return JSON.stringify({\n type: \"constructor\",\n stateMutability: (this.payable ? \"payable\" : \"undefined\"),\n payable: this.payable,\n gas: ((this.gas != null) ? this.gas : undefined),\n inputs: this.inputs.map((i) => JSON.parse(i.format(format)))\n });\n }\n const result = [`constructor${joinParams(format, this.inputs)}`];\n result.push((this.payable) ? \"payable\" : \"nonpayable\");\n if (this.gas != null) {\n result.push(`@${this.gas.toString()}`);\n }\n return result.join(\" \");\n }\n static fromString(text) {\n return ConstructorFragment.fromTokens(lex(text));\n }\n static fromObject(obj) {\n throw new Error(\"TODO\");\n }\n static fromTokens(tokens) {\n consumeKeywords(tokens, setify([\"constructor\"]));\n const inputs = consumeParams(tokens);\n const payable = !!consumeKeywords(tokens, setify([\"payable\"])).has(\"payable\");\n const gas = consumeGas(tokens);\n consumeEoi(tokens);\n return new ConstructorFragment(_guard, FragmentType.constructor, inputs, payable, gas);\n }\n}\nexport class FunctionFragment extends NamedFragment {\n constructor(guard, name, stateMutability, inputs, outputs, gas) {\n super(guard, FragmentType.function, name, inputs);\n outputs = Object.freeze(outputs.slice());\n const constant = (stateMutability === \"view\" || stateMutability === \"pure\");\n const payable = (stateMutability === \"payable\");\n defineProperties(this, { constant, gas, outputs, payable, stateMutability });\n }\n format(format = FormatType.sighash) {\n if (!FormatType[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatType.json) {\n return JSON.stringify({\n type: \"function\",\n name: this.name,\n constant: this.constant,\n stateMutability: ((this.stateMutability !== \"nonpayable\") ? this.stateMutability : undefined),\n payable: this.payable,\n gas: ((this.gas != null) ? this.gas : undefined),\n inputs: this.inputs.map((i) => JSON.parse(i.format(format))),\n outputs: this.outputs.map((o) => JSON.parse(o.format(format))),\n });\n }\n const result = [];\n if (format !== FormatType.sighash) {\n result.push(\"function\");\n }\n result.push(this.name + joinParams(format, this.inputs));\n if (format !== FormatType.sighash) {\n if (this.stateMutability !== \"nonpayable\") {\n result.push(this.stateMutability);\n }\n if (this.outputs && this.outputs.length) {\n result.push(\"returns\");\n result.push(joinParams(format, this.outputs));\n }\n if (this.gas != null) {\n result.push(`@${this.gas.toString()}`);\n }\n }\n return result.join(\" \");\n }\n static fromString(text) {\n return FunctionFragment.fromTokens(lex(text));\n }\n static fromTokens(tokens) {\n const name = consumeName(\"function\", tokens);\n const inputs = consumeParams(tokens);\n const mutability = consumeMutability(tokens);\n let outputs = [];\n if (consumeKeywords(tokens, setify([\"returns\"])).has(\"returns\")) {\n outputs = consumeParams(tokens);\n }\n const gas = consumeGas(tokens);\n consumeEoi(tokens);\n return new FunctionFragment(_guard, name, mutability, inputs, outputs, gas);\n }\n}\nexport class StructFragment extends NamedFragment {\n format() {\n throw new Error(\"@TODO\");\n }\n static fromString(text) {\n return StructFragment.fromTokens(lex(text));\n }\n static fromTokens(tokens) {\n const name = consumeName(\"struct\", tokens);\n const inputs = consumeParams(tokens);\n consumeEoi(tokens);\n return new StructFragment(_guard, FragmentType.struct, name, inputs);\n }\n}\n//# sourceMappingURL=fragments.js.map","export const version = \"@ethersproject/math@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { logger } from \"./logger.js\";\n// IEEE 754 support 53-bits of mantissa\nconst maxValue = 0x1fffffffffffff;\nconst nibbles = \"0123456789abcdef\";\nconst BN_0 = BigInt(0);\n// Converts a value to a BigInt, including big endian data\nexport function toBigInt(_value) {\n if (_value instanceof Uint8Array) {\n let result = \"0x0\";\n for (const v of _value) {\n result += nibbles[v >> 4];\n result += nibbles[v & 0x0f];\n }\n return BigInt(result);\n }\n return logger.getBigInt(_value, \"value\");\n}\nexport function toNumber(_value) {\n const value = toBigInt(_value);\n if (value < -maxValue || value > maxValue) {\n logger.throwArgumentError(\"overflow\", \"value\", _value);\n }\n return Number(value);\n}\n// Converts value to hex, optionally padding on the left to width bytes\nexport function toHex(_value, _width) {\n const value = logger.getBigInt(_value, \"value\");\n if (value < 0) {\n throw new Error(\"cannot convert negative value to hex\");\n }\n let result = value.toString(16);\n if (_width == null) {\n // Ensure the value is of even length\n if (result.length % 2) {\n result = \"0\" + result;\n }\n }\n else {\n const width = logger.getNumber(_width, \"width\");\n if (width * 2 < result.length) {\n throw new Error(`value ${value} exceeds width ${width}`);\n }\n // Pad the value to the required width\n while (result.length < (width * 2)) {\n result = \"0\" + result;\n }\n }\n return \"0x\" + result;\n}\nexport function toArray(_value) {\n const value = logger.getBigInt(_value, \"value\");\n if (value < 0) {\n throw new Error(\"cannot convert negative value to hex\");\n }\n if (value === BN_0) {\n return new Uint8Array([]);\n }\n let hex = value.toString(16);\n if (hex.length % 2) {\n hex = \"0\" + hex;\n }\n const result = new Uint8Array(hex.length / 2);\n for (let i = 0; i < result.length; i++) {\n const offset = i * 2;\n result[i] = parseInt(hex.substring(offset, offset + 2), 16);\n }\n return result;\n}\n//# sourceMappingURL=convert.js.map","import { logger } from \"./logger.js\";\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\n// Convert a value from a twos-compliment value\nexport function fromTwos(_value, _width) {\n const value = logger.getBigInt(_value, \"value\");\n const width = BigInt(logger.getNumber(_width, \"width\"));\n // Top bit set; treat as a negative value\n if (value >> (width - BN_1)) {\n const mask = (BN_1 << width) - BN_1;\n return -(((~value) & mask) + BN_1);\n }\n return value;\n}\n// Convert value to a twos-compliment value\nexport function toTwos(_value, _width) {\n const value = logger.getBigInt(_value, \"value\");\n const width = BigInt(logger.getNumber(_width, \"width\"));\n if (value < BN_0) {\n const mask = (BN_1 << width) - BN_1;\n return ((~(-value)) & mask) + BN_1;\n }\n return value;\n}\nexport function mask(_value, _bits) {\n const value = logger.getBigInt(_value, \"value\");\n const bits = logger.getBigInt(_bits, \"bits\");\n return value & ((BN_1 << bits) - BN_1);\n}\n//# sourceMappingURL=maths.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _FixedNumber_instances, _FixedNumber_value, _FixedNumber_checkFormat;\nimport { toBigInt, toHex } from \"./convert.js\";\nimport { logger } from \"./logger.js\";\nimport { fromTwos, toTwos } from \"./maths.js\";\nconst _constructorGuard = {};\n//const Zero = BigInt(0);\nconst NegativeOne = BigInt(-1);\nfunction throwFault(message, fault, operation, value) {\n const params = { fault: fault, operation: operation };\n if (value !== undefined) {\n params.value = value;\n }\n return logger.throwError(message, \"NUMERIC_FAULT\", params);\n}\n// Constant to pull zeros from for multipliers\nlet zeros = \"0\";\nwhile (zeros.length < 256) {\n zeros += zeros;\n}\n// Returns a string \"1\" followed by decimal \"0\"s\nfunction getMultiplier(decimals) {\n if (typeof (decimals) !== \"number\" || decimals < 0 || decimals > 256 || decimals % 1) {\n logger.throwArgumentError(\"invalid decimal length\", \"decimals\", decimals);\n }\n return BigInt(\"1\" + zeros.substring(0, decimals));\n}\nexport function formatFixed(_value, _decimals = 0) {\n let value = logger.getBigInt(_value, \"value\");\n const decimals = logger.getNumber(_decimals, \"decimals\");\n const multiplier = getMultiplier(decimals);\n const multiplierStr = String(multiplier);\n const negative = (value < 0);\n if (negative) {\n value *= NegativeOne;\n }\n let fraction = String(value % multiplier);\n // Make sure there are enough place-holders\n while (fraction.length < multiplierStr.length - 1) {\n fraction = \"0\" + fraction;\n }\n // Strip training 0\n while (fraction.length > 1 && fraction.substring(fraction.length - 1) === \"0\") {\n fraction = fraction.substring(0, fraction.length - 1);\n }\n let result = String(value / multiplier);\n if (multiplierStr.length !== 1) {\n result += \".\" + fraction;\n }\n if (negative) {\n result = \"-\" + result;\n }\n return result;\n}\nexport function parseFixed(value, _decimals = 0) {\n const decimals = logger.getNumber(_decimals, \"decimals\");\n const multiplier = getMultiplier(decimals);\n if (typeof (value) !== \"string\" || !value.match(/^-?[0-9.]+$/)) {\n logger.throwArgumentError(\"invalid decimal value\", \"value\", value);\n }\n // Is it negative?\n const negative = (value.substring(0, 1) === \"-\");\n if (negative) {\n value = value.substring(1);\n }\n if (value === \".\") {\n logger.throwArgumentError(\"missing value\", \"value\", value);\n }\n // Split it into a whole and fractional part\n const comps = value.split(\".\");\n if (comps.length > 2) {\n logger.throwArgumentError(\"too many decimal points\", \"value\", value);\n }\n let whole = (comps[0] || \"0\"), fraction = (comps[1] || \"0\");\n // Trim trialing zeros\n while (fraction[fraction.length - 1] === \"0\") {\n fraction = fraction.substring(0, fraction.length - 1);\n }\n // Check the fraction doesn't exceed our decimals size\n if (fraction.length > String(multiplier).length - 1) {\n throwFault(\"fractional component exceeds decimals\", \"underflow\", \"parseFixed\");\n }\n // If decimals is 0, we have an empty string for fraction\n if (fraction === \"\") {\n fraction = \"0\";\n }\n // Fully pad the string with zeros to get to wei\n while (fraction.length < String(multiplier).length - 1) {\n fraction += \"0\";\n }\n const wholeValue = BigInt(whole);\n const fractionValue = BigInt(fraction);\n let wei = (wholeValue * multiplier) + fractionValue;\n if (negative) {\n wei *= NegativeOne;\n }\n return wei;\n}\nexport class FixedFormat {\n constructor(constructorGuard, signed, width, decimals) {\n if (constructorGuard !== _constructorGuard) {\n logger.throwError(\"cannot use FixedFormat constructor; use FixedFormat.from\", \"UNSUPPORTED_OPERATION\", {\n operation: \"new FixedFormat\"\n });\n }\n this.signed = signed;\n this.width = width;\n this.decimals = decimals;\n this.name = (signed ? \"\" : \"u\") + \"fixed\" + String(width) + \"x\" + String(decimals);\n this._multiplier = getMultiplier(decimals);\n Object.freeze(this);\n }\n static from(value) {\n if (value instanceof FixedFormat) {\n return value;\n }\n if (typeof (value) === \"number\") {\n value = `fixed128x${value}`;\n }\n let signed = true;\n let width = 128;\n let decimals = 18;\n if (typeof (value) === \"string\") {\n if (value === \"fixed\") {\n // defaults...\n }\n else if (value === \"ufixed\") {\n signed = false;\n }\n else {\n const match = value.match(/^(u?)fixed([0-9]+)x([0-9]+)$/);\n if (!match) {\n return logger.throwArgumentError(\"invalid fixed format\", \"format\", value);\n }\n signed = (match[1] !== \"u\");\n width = parseInt(match[2]);\n decimals = parseInt(match[3]);\n }\n }\n else if (value) {\n const check = (key, type, defaultValue) => {\n if (value[key] == null) {\n return defaultValue;\n }\n if (typeof (value[key]) !== type) {\n logger.throwArgumentError(\"invalid fixed format (\" + key + \" not \" + type + \")\", \"format.\" + key, value[key]);\n }\n return value[key];\n };\n signed = check(\"signed\", \"boolean\", signed);\n width = check(\"width\", \"number\", width);\n decimals = check(\"decimals\", \"number\", decimals);\n }\n if (width % 8) {\n logger.throwArgumentError(\"invalid fixed format width (not byte aligned)\", \"format.width\", width);\n }\n if (decimals > 80) {\n logger.throwArgumentError(\"invalid fixed format (decimals too large)\", \"format.decimals\", decimals);\n }\n return new FixedFormat(_constructorGuard, signed, width, decimals);\n }\n}\nexport class FixedNumber {\n constructor(constructorGuard, hex, value, format) {\n _FixedNumber_instances.add(this);\n //#hex: string;\n _FixedNumber_value.set(this, void 0);\n if (constructorGuard !== _constructorGuard) {\n logger.throwError(\"cannot use FixedNumber constructor; use FixedNumber.from\", \"UNSUPPORTED_OPERATION\", {\n operation: \"new FixedFormat\"\n });\n }\n this.format = FixedFormat.from(format);\n //this.#hex = hex;\n __classPrivateFieldSet(this, _FixedNumber_value, value, \"f\");\n this._isFixedNumber = true;\n Object.freeze(this);\n }\n addUnsafe(other) {\n __classPrivateFieldGet(this, _FixedNumber_instances, \"m\", _FixedNumber_checkFormat).call(this, other);\n const a = parseFixed(__classPrivateFieldGet(this, _FixedNumber_value, \"f\"), this.format.decimals);\n const b = parseFixed(__classPrivateFieldGet(other, _FixedNumber_value, \"f\"), other.format.decimals);\n return FixedNumber.fromValue(a + b, this.format.decimals, this.format);\n }\n subUnsafe(other) {\n __classPrivateFieldGet(this, _FixedNumber_instances, \"m\", _FixedNumber_checkFormat).call(this, other);\n const a = parseFixed(__classPrivateFieldGet(this, _FixedNumber_value, \"f\"), this.format.decimals);\n const b = parseFixed(__classPrivateFieldGet(other, _FixedNumber_value, \"f\"), other.format.decimals);\n return FixedNumber.fromValue(a - b, this.format.decimals, this.format);\n }\n mulUnsafe(other) {\n __classPrivateFieldGet(this, _FixedNumber_instances, \"m\", _FixedNumber_checkFormat).call(this, other);\n const a = parseFixed(__classPrivateFieldGet(this, _FixedNumber_value, \"f\"), this.format.decimals);\n const b = parseFixed(__classPrivateFieldGet(other, _FixedNumber_value, \"f\"), other.format.decimals);\n return FixedNumber.fromValue((a * b) / this.format._multiplier, this.format.decimals, this.format);\n }\n divUnsafe(other) {\n __classPrivateFieldGet(this, _FixedNumber_instances, \"m\", _FixedNumber_checkFormat).call(this, other);\n const a = parseFixed(__classPrivateFieldGet(this, _FixedNumber_value, \"f\"), this.format.decimals);\n const b = parseFixed(__classPrivateFieldGet(other, _FixedNumber_value, \"f\"), other.format.decimals);\n return FixedNumber.fromValue((a * this.format._multiplier) / b, this.format.decimals, this.format);\n }\n floor() {\n const comps = this.toString().split(\".\");\n if (comps.length === 1) {\n comps.push(\"0\");\n }\n let result = FixedNumber.from(comps[0], this.format);\n const hasFraction = !comps[1].match(/^(0*)$/);\n if (this.isNegative() && hasFraction) {\n result = result.subUnsafe(ONE.toFormat(result.format));\n }\n return result;\n }\n ceiling() {\n const comps = this.toString().split(\".\");\n if (comps.length === 1) {\n comps.push(\"0\");\n }\n let result = FixedNumber.from(comps[0], this.format);\n const hasFraction = !comps[1].match(/^(0*)$/);\n if (!this.isNegative() && hasFraction) {\n result = result.addUnsafe(ONE.toFormat(result.format));\n }\n return result;\n }\n // @TODO: Support other rounding algorithms\n round(decimals) {\n if (decimals == null) {\n decimals = 0;\n }\n // If we are already in range, we're done\n const comps = this.toString().split(\".\");\n if (comps.length === 1) {\n comps.push(\"0\");\n }\n if (decimals < 0 || decimals > 80 || (decimals % 1)) {\n logger.throwArgumentError(\"invalid decimal count\", \"decimals\", decimals);\n }\n if (comps[1].length <= decimals) {\n return this;\n }\n const factor = FixedNumber.from(\"1\" + zeros.substring(0, decimals), this.format);\n const bump = BUMP.toFormat(this.format);\n return this.mulUnsafe(factor).addUnsafe(bump).floor().divUnsafe(factor);\n }\n isZero() {\n return (__classPrivateFieldGet(this, _FixedNumber_value, \"f\") === \"0.0\" || __classPrivateFieldGet(this, _FixedNumber_value, \"f\") === \"0\");\n }\n isNegative() {\n return (__classPrivateFieldGet(this, _FixedNumber_value, \"f\")[0] === \"-\");\n }\n toString() { return __classPrivateFieldGet(this, _FixedNumber_value, \"f\"); }\n toHexString(_width) {\n throw new Error(\"TODO\");\n /*\n return toHex();\n if (width == null) { return this.#hex; }\n\n const width = logger.getNumeric(_width);\n if (width % 8) { logger.throwArgumentError(\"invalid byte width\", \"width\", width); }\n\n const hex = BigNumber.from(this.#hex).fromTwos(this.format.width).toTwos(width).toHexString();\n return zeroPadLeft(hex, width / 8);\n */\n }\n toUnsafeFloat() { return parseFloat(this.toString()); }\n toFormat(format) {\n return FixedNumber.fromString(__classPrivateFieldGet(this, _FixedNumber_value, \"f\"), format);\n }\n static fromValue(value, decimals = 0, format = \"fixed\") {\n return FixedNumber.fromString(formatFixed(value, decimals), FixedFormat.from(format));\n }\n static fromString(value, format = \"fixed\") {\n const fixedFormat = FixedFormat.from(format);\n const numeric = parseFixed(value, fixedFormat.decimals);\n if (!fixedFormat.signed && numeric < 0) {\n throwFault(\"unsigned value cannot be negative\", \"overflow\", \"value\", value);\n }\n const hex = (function () {\n if (fixedFormat.signed) {\n return toHex(toTwos(numeric, fixedFormat.width));\n }\n return toHex(numeric, fixedFormat.width / 8);\n })();\n const decimal = formatFixed(numeric, fixedFormat.decimals);\n return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat);\n }\n static fromBytes(_value, format = \"fixed\") {\n const value = logger.getBytes(_value, \"value\");\n const fixedFormat = FixedFormat.from(format);\n if (value.length > fixedFormat.width / 8) {\n throw new Error(\"overflow\");\n }\n let numeric = toBigInt(value);\n if (fixedFormat.signed) {\n numeric = fromTwos(numeric, fixedFormat.width);\n }\n const hex = toHex(toTwos(numeric, (fixedFormat.signed ? 0 : 1) + fixedFormat.width));\n const decimal = formatFixed(numeric, fixedFormat.decimals);\n return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat);\n }\n static from(value, format) {\n if (typeof (value) === \"string\") {\n return FixedNumber.fromString(value, format);\n }\n if (value instanceof Uint8Array) {\n return FixedNumber.fromBytes(value, format);\n }\n try {\n return FixedNumber.fromValue(value, 0, format);\n }\n catch (error) {\n // Allow NUMERIC_FAULT to bubble up\n if (error.code !== \"INVALID_ARGUMENT\") {\n throw error;\n }\n }\n return logger.throwArgumentError(\"invalid FixedNumber value\", \"value\", value);\n }\n static isFixedNumber(value) {\n return !!(value && value._isFixedNumber);\n }\n}\n_FixedNumber_value = new WeakMap(), _FixedNumber_instances = new WeakSet(), _FixedNumber_checkFormat = function _FixedNumber_checkFormat(other) {\n if (this.format.name !== other.format.name) {\n logger.throwArgumentError(\"incompatible format; use fixedNumber.toFormat\", \"other\", other);\n }\n};\nconst ONE = FixedNumber.from(1);\nconst BUMP = FixedNumber.from(\"0.5\");\n//# sourceMappingURL=fixednumber.js.map","import { toBigInt, toHex } from \"./convert.js\";\nimport { logger } from \"./logger.js\";\nconst Alphabet = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\";\nlet Lookup = null;\nfunction getAlpha(letter) {\n if (Lookup == null) {\n Lookup = {};\n for (let i = 0; i < Alphabet.length; i++) {\n Lookup[Alphabet[i]] = BigInt(i);\n }\n }\n const result = Lookup[letter];\n if (result == null) {\n logger.throwArgumentError(`invalid base58 value`, \"letter\", letter);\n }\n return result;\n}\nconst BN_0 = BigInt(0);\nconst BN_58 = BigInt(58);\nexport function encodeBase58(_value) {\n let value = toBigInt(logger.getBytes(_value));\n let result = \"\";\n while (value) {\n result = Alphabet[Number(value % BN_58)] + result;\n value /= BN_58;\n }\n return result;\n}\nexport function decodeBase58(value) {\n let result = BN_0;\n for (let i = 0; i < value.length; i++) {\n result *= BN_58;\n result += getAlpha(value[i]);\n }\n return toHex(result);\n}\n//# sourceMappingURL=base58.js.map","export function isHexString(value, length) {\n if (typeof (value) !== \"string\" || !value.match(/^0x[0-9A-Fa-f]*$/)) {\n return false;\n }\n if (typeof (length) === \"number\" && value.length !== 2 + 2 * length) {\n return false;\n }\n if (length === true && (value.length % 2) !== 0) {\n return false;\n }\n return true;\n}\n/*\nfunction _isByte(value: number): boolean {\n return (typeof(value) === \"number\" && value >= 0 && value < 256 && Math.floor(value) === value);\n}\nexport function isBytes(value: any): value is Bytes {\n if (value == null) { return false; }\n\n if (value instanceof Uint8Array) { return true; }\n if (typeof(value) === \"string\") { return false; }\n\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n if (!_isByte(value[i])) { return false; }\n }\n return true;\n }\n\n return false;\n}\n*/\nexport function isBytesLike(value) {\n return (isHexString(value, true) || (value instanceof Uint8Array));\n}\n//# sourceMappingURL=check.js.map","export const version = \"@ethersproject/bytes@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { version } from \"./_version.js\";\nimport { Logger } from \"@ethersproject/logger\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { isBytesLike } from \"./check.js\";\nimport { logger } from \"./logger.js\";\nlet BN_8 = null;\nlet BN_255 = null;\ntry {\n BN_8 = BigInt(\"8\");\n BN_255 = BigInt(\"255\");\n}\ncatch (error) {\n console.log(\"Unsupported bigint\", error);\n}\nfunction isHexable(value) {\n return (value && typeof (value.toHexString) === \"function\");\n}\nexport function arrayify(data) {\n if (data == null) {\n logger.throwArgumentError(\"cannot arrayify nullish\", \"data\", data);\n }\n if (typeof (data) === \"number\") {\n logger.assertUint53(data);\n const result = [];\n while (data) {\n result.unshift(data & 0xff);\n data = parseInt(String(data / 256));\n }\n if (result.length === 0) {\n result.push(0);\n }\n return new Uint8Array(result);\n }\n if (BN_8 && typeof (data) === \"bigint\") {\n const result = [];\n while (data) {\n result.unshift(Number(data & BN_255));\n data >>= BN_8;\n }\n if (result.length === 0) {\n result.push(0);\n }\n return new Uint8Array(result);\n }\n if (isHexable(data)) {\n return arrayify(data.toHexString());\n }\n if (typeof (data) === \"string\") {\n let hex = data;\n //if (options.allowMissingPrefix && hex.substring(0, 2) !== \"0x\") {\n // hex = \"0x\" + hex;\n //}\n if (!hex.match(/^0x[0-9a-f]*$/i)) {\n throw new RangeError(`invalid hex data string (${JSON.stringify(data)})`);\n }\n const result = [];\n for (let i = 2; i < hex.length; i += 2) {\n result.push(parseInt(hex.substring(i, i + 2), 16));\n }\n return new Uint8Array(result);\n }\n if (data instanceof Uint8Array) {\n return new Uint8Array(data);\n }\n throw new TypeError(`cannot arrayify ${JSON.stringify(data)}`);\n}\nexport function _noCopyArrayify(data) {\n if (!isBytesLike(data)) {\n logger.throwArgumentError(\"invalid BytesLike value\", \"data\", data);\n } // @TODO: ArgumentE>\n if (data instanceof Uint8Array) {\n return data;\n }\n return arrayify(data);\n}\n//# sourceMappingURL=array.js.map","import { logger } from \"./logger.js\";\nexport function decodeBase64(textData) {\n return new Uint8Array(Buffer.from(textData, \"base64\"));\n}\n;\nexport function encodeBase64(data) {\n return Buffer.from(logger.getBytes(data, \"data\")).toString(\"base64\");\n}\n//# sourceMappingURL=base64.js.map","import { arrayify, _noCopyArrayify } from \"./array.js\";\nconst HexCharacters = \"0123456789abcdef\";\nexport function hexlify(data) {\n const bytes = _noCopyArrayify(data);\n let result = \"0x\";\n for (let i = 0; i < bytes.length; i++) {\n const v = bytes[i];\n result += HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f];\n }\n return result;\n}\nexport function quantity(value) {\n let result = hexlify(arrayify(value)).substring(2);\n while (result.substring(0, 1) === \"0\") {\n result = result.substring(1);\n }\n if (result === \"\") {\n result = \"0\";\n }\n return \"0x\" + result;\n}\n//# sourceMappingURL=hex.js.map","import { _noCopyArrayify } from \"./array.js\";\nimport { isHexString } from \"./check.js\";\nimport { hexlify } from \"./hex.js\";\nimport { logger } from \"./logger.js\";\nexport function concat(datas) {\n return \"0x\" + datas.map((d) => hexlify(d).substring(2)).join(\"\");\n}\nexport function dataLength(data) {\n if (isHexString(data, true)) {\n return (data.length - 2) / 2;\n }\n return _noCopyArrayify(data).length;\n}\nexport function dataSlice(data, start, end) {\n const bytes = _noCopyArrayify(data);\n if (end != null && end > bytes.length) {\n logger.throwError(\"cannot slice beyond data bounds\", \"BUFFER_OVERRUN\", {\n buffer: bytes, length: bytes.length, offset: end\n });\n }\n return hexlify(bytes.slice((start == null) ? 0 : start, (end == null) ? bytes.length : end));\n}\nexport function stripZerosLeft(data) {\n let bytes = hexlify(data).substring(2);\n while (bytes.substring(0, 2) == \"00\") {\n bytes = bytes.substring(2);\n }\n return \"0x\" + bytes;\n}\n//# sourceMappingURL=data.js.map","import { _noCopyArrayify } from \"./array.js\";\nimport { hexlify } from \"./hex.js\";\nimport { logger } from \"./logger.js\";\nfunction zeroPad(data, length, left) {\n const bytes = _noCopyArrayify(data);\n if (length < bytes.length) {\n logger.throwError(\"padding exceeds data length\", \"BUFFER_OVERRUN\", {\n buffer: new Uint8Array(bytes),\n length: length,\n offset: length + 1\n });\n }\n const result = new Uint8Array(length);\n result.fill(0);\n if (left) {\n result.set(bytes, length - bytes.length);\n }\n else {\n result.set(bytes, 0);\n }\n return hexlify(result);\n}\nexport function zeroPadLeft(data, length) {\n return zeroPad(data, length, true);\n}\nexport function zeroPadRight(data, length) {\n return zeroPad(data, length, false);\n}\n//# sourceMappingURL=pad.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Result_instances, _Result_indices, _Result_throwError, _Writer_instances, _Writer_data, _Writer_dataLength, _Writer_writeData, _Reader_instances, _Reader_data, _Reader_offset, _Reader_coerceFunc, _Reader_peekBytes;\nimport { toArray, toBigInt, toNumber } from \"@ethersproject/math\";\nimport { arrayify, concat, hexlify } from \"@ethersproject/bytes\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { logger } from \"../logger.js\";\nexport const WordSize = 32;\nconst Padding = new Uint8Array(WordSize);\n// Properties used to immediate pass through to the underlying object\n// - `then` is used to detect if an object is a Promise for await\nconst passProperties = [\"then\"];\nconst _guard = {};\nexport class Result extends Array {\n constructor(guard, items, keys) {\n logger.assertPrivate(guard, _guard, \"Result\");\n super(...items);\n _Result_instances.add(this);\n _Result_indices.set(this, void 0);\n // Name lookup table\n __classPrivateFieldSet(this, _Result_indices, new Map(), \"f\");\n if (keys) {\n keys.forEach((key, index) => {\n if (key == null) {\n return;\n }\n if (__classPrivateFieldGet(this, _Result_indices, \"f\").has(key)) {\n (__classPrivateFieldGet(this, _Result_indices, \"f\").get(key)).push(index);\n }\n else {\n __classPrivateFieldGet(this, _Result_indices, \"f\").set(key, [index]);\n }\n });\n }\n Object.freeze(this);\n return new Proxy(this, {\n get: (target, prop, receiver) => {\n if (typeof (prop) === \"string\") {\n if (prop.match(/^[0-9]+$/)) {\n const index = logger.getNumber(prop, \"%index\");\n if (index < 0 || index >= this.length) {\n throw new RangeError(\"out of result range\");\n }\n const item = target[index];\n if (item instanceof Error) {\n __classPrivateFieldGet(this, _Result_instances, \"m\", _Result_throwError).call(this, `index ${index}`, item);\n }\n return item;\n }\n // Pass important checks (like `then` for Promise) through\n if (prop in target || passProperties.indexOf(prop) >= 0) {\n return Reflect.get(target, prop, receiver);\n }\n // Something that could be a result keyword value\n if (!(prop in target)) {\n return target.getValue(prop);\n }\n }\n return Reflect.get(target, prop, receiver);\n }\n });\n }\n slice(start, end) {\n if (start == null) {\n start = 0;\n }\n if (end == null) {\n end = this.length;\n }\n const result = [];\n for (let i = start; i < end; i++) {\n let value;\n try {\n value = this[i];\n }\n catch (error) {\n value = error.error;\n }\n result.push(value);\n }\n return result;\n }\n getValue(name) {\n const index = __classPrivateFieldGet(this, _Result_indices, \"f\").get(name);\n if (index != null && index.length === 1) {\n const item = this[index[0]];\n if (item instanceof Error) {\n __classPrivateFieldGet(this, _Result_instances, \"m\", _Result_throwError).call(this, `property ${JSON.stringify(name)}`, item);\n }\n return item;\n }\n throw new Error(`no named parameter: ${JSON.stringify(name)}`);\n }\n static fromItems(items, keys) {\n return new Result(_guard, items, keys);\n }\n}\n_Result_indices = new WeakMap(), _Result_instances = new WeakSet(), _Result_throwError = function _Result_throwError(name, error) {\n const wrapped = new Error(`deferred error during ABI decoding triggered accessing ${name}`);\n wrapped.error = error;\n throw wrapped;\n};\nexport function checkResultErrors(result) {\n // Find the first error (if any)\n const errors = [];\n const checkErrors = function (path, object) {\n if (!Array.isArray(object)) {\n return;\n }\n for (let key in object) {\n const childPath = path.slice();\n childPath.push(key);\n try {\n checkErrors(childPath, object[key]);\n }\n catch (error) {\n errors.push({ path: childPath, error: error });\n }\n }\n };\n checkErrors([], result);\n return errors;\n}\nfunction getValue(value) {\n let bytes = toArray(value);\n if (bytes.length > WordSize) {\n logger.throwError(\"value out-of-bounds\", \"BUFFER_OVERRUN\", {\n buffer: bytes,\n length: WordSize,\n offset: bytes.length\n });\n }\n if (bytes.length % WordSize) {\n bytes = arrayify(concat([Padding.slice(bytes.length % WordSize), bytes]));\n }\n return bytes;\n}\nexport class Coder {\n constructor(name, type, localName, dynamic) {\n defineProperties(this, { name, type, localName, dynamic }, {\n name: \"string\", type: \"string\", localName: \"string\", dynamic: \"boolean\"\n });\n }\n _throwError(message, value) {\n return logger.throwArgumentError(message, this.localName, value);\n }\n}\nexport class Writer {\n constructor() {\n _Writer_instances.add(this);\n // An array of WordSize lengthed objects to concatenation\n _Writer_data.set(this, void 0);\n _Writer_dataLength.set(this, void 0);\n __classPrivateFieldSet(this, _Writer_data, [], \"f\");\n __classPrivateFieldSet(this, _Writer_dataLength, 0, \"f\");\n }\n get data() {\n return concat(__classPrivateFieldGet(this, _Writer_data, \"f\"));\n }\n get length() { return __classPrivateFieldGet(this, _Writer_dataLength, \"f\"); }\n appendWriter(writer) {\n return __classPrivateFieldGet(this, _Writer_instances, \"m\", _Writer_writeData).call(this, arrayify(writer.data));\n }\n // Arrayish item; pad on the right to *nearest* WordSize\n writeBytes(value) {\n let bytes = arrayify(value);\n const paddingOffset = bytes.length % WordSize;\n if (paddingOffset) {\n bytes = arrayify(concat([bytes, Padding.slice(paddingOffset)]));\n }\n return __classPrivateFieldGet(this, _Writer_instances, \"m\", _Writer_writeData).call(this, bytes);\n }\n // Numeric item; pad on the left *to* WordSize\n writeValue(value) {\n return __classPrivateFieldGet(this, _Writer_instances, \"m\", _Writer_writeData).call(this, getValue(value));\n }\n // Inserts a numeric place-holder, returning a callback that can\n // be used to asjust the value later\n writeUpdatableValue() {\n const offset = __classPrivateFieldGet(this, _Writer_data, \"f\").length;\n __classPrivateFieldGet(this, _Writer_data, \"f\").push(Padding);\n __classPrivateFieldSet(this, _Writer_dataLength, __classPrivateFieldGet(this, _Writer_dataLength, \"f\") + WordSize, \"f\");\n return (value) => {\n __classPrivateFieldGet(this, _Writer_data, \"f\")[offset] = getValue(value);\n };\n }\n}\n_Writer_data = new WeakMap(), _Writer_dataLength = new WeakMap(), _Writer_instances = new WeakSet(), _Writer_writeData = function _Writer_writeData(data) {\n __classPrivateFieldGet(this, _Writer_data, \"f\").push(data);\n __classPrivateFieldSet(this, _Writer_dataLength, __classPrivateFieldGet(this, _Writer_dataLength, \"f\") + data.length, \"f\");\n return data.length;\n};\nexport class Reader {\n constructor(data, coerceFunc, allowLoose) {\n _Reader_instances.add(this);\n _Reader_data.set(this, void 0);\n _Reader_offset.set(this, void 0);\n _Reader_coerceFunc.set(this, void 0);\n defineProperties(this, { allowLoose: !!allowLoose });\n __classPrivateFieldSet(this, _Reader_data, arrayify(data), \"f\");\n __classPrivateFieldSet(this, _Reader_coerceFunc, coerceFunc || Reader.coerce, \"f\");\n __classPrivateFieldSet(this, _Reader_offset, 0, \"f\");\n }\n get data() { return hexlify(__classPrivateFieldGet(this, _Reader_data, \"f\")); }\n get dataLength() { return __classPrivateFieldGet(this, _Reader_data, \"f\").length; }\n get consumed() { return __classPrivateFieldGet(this, _Reader_offset, \"f\"); }\n get bytes() { return new Uint8Array(__classPrivateFieldGet(this, _Reader_data, \"f\")); }\n // The default Coerce function\n static coerce(type, value) {\n let match = type.match(\"^u?int([0-9]+)$\");\n if (match && parseInt(match[1]) <= 48) {\n value = value.toNumber();\n }\n return value;\n }\n coerce(type, value) {\n return __classPrivateFieldGet(this, _Reader_coerceFunc, \"f\").call(this, type, value);\n }\n // Create a sub-reader with the same underlying data, but offset\n subReader(offset) {\n return new Reader(__classPrivateFieldGet(this, _Reader_data, \"f\").slice(__classPrivateFieldGet(this, _Reader_offset, \"f\") + offset), __classPrivateFieldGet(this, _Reader_coerceFunc, \"f\"), this.allowLoose);\n }\n // Read bytes\n readBytes(length, loose) {\n let bytes = __classPrivateFieldGet(this, _Reader_instances, \"m\", _Reader_peekBytes).call(this, 0, length, !!loose);\n __classPrivateFieldSet(this, _Reader_offset, __classPrivateFieldGet(this, _Reader_offset, \"f\") + bytes.length, \"f\");\n // @TODO: Make sure the length..end bytes are all 0?\n return bytes.slice(0, length);\n }\n // Read a numeric values\n readValue() {\n return toBigInt(this.readBytes(WordSize));\n }\n readIndex() {\n return toNumber(this.readBytes(WordSize));\n }\n}\n_Reader_data = new WeakMap(), _Reader_offset = new WeakMap(), _Reader_coerceFunc = new WeakMap(), _Reader_instances = new WeakSet(), _Reader_peekBytes = function _Reader_peekBytes(offset, length, loose) {\n let alignedLength = Math.ceil(length / WordSize) * WordSize;\n if (__classPrivateFieldGet(this, _Reader_offset, \"f\") + alignedLength > __classPrivateFieldGet(this, _Reader_data, \"f\").length) {\n if (this.allowLoose && loose && __classPrivateFieldGet(this, _Reader_offset, \"f\") + length <= __classPrivateFieldGet(this, _Reader_data, \"f\").length) {\n alignedLength = length;\n }\n else {\n logger.throwError(\"data out-of-bounds\", \"BUFFER_OVERRUN\", {\n buffer: arrayify(__classPrivateFieldGet(this, _Reader_data, \"f\")),\n length: __classPrivateFieldGet(this, _Reader_data, \"f\").length,\n offset: __classPrivateFieldGet(this, _Reader_offset, \"f\") + alignedLength\n });\n }\n }\n return __classPrivateFieldGet(this, _Reader_data, \"f\").slice(__classPrivateFieldGet(this, _Reader_offset, \"f\"), __classPrivateFieldGet(this, _Reader_offset, \"f\") + alignedLength);\n};\n//# sourceMappingURL=abstract-coder.js.map","/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// The import here is via the package name. This is to ensure\n// that exports mapping/resolution does fall into place.\nimport { crypto } from '@noble/hashes/crypto';\n// Cast array to different type\nexport const u8 = (arr) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr) => new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n// Cast array to view\nexport const createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word, shift) => (word << (32 - shift)) | (word >>> shift);\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\n// There is almost no big endian hardware, but js typed arrays uses platform specific endianess.\n// So, just to be sure not to corrupt anything.\nif (!isLE)\n throw new Error('Non little-endian hardware is not supported');\nconst hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xde, 0xad, 0xbe, 0xef]))\n */\nexport function bytesToHex(uint8a) {\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < uint8a.length; i++) {\n hex += hexes[uint8a[i]];\n }\n return hex;\n}\n/**\n * @example hexToBytes('deadbeef')\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string') {\n throw new TypeError('hexToBytes: expected string, got ' + typeof hex);\n }\n if (hex.length % 2)\n throw new Error('hexToBytes: received invalid unpadded hex');\n const array = new Uint8Array(hex.length / 2);\n for (let i = 0; i < array.length; i++) {\n const j = i * 2;\n const hexByte = hex.slice(j, j + 2);\n const byte = Number.parseInt(hexByte, 16);\n if (Number.isNaN(byte))\n throw new Error('Invalid byte sequence');\n array[i] = byte;\n }\n return array;\n}\n// Currently avoid insertion of polyfills with packers (browserify/webpack/etc)\n// But setTimeout is pretty slow, maybe worth to investigate howto do minimal polyfill here\nexport const nextTick = (() => {\n const nodeRequire = typeof module !== 'undefined' &&\n typeof module.require === 'function' &&\n module.require.bind(module);\n try {\n if (nodeRequire) {\n const { setImmediate } = nodeRequire('timers');\n return () => new Promise((resolve) => setImmediate(resolve));\n }\n }\n catch (e) { }\n return () => new Promise((resolve) => setTimeout(resolve, 0));\n})();\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await nextTick();\n ts += diff;\n }\n}\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string') {\n throw new TypeError(`utf8ToBytes expected string, got ${typeof str}`);\n }\n return new TextEncoder().encode(str);\n}\nexport function toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n if (!(data instanceof Uint8Array))\n throw new TypeError(`Expected input type is Uint8Array (got ${typeof data})`);\n return data;\n}\n/**\n * Concats Uint8Array-s into one; like `Buffer.concat([buf1, buf2])`\n * @example concatBytes(buf1, buf2)\n */\nexport function concatBytes(...arrays) {\n if (!arrays.every((a) => a instanceof Uint8Array))\n throw new Error('Uint8Array list expected');\n if (arrays.length === 1)\n return arrays[0];\n const length = arrays.reduce((a, arr) => a + arr.length, 0);\n const result = new Uint8Array(length);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const arr = arrays[i];\n result.set(arr, pad);\n pad += arr.length;\n }\n return result;\n}\nexport function assertNumber(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error(`Wrong positive integer: ${n}`);\n}\nexport function assertBool(b) {\n if (typeof b !== 'boolean') {\n throw new Error(`Expected boolean, not ${b}`);\n }\n}\nexport function assertBytes(bytes, ...lengths) {\n if (bytes instanceof Uint8Array && (!lengths.length || lengths.includes(bytes.length))) {\n return;\n }\n throw new TypeError(`Expected ${lengths} bytes, not ${typeof bytes} with length=${bytes.length}`);\n}\nexport function assertHash(hash) {\n if (typeof hash !== 'function' || typeof hash.create !== 'function')\n throw new Error('Hash should be wrapped by utils.wrapConstructor');\n assertNumber(hash.outputLen);\n assertNumber(hash.blockLen);\n}\n// For runtime check if class implements interface\nexport class Hash {\n // Safe version that clones internal state\n clone() {\n return this._cloneInto();\n }\n}\n// Check if object doens't have custom constructor (like Uint8Array/Array)\nconst isPlainObject = (obj) => Object.prototype.toString.call(obj) === '[object Object]' && obj.constructor === Object;\nexport function checkOpts(def, _opts) {\n if (_opts !== undefined && (typeof _opts !== 'object' || !isPlainObject(_opts)))\n throw new TypeError('Options should be object or undefined');\n const opts = Object.assign(def, _opts);\n return opts;\n}\nexport function wrapConstructor(hashConstructor) {\n const hashC = (message) => hashConstructor().update(toBytes(message)).digest();\n const tmp = hashConstructor();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashConstructor();\n return hashC;\n}\nexport function wrapConstructorWithOpts(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\n/**\n * Secure PRNG\n */\nexport function randomBytes(bytesLength = 32) {\n if (crypto.web) {\n return crypto.web.getRandomValues(new Uint8Array(bytesLength));\n }\n else if (crypto.node) {\n return new Uint8Array(crypto.node.randomBytes(bytesLength).buffer);\n }\n else {\n throw new Error(\"The environment doesn't have randomBytes function\");\n }\n}\n","import { assertHash, Hash, toBytes } from './utils.js';\n// HMAC (RFC 2104)\nclass HMAC extends Hash {\n constructor(hash, _key) {\n super();\n this.finished = false;\n this.destroyed = false;\n assertHash(hash);\n const key = toBytes(_key);\n this.iHash = hash.create();\n if (!(this.iHash instanceof Hash))\n throw new TypeError('Expected instance of class which extends utils.Hash');\n const blockLen = (this.blockLen = this.iHash.blockLen);\n this.outputLen = this.iHash.outputLen;\n const pad = new Uint8Array(blockLen);\n // blockLen can be bigger than outputLen\n pad.set(key.length > this.iHash.blockLen ? hash.create().update(key).digest() : key);\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 0x36;\n this.iHash.update(pad);\n // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n this.oHash = hash.create();\n // Undo internal XOR && apply outer XOR\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 0x36 ^ 0x5c;\n this.oHash.update(pad);\n pad.fill(0);\n }\n update(buf) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n this.iHash.update(buf);\n return this;\n }\n digestInto(out) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n if (!(out instanceof Uint8Array) || out.length !== this.outputLen)\n throw new Error('HMAC: Invalid output buffer');\n if (this.finished)\n throw new Error('digest() was already called');\n this.finished = true;\n this.iHash.digestInto(out);\n this.oHash.update(out);\n this.oHash.digestInto(out);\n this.destroy();\n }\n digest() {\n const out = new Uint8Array(this.oHash.outputLen);\n this.digestInto(out);\n return out;\n }\n _cloneInto(to) {\n // Create new instance without calling constructor since key already in state and we don't know it.\n to || (to = Object.create(Object.getPrototypeOf(this), {}));\n const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n to = to;\n to.finished = finished;\n to.destroyed = destroyed;\n to.blockLen = blockLen;\n to.outputLen = outputLen;\n to.oHash = oHash._cloneInto(to.oHash);\n to.iHash = iHash._cloneInto(to.iHash);\n return to;\n }\n destroy() {\n this.destroyed = true;\n this.oHash.destroy();\n this.iHash.destroy();\n }\n}\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n */\nexport const hmac = (hash, key, message) => new HMAC(hash, key).update(message).digest();\nhmac.create = (hash, key) => new HMAC(hash, key);\n","import { hmac } from './hmac.js';\n// prettier-ignore\nimport { createView, toBytes, assertNumber, assertHash, checkOpts, asyncLoop } from './utils.js';\n// Common prologue and epilogue for sync/async functions\nfunction pbkdf2Init(hash, _password, _salt, _opts) {\n assertHash(hash);\n const opts = checkOpts({ dkLen: 32, asyncTick: 10 }, _opts);\n const { c, dkLen, asyncTick } = opts;\n assertNumber(c);\n assertNumber(dkLen);\n assertNumber(asyncTick);\n if (c < 1)\n throw new Error('PBKDF2: iterations (c) should be >= 1');\n const password = toBytes(_password);\n const salt = toBytes(_salt);\n // DK = PBKDF2(PRF, Password, Salt, c, dkLen);\n const DK = new Uint8Array(dkLen);\n // U1 = PRF(Password, Salt + INT_32_BE(i))\n const PRF = hmac.create(hash, password);\n const PRFSalt = PRF._cloneInto().update(salt);\n return { c, dkLen, asyncTick, DK, PRF, PRFSalt };\n}\nfunction pbkdf2Output(PRF, PRFSalt, DK, prfW, u) {\n PRF.destroy();\n PRFSalt.destroy();\n if (prfW)\n prfW.destroy();\n u.fill(0);\n return DK;\n}\n/**\n * PBKDF2-HMAC: RFC 2898 key derivation function\n * @param hash - hash function that would be used e.g. sha256\n * @param password - password from which a derived key is generated\n * @param salt - cryptographic salt\n * @param opts - {c, dkLen} where c is work factor and dkLen is output message size\n */\nexport function pbkdf2(hash, password, salt, opts) {\n const { c, dkLen, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts);\n let prfW; // Working copy\n const arr = new Uint8Array(4);\n const view = createView(arr);\n const u = new Uint8Array(PRF.outputLen);\n // DK = T1 + T2 + ⋯ + Tdklen/hlen\n for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) {\n // Ti = F(Password, Salt, c, i)\n const Ti = DK.subarray(pos, pos + PRF.outputLen);\n view.setInt32(0, ti, false);\n // F(Password, Salt, c, i) = U1 ^ U2 ^ ⋯ ^ Uc\n // U1 = PRF(Password, Salt + INT_32_BE(i))\n (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u);\n Ti.set(u.subarray(0, Ti.length));\n for (let ui = 1; ui < c; ui++) {\n // Uc = PRF(Password, Uc−1)\n PRF._cloneInto(prfW).update(u).digestInto(u);\n for (let i = 0; i < Ti.length; i++)\n Ti[i] ^= u[i];\n }\n }\n return pbkdf2Output(PRF, PRFSalt, DK, prfW, u);\n}\nexport async function pbkdf2Async(hash, password, salt, opts) {\n const { c, dkLen, asyncTick, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts);\n let prfW; // Working copy\n const arr = new Uint8Array(4);\n const view = createView(arr);\n const u = new Uint8Array(PRF.outputLen);\n // DK = T1 + T2 + ⋯ + Tdklen/hlen\n for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) {\n // Ti = F(Password, Salt, c, i)\n const Ti = DK.subarray(pos, pos + PRF.outputLen);\n view.setInt32(0, ti, false);\n // F(Password, Salt, c, i) = U1 ^ U2 ^ ⋯ ^ Uc\n // U1 = PRF(Password, Salt + INT_32_BE(i))\n (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u);\n Ti.set(u.subarray(0, Ti.length));\n await asyncLoop(c - 1, asyncTick, (i) => {\n // Uc = PRF(Password, Uc−1)\n PRF._cloneInto(prfW).update(u).digestInto(u);\n for (let i = 0; i < Ti.length; i++)\n Ti[i] ^= u[i];\n });\n }\n return pbkdf2Output(PRF, PRFSalt, DK, prfW, u);\n}\n","import { Hash, createView, toBytes } from './utils.js';\n// Polyfill for Safari 14\nfunction setBigUint64(view, byteOffset, value, isLE) {\n if (typeof view.setBigUint64 === 'function')\n return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number((value >> _32n) & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n// Base SHA2 class (RFC 6234)\nexport class SHA2 extends Hash {\n constructor(blockLen, outputLen, padOffset, isLE) {\n super();\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.finished = false;\n this.length = 0;\n this.pos = 0;\n this.destroyed = false;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n const { view, buffer, blockLen, finished } = this;\n if (finished)\n throw new Error('digest() was already called');\n data = toBytes(data);\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen)\n this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n if (!(out instanceof Uint8Array) || out.length < this.outputLen)\n throw new Error('_Sha2: Invalid output buffer');\n if (this.finished)\n throw new Error('digest() was already called');\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n this.buffer.subarray(pos).fill(0);\n // we have less than padOffset left in buffer, so we cannot put length in current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++)\n buffer[i] = 0;\n // NOTE: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64bit of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n this.get().forEach((v, i) => oview.setUint32(4 * i, v, isLE));\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to) {\n to || (to = new this.constructor());\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.length = length;\n to.pos = pos;\n to.finished = finished;\n to.destroyed = destroyed;\n if (length % blockLen)\n to.buffer.set(buffer);\n return to;\n }\n}\n","import { SHA2 } from './_sha2.js';\nimport { rotr, wrapConstructor } from './utils.js';\n// Choice: a ? b : c\nconst Chi = (a, b, c) => (a & b) ^ (~a & c);\n// Majority function, true if any two inpust is true\nconst Maj = (a, b, c) => (a & b) ^ (a & c) ^ (b & c);\n// Round constants:\n// first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311)\n// prettier-ignore\nconst SHA256_K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n// Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):\n// prettier-ignore\nconst IV = new Uint32Array([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n]);\n// Temporary buffer, not used to store anything between runs\n// Named this way because it matches specification.\nconst SHA256_W = new Uint32Array(64);\nclass SHA256 extends SHA2 {\n constructor() {\n super(64, 32, 8, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n this.A = IV[0] | 0;\n this.B = IV[1] | 0;\n this.C = IV[2] | 0;\n this.D = IV[3] | 0;\n this.E = IV[4] | 0;\n this.F = IV[5] | 0;\n this.G = IV[6] | 0;\n this.H = IV[7] | 0;\n }\n get() {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n set(A, B, C, D, E, F, G, H) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4)\n SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = (sigma0 + Maj(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n roundClean() {\n SHA256_W.fill(0);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n this.buffer.fill(0);\n }\n}\n/**\n * SHA2-256 hash function\n * @param message - data that would be hashed\n */\nexport const sha256 = wrapConstructor(() => new SHA256());\n","const U32_MASK64 = BigInt(2 ** 32 - 1);\nconst _32n = BigInt(32);\nexport function fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\nexport function split(lst, le = false) {\n let Ah = new Uint32Array(lst.length);\n let Al = new Uint32Array(lst.length);\n for (let i = 0; i < lst.length; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nexport const toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nexport const shrSH = (h, l, s) => h >>> s;\nexport const shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nexport const rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\nexport const rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nexport const rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\nexport const rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nexport const rotr32H = (h, l) => l;\nexport const rotr32L = (h, l) => h;\n// Left rotate for Shift in [1, 32)\nexport const rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\nexport const rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nexport const rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\nexport const rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nexport function add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nexport const add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nexport const add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nexport const add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nexport const add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nexport const add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nexport const add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n","import { SHA2 } from './_sha2.js';\nimport * as u64 from './_u64.js';\nimport { wrapConstructor } from './utils.js';\n// Round contants (first 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409):\n// prettier-ignore\nconst [SHA512_Kh, SHA512_Kl] = u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n)));\n// Temporary buffer, not used to store anything between runs\nconst SHA512_W_H = new Uint32Array(80);\nconst SHA512_W_L = new Uint32Array(80);\nexport class SHA512 extends SHA2 {\n constructor() {\n super(128, 64, 16, false);\n // We cannot use array here since array allows indexing by variable which means optimizer/compiler cannot use registers.\n // Also looks cleaner and easier to verify with spec.\n // Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = 0x6a09e667 | 0;\n this.Al = 0xf3bcc908 | 0;\n this.Bh = 0xbb67ae85 | 0;\n this.Bl = 0x84caa73b | 0;\n this.Ch = 0x3c6ef372 | 0;\n this.Cl = 0xfe94f82b | 0;\n this.Dh = 0xa54ff53a | 0;\n this.Dl = 0x5f1d36f1 | 0;\n this.Eh = 0x510e527f | 0;\n this.El = 0xade682d1 | 0;\n this.Fh = 0x9b05688c | 0;\n this.Fl = 0x2b3e6c1f | 0;\n this.Gh = 0x1f83d9ab | 0;\n this.Gl = 0xfb41bd6b | 0;\n this.Hh = 0x5be0cd19 | 0;\n this.Hl = 0x137e2179 | 0;\n }\n // prettier-ignore\n get() {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl) {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n roundClean() {\n SHA512_W_H.fill(0);\n SHA512_W_L.fill(0);\n }\n destroy() {\n this.buffer.fill(0);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\nclass SHA512_256 extends SHA512 {\n constructor() {\n super();\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = 0x22312194 | 0;\n this.Al = 0xfc2bf72c | 0;\n this.Bh = 0x9f555fa3 | 0;\n this.Bl = 0xc84c64c2 | 0;\n this.Ch = 0x2393b86b | 0;\n this.Cl = 0x6f53b151 | 0;\n this.Dh = 0x96387719 | 0;\n this.Dl = 0x5940eabd | 0;\n this.Eh = 0x96283ee2 | 0;\n this.El = 0xa88effe3 | 0;\n this.Fh = 0xbe5e1e25 | 0;\n this.Fl = 0x53863992 | 0;\n this.Gh = 0x2b0199fc | 0;\n this.Gl = 0x2c85b8aa | 0;\n this.Hh = 0x0eb72ddc | 0;\n this.Hl = 0x81c52ca2 | 0;\n this.outputLen = 32;\n }\n}\nclass SHA384 extends SHA512 {\n constructor() {\n super();\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = 0xcbbb9d5d | 0;\n this.Al = 0xc1059ed8 | 0;\n this.Bh = 0x629a292a | 0;\n this.Bl = 0x367cd507 | 0;\n this.Ch = 0x9159015a | 0;\n this.Cl = 0x3070dd17 | 0;\n this.Dh = 0x152fecd8 | 0;\n this.Dl = 0xf70e5939 | 0;\n this.Eh = 0x67332667 | 0;\n this.El = 0xffc00b31 | 0;\n this.Fh = 0x8eb44a87 | 0;\n this.Fl = 0x68581511 | 0;\n this.Gh = 0xdb0c2e0d | 0;\n this.Gl = 0x64f98fa7 | 0;\n this.Hh = 0x47b5481d | 0;\n this.Hl = 0xbefa4fa4 | 0;\n this.outputLen = 48;\n }\n}\nexport const sha512 = wrapConstructor(() => new SHA512());\nexport const sha512_256 = wrapConstructor(() => new SHA512_256());\nexport const sha384 = wrapConstructor(() => new SHA384());\n","export const version = \"@ethersproject/crypto@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","/* Browser Crypto Shims */\nimport { hmac } from \"@noble/hashes/hmac\";\nimport { pbkdf2 } from \"@noble/hashes/pbkdf2\";\nimport { sha256 } from \"@noble/hashes/sha256\";\nimport { sha512 } from \"@noble/hashes/sha512\";\nimport { logger } from \"./logger.js\";\nfunction getGlobal() {\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n throw new Error('unable to locate global object');\n}\n;\nconst anyGlobal = getGlobal();\nlet crypto = anyGlobal.crypto || anyGlobal.msCrypto;\nexport function createHash(algo) {\n switch (algo) {\n case \"sha256\": return sha256.create();\n case \"sha512\": return sha512.create();\n }\n return logger.throwArgumentError(\"invalid hashing algorithm name\", \"algorithm\", algo);\n}\nexport function createHmac(_algo, key) {\n const algo = ({ sha256, sha512 }[_algo]);\n if (algo == null) {\n return logger.throwArgumentError(\"invalid hmac algorithm\", \"algorithm\", _algo);\n }\n return hmac.create(algo, key);\n}\nexport function pbkdf2Sync(password, salt, iterations, keylen, _algo) {\n const algo = ({ sha256, sha512 }[_algo]);\n if (algo == null) {\n return logger.throwArgumentError(\"invalid pbkdf2 algorithm\", \"algorithm\", _algo);\n }\n return pbkdf2(algo, password, salt, { c: iterations, dkLen: keylen });\n}\nexport function randomBytes(length) {\n if (crypto == null) {\n return logger.throwError(\"platform does not support secure random numbers\", \"UNSUPPORTED_OPERATION\", {\n operation: \"randomBytes\"\n });\n }\n if (length <= 0 || length > 1024 || (length % 1) || length != length) {\n logger.throwArgumentError(\"invalid length\", \"length\", length);\n }\n const result = new Uint8Array(length);\n crypto.getRandomValues(result);\n return result;\n}\n//# sourceMappingURL=crypto-browser.js.map","import { createHmac } from \"crypto\"; /*-browser*/\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nlet locked = false;\nconst _computeHmac = function (algorithm, key, data) {\n return \"0x\" + createHmac(algorithm, key).update(data).digest(\"hex\");\n};\nlet __computeHmac = _computeHmac;\nexport function computeHmac(algorithm, _key, _data) {\n const key = logger.getBytes(_key, \"key\");\n const data = logger.getBytes(_data, \"data\");\n return hexlify(__computeHmac(algorithm, key, data));\n}\ncomputeHmac._ = _computeHmac;\ncomputeHmac.lock = function () { locked = true; };\ncomputeHmac.register = function (func) {\n if (locked) {\n throw new Error(\"computeHmac is locked\");\n }\n __computeHmac = func;\n};\nObject.freeze(computeHmac);\n//# sourceMappingURL=hmac.js.map","import * as u64 from './_u64.js';\nimport { Hash, u32, toBytes, wrapConstructor, wrapConstructorWithOpts, assertNumber, } from './utils.js';\n// Various per round constants calculations\nconst [SHA3_PI, SHA3_ROTL, _SHA3_IOTA] = [[], [], []];\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _7n = BigInt(7);\nconst _256n = BigInt(256);\nconst _0x71n = BigInt(0x71);\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n // Pi\n [x, y] = [y, (2 * x + 3 * y) % 5];\n SHA3_PI.push(2 * (5 * y + x));\n // Rotational\n SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n // Iota\n let t = _0n;\n for (let j = 0; j < 7; j++) {\n R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n if (R & _2n)\n t ^= _1n << ((_1n << BigInt(j)) - _1n);\n }\n _SHA3_IOTA.push(t);\n}\nconst [SHA3_IOTA_H, SHA3_IOTA_L] = u64.split(_SHA3_IOTA, true);\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h, l, s) => s > 32 ? u64.rotlBH(h, l, s) : u64.rotlSH(h, l, s);\nconst rotlL = (h, l, s) => s > 32 ? u64.rotlBL(h, l, s) : u64.rotlSL(h, l, s);\n// Same as keccakf1600, but allows to skip some rounds\nexport function keccakP(s, rounds = 24) {\n const B = new Uint32Array(5 * 2);\n // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n for (let round = 24 - rounds; round < 24; round++) {\n // Theta θ\n for (let x = 0; x < 10; x++)\n B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n for (let x = 0; x < 10; x += 2) {\n const idx1 = (x + 8) % 10;\n const idx0 = (x + 2) % 10;\n const B0 = B[idx0];\n const B1 = B[idx0 + 1];\n const Th = rotlH(B0, B1, 1) ^ B[idx1];\n const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n for (let y = 0; y < 50; y += 10) {\n s[x + y] ^= Th;\n s[x + y + 1] ^= Tl;\n }\n }\n // Rho (ρ) and Pi (π)\n let curH = s[2];\n let curL = s[3];\n for (let t = 0; t < 24; t++) {\n const shift = SHA3_ROTL[t];\n const Th = rotlH(curH, curL, shift);\n const Tl = rotlL(curH, curL, shift);\n const PI = SHA3_PI[t];\n curH = s[PI];\n curL = s[PI + 1];\n s[PI] = Th;\n s[PI + 1] = Tl;\n }\n // Chi (χ)\n for (let y = 0; y < 50; y += 10) {\n for (let x = 0; x < 10; x++)\n B[x] = s[y + x];\n for (let x = 0; x < 10; x++)\n s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n }\n // Iota (ι)\n s[0] ^= SHA3_IOTA_H[round];\n s[1] ^= SHA3_IOTA_L[round];\n }\n B.fill(0);\n}\nexport class Keccak extends Hash {\n // NOTE: we accept arguments in bytes instead of bits here.\n constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24) {\n super();\n this.blockLen = blockLen;\n this.suffix = suffix;\n this.outputLen = outputLen;\n this.enableXOF = enableXOF;\n this.rounds = rounds;\n this.pos = 0;\n this.posOut = 0;\n this.finished = false;\n this.destroyed = false;\n // Can be passed from user as dkLen\n assertNumber(outputLen);\n // 1600 = 5x5 matrix of 64bit. 1600 bits === 200 bytes\n if (0 >= this.blockLen || this.blockLen >= 200)\n throw new Error('Sha3 supports only keccak-f1600 function');\n this.state = new Uint8Array(200);\n this.state32 = u32(this.state);\n }\n keccak() {\n keccakP(this.state32, this.rounds);\n this.posOut = 0;\n this.pos = 0;\n }\n update(data) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n if (this.finished)\n throw new Error('digest() was already called');\n const { blockLen, state } = this;\n data = toBytes(data);\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n for (let i = 0; i < take; i++)\n state[this.pos++] ^= data[pos++];\n if (this.pos === blockLen)\n this.keccak();\n }\n return this;\n }\n finish() {\n if (this.finished)\n return;\n this.finished = true;\n const { state, suffix, pos, blockLen } = this;\n // Do the padding\n state[pos] ^= suffix;\n if ((suffix & 0x80) !== 0 && pos === blockLen - 1)\n this.keccak();\n state[blockLen - 1] ^= 0x80;\n this.keccak();\n }\n writeInto(out) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n if (!(out instanceof Uint8Array))\n throw new Error('Keccak: invalid output buffer');\n this.finish();\n for (let pos = 0, len = out.length; pos < len;) {\n if (this.posOut >= this.blockLen)\n this.keccak();\n const take = Math.min(this.blockLen - this.posOut, len - pos);\n out.set(this.state.subarray(this.posOut, this.posOut + take), pos);\n this.posOut += take;\n pos += take;\n }\n return out;\n }\n xofInto(out) {\n // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n if (!this.enableXOF)\n throw new Error('XOF is not possible for this instance');\n return this.writeInto(out);\n }\n xof(bytes) {\n assertNumber(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out) {\n if (out.length < this.outputLen)\n throw new Error('Keccak: invalid output buffer');\n if (this.finished)\n throw new Error('digest() was already called');\n this.finish();\n this.writeInto(out);\n this.destroy();\n return out;\n }\n digest() {\n return this.digestInto(new Uint8Array(this.outputLen));\n }\n destroy() {\n this.destroyed = true;\n this.state.fill(0);\n }\n _cloneInto(to) {\n const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n to || (to = new Keccak(blockLen, suffix, outputLen, enableXOF, rounds));\n to.state32.set(this.state32);\n to.pos = this.pos;\n to.posOut = this.posOut;\n to.finished = this.finished;\n to.rounds = rounds;\n // Suffix can change in cSHAKE\n to.suffix = suffix;\n to.outputLen = outputLen;\n to.enableXOF = enableXOF;\n to.destroyed = this.destroyed;\n return to;\n }\n}\nconst gen = (suffix, blockLen, outputLen) => wrapConstructor(() => new Keccak(blockLen, suffix, outputLen));\nexport const sha3_224 = gen(0x06, 144, 224 / 8);\n/**\n * SHA3-256 hash function\n * @param message - that would be hashed\n */\nexport const sha3_256 = gen(0x06, 136, 256 / 8);\nexport const sha3_384 = gen(0x06, 104, 384 / 8);\nexport const sha3_512 = gen(0x06, 72, 512 / 8);\nexport const keccak_224 = gen(0x01, 144, 224 / 8);\n/**\n * keccak-256 hash function. Different from SHA3-256.\n * @param message - that would be hashed\n */\nexport const keccak_256 = gen(0x01, 136, 256 / 8);\nexport const keccak_384 = gen(0x01, 104, 384 / 8);\nexport const keccak_512 = gen(0x01, 72, 512 / 8);\nconst genShake = (suffix, blockLen, outputLen) => wrapConstructorWithOpts((opts = {}) => new Keccak(blockLen, suffix, opts.dkLen !== undefined ? opts.dkLen : outputLen, true));\nexport const shake128 = genShake(0x1f, 168, 128 / 8);\nexport const shake256 = genShake(0x1f, 136, 256 / 8);\n","import { keccak_256 } from \"@noble/hashes/sha3\";\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nlet locked = false;\nconst _keccak256 = function (data) {\n return keccak_256(data);\n};\nlet __keccak256 = _keccak256;\nexport function keccak256(_data) {\n const data = logger.getBytes(_data, \"data\");\n return hexlify(__keccak256(data));\n}\nkeccak256._ = _keccak256;\nkeccak256.lock = function () { locked = true; };\nkeccak256.register = function (func) {\n if (locked) {\n throw new TypeError(\"keccak256 is locked\");\n }\n __keccak256 = func;\n};\nObject.freeze(keccak256);\n//# sourceMappingURL=keccak.js.map","import { SHA2 } from './_sha2.js';\nimport { wrapConstructor } from './utils.js';\n// https://homes.esat.kuleuven.be/~bosselae/ripemd160.html\n// https://homes.esat.kuleuven.be/~bosselae/ripemd160/pdf/AB-9601/AB-9601.pdf\nconst Rho = new Uint8Array([7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8]);\nconst Id = Uint8Array.from({ length: 16 }, (_, i) => i);\nconst Pi = Id.map((i) => (9 * i + 5) % 16);\nlet idxL = [Id];\nlet idxR = [Pi];\nfor (let i = 0; i < 4; i++)\n for (let j of [idxL, idxR])\n j.push(j[i].map((k) => Rho[k]));\nconst shifts = [\n [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8],\n [12, 13, 11, 15, 6, 9, 9, 7, 12, 15, 11, 13, 7, 8, 7, 7],\n [13, 15, 14, 11, 7, 7, 6, 8, 13, 14, 13, 12, 5, 5, 6, 9],\n [14, 11, 12, 14, 8, 6, 5, 5, 15, 12, 15, 14, 9, 9, 8, 6],\n [15, 12, 13, 13, 9, 5, 8, 6, 14, 11, 12, 11, 8, 6, 5, 5],\n].map((i) => new Uint8Array(i));\nconst shiftsL = idxL.map((idx, i) => idx.map((j) => shifts[i][j]));\nconst shiftsR = idxR.map((idx, i) => idx.map((j) => shifts[i][j]));\nconst Kl = new Uint32Array([0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]);\nconst Kr = new Uint32Array([0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]);\n// The rotate left (circular left shift) operation for uint32\nconst rotl = (word, shift) => (word << shift) | (word >>> (32 - shift));\n// It's called f() in spec.\nfunction f(group, x, y, z) {\n if (group === 0)\n return x ^ y ^ z;\n else if (group === 1)\n return (x & y) | (~x & z);\n else if (group === 2)\n return (x | ~y) ^ z;\n else if (group === 3)\n return (x & z) | (y & ~z);\n else\n return x ^ (y | ~z);\n}\n// Temporary buffer, not used to store anything between runs\nconst BUF = new Uint32Array(16);\nexport class RIPEMD160 extends SHA2 {\n constructor() {\n super(64, 20, 8, true);\n this.h0 = 0x67452301 | 0;\n this.h1 = 0xefcdab89 | 0;\n this.h2 = 0x98badcfe | 0;\n this.h3 = 0x10325476 | 0;\n this.h4 = 0xc3d2e1f0 | 0;\n }\n get() {\n const { h0, h1, h2, h3, h4 } = this;\n return [h0, h1, h2, h3, h4];\n }\n set(h0, h1, h2, h3, h4) {\n this.h0 = h0 | 0;\n this.h1 = h1 | 0;\n this.h2 = h2 | 0;\n this.h3 = h3 | 0;\n this.h4 = h4 | 0;\n }\n process(view, offset) {\n for (let i = 0; i < 16; i++, offset += 4)\n BUF[i] = view.getUint32(offset, true);\n // prettier-ignore\n let al = this.h0 | 0, ar = al, bl = this.h1 | 0, br = bl, cl = this.h2 | 0, cr = cl, dl = this.h3 | 0, dr = dl, el = this.h4 | 0, er = el;\n // Instead of iterating 0 to 80, we split it into 5 groups\n // And use the groups in constants, functions, etc. Much simpler\n for (let group = 0; group < 5; group++) {\n const rGroup = 4 - group;\n const hbl = Kl[group], hbr = Kr[group]; // prettier-ignore\n const rl = idxL[group], rr = idxR[group]; // prettier-ignore\n const sl = shiftsL[group], sr = shiftsR[group]; // prettier-ignore\n for (let i = 0; i < 16; i++) {\n const tl = (rotl(al + f(group, bl, cl, dl) + BUF[rl[i]] + hbl, sl[i]) + el) | 0;\n al = el, el = dl, dl = rotl(cl, 10) | 0, cl = bl, bl = tl; // prettier-ignore\n }\n // 2 loops are 10% faster\n for (let i = 0; i < 16; i++) {\n const tr = (rotl(ar + f(rGroup, br, cr, dr) + BUF[rr[i]] + hbr, sr[i]) + er) | 0;\n ar = er, er = dr, dr = rotl(cr, 10) | 0, cr = br, br = tr; // prettier-ignore\n }\n }\n // Add the compressed chunk to the current hash value\n this.set((this.h1 + cl + dr) | 0, (this.h2 + dl + er) | 0, (this.h3 + el + ar) | 0, (this.h4 + al + br) | 0, (this.h0 + bl + cr) | 0);\n }\n roundClean() {\n BUF.fill(0);\n }\n destroy() {\n this.destroyed = true;\n this.buffer.fill(0);\n this.set(0, 0, 0, 0, 0);\n }\n}\n/**\n * RIPEMD-160 - a hash function from 1990s.\n * @param message - msg that would be hashed\n */\nexport const ripemd160 = wrapConstructor(() => new RIPEMD160());\n","import { ripemd160 as noble_ripemd160 } from \"@noble/hashes/ripemd160\";\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nlet locked = false;\nconst _ripemd160 = function (data) {\n return noble_ripemd160(data);\n};\nlet __ripemd160 = _ripemd160;\nexport function ripemd160(_data) {\n const data = logger.getBytes(_data, \"data\");\n return hexlify(__ripemd160(data));\n}\nripemd160._ = _ripemd160;\nripemd160.lock = function () { locked = true; };\nripemd160.register = function (func) {\n if (locked) {\n throw new TypeError(\"ripemd160 is locked\");\n }\n __ripemd160 = func;\n};\nObject.freeze(ripemd160);\n//# sourceMappingURL=ripemd160.js.map","import { pbkdf2Sync } from \"crypto\"; /*-browser*/\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nlet locked = false;\nconst _pbkdf2 = function (password, salt, iterations, keylen, algo) {\n return pbkdf2Sync(password, salt, iterations, keylen, algo);\n};\nlet __pbkdf2 = _pbkdf2;\nexport function pbkdf2(_password, _salt, iterations, keylen, algo) {\n const password = logger.getBytes(_password, \"password\");\n const salt = logger.getBytes(_salt, \"salt\");\n return hexlify(__pbkdf2(password, salt, iterations, keylen, algo));\n}\npbkdf2._ = _pbkdf2;\npbkdf2.lock = function () { locked = true; };\npbkdf2.register = function (func) {\n if (locked) {\n throw new Error(\"pbkdf2 is locked\");\n }\n __pbkdf2 = func;\n};\nObject.freeze(pbkdf2);\n//# sourceMappingURL=pbkdf2.js.map","import { randomBytes as crypto_random } from \"crypto\"; /*-browser*/\nlet locked = false;\nconst _randomBytes = function (length) {\n return new Uint8Array(crypto_random(length));\n};\nlet __randomBytes = _randomBytes;\nexport function randomBytes(length) {\n return __randomBytes(length);\n}\nrandomBytes._ = _randomBytes;\nrandomBytes.lock = function () { locked = true; };\nrandomBytes.register = function (func) {\n if (locked) {\n throw new Error(\"random is locked\");\n }\n __randomBytes = func;\n};\nObject.freeze(randomBytes);\n//# sourceMappingURL=random.js.map","import { sha256 } from './sha256.js';\nimport { pbkdf2 } from './pbkdf2.js';\nimport { assertNumber, asyncLoop, checkOpts, u32 } from './utils.js';\n// RFC 7914 Scrypt KDF\n// Left rotate for uint32\nconst rotl = (a, b) => (a << b) | (a >>> (32 - b));\n// The main Scrypt loop: uses Salsa extensively.\n// Six versions of the function were tried, this is the fastest one.\n// prettier-ignore\nfunction XorAndSalsa(prev, pi, input, ii, out, oi) {\n // Based on https://cr.yp.to/salsa20.html\n // Xor blocks\n let y00 = prev[pi++] ^ input[ii++], y01 = prev[pi++] ^ input[ii++];\n let y02 = prev[pi++] ^ input[ii++], y03 = prev[pi++] ^ input[ii++];\n let y04 = prev[pi++] ^ input[ii++], y05 = prev[pi++] ^ input[ii++];\n let y06 = prev[pi++] ^ input[ii++], y07 = prev[pi++] ^ input[ii++];\n let y08 = prev[pi++] ^ input[ii++], y09 = prev[pi++] ^ input[ii++];\n let y10 = prev[pi++] ^ input[ii++], y11 = prev[pi++] ^ input[ii++];\n let y12 = prev[pi++] ^ input[ii++], y13 = prev[pi++] ^ input[ii++];\n let y14 = prev[pi++] ^ input[ii++], y15 = prev[pi++] ^ input[ii++];\n // Save state to temporary variables (salsa)\n let x00 = y00, x01 = y01, x02 = y02, x03 = y03, x04 = y04, x05 = y05, x06 = y06, x07 = y07, x08 = y08, x09 = y09, x10 = y10, x11 = y11, x12 = y12, x13 = y13, x14 = y14, x15 = y15;\n // Main loop (salsa)\n for (let i = 0; i < 8; i += 2) {\n x04 ^= rotl(x00 + x12 | 0, 7);\n x08 ^= rotl(x04 + x00 | 0, 9);\n x12 ^= rotl(x08 + x04 | 0, 13);\n x00 ^= rotl(x12 + x08 | 0, 18);\n x09 ^= rotl(x05 + x01 | 0, 7);\n x13 ^= rotl(x09 + x05 | 0, 9);\n x01 ^= rotl(x13 + x09 | 0, 13);\n x05 ^= rotl(x01 + x13 | 0, 18);\n x14 ^= rotl(x10 + x06 | 0, 7);\n x02 ^= rotl(x14 + x10 | 0, 9);\n x06 ^= rotl(x02 + x14 | 0, 13);\n x10 ^= rotl(x06 + x02 | 0, 18);\n x03 ^= rotl(x15 + x11 | 0, 7);\n x07 ^= rotl(x03 + x15 | 0, 9);\n x11 ^= rotl(x07 + x03 | 0, 13);\n x15 ^= rotl(x11 + x07 | 0, 18);\n x01 ^= rotl(x00 + x03 | 0, 7);\n x02 ^= rotl(x01 + x00 | 0, 9);\n x03 ^= rotl(x02 + x01 | 0, 13);\n x00 ^= rotl(x03 + x02 | 0, 18);\n x06 ^= rotl(x05 + x04 | 0, 7);\n x07 ^= rotl(x06 + x05 | 0, 9);\n x04 ^= rotl(x07 + x06 | 0, 13);\n x05 ^= rotl(x04 + x07 | 0, 18);\n x11 ^= rotl(x10 + x09 | 0, 7);\n x08 ^= rotl(x11 + x10 | 0, 9);\n x09 ^= rotl(x08 + x11 | 0, 13);\n x10 ^= rotl(x09 + x08 | 0, 18);\n x12 ^= rotl(x15 + x14 | 0, 7);\n x13 ^= rotl(x12 + x15 | 0, 9);\n x14 ^= rotl(x13 + x12 | 0, 13);\n x15 ^= rotl(x14 + x13 | 0, 18);\n }\n // Write output (salsa)\n out[oi++] = (y00 + x00) | 0;\n out[oi++] = (y01 + x01) | 0;\n out[oi++] = (y02 + x02) | 0;\n out[oi++] = (y03 + x03) | 0;\n out[oi++] = (y04 + x04) | 0;\n out[oi++] = (y05 + x05) | 0;\n out[oi++] = (y06 + x06) | 0;\n out[oi++] = (y07 + x07) | 0;\n out[oi++] = (y08 + x08) | 0;\n out[oi++] = (y09 + x09) | 0;\n out[oi++] = (y10 + x10) | 0;\n out[oi++] = (y11 + x11) | 0;\n out[oi++] = (y12 + x12) | 0;\n out[oi++] = (y13 + x13) | 0;\n out[oi++] = (y14 + x14) | 0;\n out[oi++] = (y15 + x15) | 0;\n}\nfunction BlockMix(input, ii, out, oi, r) {\n // The block B is r 128-byte chunks (which is equivalent of 2r 64-byte chunks)\n let head = oi + 0;\n let tail = oi + 16 * r;\n for (let i = 0; i < 16; i++)\n out[tail + i] = input[ii + (2 * r - 1) * 16 + i]; // X ← B[2r−1]\n for (let i = 0; i < r; i++, head += 16, ii += 16) {\n // We write odd & even Yi at same time. Even: 0bXXXXX0 Odd: 0bXXXXX1\n XorAndSalsa(out, tail, input, ii, out, head); // head[i] = Salsa(blockIn[2*i] ^ tail[i-1])\n if (i > 0)\n tail += 16; // First iteration overwrites tmp value in tail\n XorAndSalsa(out, head, input, (ii += 16), out, tail); // tail[i] = Salsa(blockIn[2*i+1] ^ head[i])\n }\n}\n// Common prologue and epilogue for sync/async functions\nfunction scryptInit(password, salt, _opts) {\n // Maxmem - 1GB+1KB by default\n const opts = checkOpts({\n dkLen: 32,\n asyncTick: 10,\n maxmem: 1024 ** 3 + 1024,\n }, _opts);\n const { N, r, p, dkLen, asyncTick, maxmem, onProgress } = opts;\n assertNumber(N);\n assertNumber(r);\n assertNumber(p);\n assertNumber(dkLen);\n assertNumber(asyncTick);\n assertNumber(maxmem);\n if (onProgress !== undefined && typeof onProgress !== 'function')\n throw new Error('progressCb should be function');\n const blockSize = 128 * r;\n const blockSize32 = blockSize / 4;\n if (N <= 1 || (N & (N - 1)) !== 0 || N >= 2 ** (blockSize / 8) || N > 2 ** 32) {\n // NOTE: we limit N to be less than 2**32 because of 32 bit variant of Integrify function\n // There is no JS engines that allows alocate more than 4GB per single Uint8Array for now, but can change in future.\n throw new Error('Scrypt: N must be larger than 1, a power of 2, less than 2^(128 * r / 8) and less than 2^32');\n }\n if (p < 0 || p > ((2 ** 32 - 1) * 32) / blockSize) {\n throw new Error('Scrypt: p must be a positive integer less than or equal to ((2^32 - 1) * 32) / (128 * r)');\n }\n if (dkLen < 0 || dkLen > (2 ** 32 - 1) * 32) {\n throw new Error('Scrypt: dkLen should be positive integer less than or equal to (2^32 - 1) * 32');\n }\n const memUsed = blockSize * (N + p);\n if (memUsed > maxmem) {\n throw new Error(`Scrypt: parameters too large, ${memUsed} (128 * r * (N + p)) > ${maxmem} (maxmem)`);\n }\n // [B0...Bp−1] ← PBKDF2HMAC-SHA256(Passphrase, Salt, 1, blockSize*ParallelizationFactor)\n // Since it has only one iteration there is no reason to use async variant\n const B = pbkdf2(sha256, password, salt, { c: 1, dkLen: blockSize * p });\n const B32 = u32(B);\n // Re-used between parallel iterations. Array(iterations) of B\n const V = u32(new Uint8Array(blockSize * N));\n const tmp = u32(new Uint8Array(blockSize));\n let blockMixCb = () => { };\n if (onProgress) {\n const totalBlockMix = 2 * N * p;\n // Invoke callback if progress changes from 10.01 to 10.02\n // Allows to draw smooth progress bar on up to 8K screen\n const callbackPer = Math.max(Math.floor(totalBlockMix / 10000), 1);\n let blockMixCnt = 0;\n blockMixCb = () => {\n blockMixCnt++;\n if (onProgress && (!(blockMixCnt % callbackPer) || blockMixCnt === totalBlockMix))\n onProgress(blockMixCnt / totalBlockMix);\n };\n }\n return { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb, asyncTick };\n}\nfunction scryptOutput(password, dkLen, B, V, tmp) {\n const res = pbkdf2(sha256, password, B, { c: 1, dkLen });\n B.fill(0);\n V.fill(0);\n tmp.fill(0);\n return res;\n}\n/**\n * Scrypt KDF from RFC 7914.\n * @param password - pass\n * @param salt - salt\n * @param opts - parameters\n * - `N` is cpu/mem work factor (power of 2 e.g. 2**18)\n * - `r` is block size (8 is common), fine-tunes sequential memory read size and performance\n * - `p` is parallelization factor (1 is common)\n * - `dkLen` is output key length in bytes e.g. 32.\n * - `asyncTick` - (default: 10) max time in ms for which async function can block execution\n * - `maxmem` - (default: `1024 ** 3 + 1024` aka 1GB+1KB). A limit that the app could use for scrypt\n * - `onProgress` - callback function that would be executed for progress report\n * @returns Derived key\n */\nexport function scrypt(password, salt, opts) {\n const { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb } = scryptInit(password, salt, opts);\n for (let pi = 0; pi < p; pi++) {\n const Pi = blockSize32 * pi;\n for (let i = 0; i < blockSize32; i++)\n V[i] = B32[Pi + i]; // V[0] = B[i]\n for (let i = 0, pos = 0; i < N - 1; i++) {\n BlockMix(V, pos, V, (pos += blockSize32), r); // V[i] = BlockMix(V[i-1]);\n blockMixCb();\n }\n BlockMix(V, (N - 1) * blockSize32, B32, Pi, r); // Process last element\n blockMixCb();\n for (let i = 0; i < N; i++) {\n // First u32 of the last 64-byte block (u32 is LE)\n const j = B32[Pi + blockSize32 - 16] % N; // j = Integrify(X) % iterations\n for (let k = 0; k < blockSize32; k++)\n tmp[k] = B32[Pi + k] ^ V[j * blockSize32 + k]; // tmp = B ^ V[j]\n BlockMix(tmp, 0, B32, Pi, r); // B = BlockMix(B ^ V[j])\n blockMixCb();\n }\n }\n return scryptOutput(password, dkLen, B, V, tmp);\n}\n/**\n * Scrypt KDF from RFC 7914.\n */\nexport async function scryptAsync(password, salt, opts) {\n const { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb, asyncTick } = scryptInit(password, salt, opts);\n for (let pi = 0; pi < p; pi++) {\n const Pi = blockSize32 * pi;\n for (let i = 0; i < blockSize32; i++)\n V[i] = B32[Pi + i]; // V[0] = B[i]\n let pos = 0;\n await asyncLoop(N - 1, asyncTick, (i) => {\n BlockMix(V, pos, V, (pos += blockSize32), r); // V[i] = BlockMix(V[i-1]);\n blockMixCb();\n });\n BlockMix(V, (N - 1) * blockSize32, B32, Pi, r); // Process last element\n blockMixCb();\n await asyncLoop(N, asyncTick, (i) => {\n // First u32 of the last 64-byte block (u32 is LE)\n const j = B32[Pi + blockSize32 - 16] % N; // j = Integrify(X) % iterations\n for (let k = 0; k < blockSize32; k++)\n tmp[k] = B32[Pi + k] ^ V[j * blockSize32 + k]; // tmp = B ^ V[j]\n BlockMix(tmp, 0, B32, Pi, r); // B = BlockMix(B ^ V[j])\n blockMixCb();\n });\n }\n return scryptOutput(password, dkLen, B, V, tmp);\n}\n","import { scrypt as _nobleSync, scryptAsync as _nobleAsync } from \"@noble/hashes/scrypt\";\nimport { hexlify as H } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nlet lockedSync = false, lockedAsync = false;\nconst _scryptAsync = async function (passwd, salt, N, r, p, dkLen, onProgress) {\n return await _nobleAsync(passwd, salt, { N, r, p, dkLen, onProgress });\n};\nconst _scryptSync = function (passwd, salt, N, r, p, dkLen) {\n return _nobleSync(passwd, salt, { N, r, p, dkLen });\n};\nlet __scryptAsync = _scryptAsync;\nlet __scryptSync = _scryptSync;\nexport async function scrypt(_passwd, _salt, N, r, p, dkLen, progress) {\n const passwd = logger.getBytes(_passwd, \"passwd\");\n const salt = logger.getBytes(_salt, \"salt\");\n return H(await __scryptAsync(passwd, salt, N, r, p, dkLen, progress));\n}\nscrypt._ = _scryptAsync;\nscrypt.lock = function () { lockedAsync = true; };\nscrypt.register = function (func) {\n if (lockedAsync) {\n throw new Error(\"scrypt is locked\");\n }\n __scryptAsync = func;\n};\nObject.freeze(scrypt);\nexport function scryptSync(_passwd, _salt, N, r, p, dkLen) {\n const passwd = logger.getBytes(_passwd, \"passwd\");\n const salt = logger.getBytes(_salt, \"salt\");\n return H(__scryptSync(passwd, salt, N, r, p, dkLen));\n}\nscryptSync._ = _scryptSync;\nscryptSync.lock = function () { lockedSync = true; };\nscryptSync.register = function (func) {\n if (lockedSync) {\n throw new Error(\"scryptSync is locked\");\n }\n __scryptSync = func;\n};\nObject.freeze(scryptSync);\n//# sourceMappingURL=scrypt.js.map","import { createHash } from \"crypto\"; /*-browser*/\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nconst _sha256 = function (data) {\n return createHash(\"sha256\").update(data).digest();\n};\nconst _sha512 = function (data) {\n return createHash(\"sha512\").update(data).digest();\n};\nlet __sha256 = _sha256;\nlet __sha512 = _sha512;\nlet locked256 = false, locked512 = false;\nexport function sha256(_data) {\n const data = logger.getBytes(_data, \"data\");\n return hexlify(__sha256(data));\n}\nsha256._ = _sha256;\nsha256.lock = function () { locked256 = true; };\nsha256.register = function (func) {\n if (locked256) {\n throw new Error(\"sha256 is locked\");\n }\n __sha256 = func;\n};\nObject.freeze(sha256);\nexport function sha512(_data) {\n const data = logger.getBytes(_data, \"data\");\n return hexlify(__sha512(data));\n}\nsha512._ = _sha512;\nsha512.lock = function () { locked512 = true; };\nsha512.register = function (func) {\n if (locked512) {\n throw new Error(\"sha512 is locked\");\n }\n __sha512 = func;\n};\nObject.freeze(sha256);\n//# sourceMappingURL=sha2.js.map","// We import all these so we can export lock()\nimport { computeHmac } from \"./hmac.js\";\nimport { keccak256 } from \"./keccak.js\";\nimport { ripemd160 } from \"./ripemd160.js\";\nimport { pbkdf2 } from \"./pbkdf2.js\";\nimport { randomBytes } from \"./random.js\";\nimport { scrypt, scryptSync } from \"./scrypt.js\";\nimport { sha256, sha512 } from \"./sha2.js\";\nexport { computeHmac, randomBytes, keccak256, ripemd160, sha256, sha512, pbkdf2, scrypt, scryptSync };\nexport function lock() {\n computeHmac.lock();\n keccak256.lock();\n pbkdf2.lock();\n randomBytes.lock();\n ripemd160.lock();\n scrypt.lock();\n scryptSync.lock();\n sha256.lock();\n sha512.lock();\n}\n//# sourceMappingURL=index.js.map","export const version = \"@ethersproject/address@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { arrayify } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { logger } from \"./logger.js\";\nconst BN_0 = BigInt(0);\nconst BN_36 = BigInt(36);\nfunction getChecksumAddress(address) {\n // if (!isHexString(address, 20)) {\n // logger.throwArgumentError(\"invalid address\", \"address\", address);\n // }\n address = address.toLowerCase();\n const chars = address.substring(2).split(\"\");\n const expanded = new Uint8Array(40);\n for (let i = 0; i < 40; i++) {\n expanded[i] = chars[i].charCodeAt(0);\n }\n const hashed = arrayify(keccak256(expanded));\n for (let i = 0; i < 40; i += 2) {\n if ((hashed[i >> 1] >> 4) >= 8) {\n chars[i] = chars[i].toUpperCase();\n }\n if ((hashed[i >> 1] & 0x0f) >= 8) {\n chars[i + 1] = chars[i + 1].toUpperCase();\n }\n }\n return \"0x\" + chars.join(\"\");\n}\n// See: https://en.wikipedia.org/wiki/International_Bank_Account_Number\n// Create lookup table\nconst ibanLookup = {};\nfor (let i = 0; i < 10; i++) {\n ibanLookup[String(i)] = String(i);\n}\nfor (let i = 0; i < 26; i++) {\n ibanLookup[String.fromCharCode(65 + i)] = String(10 + i);\n}\n// How many decimal digits can we process? (for 64-bit float, this is 15)\n// i.e. Math.floor(Math.log10(Number.MAX_SAFE_INTEGER));\nconst safeDigits = 15;\nfunction ibanChecksum(address) {\n address = address.toUpperCase();\n address = address.substring(4) + address.substring(0, 2) + \"00\";\n let expanded = address.split(\"\").map((c) => { return ibanLookup[c]; }).join(\"\");\n // Javascript can handle integers safely up to 15 (decimal) digits\n while (expanded.length >= safeDigits) {\n let block = expanded.substring(0, safeDigits);\n expanded = parseInt(block, 10) % 97 + expanded.substring(block.length);\n }\n let checksum = String(98 - (parseInt(expanded, 10) % 97));\n while (checksum.length < 2) {\n checksum = \"0\" + checksum;\n }\n return checksum;\n}\n;\nconst Base36 = (function () {\n ;\n const result = {};\n for (let i = 0; i < 36; i++) {\n const key = \"0123456789abcdefghijklmnopqrstuvwxyz\"[i];\n result[key] = BigInt(i);\n }\n return result;\n})();\nfunction fromBase36(value) {\n value = value.toLowerCase();\n let result = BN_0;\n for (let i = 0; i < value.length; i++) {\n result = result * BN_36 + Base36[value[i]];\n }\n return result;\n}\nexport function getAddress(address) {\n if (typeof (address) !== \"string\") {\n logger.throwArgumentError(\"invalid address\", \"address\", address);\n }\n if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) {\n // Missing the 0x prefix\n if (address.substring(0, 2) !== \"0x\") {\n address = \"0x\" + address;\n }\n const result = getChecksumAddress(address);\n // It is a checksummed address with a bad checksum\n if (address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) && result !== address) {\n logger.throwArgumentError(\"bad address checksum\", \"address\", address);\n }\n return result;\n }\n // Maybe ICAP? (we only support direct mode)\n if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) {\n // It is an ICAP address with a bad checksum\n if (address.substring(2, 4) !== ibanChecksum(address)) {\n logger.throwArgumentError(\"bad icap checksum\", \"address\", address);\n }\n let result = fromBase36(address.substring(4)).toString(16);\n while (result.length < 40) {\n result = \"0\" + result;\n }\n return getChecksumAddress(\"0x\" + result);\n }\n return logger.throwArgumentError(\"invalid address\", \"address\", address);\n}\nexport function getIcapAddress(address) {\n //let base36 = _base16To36(getAddress(address).substring(2)).toUpperCase();\n let base36 = BigInt(getAddress(address)).toString(36).toUpperCase();\n while (base36.length < 30) {\n base36 = \"0\" + base36;\n }\n return \"XE\" + ibanChecksum(\"XE00\" + base36) + base36;\n}\n//# sourceMappingURL=address.js.map","export const version = \"@ethersproject/rlp@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","//See: https://github.com/ethereum/wiki/wiki/RLP\nimport { logger } from \"./logger.js\";\nfunction arrayifyInteger(value) {\n const result = [];\n while (value) {\n result.unshift(value & 0xff);\n value >>= 8;\n }\n return result;\n}\nfunction _encode(object) {\n if (Array.isArray(object)) {\n let payload = [];\n object.forEach(function (child) {\n payload = payload.concat(_encode(child));\n });\n if (payload.length <= 55) {\n payload.unshift(0xc0 + payload.length);\n return payload;\n }\n const length = arrayifyInteger(payload.length);\n length.unshift(0xf7 + length.length);\n return length.concat(payload);\n }\n const data = Array.prototype.slice.call(logger.getBytes(object, \"object\"));\n if (data.length === 1 && data[0] <= 0x7f) {\n return data;\n }\n else if (data.length <= 55) {\n data.unshift(0x80 + data.length);\n return data;\n }\n const length = arrayifyInteger(data.length);\n length.unshift(0xb7 + length.length);\n return length.concat(data);\n}\nconst nibbles = \"0123456789abcdef\";\nexport function encodeRlp(object) {\n let result = \"0x\";\n for (const v of _encode(object)) {\n result += nibbles[v >> 4];\n result += nibbles[v & 0xf];\n }\n return result;\n}\n//# sourceMappingURL=encode.js.map","//See: https://github.com/ethereum/wiki/wiki/RLP\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nfunction hexlifyByte(value) {\n let result = value.toString(16);\n while (result.length < 2) {\n result = \"0\" + result;\n }\n return \"0x\" + result;\n}\nfunction unarrayifyInteger(data, offset, length) {\n let result = 0;\n for (let i = 0; i < length; i++) {\n result = (result * 256) + data[offset + i];\n }\n return result;\n}\nfunction _decodeChildren(data, offset, childOffset, length) {\n const result = [];\n while (childOffset < offset + 1 + length) {\n const decoded = _decode(data, childOffset);\n result.push(decoded.result);\n childOffset += decoded.consumed;\n if (childOffset > offset + 1 + length) {\n logger.throwError(\"child data too short\", \"BUFFER_OVERRUN\", {\n buffer: data, length, offset\n });\n }\n }\n return { consumed: (1 + length), result: result };\n}\n// returns { consumed: number, result: Object }\nfunction _decode(data, offset) {\n if (data.length === 0) {\n logger.throwError(\"data too short\", \"BUFFER_OVERRUN\", {\n buffer: data, length: 0, offset: 1\n });\n }\n const checkOffset = (offset) => {\n if (offset > data.length) {\n logger.throwError(\"data short segment too short\", \"BUFFER_OVERRUN\", {\n buffer: data, length: data.length, offset\n });\n }\n };\n // Array with extra length prefix\n if (data[offset] >= 0xf8) {\n const lengthLength = data[offset] - 0xf7;\n checkOffset(offset + 1 + lengthLength);\n const length = unarrayifyInteger(data, offset + 1, lengthLength);\n checkOffset(offset + 1 + lengthLength + length);\n return _decodeChildren(data, offset, offset + 1 + lengthLength, lengthLength + length);\n }\n else if (data[offset] >= 0xc0) {\n const length = data[offset] - 0xc0;\n checkOffset(offset + 1 + length);\n return _decodeChildren(data, offset, offset + 1, length);\n }\n else if (data[offset] >= 0xb8) {\n const lengthLength = data[offset] - 0xb7;\n checkOffset(offset + 1 + lengthLength);\n const length = unarrayifyInteger(data, offset + 1, lengthLength);\n checkOffset(offset + 1 + lengthLength + length);\n const result = hexlify(data.slice(offset + 1 + lengthLength, offset + 1 + lengthLength + length));\n return { consumed: (1 + lengthLength + length), result: result };\n }\n else if (data[offset] >= 0x80) {\n const length = data[offset] - 0x80;\n checkOffset(offset + 1 + length);\n const result = hexlify(data.slice(offset + 1, offset + 1 + length));\n return { consumed: (1 + length), result: result };\n }\n return { consumed: 1, result: hexlifyByte(data[offset]) };\n}\nexport function decodeRlp(_data) {\n const data = logger.getBytes(_data, \"data\");\n const decoded = _decode(data, 0);\n if (decoded.consumed !== data.length) {\n logger.throwArgumentError(\"unexpected junk after rlp payload\", \"data\", _data);\n }\n return decoded.result;\n}\n//# sourceMappingURL=decode.js.map","import { concat, dataSlice } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { encodeRlp } from \"@ethersproject/rlp\";\nimport { getAddress } from \"./address.js\";\nimport { logger } from \"./logger.js\";\n// http://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed\nexport function getCreateAddress(tx) {\n const from = getAddress(tx.from);\n const nonce = logger.getBigInt(tx.nonce, \"tx.nonce\");\n let nonceHex = nonce.toString(16);\n if (nonceHex === \"0\") {\n nonceHex = \"0x\";\n }\n else if (nonceHex.length % 2) {\n nonceHex = \"0x0\" + nonceHex;\n }\n else {\n nonceHex = \"0x\" + nonceHex;\n }\n return getAddress(dataSlice(keccak256(encodeRlp([from, nonceHex])), 12));\n}\nexport function getCreate2Address(_from, _salt, _initCodeHash) {\n const from = getAddress(_from);\n const salt = logger.getBytes(_salt, \"salt\");\n const initCodeHash = logger.getBytes(_initCodeHash, \"initCodeHash\");\n if (salt.length !== 32) {\n logger.throwArgumentError(\"salt must be 32 bytes\", \"salt\", _salt);\n }\n if (initCodeHash.length !== 32) {\n logger.throwArgumentError(\"initCodeHash must be 32 bytes\", \"initCodeHash\", _initCodeHash);\n }\n return getAddress(dataSlice(keccak256(concat([\"0xff\", from, salt, initCodeHash])), 12));\n}\n//# sourceMappingURL=contract-address.js.map","import { getAddress } from \"./address.js\";\nimport { logger } from \"./logger.js\";\nexport function isAddressable(value) {\n return (value && typeof (value.getAddress) === \"function\");\n}\nexport function isAddress(value) {\n try {\n getAddress(value);\n return true;\n }\n catch (error) { }\n return false;\n}\n// Resolves an Ethereum address, ENS name or Addressable object,\n// throwing if the result is null; an explicit null returns null\n//export async function resolveAddress(target?: null, resolver?: null | NameResolver): Promise;\n//export async function resolveAddress(target: string | Addressable, resolver?: null | NameResolver): Promise;\n//export async function resolveAddress(target: null | undefined | string | Addressable, resolver?: null | NameResolver) {\nexport async function resolveAddress(target, resolver) {\n //if (target == null) { return null; }\n if (typeof (target) === \"string\") {\n if (target.match(/^0x[0-9a-f]{40}$/i)) {\n return getAddress(target);\n }\n if (resolver == null) {\n return logger.throwError(\"ENS resolution requires a provider\", \"UNSUPPORTED_OPERATION\", {\n operation: \"resolveName\",\n });\n }\n const result = await resolver.resolveName(target);\n if (result == null || result === \"0x0000000000000000000000000000000000000000\") {\n return logger.throwError(\"unconfigured name\", \"UNCONFIGURED_NAME\", { value: target });\n }\n return getAddress(result);\n }\n else if (isAddressable(target)) {\n const result = await target.getAddress();\n if (result == null) {\n logger.throwArgumentError(\"addressable resolved to null\", \"target\", target);\n }\n return getAddress(result);\n }\n return logger.throwArgumentError(\"unsupported addressable value\", \"target\", target);\n}\n//# sourceMappingURL=checks.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Typed_options;\nimport { defineProperties } from \"@ethersproject/properties\";\nconst _gaurd = {};\nfunction n(value, width) {\n let signed = false;\n if (width < 0) {\n signed = true;\n width *= -1;\n }\n // @TODO: Check range is valid for value\n return new Typed(_gaurd, `${signed ? \"\" : \"u\"}int${width}`, value, { signed, width });\n}\nfunction b(value, size) {\n // @TODO: Check range is valid for value\n return new Typed(_gaurd, `bytes${(size) ? size : \"\"}`, value, { size });\n}\nconst _typedSymbol = Symbol.for(\"_ethers_typed\");\nexport class Typed {\n constructor(gaurd, type, value, options = null) {\n _Typed_options.set(this, void 0);\n if (gaurd !== _gaurd) {\n throw new Error(\"private constructor\");\n }\n defineProperties(this, { _typedSymbol, type, value });\n __classPrivateFieldSet(this, _Typed_options, options, \"f\");\n // Check the value is valid\n this.format();\n }\n format() {\n if (this.type === \"array\") {\n throw new Error(\"\");\n }\n else if (this.type === \"dynamicArray\") {\n throw new Error(\"\");\n }\n else if (this.type === \"tuple\") {\n return `tuple(${this.value.map((v) => v.format()).join(\",\")})`;\n }\n return this.type;\n }\n defaultValue() {\n return 0;\n }\n minValue() {\n return 0;\n }\n maxValue() {\n return 0;\n }\n isBigInt() {\n return !!(this.type.match(/^u?int[0-9]+$/));\n }\n isData() {\n return (this.type.substring(0, 5) === \"bytes\");\n }\n isString() {\n return (this.type === \"string\");\n }\n get tupleName() {\n if (this.type !== \"tuple\") {\n throw TypeError(\"not a tuple\");\n }\n return __classPrivateFieldGet(this, _Typed_options, \"f\");\n }\n // Returns the length of this type as an array\n // - `null` indicates the length is unforced, it could be dynamic\n // - `-1` indicates the length is dynamic\n // - any other value indicates it is a static array and is its length\n get arrayLength() {\n if (this.type !== \"array\") {\n throw TypeError(\"not an array\");\n }\n if (__classPrivateFieldGet(this, _Typed_options, \"f\") === true) {\n return -1;\n }\n if (__classPrivateFieldGet(this, _Typed_options, \"f\") === false) {\n return (this.value).length;\n }\n return null;\n }\n static from(type, value) {\n return new Typed(_gaurd, type, value);\n }\n static uint8(v) { return n(v, 8); }\n static uint16(v) { return n(v, 16); }\n static uint24(v) { return n(v, 24); }\n static uint32(v) { return n(v, 32); }\n static uint40(v) { return n(v, 40); }\n static uint48(v) { return n(v, 46); }\n static uint56(v) { return n(v, 56); }\n static uint64(v) { return n(v, 64); }\n static uint72(v) { return n(v, 72); }\n static uint80(v) { return n(v, 80); }\n static uint88(v) { return n(v, 88); }\n static uint96(v) { return n(v, 96); }\n static uint104(v) { return n(v, 104); }\n static uint112(v) { return n(v, 112); }\n static uint120(v) { return n(v, 120); }\n static uint128(v) { return n(v, 128); }\n static uint136(v) { return n(v, 136); }\n static uint144(v) { return n(v, 144); }\n static uint152(v) { return n(v, 152); }\n static uint160(v) { return n(v, 160); }\n static uint168(v) { return n(v, 168); }\n static uint176(v) { return n(v, 176); }\n static uint184(v) { return n(v, 184); }\n static uint192(v) { return n(v, 192); }\n static uint200(v) { return n(v, 200); }\n static uint208(v) { return n(v, 208); }\n static uint216(v) { return n(v, 216); }\n static uint224(v) { return n(v, 224); }\n static uint232(v) { return n(v, 232); }\n static uint240(v) { return n(v, 240); }\n static uint248(v) { return n(v, 248); }\n static uint256(v) { return n(v, 256); }\n static uint(v) { return n(v, 256); }\n static int8(v) { return n(v, -8); }\n static int16(v) { return n(v, -16); }\n static int24(v) { return n(v, -24); }\n static int32(v) { return n(v, -32); }\n static int40(v) { return n(v, -40); }\n static int48(v) { return n(v, -46); }\n static int56(v) { return n(v, -56); }\n static int64(v) { return n(v, -64); }\n static int72(v) { return n(v, -72); }\n static int80(v) { return n(v, -80); }\n static int88(v) { return n(v, -88); }\n static int96(v) { return n(v, -96); }\n static int104(v) { return n(v, -104); }\n static int112(v) { return n(v, -112); }\n static int120(v) { return n(v, -120); }\n static int128(v) { return n(v, -128); }\n static int136(v) { return n(v, -136); }\n static int144(v) { return n(v, -144); }\n static int152(v) { return n(v, -152); }\n static int160(v) { return n(v, -160); }\n static int168(v) { return n(v, -168); }\n static int176(v) { return n(v, -176); }\n static int184(v) { return n(v, -184); }\n static int192(v) { return n(v, -192); }\n static int200(v) { return n(v, -200); }\n static int208(v) { return n(v, -208); }\n static int216(v) { return n(v, -216); }\n static int224(v) { return n(v, -224); }\n static int232(v) { return n(v, -232); }\n static int240(v) { return n(v, -240); }\n static int248(v) { return n(v, -248); }\n static int256(v) { return n(v, -256); }\n static int(v) { return n(v, -256); }\n static bytes(v) { return b(v); }\n static bytes1(v) { return b(v, 1); }\n static bytes2(v) { return b(v, 2); }\n static bytes3(v) { return b(v, 3); }\n static bytes4(v) { return b(v, 4); }\n static bytes5(v) { return b(v, 5); }\n static bytes6(v) { return b(v, 6); }\n static bytes7(v) { return b(v, 7); }\n static bytes8(v) { return b(v, 8); }\n static bytes9(v) { return b(v, 9); }\n static bytes10(v) { return b(v, 10); }\n static bytes11(v) { return b(v, 11); }\n static bytes12(v) { return b(v, 12); }\n static bytes13(v) { return b(v, 13); }\n static bytes14(v) { return b(v, 14); }\n static bytes15(v) { return b(v, 15); }\n static bytes16(v) { return b(v, 16); }\n static bytes17(v) { return b(v, 17); }\n static bytes18(v) { return b(v, 18); }\n static bytes19(v) { return b(v, 19); }\n static bytes20(v) { return b(v, 20); }\n static bytes21(v) { return b(v, 21); }\n static bytes22(v) { return b(v, 22); }\n static bytes23(v) { return b(v, 23); }\n static bytes24(v) { return b(v, 24); }\n static bytes25(v) { return b(v, 25); }\n static bytes26(v) { return b(v, 26); }\n static bytes27(v) { return b(v, 27); }\n static bytes28(v) { return b(v, 28); }\n static bytes29(v) { return b(v, 29); }\n static bytes30(v) { return b(v, 30); }\n static bytes31(v) { return b(v, 31); }\n static bytes32(v) { return b(v, 32); }\n static address(v) { return new Typed(_gaurd, \"address\", v); }\n static bool(v) { return new Typed(_gaurd, \"bool\", !!v); }\n static string(v) { return new Typed(_gaurd, \"string\", v); }\n static array(v, dynamic) {\n throw new Error(\"not implemented yet\");\n return new Typed(_gaurd, \"array\", v, dynamic);\n }\n static tuple(v, name) {\n throw new Error(\"not implemented yet\");\n return new Typed(_gaurd, \"tuple\", v, name);\n }\n static overrides(v) {\n return new Typed(_gaurd, \"overrides\", Object.assign({}, v));\n }\n static isTyped(value) {\n return (value && value._typedSymbol === _typedSymbol);\n }\n static dereference(value, type) {\n if (Typed.isTyped(value)) {\n if (value.type !== type) {\n throw new Error(`invalid type: expecetd ${type}, got ${value.type}`);\n }\n return value.value;\n }\n return value;\n }\n}\n_Typed_options = new WeakMap();\n//# sourceMappingURL=typed.js.map","import { getAddress } from \"@ethersproject/address\";\nimport { toHex } from \"@ethersproject/math\";\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\nexport class AddressCoder extends Coder {\n constructor(localName) {\n super(\"address\", \"address\", localName, false);\n }\n defaultValue() {\n return \"0x0000000000000000000000000000000000000000\";\n }\n encode(writer, _value) {\n let value = Typed.dereference(_value, \"string\");\n try {\n value = getAddress(value);\n }\n catch (error) {\n return this._throwError(error.message, _value);\n }\n return writer.writeValue(value);\n }\n decode(reader) {\n return getAddress(toHex(reader.readValue(), 20));\n }\n}\n//# sourceMappingURL=address.js.map","import { Coder } from \"./abstract-coder.js\";\n// Clones the functionality of an existing Coder, but without a localName\nexport class AnonymousCoder extends Coder {\n constructor(coder) {\n super(coder.name, coder.type, \"_\", coder.dynamic);\n this.coder = coder;\n }\n defaultValue() {\n return this.coder.defaultValue();\n }\n encode(writer, value) {\n return this.coder.encode(writer, value);\n }\n decode(reader) {\n return this.coder.decode(reader);\n }\n}\n//# sourceMappingURL=anonymous.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { isError } from \"@ethersproject/logger\";\nimport { logger } from \"../logger.js\";\nimport { Typed } from \"../typed.js\";\nimport { Coder, Result, WordSize, Writer } from \"./abstract-coder.js\";\nimport { AnonymousCoder } from \"./anonymous.js\";\nexport function pack(writer, coders, values) {\n let arrayValues = [];\n if (Array.isArray(values)) {\n arrayValues = values;\n }\n else if (values && typeof (values) === \"object\") {\n let unique = {};\n arrayValues = coders.map((coder) => {\n const name = coder.localName;\n if (!name) {\n logger.throwError(\"cannot encode object for signature with missing names\", \"INVALID_ARGUMENT\", {\n argument: \"values\",\n info: { coder },\n value: values\n });\n }\n if (unique[name]) {\n logger.throwError(\"cannot encode object for signature with duplicate names\", \"INVALID_ARGUMENT\", {\n argument: \"values\",\n info: { coder },\n value: values\n });\n }\n unique[name] = true;\n return values[name];\n });\n }\n else {\n logger.throwArgumentError(\"invalid tuple value\", \"tuple\", values);\n }\n if (coders.length !== arrayValues.length) {\n logger.throwArgumentError(\"types/value length mismatch\", \"tuple\", values);\n }\n let staticWriter = new Writer();\n let dynamicWriter = new Writer();\n let updateFuncs = [];\n coders.forEach((coder, index) => {\n let value = arrayValues[index];\n if (coder.dynamic) {\n // Get current dynamic offset (for the future pointer)\n let dynamicOffset = dynamicWriter.length;\n // Encode the dynamic value into the dynamicWriter\n coder.encode(dynamicWriter, value);\n // Prepare to populate the correct offset once we are done\n let updateFunc = staticWriter.writeUpdatableValue();\n updateFuncs.push((baseOffset) => {\n updateFunc(baseOffset + dynamicOffset);\n });\n }\n else {\n coder.encode(staticWriter, value);\n }\n });\n // Backfill all the dynamic offsets, now that we know the static length\n updateFuncs.forEach((func) => { func(staticWriter.length); });\n let length = writer.appendWriter(staticWriter);\n length += writer.appendWriter(dynamicWriter);\n return length;\n}\nexport function unpack(reader, coders) {\n let values = [];\n let keys = [];\n // A reader anchored to this base\n let baseReader = reader.subReader(0);\n coders.forEach((coder) => {\n let value = null;\n if (coder.dynamic) {\n let offset = reader.readIndex();\n let offsetReader = baseReader.subReader(offset);\n try {\n value = coder.decode(offsetReader);\n }\n catch (error) {\n // Cannot recover from this\n if (isError(error, \"BUFFER_OVERRUN\")) {\n throw error;\n }\n value = error;\n value.baseType = coder.name;\n value.name = coder.localName;\n value.type = coder.type;\n }\n }\n else {\n try {\n value = coder.decode(reader);\n }\n catch (error) {\n // Cannot recover from this\n if (isError(error, \"BUFFER_OVERRUN\")) {\n throw error;\n }\n value = error;\n value.baseType = coder.name;\n value.name = coder.localName;\n value.type = coder.type;\n }\n }\n if (value == undefined) {\n throw new Error(\"investigate\");\n }\n values.push(value);\n keys.push(coder.localName || null);\n });\n return Result.fromItems(values, keys);\n}\nexport class ArrayCoder extends Coder {\n constructor(coder, length, localName) {\n const type = (coder.type + \"[\" + (length >= 0 ? length : \"\") + \"]\");\n const dynamic = (length === -1 || coder.dynamic);\n super(\"array\", type, localName, dynamic);\n defineProperties(this, { coder, length });\n }\n defaultValue() {\n // Verifies the child coder is valid (even if the array is dynamic or 0-length)\n const defaultChild = this.coder.defaultValue();\n const result = [];\n for (let i = 0; i < this.length; i++) {\n result.push(defaultChild);\n }\n return result;\n }\n encode(writer, _value) {\n const value = Typed.dereference(_value, \"array\");\n if (!Array.isArray(value)) {\n this._throwError(\"expected array value\", value);\n }\n let count = this.length;\n if (count === -1) {\n count = value.length;\n writer.writeValue(value.length);\n }\n logger.assertArgumentCount(value.length, count, \"coder array\" + (this.localName ? (\" \" + this.localName) : \"\"));\n let coders = [];\n for (let i = 0; i < value.length; i++) {\n coders.push(this.coder);\n }\n return pack(writer, coders, value);\n }\n decode(reader) {\n let count = this.length;\n if (count === -1) {\n count = reader.readIndex();\n // Check that there is *roughly* enough data to ensure\n // stray random data is not being read as a length. Each\n // slot requires at least 32 bytes for their value (or 32\n // bytes as a link to the data). This could use a much\n // tighter bound, but we are erroring on the side of safety.\n if (count * WordSize > reader.dataLength) {\n logger.throwError(\"insufficient data length\", \"BUFFER_OVERRUN\", {\n buffer: reader.bytes,\n offset: count * WordSize,\n length: reader.dataLength\n });\n }\n }\n let coders = [];\n for (let i = 0; i < count; i++) {\n coders.push(new AnonymousCoder(this.coder));\n }\n return reader.coerce(this.name, unpack(reader, coders));\n }\n}\n//# sourceMappingURL=array.js.map","import { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\nexport class BooleanCoder extends Coder {\n constructor(localName) {\n super(\"bool\", \"bool\", localName, false);\n }\n defaultValue() {\n return false;\n }\n encode(writer, _value) {\n const value = Typed.dereference(_value, \"bool\");\n return writer.writeValue(value ? 1 : 0);\n }\n decode(reader) {\n return reader.coerce(this.type, !reader.readValue());\n }\n}\n//# sourceMappingURL=boolean.js.map","import { arrayify, hexlify } from \"@ethersproject/bytes\";\nimport { Coder } from \"./abstract-coder.js\";\nexport class DynamicBytesCoder extends Coder {\n constructor(type, localName) {\n super(type, type, localName, true);\n }\n defaultValue() {\n return \"0x\";\n }\n encode(writer, value) {\n value = arrayify(value);\n let length = writer.writeValue(value.length);\n length += writer.writeBytes(value);\n return length;\n }\n decode(reader) {\n return reader.readBytes(reader.readIndex(), true);\n }\n}\nexport class BytesCoder extends DynamicBytesCoder {\n constructor(localName) {\n super(\"bytes\", localName);\n }\n decode(reader) {\n return reader.coerce(this.name, hexlify(super.decode(reader)));\n }\n}\n//# sourceMappingURL=bytes.js.map","import { arrayify, hexlify } from \"@ethersproject/bytes\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\nexport class FixedBytesCoder extends Coder {\n constructor(size, localName) {\n let name = \"bytes\" + String(size);\n super(name, name, localName, false);\n defineProperties(this, { size }, { size: \"number\" });\n }\n defaultValue() {\n return (\"0x0000000000000000000000000000000000000000000000000000000000000000\").substring(0, 2 + this.size * 2);\n }\n encode(writer, _value) {\n let data = arrayify(Typed.dereference(_value, this.type));\n if (data.length !== this.size) {\n this._throwError(\"incorrect data length\", _value);\n }\n return writer.writeBytes(data);\n }\n decode(reader) {\n return reader.coerce(this.name, hexlify(reader.readBytes(this.size)));\n }\n}\n//# sourceMappingURL=fixed-bytes.js.map","import { Coder } from \"./abstract-coder.js\";\nconst Empty = new Uint8Array([]);\nexport class NullCoder extends Coder {\n constructor(localName) {\n super(\"null\", \"\", localName, false);\n }\n defaultValue() {\n return null;\n }\n encode(writer, value) {\n if (value != null) {\n this._throwError(\"not null\", value);\n }\n return writer.writeBytes(Empty);\n }\n decode(reader) {\n reader.readBytes(0);\n return reader.coerce(this.name, null);\n }\n}\n//# sourceMappingURL=null.js.map","import { fromTwos, mask, toTwos } from \"@ethersproject/math\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { logger } from \"../logger.js\";\nimport { Typed } from \"../typed.js\";\nimport { Coder, WordSize } from \"./abstract-coder.js\";\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_MAX_UINT256 = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\nexport class NumberCoder extends Coder {\n constructor(size, signed, localName) {\n const name = ((signed ? \"int\" : \"uint\") + (size * 8));\n super(name, name, localName, false);\n defineProperties(this, { size, signed }, { size: \"number\", signed: \"boolean\" });\n }\n defaultValue() {\n return 0;\n }\n encode(writer, _value) {\n let value = logger.getBigInt(Typed.dereference(_value, this.type));\n // Check bounds are safe for encoding\n let maxUintValue = mask(BN_MAX_UINT256, WordSize * 8);\n if (this.signed) {\n let bounds = mask(maxUintValue, (this.size * 8) - 1);\n if (value > bounds || value < -(bounds + BN_1)) {\n this._throwError(\"value out-of-bounds\", _value);\n }\n }\n else if (value < BN_0 || value > mask(maxUintValue, this.size * 8)) {\n this._throwError(\"value out-of-bounds\", _value);\n }\n value = mask(toTwos(value, this.size * 8), this.size * 8);\n if (this.signed) {\n value = toTwos(fromTwos(value, this.size * 8), 8 * WordSize);\n }\n return writer.writeValue(value);\n }\n decode(reader) {\n let value = mask(reader.readValue(), this.size * 8);\n if (this.signed) {\n value = fromTwos(value, this.size * 8);\n }\n return reader.coerce(this.name, value);\n }\n}\n//# sourceMappingURL=number.js.map","export const version = \"@ethersproject/strings@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { logger } from \"./logger.js\";\n///////////////////////////////\nexport var UnicodeNormalizationForm;\n(function (UnicodeNormalizationForm) {\n UnicodeNormalizationForm[\"current\"] = \"\";\n UnicodeNormalizationForm[\"NFC\"] = \"NFC\";\n UnicodeNormalizationForm[\"NFD\"] = \"NFD\";\n UnicodeNormalizationForm[\"NFKC\"] = \"NFKC\";\n UnicodeNormalizationForm[\"NFKD\"] = \"NFKD\";\n})(UnicodeNormalizationForm || (UnicodeNormalizationForm = {}));\n;\nexport var Utf8ErrorReason;\n(function (Utf8ErrorReason) {\n // A continuation byte was present where there was nothing to continue\n // - offset = the index the codepoint began in\n Utf8ErrorReason[\"UNEXPECTED_CONTINUE\"] = \"unexpected continuation byte\";\n // An invalid (non-continuation) byte to start a UTF-8 codepoint was found\n // - offset = the index the codepoint began in\n Utf8ErrorReason[\"BAD_PREFIX\"] = \"bad codepoint prefix\";\n // The string is too short to process the expected codepoint\n // - offset = the index the codepoint began in\n Utf8ErrorReason[\"OVERRUN\"] = \"string overrun\";\n // A missing continuation byte was expected but not found\n // - offset = the index the continuation byte was expected at\n Utf8ErrorReason[\"MISSING_CONTINUE\"] = \"missing continuation byte\";\n // The computed code point is outside the range for UTF-8\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; outside the UTF-8 range\n Utf8ErrorReason[\"OUT_OF_RANGE\"] = \"out of UTF-8 range\";\n // UTF-8 strings may not contain UTF-16 surrogate pairs\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; inside the UTF-16 surrogate range\n Utf8ErrorReason[\"UTF16_SURROGATE\"] = \"UTF-16 surrogate\";\n // The string is an overlong representation\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; already bounds checked\n Utf8ErrorReason[\"OVERLONG\"] = \"overlong representation\";\n})(Utf8ErrorReason || (Utf8ErrorReason = {}));\n;\nfunction errorFunc(reason, offset, bytes, output, badCodepoint) {\n return logger.throwArgumentError(`invalid codepoint at offset ${offset}; ${reason}`, \"bytes\", bytes);\n}\nfunction ignoreFunc(reason, offset, bytes, output, badCodepoint) {\n // If there is an invalid prefix (including stray continuation), skip any additional continuation bytes\n if (reason === Utf8ErrorReason.BAD_PREFIX || reason === Utf8ErrorReason.UNEXPECTED_CONTINUE) {\n let i = 0;\n for (let o = offset + 1; o < bytes.length; o++) {\n if (bytes[o] >> 6 !== 0x02) {\n break;\n }\n i++;\n }\n return i;\n }\n // This byte runs us past the end of the string, so just jump to the end\n // (but the first byte was read already read and therefore skipped)\n if (reason === Utf8ErrorReason.OVERRUN) {\n return bytes.length - offset - 1;\n }\n // Nothing to skip\n return 0;\n}\nfunction replaceFunc(reason, offset, bytes, output, badCodepoint) {\n // Overlong representations are otherwise \"valid\" code points; just non-deistingtished\n if (reason === Utf8ErrorReason.OVERLONG) {\n output.push((badCodepoint != null) ? badCodepoint : -1);\n return 0;\n }\n // Put the replacement character into the output\n output.push(0xfffd);\n // Otherwise, process as if ignoring errors\n return ignoreFunc(reason, offset, bytes, output, badCodepoint);\n}\n// Common error handing strategies\nexport const Utf8ErrorFuncs = Object.freeze({\n error: errorFunc,\n ignore: ignoreFunc,\n replace: replaceFunc\n});\n// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499\nfunction getUtf8CodePoints(_bytes, onError) {\n if (onError == null) {\n onError = Utf8ErrorFuncs.error;\n }\n const bytes = logger.getBytes(_bytes, \"bytes\");\n const result = [];\n let i = 0;\n // Invalid bytes are ignored\n while (i < bytes.length) {\n const c = bytes[i++];\n // 0xxx xxxx\n if (c >> 7 === 0) {\n result.push(c);\n continue;\n }\n // Multibyte; how many bytes left for this character?\n let extraLength = null;\n let overlongMask = null;\n // 110x xxxx 10xx xxxx\n if ((c & 0xe0) === 0xc0) {\n extraLength = 1;\n overlongMask = 0x7f;\n // 1110 xxxx 10xx xxxx 10xx xxxx\n }\n else if ((c & 0xf0) === 0xe0) {\n extraLength = 2;\n overlongMask = 0x7ff;\n // 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx\n }\n else if ((c & 0xf8) === 0xf0) {\n extraLength = 3;\n overlongMask = 0xffff;\n }\n else {\n if ((c & 0xc0) === 0x80) {\n i += onError(Utf8ErrorReason.UNEXPECTED_CONTINUE, i - 1, bytes, result);\n }\n else {\n i += onError(Utf8ErrorReason.BAD_PREFIX, i - 1, bytes, result);\n }\n continue;\n }\n // Do we have enough bytes in our data?\n if (i - 1 + extraLength >= bytes.length) {\n i += onError(Utf8ErrorReason.OVERRUN, i - 1, bytes, result);\n continue;\n }\n // Remove the length prefix from the char\n let res = c & ((1 << (8 - extraLength - 1)) - 1);\n for (let j = 0; j < extraLength; j++) {\n let nextChar = bytes[i];\n // Invalid continuation byte\n if ((nextChar & 0xc0) != 0x80) {\n i += onError(Utf8ErrorReason.MISSING_CONTINUE, i, bytes, result);\n res = null;\n break;\n }\n ;\n res = (res << 6) | (nextChar & 0x3f);\n i++;\n }\n // See above loop for invalid continuation byte\n if (res === null) {\n continue;\n }\n // Maximum code point\n if (res > 0x10ffff) {\n i += onError(Utf8ErrorReason.OUT_OF_RANGE, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n // Reserved for UTF-16 surrogate halves\n if (res >= 0xd800 && res <= 0xdfff) {\n i += onError(Utf8ErrorReason.UTF16_SURROGATE, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n // Check for overlong sequences (more bytes than needed)\n if (res <= overlongMask) {\n i += onError(Utf8ErrorReason.OVERLONG, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n result.push(res);\n }\n return result;\n}\n// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\nexport function toUtf8Bytes(str, form = UnicodeNormalizationForm.current) {\n if (form != UnicodeNormalizationForm.current) {\n logger.assertNormalize(form);\n str = str.normalize(form);\n }\n let result = [];\n for (let i = 0; i < str.length; i++) {\n const c = str.charCodeAt(i);\n if (c < 0x80) {\n result.push(c);\n }\n else if (c < 0x800) {\n result.push((c >> 6) | 0xc0);\n result.push((c & 0x3f) | 0x80);\n }\n else if ((c & 0xfc00) == 0xd800) {\n i++;\n const c2 = str.charCodeAt(i);\n if (i >= str.length || (c2 & 0xfc00) !== 0xdc00) {\n throw new Error(\"invalid utf-8 string\");\n }\n // Surrogate Pair\n const pair = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);\n result.push((pair >> 18) | 0xf0);\n result.push(((pair >> 12) & 0x3f) | 0x80);\n result.push(((pair >> 6) & 0x3f) | 0x80);\n result.push((pair & 0x3f) | 0x80);\n }\n else {\n result.push((c >> 12) | 0xe0);\n result.push(((c >> 6) & 0x3f) | 0x80);\n result.push((c & 0x3f) | 0x80);\n }\n }\n return new Uint8Array(result);\n}\n;\nfunction escapeChar(value) {\n const hex = (\"0000\" + value.toString(16));\n return \"\\\\u\" + hex.substring(hex.length - 4);\n}\nexport function _toEscapedUtf8String(bytes, onError) {\n return '\"' + getUtf8CodePoints(bytes, onError).map((codePoint) => {\n if (codePoint < 256) {\n switch (codePoint) {\n case 8: return \"\\\\b\";\n case 9: return \"\\\\t\";\n case 10: return \"\\\\n\";\n case 13: return \"\\\\r\";\n case 34: return \"\\\\\\\"\";\n case 92: return \"\\\\\\\\\";\n }\n if (codePoint >= 32 && codePoint < 127) {\n return String.fromCharCode(codePoint);\n }\n }\n if (codePoint <= 0xffff) {\n return escapeChar(codePoint);\n }\n codePoint -= 0x10000;\n return escapeChar(((codePoint >> 10) & 0x3ff) + 0xd800) + escapeChar((codePoint & 0x3ff) + 0xdc00);\n }).join(\"\") + '\"';\n}\nexport function _toUtf8String(codePoints) {\n return codePoints.map((codePoint) => {\n if (codePoint <= 0xffff) {\n return String.fromCharCode(codePoint);\n }\n codePoint -= 0x10000;\n return String.fromCharCode((((codePoint >> 10) & 0x3ff) + 0xd800), ((codePoint & 0x3ff) + 0xdc00));\n }).join(\"\");\n}\nexport function toUtf8String(bytes, onError) {\n return _toUtf8String(getUtf8CodePoints(bytes, onError));\n}\nexport function toUtf8CodePoints(str, form = UnicodeNormalizationForm.current) {\n return getUtf8CodePoints(toUtf8Bytes(str, form));\n}\n//# sourceMappingURL=utf8.js.map","import { zeroPadRight } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nimport { toUtf8Bytes, toUtf8String } from \"./utf8.js\";\nexport function formatBytes32String(text) {\n // Get the bytes\n const bytes = toUtf8Bytes(text);\n // Check we have room for null-termination\n if (bytes.length > 31) {\n throw new Error(\"bytes32 string must be less than 32 bytes\");\n }\n // Zero-pad (implicitly null-terminates)\n return zeroPadRight(bytes, 32);\n}\nexport function parseBytes32String(_bytes) {\n const data = logger.getBytes(_bytes, \"bytes\");\n // Must be 32 bytes with a null-termination\n if (data.length !== 32) {\n throw new Error(\"invalid bytes32 - not 32 bytes long\");\n }\n if (data[31] !== 0) {\n throw new Error(\"invalid bytes32 string - no null terminator\");\n }\n // Find the null termination\n let length = 31;\n while (data[length - 1] === 0) {\n length--;\n }\n // Determine the string value\n return toUtf8String(data.slice(0, length));\n}\n//# sourceMappingURL=bytes32.js.map","import { logger } from \"./logger.js\";\nimport { toUtf8CodePoints, _toUtf8String, UnicodeNormalizationForm } from \"./utf8.js\";\nfunction bytes2(data) {\n if ((data.length % 4) !== 0) {\n throw new Error(\"should not happen; bad data\");\n }\n let result = [];\n for (let i = 0; i < data.length; i += 4) {\n result.push(parseInt(data.substring(i, i + 4), 16));\n }\n return result;\n}\nfunction createTable(data, _func) {\n const func = _func || function (value) { return [parseInt(value, 16)]; };\n let lo = 0;\n let result = {};\n data.split(\",\").forEach((pair) => {\n let comps = pair.split(\":\");\n lo += parseInt(comps[0], 16);\n result[lo] = func(comps[1]);\n });\n return result;\n}\nfunction createRangeTable(data) {\n let hi = 0;\n return data.split(\",\").map((v) => {\n let comps = v.split(\"-\");\n if (comps.length === 1) {\n comps[1] = \"0\";\n }\n else if (comps[1] === \"\") {\n comps[1] = \"1\";\n }\n let lo = hi + parseInt(comps[0], 16);\n hi = parseInt(comps[1], 16);\n return { l: lo, h: hi };\n });\n}\nfunction matchMap(value, ranges) {\n let lo = 0;\n for (let i = 0; i < ranges.length; i++) {\n let range = ranges[i];\n lo += range.l;\n if (value >= lo && value <= lo + range.h && ((value - lo) % (range.d || 1)) === 0) {\n if (range.e && range.e.indexOf(value - lo) !== -1) {\n continue;\n }\n return range;\n }\n }\n return null;\n}\nconst Table_A_1_ranges = createRangeTable(\"221,13-1b,5f-,40-10,51-f,11-3,3-3,2-2,2-4,8,2,15,2d,28-8,88,48,27-,3-5,11-20,27-,8,28,3-5,12,18,b-a,1c-4,6-16,2-d,2-2,2,1b-4,17-9,8f-,10,f,1f-2,1c-34,33-14e,4,36-,13-,6-2,1a-f,4,9-,3-,17,8,2-2,5-,2,8-,3-,4-8,2-3,3,6-,16-6,2-,7-3,3-,17,8,3,3,3-,2,6-3,3-,4-a,5,2-6,10-b,4,8,2,4,17,8,3,6-,b,4,4-,2-e,2-4,b-10,4,9-,3-,17,8,3-,5-,9-2,3-,4-7,3-3,3,4-3,c-10,3,7-2,4,5-2,3,2,3-2,3-2,4-2,9,4-3,6-2,4,5-8,2-e,d-d,4,9,4,18,b,6-3,8,4,5-6,3-8,3-3,b-11,3,9,4,18,b,6-3,8,4,5-6,3-6,2,3-3,b-11,3,9,4,18,11-3,7-,4,5-8,2-7,3-3,b-11,3,13-2,19,a,2-,8-2,2-3,7,2,9-11,4-b,3b-3,1e-24,3,2-,3,2-,2-5,5,8,4,2,2-,3,e,4-,6,2,7-,b-,3-21,49,23-5,1c-3,9,25,10-,2-2f,23,6,3,8-2,5-5,1b-45,27-9,2a-,2-3,5b-4,45-4,53-5,8,40,2,5-,8,2,5-,28,2,5-,20,2,5-,8,2,5-,8,8,18,20,2,5-,8,28,14-5,1d-22,56-b,277-8,1e-2,52-e,e,8-a,18-8,15-b,e,4,3-b,5e-2,b-15,10,b-5,59-7,2b-555,9d-3,5b-5,17-,7-,27-,7-,9,2,2,2,20-,36,10,f-,7,14-,4,a,54-3,2-6,6-5,9-,1c-10,13-1d,1c-14,3c-,10-6,32-b,240-30,28-18,c-14,a0,115-,3,66-,b-76,5,5-,1d,24,2,5-2,2,8-,35-2,19,f-10,1d-3,311-37f,1b,5a-b,d7-19,d-3,41,57-,68-4,29-3,5f,29-37,2e-2,25-c,2c-2,4e-3,30,78-3,64-,20,19b7-49,51a7-59,48e-2,38-738,2ba5-5b,222f-,3c-94,8-b,6-4,1b,6,2,3,3,6d-20,16e-f,41-,37-7,2e-2,11-f,5-b,18-,b,14,5-3,6,88-,2,bf-2,7-,7-,7-,4-2,8,8-9,8-2ff,20,5-b,1c-b4,27-,27-cbb1,f7-9,28-2,b5-221,56,48,3-,2-,3-,5,d,2,5,3,42,5-,9,8,1d,5,6,2-2,8,153-3,123-3,33-27fd,a6da-5128,21f-5df,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3,2-1d,61-ff7d\");\n// @TODO: Make this relative...\nconst Table_B_1_flags = \"ad,34f,1806,180b,180c,180d,200b,200c,200d,2060,feff\".split(\",\").map((v) => parseInt(v, 16));\nconst Table_B_2_ranges = [\n { h: 25, s: 32, l: 65 },\n { h: 30, s: 32, e: [23], l: 127 },\n { h: 54, s: 1, e: [48], l: 64, d: 2 },\n { h: 14, s: 1, l: 57, d: 2 },\n { h: 44, s: 1, l: 17, d: 2 },\n { h: 10, s: 1, e: [2, 6, 8], l: 61, d: 2 },\n { h: 16, s: 1, l: 68, d: 2 },\n { h: 84, s: 1, e: [18, 24, 66], l: 19, d: 2 },\n { h: 26, s: 32, e: [17], l: 435 },\n { h: 22, s: 1, l: 71, d: 2 },\n { h: 15, s: 80, l: 40 },\n { h: 31, s: 32, l: 16 },\n { h: 32, s: 1, l: 80, d: 2 },\n { h: 52, s: 1, l: 42, d: 2 },\n { h: 12, s: 1, l: 55, d: 2 },\n { h: 40, s: 1, e: [38], l: 15, d: 2 },\n { h: 14, s: 1, l: 48, d: 2 },\n { h: 37, s: 48, l: 49 },\n { h: 148, s: 1, l: 6351, d: 2 },\n { h: 88, s: 1, l: 160, d: 2 },\n { h: 15, s: 16, l: 704 },\n { h: 25, s: 26, l: 854 },\n { h: 25, s: 32, l: 55915 },\n { h: 37, s: 40, l: 1247 },\n { h: 25, s: -119711, l: 53248 },\n { h: 25, s: -119763, l: 52 },\n { h: 25, s: -119815, l: 52 },\n { h: 25, s: -119867, e: [1, 4, 5, 7, 8, 11, 12, 17], l: 52 },\n { h: 25, s: -119919, l: 52 },\n { h: 24, s: -119971, e: [2, 7, 8, 17], l: 52 },\n { h: 24, s: -120023, e: [2, 7, 13, 15, 16, 17], l: 52 },\n { h: 25, s: -120075, l: 52 },\n { h: 25, s: -120127, l: 52 },\n { h: 25, s: -120179, l: 52 },\n { h: 25, s: -120231, l: 52 },\n { h: 25, s: -120283, l: 52 },\n { h: 25, s: -120335, l: 52 },\n { h: 24, s: -119543, e: [17], l: 56 },\n { h: 24, s: -119601, e: [17], l: 58 },\n { h: 24, s: -119659, e: [17], l: 58 },\n { h: 24, s: -119717, e: [17], l: 58 },\n { h: 24, s: -119775, e: [17], l: 58 }\n];\nconst Table_B_2_lut_abs = createTable(\"b5:3bc,c3:ff,7:73,2:253,5:254,3:256,1:257,5:259,1:25b,3:260,1:263,2:269,1:268,5:26f,1:272,2:275,7:280,3:283,5:288,3:28a,1:28b,5:292,3f:195,1:1bf,29:19e,125:3b9,8b:3b2,1:3b8,1:3c5,3:3c6,1:3c0,1a:3ba,1:3c1,1:3c3,2:3b8,1:3b5,1bc9:3b9,1c:1f76,1:1f77,f:1f7a,1:1f7b,d:1f78,1:1f79,1:1f7c,1:1f7d,107:63,5:25b,4:68,1:68,1:68,3:69,1:69,1:6c,3:6e,4:70,1:71,1:72,1:72,1:72,7:7a,2:3c9,2:7a,2:6b,1:e5,1:62,1:63,3:65,1:66,2:6d,b:3b3,1:3c0,6:64,1b574:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3\");\nconst Table_B_2_lut_rel = createTable(\"179:1,2:1,2:1,5:1,2:1,a:4f,a:1,8:1,2:1,2:1,3:1,5:1,3:1,4:1,2:1,3:1,4:1,8:2,1:1,2:2,1:1,2:2,27:2,195:26,2:25,1:25,1:25,2:40,2:3f,1:3f,33:1,11:-6,1:-9,1ac7:-3a,6d:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,b:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,c:-8,2:-8,2:-8,2:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,49:-8,1:-8,1:-4a,1:-4a,d:-56,1:-56,1:-56,1:-56,d:-8,1:-8,f:-8,1:-8,3:-7\");\nconst Table_B_2_complex = createTable(\"df:00730073,51:00690307,19:02BC006E,a7:006A030C,18a:002003B9,16:03B903080301,20:03C503080301,1d7:05650582,190f:00680331,1:00740308,1:0077030A,1:0079030A,1:006102BE,b6:03C50313,2:03C503130300,2:03C503130301,2:03C503130342,2a:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,3:1F7003B9,1:03B103B9,1:03AC03B9,2:03B10342,1:03B1034203B9,5:03B103B9,6:1F7403B9,1:03B703B9,1:03AE03B9,2:03B70342,1:03B7034203B9,5:03B703B9,6:03B903080300,1:03B903080301,3:03B90342,1:03B903080342,b:03C503080300,1:03C503080301,1:03C10313,2:03C50342,1:03C503080342,b:1F7C03B9,1:03C903B9,1:03CE03B9,2:03C90342,1:03C9034203B9,5:03C903B9,ac:00720073,5b:00B00063,6:00B00066,d:006E006F,a:0073006D,1:00740065006C,1:0074006D,124f:006800700061,2:00610075,2:006F0076,b:00700061,1:006E0061,1:03BC0061,1:006D0061,1:006B0061,1:006B0062,1:006D0062,1:00670062,3:00700066,1:006E0066,1:03BC0066,4:0068007A,1:006B0068007A,1:006D0068007A,1:00670068007A,1:00740068007A,15:00700061,1:006B00700061,1:006D00700061,1:006700700061,8:00700076,1:006E0076,1:03BC0076,1:006D0076,1:006B0076,1:006D0076,1:00700077,1:006E0077,1:03BC0077,1:006D0077,1:006B0077,1:006D0077,1:006B03C9,1:006D03C9,2:00620071,3:00632215006B0067,1:0063006F002E,1:00640062,1:00670079,2:00680070,2:006B006B,1:006B006D,9:00700068,2:00700070006D,1:00700072,2:00730076,1:00770062,c723:00660066,1:00660069,1:0066006C,1:006600660069,1:00660066006C,1:00730074,1:00730074,d:05740576,1:05740565,1:0574056B,1:057E0576,1:0574056D\", bytes2);\nconst Table_C_ranges = createRangeTable(\"80-20,2a0-,39c,32,f71,18e,7f2-f,19-7,30-4,7-5,f81-b,5,a800-20ff,4d1-1f,110,fa-6,d174-7,2e84-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,2,1f-5f,ff7f-20001\");\nfunction flatten(values) {\n return values.reduce((accum, value) => {\n value.forEach((value) => { accum.push(value); });\n return accum;\n }, []);\n}\nexport function _nameprepTableA1(codepoint) {\n return !!matchMap(codepoint, Table_A_1_ranges);\n}\nexport function _nameprepTableB2(codepoint) {\n const range = matchMap(codepoint, Table_B_2_ranges);\n if (range) {\n if (range.s == null) {\n throw new Error(\"should not happenl bad range\");\n }\n return [codepoint + range.s];\n }\n const codes = Table_B_2_lut_abs[codepoint];\n if (codes) {\n return codes;\n }\n const shift = Table_B_2_lut_rel[codepoint];\n if (shift) {\n return [codepoint + shift[0]];\n }\n const complex = Table_B_2_complex[codepoint];\n if (complex) {\n return complex;\n }\n return null;\n}\nexport function _nameprepTableC(codepoint) {\n return !!matchMap(codepoint, Table_C_ranges);\n}\nexport function nameprep(value) {\n // This allows platforms with incomplete normalize to bypass\n // it for very basic names which the built-in toLowerCase\n // will certainly handle correctly\n if (value.match(/^[a-z0-9-]*$/i) && value.length <= 59) {\n return value.toLowerCase();\n }\n // Get the code points (keeping the current normalization)\n let codes = toUtf8CodePoints(value);\n codes = flatten(codes.map((code) => {\n // Substitute Table B.1 (Maps to Nothing)\n if (Table_B_1_flags.indexOf(code) >= 0) {\n return [];\n }\n if (code >= 0xfe00 && code <= 0xfe0f) {\n return [];\n }\n // Substitute Table B.2 (Case Folding)\n let codesTableB2 = _nameprepTableB2(code);\n if (codesTableB2) {\n return codesTableB2;\n }\n // No Substitution\n return [code];\n }));\n // Normalize using form KC\n codes = toUtf8CodePoints(_toUtf8String(codes), UnicodeNormalizationForm.NFKC);\n // Prohibit Tables C.1.2, C.2.2, C.3, C.4, C.5, C.6, C.7, C.8, C.9\n codes.forEach((code) => {\n if (_nameprepTableC(code)) {\n logger.throwArgumentError(\"STRINGPREP_CONTAINS_PROHIBITED\", \"value\", value);\n }\n });\n // Prohibit Unassigned Code Points (Table A.1)\n codes.forEach((code) => {\n if (_nameprepTableA1(code)) {\n logger.throwArgumentError(\"STRINGPREP_CONTAINS_UNASSIGNED\", \"value\", value);\n }\n });\n // IDNA extras\n let name = _toUtf8String(codes);\n // IDNA: 4.2.3.1\n if (name.substring(0, 1) === \"-\" || name.substring(2, 4) === \"--\" || name.substring(name.length - 1) === \"-\") {\n logger.throwArgumentError(\"invalid hyphen\", \"value\", value);\n }\n // IDNA: 4.2.4\n if (name.length > 63) {\n logger.throwArgumentError(\"too long\", \"value\", value);\n }\n return name;\n}\n//# sourceMappingURL=idna.js.map","import { toUtf8Bytes, toUtf8String } from \"@ethersproject/strings\";\nimport { Typed } from \"../typed.js\";\nimport { DynamicBytesCoder } from \"./bytes.js\";\nexport class StringCoder extends DynamicBytesCoder {\n constructor(localName) {\n super(\"string\", localName);\n }\n defaultValue() {\n return \"\";\n }\n encode(writer, _value) {\n return super.encode(writer, toUtf8Bytes(Typed.dereference(_value, \"string\")));\n }\n decode(reader) {\n return toUtf8String(super.decode(reader));\n }\n}\n//# sourceMappingURL=string.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\nimport { pack, unpack } from \"./array.js\";\nexport class TupleCoder extends Coder {\n constructor(coders, localName) {\n let dynamic = false;\n const types = [];\n coders.forEach((coder) => {\n if (coder.dynamic) {\n dynamic = true;\n }\n types.push(coder.type);\n });\n const type = (\"tuple(\" + types.join(\",\") + \")\");\n super(\"tuple\", type, localName, dynamic);\n defineProperties(this, { coders: Object.freeze(coders.slice()) });\n }\n defaultValue() {\n const values = [];\n this.coders.forEach((coder) => {\n values.push(coder.defaultValue());\n });\n // We only output named properties for uniquely named coders\n const uniqueNames = this.coders.reduce((accum, coder) => {\n const name = coder.localName;\n if (name) {\n if (!accum[name]) {\n accum[name] = 0;\n }\n accum[name]++;\n }\n return accum;\n }, {});\n // Add named values\n this.coders.forEach((coder, index) => {\n let name = coder.localName;\n if (!name || uniqueNames[name] !== 1) {\n return;\n }\n if (name === \"length\") {\n name = \"_length\";\n }\n if (values[name] != null) {\n return;\n }\n values[name] = values[index];\n });\n return Object.freeze(values);\n }\n encode(writer, _value) {\n const value = Typed.dereference(_value, \"tuple\");\n return pack(writer, this.coders, value);\n }\n decode(reader) {\n return reader.coerce(this.name, unpack(reader, this.coders));\n }\n}\n//# sourceMappingURL=tuple.js.map","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _AbiCoder_instances, _AbiCoder_getCoder;\n// See: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI\n//import { arrayify } from \"@ethersproject/bytes\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { logger } from \"./logger.js\";\nimport { Reader, Writer } from \"./coders/abstract-coder.js\";\nimport { AddressCoder } from \"./coders/address.js\";\nimport { ArrayCoder } from \"./coders/array.js\";\nimport { BooleanCoder } from \"./coders/boolean.js\";\nimport { BytesCoder } from \"./coders/bytes.js\";\nimport { FixedBytesCoder } from \"./coders/fixed-bytes.js\";\nimport { NullCoder } from \"./coders/null.js\";\nimport { NumberCoder } from \"./coders/number.js\";\nimport { StringCoder } from \"./coders/string.js\";\nimport { TupleCoder } from \"./coders/tuple.js\";\nimport { ParamType } from \"./fragments.js\";\nconst paramTypeBytes = new RegExp(/^bytes([0-9]*)$/);\nconst paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/);\nexport class AbiCoder {\n constructor(coerceFunc) {\n _AbiCoder_instances.add(this);\n defineProperties(this, { coerceFunc }, {}, { coerceFunc: null });\n }\n getDefaultValue(types) {\n const coders = types.map((type) => __classPrivateFieldGet(this, _AbiCoder_instances, \"m\", _AbiCoder_getCoder).call(this, ParamType.from(type)));\n const coder = new TupleCoder(coders, \"_\");\n return coder.defaultValue();\n }\n encode(types, values) {\n logger.assertArgumentCount(values.length, types.length, \"types/values length mismatch\");\n const coders = types.map((type) => __classPrivateFieldGet(this, _AbiCoder_instances, \"m\", _AbiCoder_getCoder).call(this, ParamType.from(type)));\n const coder = (new TupleCoder(coders, \"_\"));\n const writer = new Writer();\n coder.encode(writer, values);\n return writer.data;\n }\n decode(types, data, loose) {\n const coders = types.map((type) => __classPrivateFieldGet(this, _AbiCoder_instances, \"m\", _AbiCoder_getCoder).call(this, ParamType.from(type)));\n const coder = new TupleCoder(coders, \"_\");\n return coder.decode(new Reader(data, this.coerceFunc, loose));\n }\n}\n_AbiCoder_instances = new WeakSet(), _AbiCoder_getCoder = function _AbiCoder_getCoder(param) {\n if (param.isArray()) {\n return new ArrayCoder(__classPrivateFieldGet(this, _AbiCoder_instances, \"m\", _AbiCoder_getCoder).call(this, param.arrayChildren), param.arrayLength, param.name);\n }\n if (param.isTuple()) {\n return new TupleCoder(param.components.map((c) => __classPrivateFieldGet(this, _AbiCoder_instances, \"m\", _AbiCoder_getCoder).call(this, c)), param.name);\n }\n switch (param.baseType) {\n case \"address\":\n return new AddressCoder(param.name);\n case \"bool\":\n return new BooleanCoder(param.name);\n case \"string\":\n return new StringCoder(param.name);\n case \"bytes\":\n return new BytesCoder(param.name);\n case \"\":\n return new NullCoder(param.name);\n }\n // u?int[0-9]*\n let match = param.type.match(paramTypeNumber);\n if (match) {\n let size = parseInt(match[2] || \"256\");\n if (size === 0 || size > 256 || (size % 8) !== 0) {\n logger.throwArgumentError(\"invalid \" + match[1] + \" bit length\", \"param\", param);\n }\n return new NumberCoder(size / 8, (match[1] === \"int\"), param.name);\n }\n // bytes[0-9]+\n match = param.type.match(paramTypeBytes);\n if (match) {\n let size = parseInt(match[1]);\n if (size === 0 || size > 32) {\n logger.throwArgumentError(\"invalid bytes length\", \"param\", param);\n }\n return new FixedBytesCoder(size, param.name);\n }\n return logger.throwArgumentError(\"invalid type\", \"type\", param.type);\n};\nexport const defaultAbiCoder = new AbiCoder();\n//# sourceMappingURL=abi-coder.js.map","import { keccak256 } from \"@ethersproject/crypto\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nexport function id(value) {\n return keccak256(toUtf8Bytes(value));\n}\n//# sourceMappingURL=id.js.map","export const version = \"@ethersproject/hash@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { concat, hexlify } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { nameprep, toUtf8Bytes } from \"@ethersproject/strings\";\nimport { logger } from \"./logger.js\";\nconst Zeros = new Uint8Array(32);\nZeros.fill(0);\nconst Partition = new RegExp(\"^((.*)\\\\.)?([^.]+)$\");\nexport function isValidName(name) {\n try {\n const comps = name.split(\".\");\n for (let i = 0; i < comps.length; i++) {\n if (nameprep(comps[i]).length === 0) {\n throw new Error(\"empty\");\n }\n }\n return true;\n }\n catch (error) { }\n return false;\n}\nexport function namehash(name) {\n if (typeof (name) !== \"string\") {\n logger.throwArgumentError(\"invalid ENS name; not a string\", \"name\", name);\n }\n let current = name;\n let result = Zeros;\n while (current.length) {\n const partition = current.match(Partition);\n if (partition == null || partition[2] === \"\") {\n return logger.throwArgumentError(\"invalid ENS name; missing component\", \"name\", name);\n }\n const label = toUtf8Bytes(nameprep(partition[3]));\n result = keccak256(concat([result, keccak256(label)]));\n current = partition[2] || \"\";\n }\n return hexlify(result);\n}\nexport function dnsEncode(name) {\n if (typeof (name) !== \"string\") {\n logger.throwArgumentError(\"invalid DNS name; not a string\", \"name\", name);\n }\n if (name === \"\") {\n return \"0x00\";\n }\n // @TODO: should we enforce the 255 octet limit?\n return concat(name.split(\".\").map((comp) => {\n if (comp === \"\") {\n logger.throwArgumentError(\"invalid DNS name; missing component\", \"name\", name);\n }\n // We jam in an _ prefix to fill in with the length later\n // Note: Nameprep throws if the component is over 63 bytes\n const bytes = toUtf8Bytes(\"_\" + nameprep(comp));\n bytes[0] = bytes.length - 1;\n return bytes;\n })) + \"00\";\n}\n//# sourceMappingURL=namehash.js.map","import { concat } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nexport const messagePrefix = \"\\x19Ethereum Signed Message:\\n\";\nexport function hashMessage(message) {\n if (typeof (message) === \"string\") {\n message = toUtf8Bytes(message);\n }\n return keccak256(concat([\n toUtf8Bytes(messagePrefix),\n toUtf8Bytes(String(message.length)),\n message\n ]));\n}\n//# sourceMappingURL=message.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _TypedDataEncoder_instances, _TypedDataEncoder_types, _TypedDataEncoder_fullTypes, _TypedDataEncoder_encoderCache, _TypedDataEncoder_getEncoder;\n//import { TypedDataDomain, TypedDataField } from \"@ethersproject/providerabstract-signer\";\nimport { getAddress } from \"@ethersproject/address\";\nimport { arrayify, concat, hexlify, zeroPadLeft, isHexString } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { mask, toHex, toTwos } from \"@ethersproject/math\";\nimport { id } from \"./id.js\";\nimport { logger } from \"./logger.js\";\nconst padding = new Uint8Array(32);\npadding.fill(0);\nconst BN__1 = BigInt(-1);\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_MAX_UINT256 = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\n;\n;\nfunction hexPadRight(value) {\n const bytes = arrayify(value);\n const padOffset = bytes.length % 32;\n if (padOffset) {\n return concat([bytes, padding.slice(padOffset)]);\n }\n return hexlify(bytes);\n}\nconst hexTrue = toHex(BN_1, 32);\nconst hexFalse = toHex(BN_0, 32);\nconst domainFieldTypes = {\n name: \"string\",\n version: \"string\",\n chainId: \"uint256\",\n verifyingContract: \"address\",\n salt: \"bytes32\"\n};\nconst domainFieldNames = [\n \"name\", \"version\", \"chainId\", \"verifyingContract\", \"salt\"\n];\nfunction checkString(key) {\n return function (value) {\n if (typeof (value) !== \"string\") {\n logger.throwArgumentError(`invalid domain value for ${JSON.stringify(key)}`, `domain.${key}`, value);\n }\n return value;\n };\n}\nconst domainChecks = {\n name: checkString(\"name\"),\n version: checkString(\"version\"),\n chainId: function (value) {\n return logger.getBigInt(value, \"domain.chainId\");\n },\n verifyingContract: function (value) {\n try {\n return getAddress(value).toLowerCase();\n }\n catch (error) { }\n return logger.throwArgumentError(`invalid domain value \"verifyingContract\"`, \"domain.verifyingContract\", value);\n },\n salt: function (value) {\n const bytes = logger.getBytes(value, \"domain.salt\");\n if (bytes.length !== 32) {\n logger.throwArgumentError(`invalid domain value \"salt\"`, \"domain.salt\", value);\n }\n return hexlify(bytes);\n }\n};\nfunction getBaseEncoder(type) {\n // intXX and uintXX\n {\n const match = type.match(/^(u?)int(\\d*)$/);\n if (match) {\n const signed = (match[1] === \"\");\n const width = parseInt(match[2] || \"256\");\n if (width % 8 !== 0 || width > 256 || (match[2] && match[2] !== String(width))) {\n logger.throwArgumentError(\"invalid numeric width\", \"type\", type);\n }\n const boundsUpper = mask(BN_MAX_UINT256, signed ? (width - 1) : width);\n const boundsLower = signed ? ((boundsUpper + BN_1) * BN__1) : BN_0;\n return function (_value) {\n const value = logger.getBigInt(_value, \"value\");\n if (value < boundsLower || value > boundsUpper) {\n logger.throwArgumentError(`value out-of-bounds for ${type}`, \"value\", value);\n }\n return toHex(toTwos(value, 256), 32);\n };\n }\n }\n // bytesXX\n {\n const match = type.match(/^bytes(\\d+)$/);\n if (match) {\n const width = parseInt(match[1]);\n if (width === 0 || width > 32 || match[1] !== String(width)) {\n logger.throwArgumentError(\"invalid bytes width\", \"type\", type);\n }\n return function (value) {\n const bytes = arrayify(value);\n if (bytes.length !== width) {\n logger.throwArgumentError(`invalid length for ${type}`, \"value\", value);\n }\n return hexPadRight(value);\n };\n }\n }\n switch (type) {\n case \"address\": return function (value) {\n return zeroPadLeft(getAddress(value), 32);\n };\n case \"bool\": return function (value) {\n return ((!value) ? hexFalse : hexTrue);\n };\n case \"bytes\": return function (value) {\n return keccak256(value);\n };\n case \"string\": return function (value) {\n return id(value);\n };\n }\n return null;\n}\nfunction encodeType(name, fields) {\n return `${name}(${fields.map(({ name, type }) => (type + \" \" + name)).join(\",\")})`;\n}\nexport class TypedDataEncoder {\n constructor(types) {\n _TypedDataEncoder_instances.add(this);\n _TypedDataEncoder_types.set(this, void 0);\n _TypedDataEncoder_fullTypes.set(this, void 0);\n _TypedDataEncoder_encoderCache.set(this, void 0);\n __classPrivateFieldSet(this, _TypedDataEncoder_types, JSON.stringify(types), \"f\");\n __classPrivateFieldSet(this, _TypedDataEncoder_fullTypes, new Map(), \"f\");\n __classPrivateFieldSet(this, _TypedDataEncoder_encoderCache, new Map(), \"f\");\n // Link struct types to their direct child structs\n const links = new Map();\n // Link structs to structs which contain them as a child\n const parents = new Map();\n // Link all subtypes within a given struct\n const subtypes = new Map();\n Object.keys(types).forEach((type) => {\n links.set(type, new Set());\n parents.set(type, []);\n subtypes.set(type, new Set());\n });\n for (const name in types) {\n const uniqueNames = new Set();\n for (const field of types[name]) {\n // Check each field has a unique name\n if (uniqueNames.has(field.name)) {\n logger.throwArgumentError(`duplicate variable name ${JSON.stringify(field.name)} in ${JSON.stringify(name)}`, \"types\", types);\n }\n uniqueNames.add(field.name);\n // Get the base type (drop any array specifiers)\n const baseType = (field.type.match(/^([^\\x5b]*)(\\x5b|$)/))[1] || null;\n if (baseType === name) {\n logger.throwArgumentError(`circular type reference to ${JSON.stringify(baseType)}`, \"types\", types);\n }\n // Is this a base encoding type?\n const encoder = getBaseEncoder(baseType);\n if (encoder) {\n continue;\n }\n if (!parents.has(baseType)) {\n logger.throwArgumentError(`unknown type ${JSON.stringify(baseType)}`, \"types\", types);\n }\n // Add linkage\n parents.get(baseType).push(name);\n links.get(name).add(baseType);\n }\n }\n // Deduce the primary type\n const primaryTypes = Array.from(parents.keys()).filter((n) => (parents.get(n).length === 0));\n if (primaryTypes.length === 0) {\n logger.throwArgumentError(\"missing primary type\", \"types\", types);\n }\n else if (primaryTypes.length > 1) {\n logger.throwArgumentError(`ambiguous primary types or unused types: ${primaryTypes.map((t) => (JSON.stringify(t))).join(\", \")}`, \"types\", types);\n }\n defineProperties(this, { primaryType: primaryTypes[0] });\n // Check for circular type references\n function checkCircular(type, found) {\n if (found.has(type)) {\n logger.throwArgumentError(`circular type reference to ${JSON.stringify(type)}`, \"types\", types);\n }\n found.add(type);\n for (const child of links.get(type)) {\n if (!parents.has(child)) {\n continue;\n }\n // Recursively check children\n checkCircular(child, found);\n // Mark all ancestors as having this decendant\n for (const subtype of found) {\n subtypes.get(subtype).add(child);\n }\n }\n found.delete(type);\n }\n checkCircular(this.primaryType, new Set());\n // Compute each fully describe type\n for (const [name, set] of subtypes) {\n const st = Array.from(set);\n st.sort();\n __classPrivateFieldGet(this, _TypedDataEncoder_fullTypes, \"f\").set(name, encodeType(name, types[name]) + st.map((t) => encodeType(t, types[t])).join(\"\"));\n }\n }\n get types() {\n return JSON.parse(__classPrivateFieldGet(this, _TypedDataEncoder_types, \"f\"));\n }\n getEncoder(type) {\n let encoder = __classPrivateFieldGet(this, _TypedDataEncoder_encoderCache, \"f\").get(type);\n if (!encoder) {\n encoder = __classPrivateFieldGet(this, _TypedDataEncoder_instances, \"m\", _TypedDataEncoder_getEncoder).call(this, type);\n __classPrivateFieldGet(this, _TypedDataEncoder_encoderCache, \"f\").set(type, encoder);\n }\n return encoder;\n }\n encodeType(name) {\n const result = __classPrivateFieldGet(this, _TypedDataEncoder_fullTypes, \"f\").get(name);\n if (!result) {\n return logger.throwArgumentError(`unknown type: ${JSON.stringify(name)}`, \"name\", name);\n }\n return result;\n }\n encodeData(type, value) {\n return this.getEncoder(type)(value);\n }\n hashStruct(name, value) {\n return keccak256(this.encodeData(name, value));\n }\n encode(value) {\n return this.encodeData(this.primaryType, value);\n }\n hash(value) {\n return this.hashStruct(this.primaryType, value);\n }\n _visit(type, value, callback) {\n // Basic encoder type (address, bool, uint256, etc)\n {\n const encoder = getBaseEncoder(type);\n if (encoder) {\n return callback(type, value);\n }\n }\n // Array\n const match = type.match(/^(.*)(\\x5b(\\d*)\\x5d)$/);\n if (match) {\n const subtype = match[1];\n const length = parseInt(match[3]);\n if (length >= 0 && value.length !== length) {\n logger.throwArgumentError(\"array length mismatch; expected length ${ arrayLength }\", \"value\", value);\n }\n return value.map((v) => this._visit(subtype, v, callback));\n }\n // Struct\n const fields = this.types[type];\n if (fields) {\n return fields.reduce((accum, { name, type }) => {\n accum[name] = this._visit(type, value[name], callback);\n return accum;\n }, {});\n }\n return logger.throwArgumentError(`unknown type: ${type}`, \"type\", type);\n }\n visit(value, callback) {\n return this._visit(this.primaryType, value, callback);\n }\n static from(types) {\n return new TypedDataEncoder(types);\n }\n static getPrimaryType(types) {\n return TypedDataEncoder.from(types).primaryType;\n }\n static hashStruct(name, types, value) {\n return TypedDataEncoder.from(types).hashStruct(name, value);\n }\n static hashDomain(domain) {\n const domainFields = [];\n for (const name in domain) {\n const type = domainFieldTypes[name];\n if (!type) {\n logger.throwArgumentError(`invalid typed-data domain key: ${JSON.stringify(name)}`, \"domain\", domain);\n }\n domainFields.push({ name, type });\n }\n domainFields.sort((a, b) => {\n return domainFieldNames.indexOf(a.name) - domainFieldNames.indexOf(b.name);\n });\n return TypedDataEncoder.hashStruct(\"EIP712Domain\", { EIP712Domain: domainFields }, domain);\n }\n static encode(domain, types, value) {\n return concat([\n \"0x1901\",\n TypedDataEncoder.hashDomain(domain),\n TypedDataEncoder.from(types).hash(value)\n ]);\n }\n static hash(domain, types, value) {\n return keccak256(TypedDataEncoder.encode(domain, types, value));\n }\n // Replaces all address types with ENS names with their looked up address\n static async resolveNames(domain, types, value, resolveName) {\n // Make a copy to isolate it from the object passed in\n domain = Object.assign({}, domain);\n // Look up all ENS names\n const ensCache = {};\n // Do we need to look up the domain's verifyingContract?\n if (domain.verifyingContract && !isHexString(domain.verifyingContract, 20)) {\n ensCache[domain.verifyingContract] = \"0x\";\n }\n // We are going to use the encoder to visit all the base values\n const encoder = TypedDataEncoder.from(types);\n // Get a list of all the addresses\n encoder.visit(value, (type, value) => {\n if (type === \"address\" && !isHexString(value, 20)) {\n ensCache[value] = \"0x\";\n }\n return value;\n });\n // Lookup each name\n for (const name in ensCache) {\n ensCache[name] = await resolveName(name);\n }\n // Replace the domain verifyingContract if needed\n if (domain.verifyingContract && ensCache[domain.verifyingContract]) {\n domain.verifyingContract = ensCache[domain.verifyingContract];\n }\n // Replace all ENS names with their address\n value = encoder.visit(value, (type, value) => {\n if (type === \"address\" && ensCache[value]) {\n return ensCache[value];\n }\n return value;\n });\n return { domain, value };\n }\n static getPayload(domain, types, value) {\n // Validate the domain fields\n TypedDataEncoder.hashDomain(domain);\n // Derive the EIP712Domain Struct reference type\n const domainValues = {};\n const domainTypes = [];\n domainFieldNames.forEach((name) => {\n const value = domain[name];\n if (value == null) {\n return;\n }\n domainValues[name] = domainChecks[name](value);\n domainTypes.push({ name, type: domainFieldTypes[name] });\n });\n const encoder = TypedDataEncoder.from(types);\n const typesWithDomain = Object.assign({}, types);\n if (typesWithDomain.EIP712Domain) {\n logger.throwArgumentError(\"types must not contain EIP712Domain type\", \"types.EIP712Domain\", types);\n }\n else {\n typesWithDomain.EIP712Domain = domainTypes;\n }\n // Validate the data structures and types\n encoder.encode(value);\n return {\n types: typesWithDomain,\n domain: domainValues,\n primaryType: encoder.primaryType,\n message: encoder.visit(value, (type, value) => {\n // bytes\n if (type.match(/^bytes(\\d*)/)) {\n return hexlify(logger.getBytes(value));\n }\n // uint or int\n if (type.match(/^u?int/)) {\n return logger.getBigInt(value).toString();\n }\n switch (type) {\n case \"address\":\n return value.toLowerCase();\n case \"bool\":\n return !!value;\n case \"string\":\n if (typeof (value) !== \"string\") {\n logger.throwArgumentError(`invalid string`, \"value\", value);\n }\n return value;\n }\n return logger.throwArgumentError(\"unsupported type\", \"type\", type);\n })\n };\n }\n}\n_TypedDataEncoder_types = new WeakMap(), _TypedDataEncoder_fullTypes = new WeakMap(), _TypedDataEncoder_encoderCache = new WeakMap(), _TypedDataEncoder_instances = new WeakSet(), _TypedDataEncoder_getEncoder = function _TypedDataEncoder_getEncoder(type) {\n // Basic encoder type (address, bool, uint256, etc)\n {\n const encoder = getBaseEncoder(type);\n if (encoder) {\n return encoder;\n }\n }\n // Array\n const match = type.match(/^(.*)(\\x5b(\\d*)\\x5d)$/);\n if (match) {\n const subtype = match[1];\n const subEncoder = this.getEncoder(subtype);\n const length = parseInt(match[3]);\n return (value) => {\n if (length >= 0 && value.length !== length) {\n logger.throwArgumentError(\"array length mismatch; expected length ${ arrayLength }\", \"value\", value);\n }\n let result = value.map(subEncoder);\n if (__classPrivateFieldGet(this, _TypedDataEncoder_fullTypes, \"f\").has(subtype)) {\n result = result.map(keccak256);\n }\n return keccak256(concat(result));\n };\n }\n // Struct\n const fields = this.types[type];\n if (fields) {\n const encodedType = id(__classPrivateFieldGet(this, _TypedDataEncoder_fullTypes, \"f\").get(type));\n return (value) => {\n const values = fields.map(({ name, type }) => {\n const result = this.getEncoder(type)(value[name]);\n if (__classPrivateFieldGet(this, _TypedDataEncoder_fullTypes, \"f\").has(type)) {\n return keccak256(result);\n }\n return result;\n });\n values.unshift(encodedType);\n return concat(values);\n };\n }\n return logger.throwArgumentError(`unknown type: ${type}`, \"type\", type);\n};\n//# sourceMappingURL=typed-data.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Interface_instances, _Interface_errors, _Interface_events, _Interface_functions, _Interface_abiCoder, _Interface_getFunction, _Interface_getEvent;\nimport { arrayify, concat, dataSlice, hexlify, zeroPadLeft, isHexString } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { id } from \"@ethersproject/hash\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { defaultAbiCoder } from \"./abi-coder.js\";\nimport { checkResultErrors, Result } from \"./coders/abstract-coder.js\";\nimport { ConstructorFragment, ErrorFragment, EventFragment, FormatType, Fragment, FunctionFragment, ParamType } from \"./fragments.js\";\nimport { logger } from \"./logger.js\";\nimport { Typed } from \"./typed.js\";\nexport { checkResultErrors, Result };\nexport class LogDescription {\n constructor(fragment, topic, args) {\n const name = fragment.name, signature = fragment.format();\n defineProperties(this, {\n fragment, name, signature, topic, args\n });\n }\n}\nexport class TransactionDescription {\n constructor(fragment, selector, args, value) {\n const name = fragment.name, signature = fragment.format();\n defineProperties(this, {\n fragment, name, args, signature, selector, value\n });\n }\n}\nexport class ErrorDescription {\n constructor(fragment, selector, args) {\n const name = fragment.name, signature = fragment.format();\n defineProperties(this, {\n fragment, name, args, signature, selector\n });\n }\n}\nexport class Indexed {\n constructor(hash) {\n defineProperties(this, { hash, _isIndexed: true });\n }\n static isIndexed(value) {\n return !!(value && value._isIndexed);\n }\n}\n// https://docs.soliditylang.org/en/v0.8.13/control-structures.html?highlight=panic#panic-via-assert-and-error-via-require\nconst PanicReasons = {\n \"0\": \"generic panic\",\n \"1\": \"assert(false)\",\n \"17\": \"arithmetic overflow\",\n \"18\": \"division or modulo by zero\",\n \"33\": \"enum overflow\",\n \"34\": \"invalid encoded storage byte array accessed\",\n \"49\": \"out-of-bounds array access; popping on an empty array\",\n \"50\": \"out-of-bounds access of an array or bytesN\",\n \"65\": \"out of memory\",\n \"81\": \"uninitialized function\",\n};\nconst BuiltinErrors = {\n \"0x08c379a0\": {\n signature: \"Error(string)\",\n name: \"Error\",\n inputs: [\"string\"],\n reason: (message) => {\n return `reverted with reason string ${JSON.stringify(message)}`;\n }\n },\n \"0x4e487b71\": {\n signature: \"Panic(uint256)\",\n name: \"Panic\",\n inputs: [\"uint256\"],\n reason: (code) => {\n let reason = \"unknown panic code\";\n if (code >= 0 && code <= 0xff && PanicReasons[code.toString()]) {\n reason = PanicReasons[code.toString()];\n }\n return `reverted with panic code 0x${code.toString(16)} (${reason})`;\n }\n }\n};\nexport class Interface {\n constructor(fragments) {\n _Interface_instances.add(this);\n _Interface_errors.set(this, void 0);\n _Interface_events.set(this, void 0);\n _Interface_functions.set(this, void 0);\n // #structs: Map;\n _Interface_abiCoder.set(this, void 0);\n let abi = [];\n if (typeof (fragments) === \"string\") {\n abi = JSON.parse(fragments);\n }\n else {\n abi = fragments;\n }\n __classPrivateFieldSet(this, _Interface_functions, new Map(), \"f\");\n __classPrivateFieldSet(this, _Interface_errors, new Map(), \"f\");\n __classPrivateFieldSet(this, _Interface_events, new Map(), \"f\");\n // this.#structs = new Map();\n defineProperties(this, {\n fragments: Object.freeze(abi.map((f) => Fragment.from(f)).filter((f) => (f != null))),\n });\n __classPrivateFieldSet(this, _Interface_abiCoder, this.getAbiCoder(), \"f\");\n // Add all fragments by their signature\n this.fragments.forEach((fragment) => {\n let bucket;\n switch (fragment.type) {\n case \"constructor\":\n if (this.deploy) {\n logger.warn(\"duplicate definition - constructor\");\n return;\n }\n //checkNames(fragment, \"input\", fragment.inputs);\n defineProperties(this, { deploy: fragment });\n return;\n case \"function\":\n //checkNames(fragment, \"input\", fragment.inputs);\n //checkNames(fragment, \"output\", (fragment).outputs);\n bucket = __classPrivateFieldGet(this, _Interface_functions, \"f\");\n break;\n case \"event\":\n //checkNames(fragment, \"input\", fragment.inputs);\n bucket = __classPrivateFieldGet(this, _Interface_events, \"f\");\n break;\n case \"error\":\n bucket = __classPrivateFieldGet(this, _Interface_errors, \"f\");\n break;\n default:\n return;\n }\n const signature = fragment.format();\n if (bucket.has(signature)) {\n logger.warn(\"duplicate definition - \" + signature);\n return;\n }\n bucket.set(signature, fragment);\n });\n // If we do not have a constructor add a default\n if (!this.deploy) {\n defineProperties(this, {\n deploy: ConstructorFragment.fromString(\"constructor()\")\n });\n }\n }\n // @TODO: multi sig?\n format(format) {\n if (!format) {\n format = FormatType.full;\n }\n if (format === FormatType.sighash) {\n logger.throwArgumentError(\"interface does not support formatting sighash\", \"format\", format);\n }\n const abi = this.fragments.map((f) => f.format(format));\n // We need to re-bundle the JSON fragments a bit\n if (format === FormatType.json) {\n return JSON.stringify(abi.map((j) => JSON.parse(j)));\n }\n return abi;\n }\n getAbiCoder() {\n return defaultAbiCoder;\n }\n getFunctionName(key) {\n return (__classPrivateFieldGet(this, _Interface_instances, \"m\", _Interface_getFunction).call(this, key, null, false)).name;\n }\n getFunction(key, values) {\n return __classPrivateFieldGet(this, _Interface_instances, \"m\", _Interface_getFunction).call(this, key, values || null, true);\n }\n getEventName(key) {\n return (__classPrivateFieldGet(this, _Interface_instances, \"m\", _Interface_getEvent).call(this, key, null, false)).name;\n }\n getEvent(key, values) {\n return __classPrivateFieldGet(this, _Interface_instances, \"m\", _Interface_getEvent).call(this, key, values || null, true);\n }\n // Find a function definition by any means necessary (unless it is ambiguous)\n getError(key, values) {\n if (isHexString(key)) {\n const selector = key.toLowerCase();\n for (const fragment of __classPrivateFieldGet(this, _Interface_errors, \"f\").values()) {\n if (selector === this.getSelector(fragment)) {\n return fragment;\n }\n }\n logger.throwArgumentError(\"no matching error\", \"selector\", key);\n }\n // It is a bare name, look up the function (will return null if ambiguous)\n if (key.indexOf(\"(\") === -1) {\n const matching = [];\n for (const [name, fragment] of __classPrivateFieldGet(this, _Interface_errors, \"f\")) {\n if (name.split(\"(\" /* fix:) */)[0] === key) {\n matching.push(fragment);\n }\n }\n if (matching.length === 0) {\n logger.throwArgumentError(\"no matching error\", \"name\", key);\n }\n else if (matching.length > 1) {\n // @TODO: refine by Typed\n logger.throwArgumentError(\"multiple matching errors\", \"name\", key);\n }\n return matching[0];\n }\n // Normalize the signature and lookup the function\n const result = __classPrivateFieldGet(this, _Interface_errors, \"f\").get(ErrorFragment.fromString(key).format());\n if (result) {\n return result;\n }\n return logger.throwArgumentError(\"no matching error\", \"signature\", key);\n }\n // Get the 4-byte selector used by Solidity to identify a function\n getSelector(fragment) {\n /*\n if (typeof(fragment) === \"string\") {\n const matches: Array = [ ];\n\n try { matches.push(this.getFunction(fragment)); } catch (error) { }\n try { matches.push(this.getError(fragment)); } catch (_) { }\n\n if (matches.length === 0) {\n logger.throwArgumentError(\"unknown fragment\", \"key\", fragment);\n } else if (matches.length > 1) {\n logger.throwArgumentError(\"ambiguous fragment matches function and error\", \"key\", fragment);\n }\n\n fragment = matches[0];\n }\n */\n return dataSlice(id(fragment.format()), 0, 4);\n }\n // Get the 32-byte topic hash used by Solidity to identify an event\n getEventTopic(fragment) {\n //if (typeof(fragment) === \"string\") { fragment = this.getEvent(eventFragment); }\n return id(fragment.format());\n }\n _decodeParams(params, data) {\n return __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(params, data);\n }\n _encodeParams(params, values) {\n return __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").encode(params, values);\n }\n encodeDeploy(values) {\n return this._encodeParams(this.deploy.inputs, values || []);\n }\n decodeErrorResult(fragment, data) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getError(fragment);\n }\n if (dataSlice(data, 0, 4) !== this.getSelector(fragment)) {\n logger.throwArgumentError(`data signature does not match error ${fragment.name}.`, \"data\", data);\n }\n return this._decodeParams(fragment.inputs, dataSlice(data, 4));\n }\n encodeErrorResult(fragment, values) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getError(fragment);\n }\n return concat([\n this.getSelector(fragment),\n this._encodeParams(fragment.inputs, values || [])\n ]);\n }\n // Decode the data for a function call (e.g. tx.data)\n decodeFunctionData(fragment, data) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getFunction(fragment);\n }\n if (dataSlice(data, 0, 4) !== this.getSelector(fragment)) {\n logger.throwArgumentError(`data signature does not match function ${fragment.name}.`, \"data\", data);\n }\n return this._decodeParams(fragment.inputs, dataSlice(data, 4));\n }\n // Encode the data for a function call (e.g. tx.data)\n encodeFunctionData(fragment, values) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getFunction(fragment);\n }\n return concat([\n this.getSelector(fragment),\n this._encodeParams(fragment.inputs, values || [])\n ]);\n }\n // Decode the result from a function call (e.g. from eth_call)\n decodeFunctionResult(fragment, data) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getFunction(fragment);\n }\n let message = \"invalid length for result data\";\n const bytes = arrayify(data);\n if ((bytes.length % 32) === 0) {\n try {\n return __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(fragment.outputs, bytes);\n }\n catch (error) {\n message = \"could not decode result data\";\n }\n }\n // Call returned data with no error, but the data is junk\n return logger.throwError(message, \"BAD_DATA\", {\n value: hexlify(bytes),\n info: { method: fragment.name, signature: fragment.format() }\n });\n }\n makeError(fragment, _data, tx) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getFunction(fragment);\n }\n const data = logger.getBytes(_data);\n let args = undefined;\n if (tx) {\n try {\n args = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(fragment.inputs, tx.data || \"0x\");\n }\n catch (error) {\n console.log(error);\n }\n }\n let errorArgs = undefined;\n let errorName = undefined;\n let errorSignature = undefined;\n let reason = \"unknown reason\";\n if (data.length === 0) {\n reason = \"missing error reason\";\n }\n else if ((data.length % 32) === 4) {\n const selector = hexlify(data.slice(0, 4));\n const builtin = BuiltinErrors[selector];\n if (builtin) {\n try {\n errorName = builtin.name;\n errorSignature = builtin.signature;\n errorArgs = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(builtin.inputs, data.slice(4));\n reason = builtin.reason(...errorArgs);\n }\n catch (error) {\n console.log(error); // @TODO: remove\n }\n }\n else {\n reason = \"unknown custom error\";\n try {\n const error = this.getError(selector);\n errorName = error.name;\n errorSignature = error.format();\n reason = `custom error: ${errorSignature}`;\n try {\n errorArgs = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(error.inputs, data.slice(4));\n }\n catch (error) {\n reason = `custom error: ${errorSignature} (coult not decode error data)`;\n }\n }\n catch (error) {\n console.log(error); // @TODO: remove\n }\n }\n }\n return logger.makeError(\"call revert exception\", \"CALL_EXCEPTION\", {\n data: hexlify(data), transaction: null,\n method: fragment.name, signature: fragment.format(), args,\n errorArgs, errorName, errorSignature, reason\n });\n }\n // Encode the result for a function call (e.g. for eth_call)\n encodeFunctionResult(functionFragment, values) {\n if (typeof (functionFragment) === \"string\") {\n functionFragment = this.getFunction(functionFragment);\n }\n return hexlify(__classPrivateFieldGet(this, _Interface_abiCoder, \"f\").encode(functionFragment.outputs, values || []));\n }\n /*\n spelunk(inputs: Array, values: ReadonlyArray, processfunc: (type: string, value: any) => Promise): Promise> {\n const promises: Array> = [ ];\n const process = function(type: ParamType, value: any): any {\n if (type.baseType === \"array\") {\n return descend(type.child\n }\n if (type. === \"address\") {\n }\n };\n \n const descend = function (inputs: Array, values: ReadonlyArray) {\n if (inputs.length !== values.length) { throw new Error(\"length mismatch\"); }\n \n };\n \n const result: Array = [ ];\n values.forEach((value, index) => {\n if (value == null) {\n topics.push(null);\n } else if (param.baseType === \"array\" || param.baseType === \"tuple\") {\n logger.throwArgumentError(\"filtering with tuples or arrays not supported\", (\"contract.\" + param.name), value);\n } else if (Array.isArray(value)) {\n topics.push(value.map((value) => encodeTopic(param, value)));\n } else {\n topics.push(encodeTopic(param, value));\n }\n });\n }\n */\n // Create the filter for the event with search criteria (e.g. for eth_filterLog)\n encodeFilterTopics(eventFragment, values) {\n if (typeof (eventFragment) === \"string\") {\n eventFragment = this.getEvent(eventFragment);\n }\n if (values.length > eventFragment.inputs.length) {\n logger.throwError(\"too many arguments for \" + eventFragment.format(), \"UNEXPECTED_ARGUMENT\", {\n count: values.length,\n expectedCount: eventFragment.inputs.length\n });\n }\n const topics = [];\n if (!eventFragment.anonymous) {\n topics.push(this.getEventTopic(eventFragment));\n }\n const encodeTopic = (param, value) => {\n if (param.type === \"string\") {\n return id(value);\n }\n else if (param.type === \"bytes\") {\n return keccak256(hexlify(value));\n }\n // Check addresses are valid\n if (param.type === \"address\") {\n __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").encode([\"address\"], [value]);\n }\n return zeroPadLeft(hexlify(value), 32);\n //@TOOD should probably be return toHex(value, 32)\n };\n values.forEach((value, index) => {\n const param = eventFragment.inputs[index];\n if (!param.indexed) {\n if (value != null) {\n logger.throwArgumentError(\"cannot filter non-indexed parameters; must be null\", (\"contract.\" + param.name), value);\n }\n return;\n }\n if (value == null) {\n topics.push(null);\n }\n else if (param.baseType === \"array\" || param.baseType === \"tuple\") {\n logger.throwArgumentError(\"filtering with tuples or arrays not supported\", (\"contract.\" + param.name), value);\n }\n else if (Array.isArray(value)) {\n topics.push(value.map((value) => encodeTopic(param, value)));\n }\n else {\n topics.push(encodeTopic(param, value));\n }\n });\n // Trim off trailing nulls\n while (topics.length && topics[topics.length - 1] === null) {\n topics.pop();\n }\n return topics;\n }\n encodeEventLog(eventFragment, values) {\n if (typeof (eventFragment) === \"string\") {\n eventFragment = this.getEvent(eventFragment);\n }\n const topics = [];\n const dataTypes = [];\n const dataValues = [];\n if (!eventFragment.anonymous) {\n topics.push(this.getEventTopic(eventFragment));\n }\n if (values.length !== eventFragment.inputs.length) {\n logger.throwArgumentError(\"event arguments/values mismatch\", \"values\", values);\n }\n eventFragment.inputs.forEach((param, index) => {\n const value = values[index];\n if (param.indexed) {\n if (param.type === \"string\") {\n topics.push(id(value));\n }\n else if (param.type === \"bytes\") {\n topics.push(keccak256(value));\n }\n else if (param.baseType === \"tuple\" || param.baseType === \"array\") {\n // @TODO\n throw new Error(\"not implemented\");\n }\n else {\n topics.push(__classPrivateFieldGet(this, _Interface_abiCoder, \"f\").encode([param.type], [value]));\n }\n }\n else {\n dataTypes.push(param);\n dataValues.push(value);\n }\n });\n return {\n data: __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").encode(dataTypes, dataValues),\n topics: topics\n };\n }\n // Decode a filter for the event and the search criteria\n decodeEventLog(eventFragment, data, topics) {\n if (typeof (eventFragment) === \"string\") {\n eventFragment = this.getEvent(eventFragment);\n }\n if (topics != null && !eventFragment.anonymous) {\n const eventTopic = this.getEventTopic(eventFragment);\n if (!isHexString(topics[0], 32) || topics[0].toLowerCase() !== eventTopic) {\n logger.throwArgumentError(\"fragment/topic mismatch\", \"topics[0]\", topics[0]);\n }\n topics = topics.slice(1);\n }\n const indexed = [];\n const nonIndexed = [];\n const dynamic = [];\n eventFragment.inputs.forEach((param, index) => {\n if (param.indexed) {\n if (param.type === \"string\" || param.type === \"bytes\" || param.baseType === \"tuple\" || param.baseType === \"array\") {\n indexed.push(ParamType.fromObject({ type: \"bytes32\", name: param.name }));\n dynamic.push(true);\n }\n else {\n indexed.push(param);\n dynamic.push(false);\n }\n }\n else {\n nonIndexed.push(param);\n dynamic.push(false);\n }\n });\n const resultIndexed = (topics != null) ? __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(indexed, concat(topics)) : null;\n const resultNonIndexed = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(nonIndexed, data, true);\n //const result: (Array & { [ key: string ]: any }) = [ ];\n const values = [];\n const keys = [];\n let nonIndexedIndex = 0, indexedIndex = 0;\n eventFragment.inputs.forEach((param, index) => {\n let value = null;\n if (param.indexed) {\n if (resultIndexed == null) {\n value = new Indexed(null);\n }\n else if (dynamic[index]) {\n value = new Indexed(resultIndexed[indexedIndex++]);\n }\n else {\n try {\n value = resultIndexed[indexedIndex++];\n }\n catch (error) {\n value = error;\n }\n }\n }\n else {\n try {\n value = resultNonIndexed[nonIndexedIndex++];\n }\n catch (error) {\n value = error;\n }\n }\n values.push(value);\n keys.push(param.name || null);\n });\n return Result.fromItems(values, keys);\n }\n // Given a transaction, find the matching function fragment (if any) and\n // determine all its properties and call parameters\n parseTransaction(tx) {\n const data = logger.getBytes(tx.data, \"tx.data\");\n const value = logger.getBigInt((tx.value != null) ? tx.value : 0, \"tx.value\");\n const fragment = this.getFunction(hexlify(data.slice(0, 4)));\n if (!fragment) {\n return null;\n }\n const args = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(fragment.inputs, data.slice(4));\n return new TransactionDescription(fragment, this.getSelector(fragment), args, value);\n }\n // @TODO\n //parseCallResult(data: BytesLike): ??\n // Given an event log, find the matching event fragment (if any) and\n // determine all its properties and values\n parseLog(log) {\n const fragment = this.getEvent(log.topics[0]);\n if (!fragment || fragment.anonymous) {\n return null;\n }\n // @TODO: If anonymous, and the only method, and the input count matches, should we parse?\n // Probably not, because just because it is the only event in the ABI does\n // not mean we have the full ABI; maybe just a fragment?\n return new LogDescription(fragment, this.getEventTopic(fragment), this.decodeEventLog(fragment, log.data, log.topics));\n }\n parseError(data) {\n const hexData = hexlify(data);\n const fragment = this.getError(dataSlice(hexData, 0, 4));\n if (!fragment) {\n return null;\n }\n const args = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(fragment.inputs, dataSlice(hexData, 4));\n return new ErrorDescription(fragment, this.getSelector(fragment), args);\n }\n static from(value) {\n // Already an Interface, which is immutable\n if (value instanceof Interface) {\n return value;\n }\n // JSON\n if (typeof (value) === \"string\") {\n return new Interface(JSON.parse(value));\n }\n // Maybe an interface from an older version, or from a symlinked copy\n if (typeof (value.format) === \"function\") {\n return new Interface(value.format(FormatType.json));\n }\n // Array of fragments\n return new Interface(value);\n }\n}\n_Interface_errors = new WeakMap(), _Interface_events = new WeakMap(), _Interface_functions = new WeakMap(), _Interface_abiCoder = new WeakMap(), _Interface_instances = new WeakSet(), _Interface_getFunction = function _Interface_getFunction(key, values, forceUnique) {\n // Selector\n if (isHexString(key)) {\n const selector = key.toLowerCase();\n for (const fragment of __classPrivateFieldGet(this, _Interface_functions, \"f\").values()) {\n if (selector === this.getSelector(fragment)) {\n return fragment;\n }\n }\n logger.throwArgumentError(\"no matching function\", \"selector\", key);\n }\n // It is a bare name, look up the function (will return null if ambiguous)\n if (key.indexOf(\"(\") === -1) {\n const matching = [];\n for (const [name, fragment] of __classPrivateFieldGet(this, _Interface_functions, \"f\")) {\n if (name.split(\"(\" /* fix:) */)[0] === key) {\n matching.push(fragment);\n }\n }\n if (values) {\n const lastValue = (values.length > 0) ? values[values.length - 1] : null;\n let valueLength = values.length;\n let allowOptions = true;\n if (Typed.isTyped(lastValue) && lastValue.type === \"overrides\") {\n allowOptions = false;\n valueLength--;\n }\n // Remove all matches that don't have a compatible length. The args\n // may contain an overrides, so the match may have n or n - 1 parameters\n for (let i = matching.length - 1; i >= 0; i--) {\n const inputs = matching[i].inputs.length;\n if (inputs !== valueLength && (!allowOptions || inputs !== valueLength - 1)) {\n matching.splice(i, 1);\n }\n }\n // Remove all matches that don't match the Typed signature\n for (let i = matching.length - 1; i >= 0; i--) {\n const inputs = matching[i].inputs;\n for (let j = 0; j < values.length; j++) {\n // Not a typed value\n if (!Typed.isTyped(values[j])) {\n continue;\n }\n // We are past the inputs\n if (j >= inputs.length) {\n if (values[j].type === \"overrides\") {\n continue;\n }\n matching.splice(i, 1);\n break;\n }\n // Make sure the value type matches the input type\n if (values[j].type !== inputs[j].baseType) {\n matching.splice(i, 1);\n break;\n }\n }\n }\n }\n // We found a single matching signature with an overrides, but the\n // last value is something that cannot possibly be an options\n if (matching.length === 1 && values && values.length !== matching[0].inputs.length) {\n const lastArg = values[values.length - 1];\n if (lastArg == null || Array.isArray(lastArg) || typeof (lastArg) !== \"object\") {\n matching.splice(0, 1);\n }\n }\n if (matching.length === 0) {\n logger.throwArgumentError(\"no matching function\", \"name\", key);\n }\n else if (matching.length > 1 && forceUnique) {\n const matchStr = matching.map((m) => JSON.stringify(m.format())).join(\", \");\n logger.throwArgumentError(`multiple matching functions (i.e. ${matchStr})`, \"name\", key);\n }\n return matching[0];\n }\n // Normalize the signature and lookup the function\n const result = __classPrivateFieldGet(this, _Interface_functions, \"f\").get(FunctionFragment.fromString(key).format());\n if (result) {\n return result;\n }\n return logger.throwArgumentError(\"no matching function\", \"signature\", key);\n}, _Interface_getEvent = function _Interface_getEvent(key, values, forceUnique) {\n // EventTopic\n if (isHexString(key)) {\n const eventTopic = key.toLowerCase();\n for (const fragment of __classPrivateFieldGet(this, _Interface_events, \"f\").values()) {\n if (eventTopic === this.getEventTopic(fragment)) {\n return fragment;\n }\n }\n logger.throwArgumentError(\"no matching event\", \"eventTopic\", key);\n }\n // It is a bare name, look up the function (will return null if ambiguous)\n if (key.indexOf(\"(\") === -1) {\n const matching = [];\n for (const [name, fragment] of __classPrivateFieldGet(this, _Interface_events, \"f\")) {\n if (name.split(\"(\" /* fix:) */)[0] === key) {\n matching.push(fragment);\n }\n }\n if (values) {\n // Remove all matches that don't have a compatible length.\n for (let i = matching.length - 1; i >= 0; i--) {\n if (matching[i].inputs.length < values.length) {\n matching.splice(i, 1);\n }\n }\n // Remove all matches that don't match the Typed signature\n for (let i = matching.length - 1; i >= 0; i--) {\n const inputs = matching[i].inputs;\n for (let j = 0; j < values.length; j++) {\n // Not a typed value\n if (!Typed.isTyped(values[j])) {\n continue;\n }\n // Make sure the value type matches the input type\n if (values[j].type !== inputs[j].baseType) {\n matching.splice(i, 1);\n break;\n }\n }\n }\n }\n if (matching.length === 0) {\n logger.throwArgumentError(\"no matching event\", \"name\", key);\n }\n else if (matching.length > 1 && forceUnique) {\n // @TODO: refine by Typed\n logger.throwArgumentError(\"multiple matching events\", \"name\", key);\n }\n return matching[0];\n }\n // Normalize the signature and lookup the function\n const result = __classPrivateFieldGet(this, _Interface_events, \"f\").get(EventFragment.fromString(key).format());\n if (result) {\n return result;\n }\n return logger.throwArgumentError(\"no matching event\", \"signature\", key);\n};\n//# sourceMappingURL=interface.js.map","export const version = \"@ethersproject/web@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { version } from \"./_version.js\";\nimport { Logger } from \"@ethersproject/logger\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _FetchResponse_props, _FetchResponse_error;\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { defineProperties, getStore } from \"@ethersproject/properties\";\nimport { toUtf8String } from \"@ethersproject/strings\";\nimport { logger } from \"./logger.js\";\n;\nexport class FetchResponse {\n constructor(statusCode, statusMessage, headers, body, request) {\n _FetchResponse_props.set(this, void 0);\n _FetchResponse_error.set(this, void 0);\n __classPrivateFieldSet(this, _FetchResponse_props, {\n statusCode,\n statusMessage,\n headers: Object.freeze(Object.assign({}, Object.keys(headers).reduce((accum, k) => {\n accum[k.toLowerCase()] = headers[k];\n return accum;\n }, {}))),\n body: ((body == null) ? null : new Uint8Array(body)),\n request: (request || null),\n }, \"f\");\n __classPrivateFieldSet(this, _FetchResponse_error, { message: \"\" }, \"f\");\n }\n toString() {\n const body = getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"body\");\n return ``;\n }\n get statusCode() { return getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"statusCode\"); }\n get statusMessage() { return getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"statusMessage\"); }\n get headers() { return getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"headers\"); }\n get body() {\n const body = getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"body\");\n return (body == null) ? null : new Uint8Array(body);\n }\n get bodyText() {\n try {\n const body = getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"body\");\n return (body == null) ? \"\" : toUtf8String(body);\n }\n catch (error) {\n return logger.throwError(\"response body is not valid UTF-8 data\", \"UNSUPPORTED_OPERATION\", {\n operation: \"bodyText\", info: { response: this }\n });\n }\n }\n get bodyJson() {\n try {\n return JSON.parse(this.bodyText);\n }\n catch (error) {\n return logger.throwError(\"response body is not valid JSON\", \"UNSUPPORTED_OPERATION\", {\n operation: \"bodyJson\", info: { response: this }\n });\n }\n }\n [(_FetchResponse_props = new WeakMap(), _FetchResponse_error = new WeakMap(), Symbol.iterator)]() {\n const headers = this.headers;\n const keys = Object.keys(headers);\n let index = 0;\n return {\n next: () => {\n if (index < keys.length) {\n const key = keys[index++];\n return {\n value: [key, headers[key]], done: false\n };\n }\n return { value: undefined, done: true };\n }\n };\n }\n makeServerError(message, error) {\n let statusMessage;\n if (!message) {\n message = `${this.statusCode} ${this.statusMessage}`;\n statusMessage = `CLIENT ESCALATED SERVER ERROR (${message})`;\n }\n else {\n statusMessage = `CLIENT ESCALATED SERVER ERROR (${this.statusCode} ${this.statusMessage}; ${message})`;\n }\n const response = new FetchResponse(599, statusMessage, this.headers, this.body, getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"request\") || undefined);\n __classPrivateFieldSet(response, _FetchResponse_error, { message, error }, \"f\");\n return response;\n }\n throwThrottleError(message, stall) {\n if (stall == null) {\n stall = 1000;\n }\n if (typeof (stall) !== \"number\" || !Number.isInteger(stall) || stall < 0) {\n logger.throwArgumentError(\"invalid stall timeout\", \"stall\", stall);\n }\n const error = new Error(message || \"throttling requests\");\n defineProperties(error, { stall, throttle: true });\n throw error;\n }\n getHeader(key) {\n return this.headers[key.toLowerCase()];\n }\n hasBody() {\n const body = getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"body\");\n return (body != null);\n }\n get request() { return getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"request\"); }\n ok() {\n return (__classPrivateFieldGet(this, _FetchResponse_error, \"f\").message === \"\" && this.statusCode >= 200 && this.statusCode < 300);\n }\n assertOk() {\n if (this.ok()) {\n return;\n }\n let { message, error } = __classPrivateFieldGet(this, _FetchResponse_error, \"f\");\n if (message === \"\") {\n message = `server response ${this.statusCode} ${this.statusMessage}`;\n }\n logger.throwError(message, \"SERVER_ERROR\", {\n request: (this.request || \"unknown request\"), response: this, error\n });\n }\n}\n//# sourceMappingURL=response.js.map","import { logger } from \"./logger.js\";\nimport { FetchResponse } from \"./response.js\";\nexport async function getUrl(req, timeout) {\n const protocol = req.url.split(\":\")[0].toLowerCase();\n if (protocol !== \"http\" && protocol !== \"https\") {\n logger.throwError(`unsupported protocol ${protocol}`, \"UNSUPPORTED_OPERATION\", {\n info: { protocol },\n operation: \"request\"\n });\n }\n if (req.credentials && !req.allowInsecureAuthentication) {\n logger.throwError(\"insecure authorized connections unsupported\", \"UNSUPPORTED_OPERATION\", {\n operation: \"request\"\n });\n }\n const init = {\n method: req.method,\n headers: new Headers(Array.from(req)),\n body: req.body || undefined,\n };\n const resp = await fetch(req.url, init);\n const headers = {};\n resp.headers.forEach((value, key) => {\n headers[key.toLowerCase()] = value;\n });\n const body = new Uint8Array(await resp.arrayBuffer());\n return new FetchResponse(resp.status, resp.statusText, headers, body, req);\n}\n//# sourceMappingURL=get-url-browser.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _FetchRequest_props;\nimport { getStore, setStore } from \"@ethersproject/properties\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nimport { logger } from \"./logger.js\";\nfunction check(value, type, name) {\n if (typeof (value) !== type) {\n throw new Error(`invalid ${name}`);\n }\n return value;\n}\nexport class FetchRequest {\n constructor(url) {\n _FetchRequest_props.set(this, void 0);\n __classPrivateFieldSet(this, _FetchRequest_props, {\n allowInsecure: false,\n gzip: false,\n headers: {},\n method: \"\",\n timeout: 300,\n url: check(url, \"string\", \"url\")\n }, \"f\");\n }\n // URL\n get url() { return getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"url\"); }\n set url(url) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"url\", check(url, \"string\", \"url\"));\n }\n // Body\n get body() {\n const body = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\");\n if (body == null) {\n return null;\n }\n if (this.isFrozen()) {\n return new Uint8Array(body);\n }\n return body;\n }\n set body(body) {\n if (body == null) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\", undefined);\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\", undefined);\n }\n else if (typeof (body) === \"string\") {\n // @TODO: utf8-check\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\", toUtf8Bytes(body));\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\", \"text/plain\");\n }\n else if (body instanceof Uint8Array) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\", body);\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\", \"application/octet-stream\");\n }\n else if (typeof (body) === \"object\") {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\", toUtf8Bytes(JSON.stringify(body)));\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\", \"application/json\");\n }\n else {\n throw new Error(\"invalid body\");\n }\n }\n hasBody() {\n return (getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\") != null);\n }\n // Method (default: GET with no body, POST with a body)\n get method() {\n const method = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"method\");\n if (method) {\n return method.toUpperCase();\n }\n if (this.body) {\n return \"POST\";\n }\n return \"GET\";\n }\n set method(method) {\n if (method == null) {\n method = \"\";\n }\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"method\", check(method, \"string\", \"method\"));\n }\n // Headers (automatically fills content-type if not explicitly set)\n get headers() {\n const headers = Object.assign({}, getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\"));\n const bodyType = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\");\n if (this.credentials) { /* TODO */ }\n ;\n if (this.allowGzip) {\n headers[\"accept-encoding\"] = \"gzip\";\n }\n if (headers[\"content-type\"] == null && bodyType) {\n headers[\"content-type\"] = bodyType;\n }\n if (this.body) {\n headers[\"content-length\"] = String(this.body.length);\n }\n return Object.freeze(headers);\n }\n getHeader(key) {\n return this.headers[key.toLowerCase()];\n }\n setHeader(key, value) {\n const headers = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\");\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\", headers);\n headers[check(key, \"string\", \"key\").toLowerCase()] = String(value);\n }\n clearHeaders() {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\", {});\n }\n [(_FetchRequest_props = new WeakMap(), Symbol.iterator)]() {\n const headers = this.headers;\n const keys = Object.keys(headers);\n let index = 0;\n return {\n next: () => {\n if (index < keys.length) {\n const key = keys[index++];\n return {\n value: [key, headers[key]], done: false\n };\n }\n return { value: undefined, done: true };\n }\n };\n }\n // Configure an Authorization header\n get credentials() {\n return getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"creds\") || null;\n }\n setCredentials(username, password) {\n if (username.match(/:/)) {\n logger.throwArgumentError(\"invalid basic authentication username\", \"username\", \"[REDACTED]\");\n }\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"creds\", `${username}:${password}`);\n // @TODO:\n //const auth = username + \":\" + password;\n //this.setHeader(\"authorization\", \"Basic \" + base64Encode(toUtf8Bytes(auth)))\n //this.setHeader(\"authorization\", \"Basic TODO:\" + auth);\n }\n // Configure the request to allow gzipped responses\n get allowGzip() {\n return getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"gzip\");\n }\n set allowGzip(value) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"gzip\", !!value);\n }\n // Allow credentials to be sent over an insecure (non-HTTPS) channel\n get allowInsecureAuthentication() {\n return !!getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"allowInsecure\");\n }\n set allowInsecureAuthentication(value) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"allowInsecure\", check(value, \"boolean\", \"allowInsecureAuthentication\"));\n }\n // Timeout (seconds)\n get timeout() { return getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"timeout\"); }\n set timeout(timeout) {\n timeout = check(timeout, \"number\", \"timeout\");\n if (timeout <= 0) {\n throw new Error(\"invalid timerout\");\n }\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"timeout\", timeout);\n }\n redirect(location) {\n // Redirection; for now we only support absolute locataions\n const current = this.url.split(\":\")[0].toLowerCase();\n const target = location.split(\":\")[0].toLowerCase();\n if (this.method !== \"GET\" || (current === \"https\" && target === \"http\") ||\n !location.match(/^https?:$/)) {\n return logger.throwError(`unsupported redirect`, \"UNSUPPORTED_OPERATION\", {\n operation: `redirect(${this.method} ${JSON.stringify(this.url)} => ${JSON.stringify(location)})`\n });\n }\n // Create a copy of this request, with a new URL\n const req = new FetchRequest(location);\n req.method = \"GET\";\n req.allowGzip = this.allowGzip;\n req.timeout = this.timeout;\n setStore(__classPrivateFieldGet(req, _FetchRequest_props, \"f\"), \"body\", getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\"));\n setStore(__classPrivateFieldGet(req, _FetchRequest_props, \"f\"), \"headers\", Object.assign({}, getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\")));\n setStore(__classPrivateFieldGet(req, _FetchRequest_props, \"f\"), \"bodyType\", getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\"));\n // Do not forward credentials unless on the same domain; only absolute\n //req.allowInsecure = false;\n // paths are currently supported; may want a way to specify to forward?\n //setStore(req.#props, \"creds\", getStore(this.#pros, \"creds\"));\n return req;\n }\n clone() {\n const clone = new FetchRequest(this.url);\n // Preserve \"default method\" (i.e. null)\n setStore(__classPrivateFieldGet(clone, _FetchRequest_props, \"f\"), \"method\", getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"method\"));\n // Preserve \"default body\" with type, copying the Uint8Array is present\n const body = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\");\n setStore(__classPrivateFieldGet(clone, _FetchRequest_props, \"f\"), \"body\", (body == null) ? undefined : new Uint8Array(body));\n setStore(__classPrivateFieldGet(clone, _FetchRequest_props, \"f\"), \"bodyType\", getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\"));\n // Preserve \"default headers\"\n setStore(__classPrivateFieldGet(clone, _FetchRequest_props, \"f\"), \"headers\", Object.assign({}, getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\")));\n // Credentials is readonly, so we copy internally\n setStore(__classPrivateFieldGet(clone, _FetchRequest_props, \"f\"), \"creds\", getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"creds\"));\n if (this.allowGzip) {\n clone.allowGzip = true;\n }\n clone.timeout = this.timeout;\n if (this.allowInsecureAuthentication) {\n clone.allowInsecureAuthentication = true;\n }\n return clone;\n }\n freeze() {\n // Copy the body so any changes to previous access do not modify it\n const body = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\");\n if (body != null) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\", new Uint8Array(body));\n }\n Object.freeze(__classPrivateFieldGet(this, _FetchRequest_props, \"f\").headers);\n Object.freeze(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"));\n return this;\n }\n isFrozen() {\n return Object.isFrozen(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"));\n }\n}\n//# sourceMappingURL=request.js.map","import { decodeBase64 } from \"@ethersproject/bytes\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nimport { getUrl } from \"./get-url.js\"; /*-browser*/\nimport { logger } from \"./logger.js\";\nimport { FetchRequest } from \"./request.js\";\nimport { FetchResponse } from \"./response.js\";\nasync function delay(duration) {\n return new Promise((resolve) => { setTimeout(resolve, duration); });\n}\n// @TODO: Add option for global preflightRequest?\nfunction getTime() { return (new Date()).getTime(); }\nfunction unpercent(value) {\n value = value.replace(/%([0-9a-f][0-9a-f])/gi, (all, code) => {\n return String.fromCharCode(parseInt(code, 16));\n });\n return toUtf8Bytes(value);\n}\nlet lockGateways = false;\nlet ipfsGateway = \"https:/\\/gateway.ipfs.io/\";\nlet arGateway = \"https:/\\/gateway.ar.io/\";\nexport async function fetchData(connection) {\n const conn = (typeof (connection) === \"string\") ? {\n request: new FetchRequest(connection)\n } : (connection instanceof FetchRequest) ? {\n request: connection\n } : Object.assign({}, connection);\n if (conn.request == null) {\n return logger.throwArgumentError(\"missing request\", \"connection\", connection);\n }\n let req = conn.request.clone().freeze();\n switch (conn.request.url.split(\":\")[0]) {\n case \"data\": {\n const match = req.url.match(/^data:([^;:]*)?(;base64)?,(.*)$/i);\n if (match) {\n try {\n const headers = {\n \"content-type\": (match[1] ? match[1] : \"text/plain\")\n };\n const body = (match[2] ? decodeBase64(match[3]) : unpercent(match[3]));\n return new FetchResponse(200, \"OK\", headers, body, req.clone());\n }\n catch (error) {\n return new FetchResponse(400, \"BAD REQUEST (invalid base64 encoded data)\", {}, null, req.clone());\n }\n }\n return new FetchResponse(500, \"INTERNAL SERVER ERROR (unsupported dara URI)\", {}, null, req.clone());\n }\n case \"ipfs\":\n case \"ipns\":\n case \"ar\":\n throw new Error(\"not implemented yet\");\n console.log(\"FF\", arGateway, ipfsGateway);\n case \"http\":\n case \"https\":\n break;\n default:\n throw new Error(\"unsupported scheme\");\n }\n const attempts = (conn.throttleLimit != null) ? conn.throttleLimit : 12;\n if (!Number.isInteger(attempts) || attempts < 1) {\n return logger.throwArgumentError(\"invalid throttleLimit\", \"connection\", connection);\n }\n const slotInterval = (conn.throttleSlotInterval != null) ? conn.throttleSlotInterval : 100;\n //logger.assertInteger(slotInterval, \"connection.throttleSlotInterval\", connection.throttleSlotInterval);\n if (!Number.isInteger(slotInterval) || attempts < 0) {\n return logger.throwArgumentError(\"invalid throttleSlotInterval\", \"connection\", connection);\n }\n const retryFunc = (conn.throttleRetry != null) ? conn.throttleRetry : null;\n if (retryFunc && typeof (retryFunc) !== \"function\") {\n return logger.throwArgumentError(\"invalid throttleRetry callback\", \"connection\", connection);\n }\n const preflightRequest = conn.preflightRequest || null;\n if (preflightRequest && typeof (preflightRequest) !== \"function\") {\n return logger.throwArgumentError(\"invalid preflightRequest callback\", \"connection\", connection);\n }\n const processResponse = conn.processResponse || null;\n if (processResponse && typeof (processResponse) !== \"function\") {\n return logger.throwArgumentError(\"invalid processResponse callback\", \"connection\", connection);\n }\n // Start time of this fetch (for timeouts)\n const t0 = getTime();\n let response = null;\n for (let a = 0; a < attempts; a++) {\n let request = req.clone();\n if (preflightRequest) {\n request = (await preflightRequest(request.freeze())).clone();\n }\n const remainingTime = getTime() - t0;\n if (remainingTime < 0) {\n return logger.throwError(\"timeout\", \"TIMEOUT\", { operation: \"request\", request });\n }\n response = await getUrl(request, remainingTime);\n // Retry logic (server forced)\n if (a < attempts) {\n if (response.statusCode === 301 || response.statusCode === 302) {\n // Try following the redirect; the request will through if the\n // type of redirect is not supported\n try {\n req = request.redirect(response.headers.location || \"\");\n continue;\n }\n catch (error) { }\n ;\n // Things won't get any better on another attempt; abort\n return response;\n }\n else if (response.statusCode === 429) {\n if (retryFunc == null || (await retryFunc(request.freeze(), response, a))) {\n const retryAfter = response.headers[\"retry-after\"];\n if (typeof (retryAfter) === \"string\" && retryAfter.match(/^[1-9][0-9]*$/)) {\n await delay(parseInt(retryAfter));\n }\n else {\n await delay(slotInterval * Math.trunc(Math.random() * Math.pow(2, a)));\n }\n continue;\n }\n }\n }\n // Optional post-processing response; also allows trapping\n // HTTP status errors and doing \"something different\",\n // including any further throttling.\n if (processResponse) {\n try {\n return await processResponse(request, response);\n }\n catch (error) {\n // response.throwThrottleError\n if (error.throttle && typeof (error.stall) === \"number\") {\n if (a < attempts) {\n await delay(error.stall);\n continue;\n }\n // Too many retries should behave more like a 5xx server error\n return response.makeServerError(\"exceeded maximum retry limit\", error);\n }\n // Something went wrong during processing; throw a 5xx server error\n response.makeServerError(\"error in post-processing function\", error).assertOk();\n }\n }\n return response;\n }\n // Too many retries should behave more like a 5xx server error\n return response.makeServerError(\"exceeded maximum retry limit\");\n}\nfetchData.lock = function () {\n lockGateways = true;\n};\n// @TODO: Allow a master Gateway function\nfetchData.setGateway = function (gateway) {\n};\nfetchData.setIpfsGateway = function (gateway) {\n if (lockGateways) {\n logger.throwError(\"gateways are locked\", \"UNSUPPORTED_OPERATION\", {\n operation: \"setIpfsGateway\"\n });\n }\n ipfsGateway = gateway;\n};\nfetchData.setArGateway = function (gateway) {\n if (lockGateways) {\n logger.throwError(\"gateways are locked\", \"UNSUPPORTED_OPERATION\", {\n operation: \"setArGateway\"\n });\n }\n arGateway = gateway;\n};\n//# sourceMappingURL=fetch-data.js.map","export const version = \"@ethersproject/providers@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _a, _EnsResolver_supports2544, _EnsResolver_getResolver;\nimport { concat, dataSlice, hexlify, zeroPadLeft } from \"@ethersproject/bytes\";\nimport { dnsEncode, namehash } from \"@ethersproject/hash\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { encodeBase58, toArray, toNumber } from \"@ethersproject/math\";\nimport { toUtf8Bytes, toUtf8String } from \"@ethersproject/strings\";\nimport { fetchData } from \"@ethersproject/web\";\nimport { logger } from \"./logger.js\";\nconst BN_1 = BigInt(1);\nconst Empty = new Uint8Array([]);\nconst HashZero = \"0x0000000000000000000000000000000000000000000000000000000000000000\";\nfunction parseBytes(result, start) {\n if (result === \"0x\") {\n return null;\n }\n const offset = toNumber(dataSlice(result, start, start + 32));\n const length = toNumber(dataSlice(result, offset, offset + 32));\n return dataSlice(result, offset + 32, offset + 32 + length);\n}\nfunction parseString(result, start) {\n try {\n const bytes = parseBytes(result, start);\n if (bytes != null) {\n return toUtf8String(bytes);\n }\n }\n catch (error) { }\n return null;\n}\nfunction numPad(value) {\n const result = toArray(value);\n if (result.length > 32) {\n throw new Error(\"internal; should not happen\");\n }\n const padded = new Uint8Array(32);\n padded.set(result, 32 - result.length);\n return padded;\n}\nfunction bytesPad(value) {\n if ((value.length % 32) === 0) {\n return value;\n }\n const result = new Uint8Array(Math.ceil(value.length / 32) * 32);\n result.set(value);\n return result;\n}\n// ABI Encodes a series of (bytes, bytes, ...)\nfunction encodeBytes(datas) {\n const result = [];\n let byteCount = 0;\n // Add place-holders for pointers as we add items\n for (let i = 0; i < datas.length; i++) {\n result.push(Empty);\n byteCount += 32;\n }\n for (let i = 0; i < datas.length; i++) {\n const data = logger.getBytes(datas[i]);\n // Update the bytes offset\n result[i] = numPad(byteCount);\n // The length and padded value of data\n result.push(numPad(data.length));\n result.push(bytesPad(data));\n byteCount += 32 + Math.ceil(data.length / 32) * 32;\n }\n return concat(result);\n}\n// @TODO: This should use the fetch-data:ipfs gateway\n// Trim off the ipfs:// prefix and return the default gateway URL\nfunction getIpfsLink(link) {\n if (link.match(/^ipfs:\\/\\/ipfs\\//i)) {\n link = link.substring(12);\n }\n else if (link.match(/^ipfs:\\/\\//i)) {\n link = link.substring(7);\n }\n else {\n logger.throwArgumentError(\"unsupported IPFS format\", \"link\", link);\n }\n return `https:/\\/gateway.ipfs.io/ipfs/${link}`;\n}\n;\n;\nexport class MulticoinProviderPlugin {\n constructor(name) {\n defineProperties(this, { name });\n }\n validate(proivder) {\n return this;\n }\n supportsCoinType(coinType) {\n return false;\n }\n async encodeAddress(coinType, address) {\n throw new Error(\"unsupported coin\");\n }\n async decodeAddress(coinType, data) {\n throw new Error(\"unsupported coin\");\n }\n}\nconst BasicMulticoinPluginId = \"org.ethers.provider-prugins.basicmulticoin\";\nexport class BasicMulticoinProviderPlugin extends MulticoinProviderPlugin {\n constructor() {\n super(BasicMulticoinPluginId);\n }\n}\nconst matcherIpfs = new RegExp(\"^(ipfs):/\\/(.*)$\", \"i\");\nconst matchers = [\n new RegExp(\"^(https):/\\/(.*)$\", \"i\"),\n new RegExp(\"^(data):(.*)$\", \"i\"),\n matcherIpfs,\n new RegExp(\"^eip155:[0-9]+/(erc[0-9]+):(.*)$\", \"i\"),\n];\nexport class EnsResolver {\n constructor(provider, address, name) {\n // For EIP-2544 names, the ancestor that provided the resolver\n _EnsResolver_supports2544.set(this, void 0);\n defineProperties(this, { provider, address, name });\n __classPrivateFieldSet(this, _EnsResolver_supports2544, null, \"f\");\n }\n async supportsWildcard() {\n if (!__classPrivateFieldGet(this, _EnsResolver_supports2544, \"f\")) {\n // supportsInterface(bytes4 = selector(\"resolve(bytes,bytes)\"))\n __classPrivateFieldSet(this, _EnsResolver_supports2544, this.provider.call({\n to: this.address,\n data: \"0x01ffc9a79061b92300000000000000000000000000000000000000000000000000000000\"\n }).then((result) => {\n return (logger.getBigInt(result) === BN_1);\n }).catch((error) => {\n if (error.code === \"CALL_EXCEPTION\") {\n return false;\n }\n // Rethrow the error: link is down, etc. Let future attempts retry.\n __classPrivateFieldSet(this, _EnsResolver_supports2544, null, \"f\");\n throw error;\n }), \"f\");\n }\n return await __classPrivateFieldGet(this, _EnsResolver_supports2544, \"f\");\n }\n async _fetch(selector, parameters = \"0x\") {\n // e.g. keccak256(\"addr(bytes32,uint256)\")\n const addrData = concat([selector, namehash(this.name), parameters]);\n const tx = {\n to: this.address,\n enableCcipRead: true,\n data: addrData\n };\n // Wildcard support; use EIP-2544 to resolve the request\n let wrapped = false;\n if (await this.supportsWildcard()) {\n wrapped = true;\n // selector(\"resolve(bytes,bytes)\")\n tx.data = concat([\"0x9061b923\", encodeBytes([dnsEncode(this.name), addrData])]);\n }\n try {\n let data = await this.provider.call(tx);\n if ((logger.getBytes(data).length % 32) === 4) {\n return logger.throwError(\"resolver threw error\", \"CALL_EXCEPTION\", {\n transaction: tx, data\n });\n }\n if (wrapped) {\n return parseBytes(data, 0);\n }\n return data;\n }\n catch (error) {\n if (error.code !== \"CALL_EXCEPTION\") {\n throw error;\n }\n }\n return null;\n }\n async getAddress(coinType = 60) {\n if (coinType === 60) {\n try {\n // keccak256(\"addr(bytes32)\")\n const result = await this._fetch(\"0x3b3b57de\");\n // No address\n if (result === \"0x\" || result === HashZero) {\n return null;\n }\n const network = await this.provider.getNetwork();\n return network.formatter.callAddress(result);\n }\n catch (error) {\n if (error.code === \"CALL_EXCEPTION\") {\n return null;\n }\n throw error;\n }\n }\n let coinPlugin = null;\n for (const plugin of this.provider.plugins) {\n if (!(plugin instanceof MulticoinProviderPlugin)) {\n continue;\n }\n if (plugin.supportsCoinType(coinType)) {\n coinPlugin = plugin;\n break;\n }\n }\n if (coinPlugin == null) {\n return null;\n }\n // keccak256(\"addr(bytes32,uint256\")\n const data = parseBytes((await this._fetch(\"0xf1cb7e06\", numPad(coinType))) || \"0x\", 0);\n // No address\n if (data == null || data === \"0x\") {\n return null;\n }\n // Compute the address\n const address = await coinPlugin.encodeAddress(coinType, data);\n if (address != null) {\n return address;\n }\n return logger.throwError(`invalid coin data`, \"UNSUPPORTED_OPERATION\", {\n operation: `getAddress(${coinType})`,\n info: { coinType, data }\n });\n }\n async getText(key) {\n // The key encoded as parameter to fetchBytes\n let keyBytes = toUtf8Bytes(key);\n // The nodehash consumes the first slot, so the string pointer targets\n // offset 64, with the length at offset 64 and data starting at offset 96\n const calldata = logger.getBytes(concat([numPad(64), numPad(keyBytes.length), keyBytes]));\n const hexBytes = parseBytes((await this._fetch(\"0x59d1d43c\", bytesPad(calldata))) || \"0x\", 0);\n if (hexBytes == null || hexBytes === \"0x\") {\n return null;\n }\n return toUtf8String(hexBytes);\n }\n async getContentHash() {\n // keccak256(\"contenthash()\")\n const hexBytes = parseBytes((await this._fetch(\"0xbc1c58d1\")) || \"0x\", 0);\n // No contenthash\n if (hexBytes == null || hexBytes === \"0x\") {\n return null;\n }\n // IPFS (CID: 1, Type: 70=DAG-PB, 72=libp2p-key)\n const ipfs = hexBytes.match(/^0x(e3010170|e5010172)(([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f]*))$/);\n if (ipfs) {\n const scheme = (ipfs[1] === \"e3010170\") ? \"ipfs\" : \"ipns\";\n const length = parseInt(ipfs[4], 16);\n if (ipfs[5].length === length * 2) {\n return `${scheme}:/\\/${encodeBase58(\"0x\" + ipfs[2])}`;\n }\n }\n // Swarm (CID: 1, Type: swarm-manifest; hash/length hard-coded to keccak256/32)\n const swarm = hexBytes.match(/^0xe40101fa011b20([0-9a-f]*)$/);\n if (swarm && swarm[1].length === 64) {\n return `bzz:/\\/${swarm[1]}`;\n }\n return logger.throwError(`invalid or unsupported content hash data`, \"UNSUPPORTED_OPERATION\", {\n operation: \"getContentHash()\",\n info: { data: hexBytes }\n });\n }\n async getAvatar() {\n return (await this._getAvatar()).url;\n }\n async _getAvatar() {\n const linkage = [{ type: \"name\", value: this.name }];\n try {\n // test data for ricmoo.eth\n //const avatar = \"eip155:1/erc721:0x265385c7f4132228A0d54EB1A9e7460b91c0cC68/29233\";\n const avatar = await this.getText(\"avatar\");\n if (avatar == null) {\n linkage.push({ type: \"!avatar\", value: \"\" });\n throw new Error(\"!avatar\");\n }\n linkage.push({ type: \"avatar\", value: avatar });\n for (let i = 0; i < matchers.length; i++) {\n const match = avatar.match(matchers[i]);\n if (match == null) {\n continue;\n }\n const scheme = match[1].toLowerCase();\n switch (scheme) {\n case \"https\":\n case \"data\":\n linkage.push({ type: \"url\", value: avatar });\n return { linkage, url: avatar };\n case \"ipfs\": {\n const url = getIpfsLink(avatar);\n linkage.push({ type: \"ipfs\", value: avatar });\n linkage.push({ type: \"url\", value: url });\n return { linkage, url };\n }\n case \"erc721\":\n case \"erc1155\": {\n // Depending on the ERC type, use tokenURI(uint256) or url(uint256)\n const selector = (scheme === \"erc721\") ? \"0xc87b56dd\" : \"0x0e89341c\";\n linkage.push({ type: scheme, value: avatar });\n // The owner of this name\n const owner = await this.getAddress();\n if (owner == null) {\n linkage.push({ type: \"!owner\", value: \"\" });\n throw new Error(\"!owner\");\n }\n const comps = (match[2] || \"\").split(\"/\");\n if (comps.length !== 2) {\n linkage.push({ type: `!${scheme}caip`, value: (match[2] || \"\") });\n throw new Error(\"!caip\");\n }\n const formatter = (await this.provider.getNetwork()).formatter;\n const addr = formatter.address(comps[0]);\n const tokenId = numPad(comps[1]);\n // Check that this account owns the token\n if (scheme === \"erc721\") {\n // ownerOf(uint256 tokenId)\n const tokenOwner = formatter.callAddress(await this.provider.call({\n to: addr, data: concat([\"0x6352211e\", tokenId])\n }));\n if (owner !== tokenOwner) {\n linkage.push({ type: \"!owner\", value: tokenOwner });\n throw new Error(\"!owner\");\n }\n linkage.push({ type: \"owner\", value: tokenOwner });\n }\n else if (scheme === \"erc1155\") {\n // balanceOf(address owner, uint256 tokenId)\n const balance = logger.getBigInt(await this.provider.call({\n to: addr, data: concat([\"0x00fdd58e\", zeroPadLeft(owner, 32), tokenId])\n }));\n if (!balance) {\n linkage.push({ type: \"!balance\", value: \"0\" });\n throw new Error(\"!balance\");\n }\n linkage.push({ type: \"balance\", value: balance.toString() });\n }\n // Call the token contract for the metadata URL\n const tx = {\n to: comps[0],\n data: concat([selector, tokenId])\n };\n let metadataUrl = parseString(await this.provider.call(tx), 0);\n if (metadataUrl == null) {\n linkage.push({ type: \"!metadata-url\", value: \"\" });\n throw new Error(\"!metadata-url\");\n }\n linkage.push({ type: \"metadata-url-base\", value: metadataUrl });\n // ERC-1155 allows a generic {id} in the URL\n if (scheme === \"erc1155\") {\n metadataUrl = metadataUrl.replace(\"{id}\", hexlify(tokenId).substring(2));\n linkage.push({ type: \"metadata-url-expanded\", value: metadataUrl });\n }\n // Transform IPFS metadata links\n if (metadataUrl.match(/^ipfs:/i)) {\n metadataUrl = getIpfsLink(metadataUrl);\n }\n linkage.push({ type: \"metadata-url\", value: metadataUrl });\n // Get the token metadata\n let metadata = {};\n const response = await fetchData(metadataUrl);\n try {\n metadata = response.bodyJson;\n }\n catch (error) {\n try {\n linkage.push({ type: \"!metadata\", value: response.bodyText });\n }\n catch (error) {\n const bytes = response.body;\n if (bytes) {\n linkage.push({ type: \"!metadata\", value: hexlify(bytes) });\n }\n throw error;\n }\n throw error;\n }\n if (!metadata) {\n linkage.push({ type: \"!metadata\", value: \"\" });\n throw new Error(\"!metadata\");\n }\n linkage.push({ type: \"metadata\", value: JSON.stringify(metadata) });\n // Pull the image URL out\n let imageUrl = metadata.image;\n if (typeof (imageUrl) !== \"string\") {\n linkage.push({ type: \"!imageUrl\", value: \"\" });\n throw new Error(\"!imageUrl\");\n }\n if (imageUrl.match(/^(https:\\/\\/|data:)/i)) {\n // Allow\n }\n else {\n // Transform IPFS link to gateway\n const ipfs = imageUrl.match(matcherIpfs);\n if (ipfs == null) {\n linkage.push({ type: \"!imageUrl-ipfs\", value: imageUrl });\n throw new Error(\"!imageUrl-ipfs\");\n }\n linkage.push({ type: \"imageUrl-ipfs\", value: imageUrl });\n imageUrl = getIpfsLink(imageUrl);\n }\n linkage.push({ type: \"url\", value: imageUrl });\n return { linkage, url: imageUrl };\n }\n }\n }\n }\n catch (error) {\n console.log(\"EE\", error);\n }\n return { linkage, url: null };\n }\n static async fromName(provider, name) {\n let currentName = name;\n while (true) {\n if (currentName === \"\" || currentName === \".\") {\n return null;\n }\n // Optimization since the eth node cannot change and does\n // not have a wildcar resolver\n if (name !== \"eth\" && currentName === \"eth\") {\n return null;\n }\n // Check the current node for a resolver\n const addr = await __classPrivateFieldGet(EnsResolver, _a, \"m\", _EnsResolver_getResolver).call(EnsResolver, provider, currentName);\n // Found a resolver!\n if (addr != null) {\n const resolver = new EnsResolver(provider, addr, name);\n // Legacy resolver found, using EIP-2544 so it isn't safe to use\n if (currentName !== name && !(await resolver.supportsWildcard())) {\n return null;\n }\n return resolver;\n }\n // Get the parent node\n currentName = currentName.split(\".\").slice(1).join(\".\");\n }\n }\n}\n_a = EnsResolver, _EnsResolver_supports2544 = new WeakMap(), _EnsResolver_getResolver = async function _EnsResolver_getResolver(provider, name) {\n const network = await provider.getNetwork();\n const ensPlugin = network.getPlugin(\"org.ethers.plugins.ens\");\n // No ENS...\n if (!ensPlugin) {\n return logger.throwError(\"network does not support ENS\", \"UNSUPPORTED_OPERATION\", {\n operation: \"getResolver\", info: { network: network.name }\n });\n }\n try {\n // keccak256(\"resolver(bytes32)\")\n const addrData = await provider.call({\n to: ensPlugin.address,\n data: concat([\"0x0178b8bf\" + namehash(name)]),\n enableCcipRead: true\n });\n const addr = network.formatter.callAddress(addrData);\n if (addr === dataSlice(HashZero, 0, 20)) {\n return null;\n }\n return addr;\n }\n catch (error) {\n // ENS registry cannot throw errors on resolver(bytes32),\n // so probably a link error\n throw error;\n }\n return null;\n};\n//# sourceMappingURL=ens-resolver.js.map","export const version = \"@ethersproject/signing-key@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { version } from \"./_version.js\";\nimport { Logger } from \"@ethersproject/logger\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Signature_props;\nimport { toHex } from \"@ethersproject/math\";\nimport { getStore, setStore } from \"@ethersproject/properties\";\nimport { arrayify, concat, dataLength, dataSlice, hexlify, isHexString } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\n// Constants\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_2 = BigInt(2);\nconst BN_27 = BigInt(27);\nconst BN_28 = BigInt(28);\nconst BN_35 = BigInt(35);\nconst BN_255 = BigInt(255);\nconst BN_MASK_255 = (BN_1 << BN_255) - BN_1;\nconst _guard = {};\nconst Zero = \"0x0000000000000000000000000000000000000000000000000000000000000000\";\nexport class Signature {\n constructor(guard, r, s, v) {\n _Signature_props.set(this, void 0);\n logger.assertPrivate(guard, _guard, \"Signature\");\n __classPrivateFieldSet(this, _Signature_props, { r, s, v, networkV: null }, \"f\");\n }\n get r() { return getStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"r\"); }\n set r(value) {\n if (dataLength(value) !== 32) {\n logger.throwArgumentError(\"invalid r\", \"value\", value);\n }\n setStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"r\", hexlify(value));\n }\n get s() { return getStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"s\"); }\n set s(value) {\n if (dataLength(value) !== 32) {\n logger.throwArgumentError(\"invalid r\", \"value\", value);\n }\n else if (arrayify(value)[0] & 0x80) {\n logger.throwArgumentError(\"non-canonical s\", \"value\", value);\n }\n setStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"s\", hexlify(value));\n }\n get v() { return getStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"v\"); }\n set v(value) {\n const v = logger.getNumber(value, \"value\");\n if (v !== 27 && v !== 28) {\n throw new Error(\"@TODO\");\n }\n setStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"v\", v);\n }\n get networkV() { return getStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"networkV\"); }\n get legacyChainId() {\n const v = this.networkV;\n if (v == null) {\n return null;\n }\n return Signature.getChainId(v);\n }\n get vs() {\n // The EIP-2098 compact representation\n const vs = arrayify(this.s);\n if (this.yParity) {\n vs[0] |= 0x80;\n }\n return hexlify(vs);\n }\n get yParity() {\n if (this.v === 27) {\n return 0;\n }\n return 1;\n /*\n // When v is 0 or 1 it is the recid directly\n if (this.v.isZero()) { return 0; }\n if (this.v.eq(1)) { return 1; }\n\n // Otherwise, odd (e.g. 27) is 0 and even (e.g. 28) is 1\n return this.v.and(1).isZero() ? 1: 0;\n */\n }\n get serialized() {\n return concat([this.r, this.s, (this.yParity ? \"0x1c\" : \"0x1b\")]);\n }\n [(_Signature_props = new WeakMap(), Symbol.for('nodejs.util.inspect.custom'))]() {\n return `Signature { r: \"${this.r}\", s: \"${this.s}\", yParity: ${this.yParity}, networkV: ${this.networkV} }`;\n }\n clone() {\n if (getStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"networkV\")) {\n logger.throwError(\"cannot clone EIP-155 signatures\", \"UNSUPPORTED_OPERATION\", {\n operation: \"clone\"\n });\n }\n const { r, s, v } = __classPrivateFieldGet(this, _Signature_props, \"f\");\n return new Signature(_guard, r, s, v);\n }\n freeze() {\n Object.freeze(__classPrivateFieldGet(this, _Signature_props, \"f\"));\n return this;\n }\n isFrozen() {\n return Object.isFrozen(__classPrivateFieldGet(this, _Signature_props, \"f\"));\n }\n toJSON() {\n const { r, s, v, networkV } = this;\n return {\n _type: \"signature\",\n networkV: ((networkV != null) ? networkV.toString() : null),\n r, s, v,\n };\n }\n static create() {\n return new Signature(_guard, Zero, Zero, 27);\n }\n // Get the chain ID from an EIP-155 v\n static getChainId(v) {\n const bv = logger.getBigInt(v, \"v\");\n // The v is not an EIP-155 v, so it is the unspecified chain ID\n if ((bv == BN_27) || (bv == BN_28)) {\n return BN_0;\n }\n // Bad value for an EIP-155 v\n if (bv < BN_35) {\n logger.throwArgumentError(\"invalid EIP-155 v\", \"v\", v);\n }\n return (bv - BN_35) / BN_2;\n }\n // Get the EIP-155 v transformed for a given chainId\n static getChainIdV(chainId, v) {\n return (logger.getBigInt(chainId) * BN_2) + BigInt(35 + v - 27);\n }\n // Convert an EIP-155 v into a normalized v\n static getNormalizedV(v) {\n const bv = logger.getBigInt(v);\n if (bv == BN_0) {\n return 27;\n }\n if (bv == BN_1) {\n return 28;\n }\n // Otherwise, EIP-155 v means odd is 27 and even is 28\n return (bv & BN_1) ? 27 : 28;\n }\n static fromTransaction(r, s, _v) {\n const v = logger.getBigInt(_v, \"v\");\n const sig = Signature.from({ r, s, v });\n setStore(__classPrivateFieldGet(sig, _Signature_props, \"f\"), \"networkV\", v);\n return sig.freeze();\n }\n static from(sig) {\n const throwError = (message) => {\n return logger.throwArgumentError(message, \"signature\", sig);\n };\n if (typeof (sig) === \"string\") {\n if (dataLength(sig) !== 65) {\n throwError(\"invlaid raw signature length\");\n }\n const r = dataSlice(sig, 0, 32);\n const s = dataSlice(sig, 32, 64);\n if (BigInt(s) >> BN_255) {\n throwError(\"non-canonical s\");\n }\n const v = Signature.getNormalizedV(dataSlice(sig, 64, 65));\n return new Signature(_guard, r, s, v);\n }\n if (sig instanceof Signature) {\n return sig.clone();\n }\n const r = sig.r;\n if (r == null) {\n throwError(\"missing r\");\n }\n if (!isHexString(r, 32)) {\n throwError(\"invalid r\");\n }\n const s = (function (s, vs) {\n if (s) {\n if (!isHexString(s, 32)) {\n throwError(\"invalid s\");\n }\n return s;\n }\n if (vs) {\n if (!isHexString(vs, 32)) {\n throwError(\"invalid vs\");\n }\n return toHex(BigInt(vs) & BN_MASK_255, 32);\n }\n return throwError(\"missing s\");\n })(sig.s, sig.vs);\n if (BigInt(s) >> BN_255) {\n throwError(\"non-canonical s\");\n }\n const v = (function (v, vs, yParity) {\n if (v) {\n return Signature.getNormalizedV(v);\n }\n if (vs) {\n if (!isHexString(vs, 32)) {\n throwError(\"invalid vs\");\n }\n return ((arrayify(vs)[0] & 0x80) ? 28 : 27);\n }\n if (yParity) {\n switch (yParity) {\n case 0: return 27;\n case 1: return 28;\n }\n return throwError(\"invalid yParity\");\n }\n //if (chainId) { return BigNumber.from(chainId).and(1).sub(27); } // @TODO: check this\n return throwError(\"missing v\");\n })(sig.v, sig.vs, sig.yParity);\n // @TODO: check vs, chainId, yParity\n const result = new Signature(_guard, r, s, v);\n if (sig.yParity && sig.yParity !== result.yParity) {\n }\n if (sig.vs && sig.vs !== result.vs) {\n }\n //if (sig.chainId && sig.chainId !== result.chainId) {\n //}\n return result;\n }\n}\n//# sourceMappingURL=signature.js.map","/*! noble-secp256k1 - MIT License (c) 2019 Paul Miller (paulmillr.com) */\nimport nodeCrypto from 'crypto';\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _3n = BigInt(3);\nconst _8n = BigInt(8);\nconst POW_2_256 = _2n ** BigInt(256);\nconst CURVE = {\n a: _0n,\n b: BigInt(7),\n P: POW_2_256 - _2n ** BigInt(32) - BigInt(977),\n n: POW_2_256 - BigInt('432420386565659656852420866394968145599'),\n h: _1n,\n Gx: BigInt('55066263022277343669578718895168534326250603453777594175500187360389116729240'),\n Gy: BigInt('32670510020758816978083085130507043184471273380659243275938904335757337482424'),\n beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'),\n};\nexport { CURVE };\nfunction weistrass(x) {\n const { a, b } = CURVE;\n const x2 = mod(x * x);\n const x3 = mod(x2 * x);\n return mod(x3 + a * x + b);\n}\nconst USE_ENDOMORPHISM = CURVE.a === _0n;\nclass JacobianPoint {\n constructor(x, y, z) {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n static fromAffine(p) {\n if (!(p instanceof Point)) {\n throw new TypeError('JacobianPoint#fromAffine: expected Point');\n }\n return new JacobianPoint(p.x, p.y, _1n);\n }\n static toAffineBatch(points) {\n const toInv = invertBatch(points.map((p) => p.z));\n return points.map((p, i) => p.toAffine(toInv[i]));\n }\n static normalizeZ(points) {\n return JacobianPoint.toAffineBatch(points).map(JacobianPoint.fromAffine);\n }\n equals(other) {\n if (!(other instanceof JacobianPoint))\n throw new TypeError('JacobianPoint expected');\n const { x: X1, y: Y1, z: Z1 } = this;\n const { x: X2, y: Y2, z: Z2 } = other;\n const Z1Z1 = mod(Z1 ** _2n);\n const Z2Z2 = mod(Z2 ** _2n);\n const U1 = mod(X1 * Z2Z2);\n const U2 = mod(X2 * Z1Z1);\n const S1 = mod(mod(Y1 * Z2) * Z2Z2);\n const S2 = mod(mod(Y2 * Z1) * Z1Z1);\n return U1 === U2 && S1 === S2;\n }\n negate() {\n return new JacobianPoint(this.x, mod(-this.y), this.z);\n }\n double() {\n const { x: X1, y: Y1, z: Z1 } = this;\n const A = mod(X1 ** _2n);\n const B = mod(Y1 ** _2n);\n const C = mod(B ** _2n);\n const D = mod(_2n * (mod((X1 + B) ** _2n) - A - C));\n const E = mod(_3n * A);\n const F = mod(E ** _2n);\n const X3 = mod(F - _2n * D);\n const Y3 = mod(E * (D - X3) - _8n * C);\n const Z3 = mod(_2n * Y1 * Z1);\n return new JacobianPoint(X3, Y3, Z3);\n }\n add(other) {\n if (!(other instanceof JacobianPoint))\n throw new TypeError('JacobianPoint expected');\n const { x: X1, y: Y1, z: Z1 } = this;\n const { x: X2, y: Y2, z: Z2 } = other;\n if (X2 === _0n || Y2 === _0n)\n return this;\n if (X1 === _0n || Y1 === _0n)\n return other;\n const Z1Z1 = mod(Z1 ** _2n);\n const Z2Z2 = mod(Z2 ** _2n);\n const U1 = mod(X1 * Z2Z2);\n const U2 = mod(X2 * Z1Z1);\n const S1 = mod(mod(Y1 * Z2) * Z2Z2);\n const S2 = mod(mod(Y2 * Z1) * Z1Z1);\n const H = mod(U2 - U1);\n const r = mod(S2 - S1);\n if (H === _0n) {\n if (r === _0n) {\n return this.double();\n }\n else {\n return JacobianPoint.ZERO;\n }\n }\n const HH = mod(H ** _2n);\n const HHH = mod(H * HH);\n const V = mod(U1 * HH);\n const X3 = mod(r ** _2n - HHH - _2n * V);\n const Y3 = mod(r * (V - X3) - S1 * HHH);\n const Z3 = mod(Z1 * Z2 * H);\n return new JacobianPoint(X3, Y3, Z3);\n }\n subtract(other) {\n return this.add(other.negate());\n }\n multiplyUnsafe(scalar) {\n let n = normalizeScalar(scalar);\n const G = JacobianPoint.BASE;\n const P0 = JacobianPoint.ZERO;\n if (n === _0n)\n return P0;\n if (n === _1n)\n return this;\n if (!USE_ENDOMORPHISM) {\n let p = P0;\n let d = this;\n while (n > _0n) {\n if (n & _1n)\n p = p.add(d);\n d = d.double();\n n >>= _1n;\n }\n return p;\n }\n let { k1neg, k1, k2neg, k2 } = splitScalarEndo(n);\n let k1p = P0;\n let k2p = P0;\n let d = this;\n while (k1 > _0n || k2 > _0n) {\n if (k1 & _1n)\n k1p = k1p.add(d);\n if (k2 & _1n)\n k2p = k2p.add(d);\n d = d.double();\n k1 >>= _1n;\n k2 >>= _1n;\n }\n if (k1neg)\n k1p = k1p.negate();\n if (k2neg)\n k2p = k2p.negate();\n k2p = new JacobianPoint(mod(k2p.x * CURVE.beta), k2p.y, k2p.z);\n return k1p.add(k2p);\n }\n precomputeWindow(W) {\n const windows = USE_ENDOMORPHISM ? 128 / W + 1 : 256 / W + 1;\n const points = [];\n let p = this;\n let base = p;\n for (let window = 0; window < windows; window++) {\n base = p;\n points.push(base);\n for (let i = 1; i < 2 ** (W - 1); i++) {\n base = base.add(p);\n points.push(base);\n }\n p = base.double();\n }\n return points;\n }\n wNAF(n, affinePoint) {\n if (!affinePoint && this.equals(JacobianPoint.BASE))\n affinePoint = Point.BASE;\n const W = (affinePoint && affinePoint._WINDOW_SIZE) || 1;\n if (256 % W) {\n throw new Error('Point#wNAF: Invalid precomputation window, must be power of 2');\n }\n let precomputes = affinePoint && pointPrecomputes.get(affinePoint);\n if (!precomputes) {\n precomputes = this.precomputeWindow(W);\n if (affinePoint && W !== 1) {\n precomputes = JacobianPoint.normalizeZ(precomputes);\n pointPrecomputes.set(affinePoint, precomputes);\n }\n }\n let p = JacobianPoint.ZERO;\n let f = JacobianPoint.ZERO;\n const windows = 1 + (USE_ENDOMORPHISM ? 128 / W : 256 / W);\n const windowSize = 2 ** (W - 1);\n const mask = BigInt(2 ** W - 1);\n const maxNumber = 2 ** W;\n const shiftBy = BigInt(W);\n for (let window = 0; window < windows; window++) {\n const offset = window * windowSize;\n let wbits = Number(n & mask);\n n >>= shiftBy;\n if (wbits > windowSize) {\n wbits -= maxNumber;\n n += _1n;\n }\n if (wbits === 0) {\n let pr = precomputes[offset];\n if (window % 2)\n pr = pr.negate();\n f = f.add(pr);\n }\n else {\n let cached = precomputes[offset + Math.abs(wbits) - 1];\n if (wbits < 0)\n cached = cached.negate();\n p = p.add(cached);\n }\n }\n return { p, f };\n }\n multiply(scalar, affinePoint) {\n let n = normalizeScalar(scalar);\n let point;\n let fake;\n if (USE_ENDOMORPHISM) {\n const { k1neg, k1, k2neg, k2 } = splitScalarEndo(n);\n let { p: k1p, f: f1p } = this.wNAF(k1, affinePoint);\n let { p: k2p, f: f2p } = this.wNAF(k2, affinePoint);\n if (k1neg)\n k1p = k1p.negate();\n if (k2neg)\n k2p = k2p.negate();\n k2p = new JacobianPoint(mod(k2p.x * CURVE.beta), k2p.y, k2p.z);\n point = k1p.add(k2p);\n fake = f1p.add(f2p);\n }\n else {\n const { p, f } = this.wNAF(n, affinePoint);\n point = p;\n fake = f;\n }\n return JacobianPoint.normalizeZ([point, fake])[0];\n }\n toAffine(invZ = invert(this.z)) {\n const { x, y, z } = this;\n const iz1 = invZ;\n const iz2 = mod(iz1 * iz1);\n const iz3 = mod(iz2 * iz1);\n const ax = mod(x * iz2);\n const ay = mod(y * iz3);\n const zz = mod(z * iz1);\n if (zz !== _1n)\n throw new Error('invZ was invalid');\n return new Point(ax, ay);\n }\n}\nJacobianPoint.BASE = new JacobianPoint(CURVE.Gx, CURVE.Gy, _1n);\nJacobianPoint.ZERO = new JacobianPoint(_0n, _1n, _0n);\nconst pointPrecomputes = new WeakMap();\nexport class Point {\n constructor(x, y) {\n this.x = x;\n this.y = y;\n }\n _setWindowSize(windowSize) {\n this._WINDOW_SIZE = windowSize;\n pointPrecomputes.delete(this);\n }\n static fromCompressedHex(bytes) {\n const isShort = bytes.length === 32;\n const x = bytesToNumber(isShort ? bytes : bytes.subarray(1));\n if (!isValidFieldElement(x))\n throw new Error('Point is not on curve');\n const y2 = weistrass(x);\n let y = sqrtMod(y2);\n const isYOdd = (y & _1n) === _1n;\n if (isShort) {\n if (isYOdd)\n y = mod(-y);\n }\n else {\n const isFirstByteOdd = (bytes[0] & 1) === 1;\n if (isFirstByteOdd !== isYOdd)\n y = mod(-y);\n }\n const point = new Point(x, y);\n point.assertValidity();\n return point;\n }\n static fromUncompressedHex(bytes) {\n const x = bytesToNumber(bytes.subarray(1, 33));\n const y = bytesToNumber(bytes.subarray(33, 65));\n const point = new Point(x, y);\n point.assertValidity();\n return point;\n }\n static fromHex(hex) {\n const bytes = ensureBytes(hex);\n const len = bytes.length;\n const header = bytes[0];\n if (len === 32 || (len === 33 && (header === 0x02 || header === 0x03))) {\n return this.fromCompressedHex(bytes);\n }\n if (len === 65 && header === 0x04)\n return this.fromUncompressedHex(bytes);\n throw new Error(`Point.fromHex: received invalid point. Expected 32-33 compressed bytes or 65 uncompressed bytes, not ${len}`);\n }\n static fromPrivateKey(privateKey) {\n return Point.BASE.multiply(normalizePrivateKey(privateKey));\n }\n static fromSignature(msgHash, signature, recovery) {\n msgHash = ensureBytes(msgHash);\n const h = truncateHash(msgHash);\n const { r, s } = normalizeSignature(signature);\n if (recovery !== 0 && recovery !== 1) {\n throw new Error('Cannot recover signature: invalid recovery bit');\n }\n if (h === _0n)\n throw new Error('Cannot recover signature: msgHash cannot be 0');\n const prefix = recovery & 1 ? '03' : '02';\n const R = Point.fromHex(prefix + numTo32bStr(r));\n const { n } = CURVE;\n const rinv = invert(r, n);\n const u1 = mod(-h * rinv, n);\n const u2 = mod(s * rinv, n);\n const Q = Point.BASE.multiplyAndAddUnsafe(R, u1, u2);\n if (!Q)\n throw new Error('Cannot recover signature: point at infinify');\n Q.assertValidity();\n return Q;\n }\n toRawBytes(isCompressed = false) {\n return hexToBytes(this.toHex(isCompressed));\n }\n toHex(isCompressed = false) {\n const x = numTo32bStr(this.x);\n if (isCompressed) {\n const prefix = this.y & _1n ? '03' : '02';\n return `${prefix}${x}`;\n }\n else {\n return `04${x}${numTo32bStr(this.y)}`;\n }\n }\n toHexX() {\n return this.toHex(true).slice(2);\n }\n toRawX() {\n return this.toRawBytes(true).slice(1);\n }\n assertValidity() {\n const msg = 'Point is not on elliptic curve';\n const { x, y } = this;\n if (!isValidFieldElement(x) || !isValidFieldElement(y))\n throw new Error(msg);\n const left = mod(y * y);\n const right = weistrass(x);\n if (mod(left - right) !== _0n)\n throw new Error(msg);\n }\n equals(other) {\n return this.x === other.x && this.y === other.y;\n }\n negate() {\n return new Point(this.x, mod(-this.y));\n }\n double() {\n return JacobianPoint.fromAffine(this).double().toAffine();\n }\n add(other) {\n return JacobianPoint.fromAffine(this).add(JacobianPoint.fromAffine(other)).toAffine();\n }\n subtract(other) {\n return this.add(other.negate());\n }\n multiply(scalar) {\n return JacobianPoint.fromAffine(this).multiply(scalar, this).toAffine();\n }\n multiplyAndAddUnsafe(Q, a, b) {\n const P = JacobianPoint.fromAffine(this);\n const aP = P.multiply(a);\n const bQ = JacobianPoint.fromAffine(Q).multiplyUnsafe(b);\n const sum = aP.add(bQ);\n return sum.equals(JacobianPoint.ZERO) ? undefined : sum.toAffine();\n }\n}\nPoint.BASE = new Point(CURVE.Gx, CURVE.Gy);\nPoint.ZERO = new Point(_0n, _0n);\nfunction sliceDER(s) {\n return Number.parseInt(s[0], 16) >= 8 ? '00' + s : s;\n}\nfunction parseDERInt(data) {\n if (data.length < 2 || data[0] !== 0x02) {\n throw new Error(`Invalid signature integer tag: ${bytesToHex(data)}`);\n }\n const len = data[1];\n const res = data.subarray(2, len + 2);\n if (!len || res.length !== len) {\n throw new Error(`Invalid signature integer: wrong length`);\n }\n if (res[0] === 0x00 && res[1] <= 0x7f) {\n throw new Error('Invalid signature integer: trailing length');\n }\n return { data: bytesToNumber(res), left: data.subarray(len + 2) };\n}\nfunction parseDERSignature(data) {\n if (data.length < 2 || data[0] != 0x30) {\n throw new Error(`Invalid signature tag: ${bytesToHex(data)}`);\n }\n if (data[1] !== data.length - 2) {\n throw new Error('Invalid signature: incorrect length');\n }\n const { data: r, left: sBytes } = parseDERInt(data.subarray(2));\n const { data: s, left: rBytesLeft } = parseDERInt(sBytes);\n if (rBytesLeft.length) {\n throw new Error(`Invalid signature: left bytes after parsing: ${bytesToHex(rBytesLeft)}`);\n }\n return { r, s };\n}\nexport class Signature {\n constructor(r, s) {\n this.r = r;\n this.s = s;\n this.assertValidity();\n }\n static fromCompact(hex) {\n const arr = isUint8a(hex);\n const name = 'Signature.fromCompact';\n if (typeof hex !== 'string' && !arr)\n throw new TypeError(`${name}: Expected string or Uint8Array`);\n const str = arr ? bytesToHex(hex) : hex;\n if (str.length !== 128)\n throw new Error(`${name}: Expected 64-byte hex`);\n return new Signature(hexToNumber(str.slice(0, 64)), hexToNumber(str.slice(64, 128)));\n }\n static fromDER(hex) {\n const arr = isUint8a(hex);\n if (typeof hex !== 'string' && !arr)\n throw new TypeError(`Signature.fromDER: Expected string or Uint8Array`);\n const { r, s } = parseDERSignature(arr ? hex : hexToBytes(hex));\n return new Signature(r, s);\n }\n static fromHex(hex) {\n return this.fromDER(hex);\n }\n assertValidity() {\n const { r, s } = this;\n if (!isWithinCurveOrder(r))\n throw new Error('Invalid Signature: r must be 0 < r < n');\n if (!isWithinCurveOrder(s))\n throw new Error('Invalid Signature: s must be 0 < s < n');\n }\n hasHighS() {\n const HALF = CURVE.n >> _1n;\n return this.s > HALF;\n }\n normalizeS() {\n return this.hasHighS() ? new Signature(this.r, CURVE.n - this.s) : this;\n }\n toDERRawBytes(isCompressed = false) {\n return hexToBytes(this.toDERHex(isCompressed));\n }\n toDERHex(isCompressed = false) {\n const sHex = sliceDER(numberToHexUnpadded(this.s));\n if (isCompressed)\n return sHex;\n const rHex = sliceDER(numberToHexUnpadded(this.r));\n const rLen = numberToHexUnpadded(rHex.length / 2);\n const sLen = numberToHexUnpadded(sHex.length / 2);\n const length = numberToHexUnpadded(rHex.length / 2 + sHex.length / 2 + 4);\n return `30${length}02${rLen}${rHex}02${sLen}${sHex}`;\n }\n toRawBytes() {\n return this.toDERRawBytes();\n }\n toHex() {\n return this.toDERHex();\n }\n toCompactRawBytes() {\n return hexToBytes(this.toCompactHex());\n }\n toCompactHex() {\n return numTo32bStr(this.r) + numTo32bStr(this.s);\n }\n}\nfunction concatBytes(...arrays) {\n if (!arrays.every(isUint8a))\n throw new Error('Uint8Array list expected');\n if (arrays.length === 1)\n return arrays[0];\n const length = arrays.reduce((a, arr) => a + arr.length, 0);\n const result = new Uint8Array(length);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const arr = arrays[i];\n result.set(arr, pad);\n pad += arr.length;\n }\n return result;\n}\nfunction isUint8a(bytes) {\n return bytes instanceof Uint8Array;\n}\nconst hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\nfunction bytesToHex(uint8a) {\n if (!(uint8a instanceof Uint8Array))\n throw new Error('Expected Uint8Array');\n let hex = '';\n for (let i = 0; i < uint8a.length; i++) {\n hex += hexes[uint8a[i]];\n }\n return hex;\n}\nfunction numTo32bStr(num) {\n if (num > POW_2_256)\n throw new Error('Expected number < 2^256');\n return num.toString(16).padStart(64, '0');\n}\nfunction numTo32b(num) {\n return hexToBytes(numTo32bStr(num));\n}\nfunction numberToHexUnpadded(num) {\n const hex = num.toString(16);\n return hex.length & 1 ? `0${hex}` : hex;\n}\nfunction hexToNumber(hex) {\n if (typeof hex !== 'string') {\n throw new TypeError('hexToNumber: expected string, got ' + typeof hex);\n }\n return BigInt(`0x${hex}`);\n}\nfunction hexToBytes(hex) {\n if (typeof hex !== 'string') {\n throw new TypeError('hexToBytes: expected string, got ' + typeof hex);\n }\n if (hex.length % 2)\n throw new Error('hexToBytes: received invalid unpadded hex' + hex.length);\n const array = new Uint8Array(hex.length / 2);\n for (let i = 0; i < array.length; i++) {\n const j = i * 2;\n const hexByte = hex.slice(j, j + 2);\n const byte = Number.parseInt(hexByte, 16);\n if (Number.isNaN(byte) || byte < 0)\n throw new Error('Invalid byte sequence');\n array[i] = byte;\n }\n return array;\n}\nfunction bytesToNumber(bytes) {\n return hexToNumber(bytesToHex(bytes));\n}\nfunction ensureBytes(hex) {\n return hex instanceof Uint8Array ? Uint8Array.from(hex) : hexToBytes(hex);\n}\nfunction normalizeScalar(num) {\n if (typeof num === 'number' && Number.isSafeInteger(num) && num > 0)\n return BigInt(num);\n if (typeof num === 'bigint' && isWithinCurveOrder(num))\n return num;\n throw new TypeError('Expected valid private scalar: 0 < scalar < curve.n');\n}\nfunction mod(a, b = CURVE.P) {\n const result = a % b;\n return result >= _0n ? result : b + result;\n}\nfunction pow2(x, power) {\n const { P } = CURVE;\n let res = x;\n while (power-- > _0n) {\n res *= res;\n res %= P;\n }\n return res;\n}\nfunction sqrtMod(x) {\n const { P } = CURVE;\n const _6n = BigInt(6);\n const _11n = BigInt(11);\n const _22n = BigInt(22);\n const _23n = BigInt(23);\n const _44n = BigInt(44);\n const _88n = BigInt(88);\n const b2 = (x * x * x) % P;\n const b3 = (b2 * b2 * x) % P;\n const b6 = (pow2(b3, _3n) * b3) % P;\n const b9 = (pow2(b6, _3n) * b3) % P;\n const b11 = (pow2(b9, _2n) * b2) % P;\n const b22 = (pow2(b11, _11n) * b11) % P;\n const b44 = (pow2(b22, _22n) * b22) % P;\n const b88 = (pow2(b44, _44n) * b44) % P;\n const b176 = (pow2(b88, _88n) * b88) % P;\n const b220 = (pow2(b176, _44n) * b44) % P;\n const b223 = (pow2(b220, _3n) * b3) % P;\n const t1 = (pow2(b223, _23n) * b22) % P;\n const t2 = (pow2(t1, _6n) * b2) % P;\n return pow2(t2, _2n);\n}\nfunction invert(number, modulo = CURVE.P) {\n if (number === _0n || modulo <= _0n) {\n throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);\n }\n let a = mod(number, modulo);\n let b = modulo;\n let x = _0n, y = _1n, u = _1n, v = _0n;\n while (a !== _0n) {\n const q = b / a;\n const r = b % a;\n const m = x - u * q;\n const n = y - v * q;\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n const gcd = b;\n if (gcd !== _1n)\n throw new Error('invert: does not exist');\n return mod(x, modulo);\n}\nfunction invertBatch(nums, p = CURVE.P) {\n const scratch = new Array(nums.length);\n const lastMultiplied = nums.reduce((acc, num, i) => {\n if (num === _0n)\n return acc;\n scratch[i] = acc;\n return mod(acc * num, p);\n }, _1n);\n const inverted = invert(lastMultiplied, p);\n nums.reduceRight((acc, num, i) => {\n if (num === _0n)\n return acc;\n scratch[i] = mod(acc * scratch[i], p);\n return mod(acc * num, p);\n }, inverted);\n return scratch;\n}\nconst divNearest = (a, b) => (a + b / _2n) / b;\nconst POW_2_128 = _2n ** BigInt(128);\nfunction splitScalarEndo(k) {\n const { n } = CURVE;\n const a1 = BigInt('0x3086d221a7d46bcde86c90e49284eb15');\n const b1 = -_1n * BigInt('0xe4437ed6010e88286f547fa90abfe4c3');\n const a2 = BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8');\n const b2 = a1;\n const c1 = divNearest(b2 * k, n);\n const c2 = divNearest(-b1 * k, n);\n let k1 = mod(k - c1 * a1 - c2 * a2, n);\n let k2 = mod(-c1 * b1 - c2 * b2, n);\n const k1neg = k1 > POW_2_128;\n const k2neg = k2 > POW_2_128;\n if (k1neg)\n k1 = n - k1;\n if (k2neg)\n k2 = n - k2;\n if (k1 > POW_2_128 || k2 > POW_2_128) {\n throw new Error('splitScalarEndo: Endomorphism failed, k=' + k);\n }\n return { k1neg, k1, k2neg, k2 };\n}\nfunction truncateHash(hash) {\n const { n } = CURVE;\n const byteLength = hash.length;\n const delta = byteLength * 8 - 256;\n let h = bytesToNumber(hash);\n if (delta > 0)\n h = h >> BigInt(delta);\n if (h >= n)\n h -= n;\n return h;\n}\nclass HmacDrbg {\n constructor() {\n this.v = new Uint8Array(32).fill(1);\n this.k = new Uint8Array(32).fill(0);\n this.counter = 0;\n }\n hmac(...values) {\n return utils.hmacSha256(this.k, ...values);\n }\n hmacSync(...values) {\n if (typeof utils.hmacSha256Sync !== 'function')\n throw new Error('utils.hmacSha256Sync is undefined, you need to set it');\n const res = utils.hmacSha256Sync(this.k, ...values);\n if (res instanceof Promise)\n throw new Error('To use sync sign(), ensure utils.hmacSha256 is sync');\n return res;\n }\n incr() {\n if (this.counter >= 1000) {\n throw new Error('Tried 1,000 k values for sign(), all were invalid');\n }\n this.counter += 1;\n }\n async reseed(seed = new Uint8Array()) {\n this.k = await this.hmac(this.v, Uint8Array.from([0x00]), seed);\n this.v = await this.hmac(this.v);\n if (seed.length === 0)\n return;\n this.k = await this.hmac(this.v, Uint8Array.from([0x01]), seed);\n this.v = await this.hmac(this.v);\n }\n reseedSync(seed = new Uint8Array()) {\n this.k = this.hmacSync(this.v, Uint8Array.from([0x00]), seed);\n this.v = this.hmacSync(this.v);\n if (seed.length === 0)\n return;\n this.k = this.hmacSync(this.v, Uint8Array.from([0x01]), seed);\n this.v = this.hmacSync(this.v);\n }\n async generate() {\n this.incr();\n this.v = await this.hmac(this.v);\n return this.v;\n }\n generateSync() {\n this.incr();\n this.v = this.hmacSync(this.v);\n return this.v;\n }\n}\nfunction isWithinCurveOrder(num) {\n return _0n < num && num < CURVE.n;\n}\nfunction isValidFieldElement(num) {\n return _0n < num && num < CURVE.P;\n}\nfunction kmdToSig(kBytes, m, d) {\n const k = bytesToNumber(kBytes);\n if (!isWithinCurveOrder(k))\n return;\n const { n } = CURVE;\n const q = Point.BASE.multiply(k);\n const r = mod(q.x, n);\n if (r === _0n)\n return;\n const s = mod(invert(k, n) * mod(m + d * r, n), n);\n if (s === _0n)\n return;\n const sig = new Signature(r, s);\n const recovery = (q.x === sig.r ? 0 : 2) | Number(q.y & _1n);\n return { sig, recovery };\n}\nfunction normalizePrivateKey(key) {\n let num;\n if (typeof key === 'bigint') {\n num = key;\n }\n else if (typeof key === 'number' && Number.isSafeInteger(key) && key > 0) {\n num = BigInt(key);\n }\n else if (typeof key === 'string') {\n if (key.length !== 64)\n throw new Error('Expected 32 bytes of private key');\n num = hexToNumber(key);\n }\n else if (isUint8a(key)) {\n if (key.length !== 32)\n throw new Error('Expected 32 bytes of private key');\n num = bytesToNumber(key);\n }\n else {\n throw new TypeError('Expected valid private key');\n }\n if (!isWithinCurveOrder(num))\n throw new Error('Expected private key: 0 < key < n');\n return num;\n}\nfunction normalizePublicKey(publicKey) {\n if (publicKey instanceof Point) {\n publicKey.assertValidity();\n return publicKey;\n }\n else {\n return Point.fromHex(publicKey);\n }\n}\nfunction normalizeSignature(signature) {\n if (signature instanceof Signature) {\n signature.assertValidity();\n return signature;\n }\n try {\n return Signature.fromDER(signature);\n }\n catch (error) {\n return Signature.fromCompact(signature);\n }\n}\nexport function getPublicKey(privateKey, isCompressed = false) {\n return Point.fromPrivateKey(privateKey).toRawBytes(isCompressed);\n}\nexport function recoverPublicKey(msgHash, signature, recovery, isCompressed = false) {\n return Point.fromSignature(msgHash, signature, recovery).toRawBytes(isCompressed);\n}\nfunction isPub(item) {\n const arr = isUint8a(item);\n const str = typeof item === 'string';\n const len = (arr || str) && item.length;\n if (arr)\n return len === 33 || len === 65;\n if (str)\n return len === 66 || len === 130;\n if (item instanceof Point)\n return true;\n return false;\n}\nexport function getSharedSecret(privateA, publicB, isCompressed = false) {\n if (isPub(privateA))\n throw new TypeError('getSharedSecret: first arg must be private key');\n if (!isPub(publicB))\n throw new TypeError('getSharedSecret: second arg must be public key');\n const b = normalizePublicKey(publicB);\n b.assertValidity();\n return b.multiply(normalizePrivateKey(privateA)).toRawBytes(isCompressed);\n}\nfunction bits2int(bytes) {\n const slice = bytes.length > 32 ? bytes.slice(0, 32) : bytes;\n return bytesToNumber(slice);\n}\nfunction bits2octets(bytes) {\n const z1 = bits2int(bytes);\n const z2 = mod(z1, CURVE.n);\n return int2octets(z2 < _0n ? z1 : z2);\n}\nfunction int2octets(num) {\n if (typeof num !== 'bigint')\n throw new Error('Expected bigint');\n const hex = numTo32bStr(num);\n return hexToBytes(hex);\n}\nfunction initSigArgs(msgHash, privateKey, extraEntropy) {\n if (msgHash == null)\n throw new Error(`sign: expected valid message hash, not \"${msgHash}\"`);\n const h1 = ensureBytes(msgHash);\n const d = normalizePrivateKey(privateKey);\n const seedArgs = [int2octets(d), bits2octets(h1)];\n if (extraEntropy != null) {\n if (extraEntropy === true)\n extraEntropy = utils.randomBytes(32);\n const e = ensureBytes(extraEntropy);\n if (e.length !== 32)\n throw new Error('sign: Expected 32 bytes of extra data');\n seedArgs.push(e);\n }\n const seed = concatBytes(...seedArgs);\n const m = bits2int(h1);\n return { seed, m, d };\n}\nfunction finalizeSig(recSig, opts) {\n let { sig, recovery } = recSig;\n const { canonical, der, recovered } = Object.assign({ canonical: true, der: true }, opts);\n if (canonical && sig.hasHighS()) {\n sig = sig.normalizeS();\n recovery ^= 1;\n }\n const hashed = der ? sig.toDERRawBytes() : sig.toCompactRawBytes();\n return recovered ? [hashed, recovery] : hashed;\n}\nasync function sign(msgHash, privKey, opts = {}) {\n const { seed, m, d } = initSigArgs(msgHash, privKey, opts.extraEntropy);\n let sig;\n const drbg = new HmacDrbg();\n await drbg.reseed(seed);\n while (!(sig = kmdToSig(await drbg.generate(), m, d)))\n await drbg.reseed();\n return finalizeSig(sig, opts);\n}\nfunction signSync(msgHash, privKey, opts = {}) {\n const { seed, m, d } = initSigArgs(msgHash, privKey, opts.extraEntropy);\n let sig;\n const drbg = new HmacDrbg();\n drbg.reseedSync(seed);\n while (!(sig = kmdToSig(drbg.generateSync(), m, d)))\n drbg.reseedSync();\n return finalizeSig(sig, opts);\n}\nexport { sign, signSync };\nconst vopts = { strict: true };\nexport function verify(signature, msgHash, publicKey, opts = vopts) {\n let sig;\n try {\n sig = normalizeSignature(signature);\n msgHash = ensureBytes(msgHash);\n }\n catch (error) {\n return false;\n }\n const { r, s } = sig;\n if (opts.strict && sig.hasHighS())\n return false;\n const h = truncateHash(msgHash);\n if (h === _0n)\n return false;\n let P;\n try {\n P = normalizePublicKey(publicKey);\n }\n catch (error) {\n return false;\n }\n const { n } = CURVE;\n const sinv = invert(s, n);\n const u1 = mod(h * sinv, n);\n const u2 = mod(r * sinv, n);\n const R = Point.BASE.multiplyAndAddUnsafe(P, u1, u2);\n if (!R)\n return false;\n const v = mod(R.x, n);\n return v === r;\n}\nasync function taggedHash(tag, ...messages) {\n const tagB = new Uint8Array(tag.split('').map((c) => c.charCodeAt(0)));\n const tagH = await utils.sha256(tagB);\n const h = await utils.sha256(concatBytes(tagH, tagH, ...messages));\n return bytesToNumber(h);\n}\nasync function createChallenge(x, P, message) {\n const rx = numTo32b(x);\n const t = await taggedHash('BIP0340/challenge', rx, P.toRawX(), message);\n return mod(t, CURVE.n);\n}\nfunction hasEvenY(point) {\n return (point.y & _1n) === _0n;\n}\nclass SchnorrSignature {\n constructor(r, s) {\n this.r = r;\n this.s = s;\n this.assertValidity();\n }\n static fromHex(hex) {\n const bytes = ensureBytes(hex);\n if (bytes.length !== 64)\n throw new TypeError(`SchnorrSignature.fromHex: expected 64 bytes, not ${bytes.length}`);\n const r = bytesToNumber(bytes.subarray(0, 32));\n const s = bytesToNumber(bytes.subarray(32, 64));\n return new SchnorrSignature(r, s);\n }\n assertValidity() {\n const { r, s } = this;\n if (!isValidFieldElement(r) || !isWithinCurveOrder(s))\n throw new Error('Invalid signature');\n }\n toHex() {\n return numTo32bStr(this.r) + numTo32bStr(this.s);\n }\n toRawBytes() {\n return hexToBytes(this.toHex());\n }\n}\nfunction schnorrGetPublicKey(privateKey) {\n return Point.fromPrivateKey(privateKey).toRawX();\n}\nasync function schnorrSign(message, privateKey, auxRand = utils.randomBytes()) {\n if (message == null)\n throw new TypeError(`sign: Expected valid message, not \"${message}\"`);\n const { n } = CURVE;\n const m = ensureBytes(message);\n const d0 = normalizePrivateKey(privateKey);\n const rand = ensureBytes(auxRand);\n if (rand.length !== 32)\n throw new TypeError('sign: Expected 32 bytes of aux randomness');\n const P = Point.fromPrivateKey(d0);\n const d = hasEvenY(P) ? d0 : n - d0;\n const t0h = await taggedHash('BIP0340/aux', rand);\n const t = d ^ t0h;\n const k0h = await taggedHash('BIP0340/nonce', numTo32b(t), P.toRawX(), m);\n const k0 = mod(k0h, n);\n if (k0 === _0n)\n throw new Error('sign: Creation of signature failed. k is zero');\n const R = Point.fromPrivateKey(k0);\n const k = hasEvenY(R) ? k0 : n - k0;\n const e = await createChallenge(R.x, P, m);\n const sig = new SchnorrSignature(R.x, mod(k + e * d, n)).toRawBytes();\n const isValid = await schnorrVerify(sig, m, P.toRawX());\n if (!isValid)\n throw new Error('sign: Invalid signature produced');\n return sig;\n}\nasync function schnorrVerify(signature, message, publicKey) {\n const raw = signature instanceof SchnorrSignature;\n let sig;\n try {\n sig = raw ? signature : SchnorrSignature.fromHex(signature);\n if (raw)\n sig.assertValidity();\n }\n catch (error) {\n return false;\n }\n const { r, s } = sig;\n const m = ensureBytes(message);\n let P;\n try {\n P = normalizePublicKey(publicKey);\n }\n catch (error) {\n return false;\n }\n const e = await createChallenge(r, P, m);\n const R = Point.BASE.multiplyAndAddUnsafe(P, normalizePrivateKey(s), mod(-e, CURVE.n));\n if (!R || !hasEvenY(R) || R.x !== r)\n return false;\n return true;\n}\nexport const schnorr = {\n Signature: SchnorrSignature,\n getPublicKey: schnorrGetPublicKey,\n sign: schnorrSign,\n verify: schnorrVerify,\n};\nPoint.BASE._setWindowSize(8);\nconst crypto = {\n node: nodeCrypto,\n web: typeof self === 'object' && 'crypto' in self ? self.crypto : undefined,\n};\nexport const utils = {\n isValidPrivateKey(privateKey) {\n try {\n normalizePrivateKey(privateKey);\n return true;\n }\n catch (error) {\n return false;\n }\n },\n hashToPrivateKey: (hash) => {\n hash = ensureBytes(hash);\n if (hash.length < 40 || hash.length > 1024)\n throw new Error('Expected 40-1024 bytes of private key as per FIPS 186');\n const num = mod(bytesToNumber(hash), CURVE.n);\n if (num === _0n || num === _1n)\n throw new Error('Invalid private key');\n return numTo32b(num);\n },\n randomBytes: (bytesLength = 32) => {\n if (crypto.web) {\n return crypto.web.getRandomValues(new Uint8Array(bytesLength));\n }\n else if (crypto.node) {\n const { randomBytes } = crypto.node;\n return Uint8Array.from(randomBytes(bytesLength));\n }\n else {\n throw new Error(\"The environment doesn't have randomBytes function\");\n }\n },\n randomPrivateKey: () => {\n return utils.hashToPrivateKey(utils.randomBytes(40));\n },\n bytesToHex,\n mod,\n sha256: async (message) => {\n if (crypto.web) {\n const buffer = await crypto.web.subtle.digest('SHA-256', message.buffer);\n return new Uint8Array(buffer);\n }\n else if (crypto.node) {\n const { createHash } = crypto.node;\n return Uint8Array.from(createHash('sha256').update(message).digest());\n }\n else {\n throw new Error(\"The environment doesn't have sha256 function\");\n }\n },\n hmacSha256: async (key, ...messages) => {\n if (crypto.web) {\n const ckey = await crypto.web.subtle.importKey('raw', key, { name: 'HMAC', hash: { name: 'SHA-256' } }, false, ['sign']);\n const message = concatBytes(...messages);\n const buffer = await crypto.web.subtle.sign('HMAC', ckey, message);\n return new Uint8Array(buffer);\n }\n else if (crypto.node) {\n const { createHmac } = crypto.node;\n const hash = createHmac('sha256', key);\n messages.forEach((m) => hash.update(m));\n return Uint8Array.from(hash.digest());\n }\n else {\n throw new Error(\"The environment doesn't have hmac-sha256 function\");\n }\n },\n sha256Sync: undefined,\n hmacSha256Sync: undefined,\n precompute(windowSize = 8, point = Point.BASE) {\n const cached = point === Point.BASE ? point : new Point(point.x, point.y);\n cached._setWindowSize(windowSize);\n cached.multiply(_3n);\n return cached;\n },\n};\n","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _SigningKey_privateKey;\nimport * as secp256k1 from \"@noble/secp256k1\";\nimport { arrayify, concat, dataLength, hexlify } from \"@ethersproject/bytes\";\nimport { computeHmac } from \"@ethersproject/crypto\";\nimport { toHex } from \"@ethersproject/math\";\nimport { Signature } from \"./signature.js\";\nimport { logger } from \"./logger.js\";\n// Make noble-secp256k1 sync\nsecp256k1.utils.hmacSha256Sync = function (key, ...messages) {\n return arrayify(computeHmac(\"sha256\", key, concat(messages)));\n};\nexport class SigningKey {\n constructor(privateKey) {\n _SigningKey_privateKey.set(this, void 0);\n logger.assertArgument((dataLength(privateKey) === 32), \"invalid private key length\", \"privateKey\", \"[REDACTED]\");\n __classPrivateFieldSet(this, _SigningKey_privateKey, hexlify(privateKey), \"f\");\n }\n get privateKey() { return __classPrivateFieldGet(this, _SigningKey_privateKey, \"f\"); }\n get publicKey() { return SigningKey.computePublicKey(__classPrivateFieldGet(this, _SigningKey_privateKey, \"f\")); }\n get compressedPublicKey() { return SigningKey.computePublicKey(__classPrivateFieldGet(this, _SigningKey_privateKey, \"f\"), true); }\n sign(digest) {\n logger.assertArgument((dataLength(digest) === 32), \"invalid digest length\", \"digest\", digest);\n const [sigDer, recid] = secp256k1.signSync(arrayify(digest), arrayify(__classPrivateFieldGet(this, _SigningKey_privateKey, \"f\")), {\n recovered: true,\n canonical: true\n });\n const sig = secp256k1.Signature.fromHex(sigDer);\n return Signature.from({\n r: toHex(\"0x\" + sig.r.toString(16), 32),\n s: toHex(\"0x\" + sig.s.toString(16), 32),\n v: (recid ? 0x1c : 0x1b)\n }).freeze();\n }\n computeShardSecret(other) {\n const pubKey = SigningKey.computePublicKey(other);\n return hexlify(secp256k1.getSharedSecret(arrayify(__classPrivateFieldGet(this, _SigningKey_privateKey, \"f\")), pubKey));\n }\n static computePublicKey(key, compressed) {\n let bytes = logger.getBytes(key, \"key\");\n if (bytes.length === 32) {\n const pubKey = secp256k1.getPublicKey(bytes, !!compressed);\n return hexlify(pubKey);\n }\n if (bytes.length === 64) {\n const pub = new Uint8Array(65);\n pub[0] = 0x04;\n pub.set(bytes, 1);\n bytes = pub;\n }\n const point = secp256k1.Point.fromHex(bytes);\n return hexlify(point.toRawBytes(compressed));\n }\n static recoverPublicKey(digest, signature) {\n const sig = Signature.from(signature);\n const der = secp256k1.Signature.fromCompact(arrayify(concat([sig.r, sig.s]))).toDERRawBytes();\n const pubKey = secp256k1.recoverPublicKey(arrayify(digest), der, sig.yParity);\n if (pubKey != null) {\n return hexlify(pubKey);\n }\n return logger.throwArgumentError(\"invalid signautre for digest\", \"signature\", signature);\n }\n static _addPoints(p0, p1, compressed) {\n const pub0 = secp256k1.Point.fromHex(SigningKey.computePublicKey(p0).substring(2));\n const pub1 = secp256k1.Point.fromHex(SigningKey.computePublicKey(p1).substring(2));\n return \"0x\" + pub0.add(pub1).toHex(!!compressed);\n }\n}\n_SigningKey_privateKey = new WeakMap();\n/*\nconst key = new SigningKey(\"0x1234567890123456789012345678901234567890123456789012345678901234\");\nconsole.log(key);\nconsole.log(key.sign(\"0x1234567890123456789012345678901234567890123456789012345678901234\"));\n{\n const privKey = \"0x1234567812345678123456781234567812345678123456781234567812345678\";\n const signingKey = new SigningKey(privKey);\n console.log(\"0\", signingKey, signingKey.publicKey, signingKey.publicKeyCompressed);\n\n let pubKey = SigningKey.computePublicKey(privKey);\n let pubKeyComp = SigningKey.computePublicKey(privKey, true);\n let pubKeyRaw = \"0x\" + SigningKey.computePublicKey(privKey).substring(4);\n console.log(\"A\", pubKey, pubKeyComp);\n\n let a = SigningKey.computePublicKey(pubKey);\n let b = SigningKey.computePublicKey(pubKey, true);\n console.log(\"B\", a, b);\n\n a = SigningKey.computePublicKey(pubKeyComp);\n b = SigningKey.computePublicKey(pubKeyComp, true);\n console.log(\"C\", a, b);\n\n a = SigningKey.computePublicKey(pubKeyRaw);\n b = SigningKey.computePublicKey(pubKeyRaw, true);\n console.log(\"D\", a, b);\n\n const digest = \"0x1122334411223344112233441122334411223344112233441122334411223344\";\n const sig = signingKey.sign(digest);\n console.log(\"SS\", sig, sig.r, sig.s, sig.yParity);\n\n console.log(\"R\", SigningKey.recoverPublicKey(digest, sig));\n}\n*/\n//# sourceMappingURL=signing-key.js.map","import { getAddress } from \"@ethersproject/address\";\nimport { dataLength } from \"@ethersproject/bytes\";\nfunction accessSetify(addr, storageKeys) {\n return {\n address: getAddress(addr),\n storageKeys: (storageKeys || []).map((storageKey, index) => {\n if (dataLength(storageKey) !== 32) {\n //logger.throwArgumentError(\"invalid access list storageKey\", `accessList[${ addr }>\n throw new Error(\"\");\n }\n return storageKey.toLowerCase();\n })\n };\n}\nexport function accessListify(value) {\n if (Array.isArray(value)) {\n return value.map((set, index) => {\n if (Array.isArray(set)) {\n if (set.length > 2) {\n //logger.throwArgumentError(\"access list expected to be [ address, storageKeys[>\n throw new Error(\"\");\n }\n return accessSetify(set[0], set[1]);\n }\n return accessSetify(set.address, set.storageKeys);\n });\n }\n const result = Object.keys(value).map((addr) => {\n const storageKeys = value[addr].reduce((accum, storageKey) => {\n accum[storageKey] = true;\n return accum;\n }, {});\n return accessSetify(addr, Object.keys(storageKeys).sort());\n });\n result.sort((a, b) => (a.address.localeCompare(b.address)));\n return result;\n}\n//# sourceMappingURL=accesslist.js.map","export const version = \"@ethersproject/transactions@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Transaction_props;\nimport { getAddress } from \"@ethersproject/address\";\nimport { arrayify, concat, hexlify } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { toArray } from \"@ethersproject/math\";\nimport { getStore, setStore } from \"@ethersproject/properties\";\nimport { encodeRlp } from \"@ethersproject/rlp\";\nimport { Signature } from \"@ethersproject/signing-key\";\nimport { accessListify } from \"./accesslist.js\";\nimport { logger } from \"./logger.js\";\nconst BN_0 = BigInt(0);\nfunction formatNumber(_value, name) {\n const value = logger.getBigInt(_value, \"value\");\n const result = toArray(value);\n if (result.length > 32) {\n logger.throwArgumentError(`value too large`, `tx.${name}`, value);\n }\n return result;\n}\nfunction formatAccessList(value) {\n return accessListify(value).map((set) => [set.address, set.storageKeys]);\n}\nfunction _parseLegacy(data) {\n return {};\n}\nfunction _serializeLegacy(tx, sig) {\n const fields = [\n formatNumber(tx.nonce || 0, \"nonce\"),\n formatNumber(tx.gasPrice || 0, \"gasPrice\"),\n formatNumber(tx.gasLimit || 0, \"gasLimit\"),\n ((tx.to != null) ? getAddress(tx.to) : \"0x\"),\n formatNumber(tx.value || 0, \"value\"),\n (tx.data || \"0x\"),\n ];\n let chainId = BN_0;\n if (tx.chainId != null) {\n // A chainId was provided; if non-zero we'll use EIP-155\n chainId = logger.getBigInt(tx.chainId, \"tx.chainId\");\n // We have a chainId in the tx and an EIP-155 v in the signature,\n // make sure they agree with each other\n if (sig && sig.networkV != null && sig.legacyChainId !== chainId) {\n logger.throwArgumentError(\"tx.chainId/sig.v mismatch\", \"sig\", sig);\n }\n }\n else if (sig) {\n // No chainId provided, but the signature is signing with EIP-155; derive chainId\n const legacy = sig.legacyChainId;\n if (legacy != null) {\n chainId = legacy;\n }\n }\n // Requesting an unsigned transaction\n if (!sig) {\n // We have an EIP-155 transaction (chainId was specified and non-zero)\n if (chainId !== BN_0) {\n fields.push(toArray(chainId));\n fields.push(\"0x\");\n fields.push(\"0x\");\n }\n return encodeRlp(fields);\n }\n // We pushed a chainId and null r, s on for hashing only; remove those\n let v = BigInt(27 + sig.yParity);\n if (chainId !== BN_0) {\n v = Signature.getChainIdV(chainId, sig.v);\n }\n else if (BigInt(sig.v) !== v) {\n logger.throwArgumentError(\"tx.chainId/sig.v mismatch\", \"sig\", sig);\n }\n fields.push(toArray(v));\n fields.push(toArray(sig.r));\n fields.push(toArray(sig.s));\n return encodeRlp(fields);\n}\nfunction _parseEip1559(data) {\n throw new Error(\"@TODO\");\n}\nfunction _serializeEip1559(tx, sig) {\n // If there is an explicit gasPrice, make sure it matches the\n // EIP-1559 fees; otherwise they may not understand what they\n // think they are setting in terms of fee.\n //if (tx.gasPrice != null) {\n // if (tx.gasPrice !== (tx.maxFeePerGas || BN_0)) {\n // logger.throwArgumentError(\"mismatch EIP-1559 gasPrice != maxFeePerGas\", \"tx\", tx);\n // }\n //}\n const fields = [\n formatNumber(tx.chainId || 0, \"chainId\"),\n formatNumber(tx.nonce || 0, \"nonce\"),\n formatNumber(tx.maxPriorityFeePerGas || 0, \"maxPriorityFeePerGas\"),\n formatNumber(tx.maxFeePerGas || 0, \"maxFeePerGas\"),\n formatNumber(tx.gasLimit || 0, \"gasLimit\"),\n ((tx.to != null) ? getAddress(tx.to) : \"0x\"),\n formatNumber(tx.value || 0, \"value\"),\n (tx.data || \"0x\"),\n (formatAccessList(tx.accessList || []))\n ];\n if (sig) {\n fields.push(formatNumber(sig.yParity, \"yParity\"));\n fields.push(toArray(sig.r));\n fields.push(toArray(sig.s));\n }\n return concat([\"0x02\", encodeRlp(fields)]);\n}\nfunction _parseEip2930(data) {\n throw new Error(\"@TODO\");\n}\nfunction _serializeEip2930(tx, sig) {\n const fields = [\n formatNumber(tx.chainId || 0, \"chainId\"),\n formatNumber(tx.nonce || 0, \"nonce\"),\n formatNumber(tx.gasPrice || 0, \"gasPrice\"),\n formatNumber(tx.gasLimit || 0, \"gasLimit\"),\n ((tx.to != null) ? getAddress(tx.to) : \"0x\"),\n formatNumber(tx.value || 0, \"value\"),\n (tx.data || \"0x\"),\n (formatAccessList(tx.accessList || []))\n ];\n if (sig) {\n fields.push(formatNumber(sig.yParity, \"recoveryParam\"));\n fields.push(toArray(sig.r));\n fields.push(toArray(sig.s));\n }\n return concat([\"0x01\", encodeRlp(fields)]);\n}\nexport class Transaction {\n constructor() {\n _Transaction_props.set(this, void 0);\n __classPrivateFieldSet(this, _Transaction_props, {\n type: null,\n to: null,\n nonce: 0,\n gasLimit: BigInt(0),\n gasPrice: null,\n maxPriorityFeePerGas: null,\n maxFeePerGas: null,\n data: \"0x\",\n value: BigInt(0),\n chainId: BigInt(0),\n sig: null,\n accessList: null\n }, \"f\");\n }\n // A type of null indicates the type will be populated automatically\n get type() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"type\"); }\n get typeName() {\n switch (this.type) {\n case 0: return \"legacy\";\n case 1: return \"eip-2930\";\n case 2: return \"eip-1559\";\n }\n return null;\n }\n set type(value) {\n switch (value) {\n case null:\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"type\", null);\n break;\n case 0:\n case \"legacy\":\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"type\", 0);\n break;\n case 1:\n case \"berlin\":\n case \"eip-2930\":\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"type\", 1);\n break;\n case 2:\n case \"london\":\n case \"eip-1559\":\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"type\", 2);\n break;\n default:\n throw new Error(`unsupported transaction type`);\n }\n }\n /*\n detectType(): number {\n const hasFee = (this.maxFeePerGas != null) || (this.maxPriorityFeePerGas != null);\n const hasAccessList = (this.accessList != null);\n const hasLegacy = (this.gasPrice != null);\n\n if (hasLegacy) {\n if (hasFee) {\n throw new Error(\"cannot mix legacy and london properties\");\n }\n if (hasAccessList) { return 1; }\n return 0;\n }\n\n return 2;\n }\n */\n get to() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"to\"); }\n set to(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"to\", (value == null) ? null : getAddress(value));\n }\n get nonce() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"nonce\"); }\n set nonce(value) { setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"nonce\", logger.getNumber(value, \"value\")); }\n get gasLimit() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"gasLimit\"); }\n set gasLimit(value) { setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"gasLimit\", logger.getBigInt(value)); }\n get gasPrice() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"gasPrice\"); }\n set gasPrice(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"gasPrice\", (value == null) ? null : logger.getBigInt(value));\n }\n get maxPriorityFeePerGas() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"maxPriorityFeePerGas\"); }\n set maxPriorityFeePerGas(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"maxPriorityFeePerGas\", (value == null) ? null : logger.getBigInt(value));\n }\n get maxFeePerGas() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"maxFeePerGas\"); }\n set maxFeePerGas(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"maxFeePerGas\", (value == null) ? null : logger.getBigInt(value));\n }\n get data() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"data\"); }\n set data(value) { setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"data\", hexlify(value)); }\n get value() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"value\"); }\n set value(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"value\", logger.getBigInt(value));\n }\n get chainId() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"chainId\"); }\n set chainId(value) { setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"chainId\", logger.getBigInt(value)); }\n get signature() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"sig\") || null; }\n set signature(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"sig\", (value == null) ? null : Signature.from(value));\n }\n get accessList() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"accessList\") || null; }\n set accessList(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"accessList\", (value == null) ? null : accessListify(value));\n }\n get hash() {\n if (this.signature == null) {\n throw new Error(\"cannot hash unsigned transaction; maybe you meant .unsignedHash\");\n }\n return keccak256(this.serialized);\n }\n get unsignedHash() {\n return keccak256(this.unsignedSerialized);\n }\n get from() {\n if (this.signature == null) {\n return null;\n }\n // use ecomputeAddress(this.fromPublicKey);\n return \"\";\n }\n get fromPublicKey() {\n if (this.signature == null) {\n return null;\n }\n // use ecrecover\n return \"\";\n }\n isSigned() {\n return this.signature != null;\n }\n get serialized() {\n if (this.signature == null) {\n throw new Error(\"cannot serialize unsigned transaction; maybe you meant .unsignedSerialized\");\n }\n const types = this.inferTypes();\n if (types.length !== 1) {\n throw new Error(\"cannot determine transaction type; specify type manually\");\n }\n switch (types[0]) {\n case 0:\n return _serializeLegacy(this, this.signature);\n case 1:\n return _serializeEip2930(this, this.signature);\n case 2:\n return _serializeEip1559(this, this.signature);\n }\n throw new Error(\"unsupported type\");\n }\n get unsignedSerialized() {\n if (this.signature != null) {\n throw new Error(\"cannot serialize unsigned transaction; maybe you meant .unsignedSerialized\");\n }\n const types = this.inferTypes();\n if (types.length !== 1) {\n throw new Error(\"cannot determine transaction type; specify type manually\");\n }\n switch (types[0]) {\n case 0:\n return _serializeLegacy(this);\n case 1:\n return _serializeEip2930(this);\n case 2:\n return _serializeEip1559(this);\n }\n throw new Error(\"unsupported type\");\n }\n // Validates properties and lists possible types this transaction adheres to\n inferTypes() {\n // Checks that there are no conflicting properties set\n const hasGasPrice = this.gasPrice != null;\n const hasFee = (this.maxFeePerGas != null || this.maxPriorityFeePerGas != null);\n const hasAccessList = (this.accessList != null);\n //if (hasGasPrice && hasFee) {\n // throw new Error(\"transaction cannot have gasPrice and maxFeePerGas\");\n //}\n if (!!this.maxFeePerGas && !!this.maxPriorityFeePerGas) {\n if (this.maxFeePerGas < this.maxPriorityFeePerGas) {\n throw new Error(\"priorityFee cannot be more than maxFee\");\n }\n }\n //if (this.type === 2 && hasGasPrice) {\n // throw new Error(\"eip-1559 transaction cannot have gasPrice\");\n //}\n if ((this.type === 0 || this.type === 1) && hasFee) {\n throw new Error(\"transaction type cannot have maxFeePerGas or maxPriorityFeePerGas\");\n }\n if (this.type === 0 && hasAccessList) {\n throw new Error(\"legacy transaction cannot have accessList\");\n }\n const types = [];\n // Explicit type\n if (this.type != null) {\n types.push(this.type);\n }\n else {\n if (hasFee) {\n types.push(2);\n }\n else if (hasGasPrice) {\n types.push(1);\n if (!hasAccessList) {\n types.push(0);\n }\n }\n else if (hasAccessList) {\n types.push(1);\n types.push(2);\n }\n else {\n types.push(0);\n types.push(1);\n types.push(2);\n }\n }\n types.sort();\n return types;\n }\n clone() {\n return Transaction.from(this);\n }\n freeze() {\n if (__classPrivateFieldGet(this, _Transaction_props, \"f\").sig) {\n __classPrivateFieldGet(this, _Transaction_props, \"f\").sig = (__classPrivateFieldGet(this, _Transaction_props, \"f\").sig.clone().freeze());\n }\n if (__classPrivateFieldGet(this, _Transaction_props, \"f\").accessList) {\n __classPrivateFieldGet(this, _Transaction_props, \"f\").accessList = Object.freeze(__classPrivateFieldGet(this, _Transaction_props, \"f\").accessList.map((set) => {\n Object.freeze(set.storageKeys);\n return Object.freeze(set);\n }));\n }\n Object.freeze(__classPrivateFieldGet(this, _Transaction_props, \"f\"));\n return this;\n }\n isFrozen() {\n return Object.isFrozen(__classPrivateFieldGet(this, _Transaction_props, \"f\"));\n }\n static from(tx) {\n if (typeof (tx) === \"string\") {\n const payload = arrayify(tx);\n if (payload[0] >= 0x7f) { // @TODO: > vs >= ??\n return Transaction.from(_parseLegacy(payload));\n }\n switch (payload[0]) {\n case 1: return Transaction.from(_parseEip2930(payload.slice(1)));\n case 2: return Transaction.from(_parseEip1559(payload.slice(1)));\n }\n throw new Error(\"unsupported transaction type\");\n }\n const result = new Transaction();\n if (tx.type != null) {\n result.type = tx.type;\n }\n if (tx.to != null) {\n result.to = tx.to;\n }\n if (tx.nonce != null) {\n result.nonce = tx.nonce;\n }\n if (tx.gasLimit != null) {\n result.gasLimit = tx.gasLimit;\n }\n if (tx.gasPrice != null) {\n result.gasPrice = tx.gasPrice;\n }\n if (tx.maxPriorityFeePerGas != null) {\n result.maxPriorityFeePerGas = tx.maxPriorityFeePerGas;\n }\n if (tx.maxFeePerGas != null) {\n result.maxFeePerGas = tx.maxFeePerGas;\n }\n if (tx.data != null) {\n result.data = tx.data;\n }\n if (tx.value != null) {\n result.value = tx.value;\n }\n if (tx.chainId != null) {\n result.chainId = tx.chainId;\n }\n if (tx.signature != null) {\n result.signature = Signature.from(tx.signature);\n }\n if (tx.accessList != null) {\n result.accessList = tx.accessList;\n }\n // Should these be checked?? Should from be allowed if there is no signature?\n // from?: null | A;\n // hash?: null | string;\n return result;\n }\n}\n_Transaction_props = new WeakMap();\n//# sourceMappingURL=transaction.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Block_transactions, _TransactionReceipt_logs;\n//import { resolveAddress } from \"@ethersproject/address\";\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { accessListify } from \"@ethersproject/transactions\";\nimport { logger } from \"./logger.js\";\n// -----------------------\nfunction getValue(value) {\n if (value == null) {\n return null;\n }\n return value;\n}\nfunction toJson(value) {\n if (value == null) {\n return null;\n }\n return value.toString();\n}\n// @TODO? implements Required\nexport class FeeData {\n constructor(gasPrice, maxFeePerGas, maxPriorityFeePerGas) {\n defineProperties(this, {\n gasPrice: getValue(gasPrice),\n maxFeePerGas: getValue(maxFeePerGas),\n maxPriorityFeePerGas: getValue(maxPriorityFeePerGas)\n });\n }\n toJSON() {\n const { gasPrice, maxFeePerGas, maxPriorityFeePerGas } = this;\n return {\n _type: \"FeeData\",\n gasPrice: toJson(gasPrice),\n maxFeePerGas: toJson(maxFeePerGas),\n maxPriorityFeePerGas: toJson(maxPriorityFeePerGas),\n };\n }\n}\n;\nexport function copyRequest(req) {\n const result = {};\n // These could be addresses, ENS names or Addressables\n if (req.to) {\n result.to = req.to;\n }\n if (req.from) {\n result.from = req.from;\n }\n if (req.data) {\n result.data = hexlify(req.data);\n }\n const bigIntKeys = \"chainId,gasLimit,gasPrice,maxFeePerGas, maxPriorityFeePerGas,value\".split(/,/);\n for (const key in bigIntKeys) {\n if (!(key in req) || req[key] == null) {\n continue;\n }\n result[key] = logger.getBigInt(req[key], `request.${key}`);\n }\n const numberKeys = \"type,nonce\".split(/,/);\n for (const key in numberKeys) {\n if (!(key in req) || req[key] == null) {\n continue;\n }\n result[key] = logger.getNumber(req[key], `request.${key}`);\n }\n if (req.accessList) {\n result.accessList = accessListify(req.accessList);\n }\n if (\"blockTag\" in req) {\n result.blockTag = req.blockTag;\n }\n if (\"enableCcipRead\" in req) {\n result.enableCcipReadEnabled = !!req.enableCcipRead;\n }\n if (\"customData\" in req) {\n result.customData = req.customData;\n }\n return result;\n}\n;\nexport class Block {\n constructor(block, provider) {\n _Block_transactions.set(this, void 0);\n if (provider == null) {\n provider = dummyProvider;\n }\n __classPrivateFieldSet(this, _Block_transactions, Object.freeze(block.transactions.map((tx) => {\n if (typeof (tx) !== \"string\" && tx.provider !== provider) {\n throw new Error(\"provider mismatch\");\n }\n return tx;\n })), \"f\");\n ;\n defineProperties(this, {\n provider,\n hash: getValue(block.hash),\n number: block.number,\n timestamp: block.timestamp,\n parentHash: block.parentHash,\n nonce: block.nonce,\n difficulty: block.difficulty,\n gasLimit: block.gasLimit,\n gasUsed: block.gasUsed,\n miner: block.miner,\n extraData: block.extraData,\n baseFeePerGas: getValue(block.baseFeePerGas)\n });\n }\n get transactions() { return __classPrivateFieldGet(this, _Block_transactions, \"f\"); }\n //connect(provider: Provider): Block {\n // return new Block(this, provider);\n //}\n toJSON() {\n const { baseFeePerGas, difficulty, extraData, gasLimit, gasUsed, hash, miner, nonce, number, parentHash, timestamp, transactions } = this;\n return {\n _type: \"Block\",\n baseFeePerGas: toJson(baseFeePerGas),\n difficulty: toJson(difficulty),\n extraData,\n gasLimit: toJson(gasLimit),\n gasUsed: toJson(gasUsed),\n hash, miner, nonce, number, parentHash, timestamp,\n transactions,\n };\n }\n [(_Block_transactions = new WeakMap(), Symbol.iterator)]() {\n let index = 0;\n return {\n next: () => {\n if (index < this.length) {\n return {\n value: this.transactions[index++], done: false\n };\n }\n return { value: undefined, done: true };\n }\n };\n }\n get length() { return this.transactions.length; }\n get date() {\n if (this.timestamp == null) {\n return null;\n }\n return new Date(this.timestamp * 1000);\n }\n async getTransaction(index) {\n const tx = this.transactions[index];\n if (tx == null) {\n throw new Error(\"no such tx\");\n }\n if (typeof (tx) === \"string\") {\n return (await this.provider.getTransaction(tx));\n }\n else {\n return tx;\n }\n }\n isMined() { return !!this.hash; }\n isLondon() { return !!this.baseFeePerGas; }\n orphanedEvent() {\n if (!this.isMined()) {\n throw new Error(\"\");\n }\n return createOrphanedBlockFilter(this);\n }\n}\nexport class Log {\n constructor(log, provider) {\n if (provider == null) {\n provider = dummyProvider;\n }\n this.provider = provider;\n const topics = Object.freeze(log.topics.slice());\n defineProperties(this, {\n transactionHash: log.transactionHash,\n blockHash: log.blockHash,\n blockNumber: log.blockNumber,\n removed: log.removed,\n address: log.address,\n data: log.data,\n topics,\n index: log.index,\n transactionIndex: log.transactionIndex,\n });\n }\n //connect(provider: Provider): Log {\n // return new Log(this, provider);\n //}\n toJSON() {\n const { address, blockHash, blockNumber, data, index, removed, topics, transactionHash, transactionIndex } = this;\n return {\n _type: \"log\",\n address, blockHash, blockNumber, data, index,\n removed, topics, transactionHash, transactionIndex\n };\n }\n async getBlock() {\n return (await this.provider.getBlock(this.blockHash));\n }\n async getTransaction() {\n return (await this.provider.getTransaction(this.transactionHash));\n }\n async getTransactionReceipt() {\n return (await this.provider.getTransactionReceipt(this.transactionHash));\n }\n removedEvent() {\n return createRemovedLogFilter(this);\n }\n}\nexport class TransactionReceipt {\n constructor(tx, provider) {\n _TransactionReceipt_logs.set(this, void 0);\n if (provider == null) {\n provider = dummyProvider;\n }\n __classPrivateFieldSet(this, _TransactionReceipt_logs, Object.freeze(tx.logs.map((log) => {\n if (provider !== log.provider) {\n //return log.connect(provider);\n throw new Error(\"provider mismatch\");\n }\n return log;\n })), \"f\");\n defineProperties(this, {\n provider,\n to: tx.to,\n from: tx.from,\n contractAddress: tx.contractAddress,\n hash: tx.hash,\n index: tx.index,\n blockHash: tx.blockHash,\n blockNumber: tx.blockNumber,\n logsBloom: tx.logsBloom,\n gasUsed: tx.gasUsed,\n cumulativeGasUsed: tx.cumulativeGasUsed,\n gasPrice: (tx.effectiveGasPrice || tx.gasPrice),\n byzantium: tx.byzantium,\n status: tx.status,\n root: tx.root\n });\n }\n get logs() { return __classPrivateFieldGet(this, _TransactionReceipt_logs, \"f\"); }\n //connect(provider: Provider): TransactionReceipt {\n // return new TransactionReceipt(this, provider);\n //}\n toJSON() {\n const { to, from, contractAddress, hash, index, blockHash, blockNumber, logsBloom, logs, byzantium, status, root } = this;\n return {\n _type: \"TransactionReceipt\",\n blockHash, blockNumber, byzantium, contractAddress,\n cumulativeGasUsed: toJson(this.cumulativeGasUsed),\n from,\n gasPrice: toJson(this.gasPrice),\n gasUsed: toJson(this.gasUsed),\n hash, index, logs, logsBloom, root, status, to\n };\n }\n get length() { return this.logs.length; }\n [(_TransactionReceipt_logs = new WeakMap(), Symbol.iterator)]() {\n let index = 0;\n return {\n next: () => {\n if (index < this.length) {\n return { value: this.logs[index++], done: false };\n }\n return { value: undefined, done: true };\n }\n };\n }\n get fee() {\n return this.gasUsed * this.gasPrice;\n }\n async getBlock() {\n const block = await this.provider.getBlock(this.blockHash);\n if (block == null) {\n throw new Error(\"TODO\");\n }\n return block;\n }\n async getTransaction() {\n const tx = await this.provider.getTransaction(this.hash);\n if (tx == null) {\n throw new Error(\"TODO\");\n }\n return tx;\n }\n async confirmations() {\n return (await this.provider.getBlockNumber()) - this.blockNumber + 1;\n }\n removedEvent() {\n return createRemovedTransactionFilter(this);\n }\n reorderedEvent(other) {\n if (other && !other.isMined()) {\n return logger.throwError(\"unmined 'other' transction cannot be orphaned\", \"UNSUPPORTED_OPERATION\", {\n operation: \"reorderedEvent(other)\"\n });\n }\n return createReorderedTransactionFilter(this, other);\n }\n}\n;\nexport class TransactionResponse {\n constructor(tx, provider) {\n if (provider == null) {\n provider = dummyProvider;\n }\n this.provider = provider;\n this.blockNumber = (tx.blockNumber != null) ? tx.blockNumber : null;\n this.blockHash = (tx.blockHash != null) ? tx.blockHash : null;\n this.hash = tx.hash;\n this.index = tx.index;\n this.type = tx.type;\n this.from = tx.from;\n this.to = tx.to || null;\n this.gasLimit = tx.gasLimit;\n this.nonce = tx.nonce;\n this.data = tx.data;\n this.value = tx.value;\n this.gasPrice = tx.gasPrice;\n this.maxPriorityFeePerGas = (tx.maxPriorityFeePerGas != null) ? tx.maxPriorityFeePerGas : null;\n this.maxFeePerGas = (tx.maxFeePerGas != null) ? tx.maxFeePerGas : null;\n this.chainId = tx.chainId;\n this.signature = tx.signature;\n this.accessList = (tx.accessList != null) ? tx.accessList : null;\n }\n //connect(provider: Provider): TransactionResponse {\n // return new TransactionResponse(this, provider);\n //}\n toJSON() {\n const { blockNumber, blockHash, index, hash, type, to, from, nonce, data, signature, accessList } = this;\n return {\n _type: \"TransactionReceipt\",\n accessList, blockNumber, blockHash,\n chainId: toJson(this.chainId),\n data, from,\n gasLimit: toJson(this.gasLimit),\n gasPrice: toJson(this.gasPrice),\n hash,\n maxFeePerGas: toJson(this.maxFeePerGas),\n maxPriorityFeePerGas: toJson(this.maxPriorityFeePerGas),\n nonce, signature, to, index, type,\n value: toJson(this.value),\n };\n }\n async getBlock() {\n let blockNumber = this.blockNumber;\n if (blockNumber == null) {\n const tx = await this.getTransaction();\n if (tx) {\n blockNumber = tx.blockNumber;\n }\n }\n if (blockNumber == null) {\n return null;\n }\n const block = this.provider.getBlock(blockNumber);\n if (block == null) {\n throw new Error(\"TODO\");\n }\n return block;\n }\n async getTransaction() {\n return this.provider.getTransaction(this.hash);\n }\n async wait(confirms) {\n return this.provider.waitForTransaction(this.hash, confirms);\n }\n isMined() {\n return (this.blockHash != null);\n }\n isLegacy() {\n return (this.type === 0);\n }\n isBerlin() {\n return (this.type === 1);\n }\n isLondon() {\n return (this.type === 2);\n }\n removedEvent() {\n if (!this.isMined()) {\n return logger.throwError(\"unmined transaction canot be orphaned\", \"UNSUPPORTED_OPERATION\", {\n operation: \"removeEvent()\"\n });\n }\n return createRemovedTransactionFilter(this);\n }\n reorderedEvent(other) {\n if (!this.isMined()) {\n return logger.throwError(\"unmined transaction canot be orphaned\", \"UNSUPPORTED_OPERATION\", {\n operation: \"removeEvent()\"\n });\n }\n if (other && !other.isMined()) {\n return logger.throwError(\"unmined 'other' transaction canot be orphaned\", \"UNSUPPORTED_OPERATION\", {\n operation: \"removeEvent()\"\n });\n }\n return createReorderedTransactionFilter(this, other);\n }\n}\nfunction createOrphanedBlockFilter(block) {\n return { orphan: \"drop-block\", hash: block.hash, number: block.number };\n}\nfunction createReorderedTransactionFilter(tx, other) {\n return { orphan: \"reorder-transaction\", tx, other };\n}\nfunction createRemovedTransactionFilter(tx) {\n return { orphan: \"drop-transaction\", tx };\n}\nfunction createRemovedLogFilter(log) {\n return { orphan: \"drop-log\", log: {\n transactionHash: log.transactionHash,\n blockHash: log.blockHash,\n blockNumber: log.blockNumber,\n address: log.address,\n data: log.data,\n topics: Object.freeze(log.topics.slice()),\n index: log.index\n } };\n}\nfunction fail() {\n throw new Error(\"this provider should not be used\");\n}\nclass DummyProvider {\n async getNetwork() { return fail(); }\n async getFeeData() { return fail(); }\n async estimateGas(tx) { return fail(); }\n async call(tx) { return fail(); }\n async resolveName(name) { return fail(); }\n // State\n async getBlockNumber() { return fail(); }\n // Account\n async getBalanceOf(address, blockTag) {\n return fail();\n }\n async getTransactionCountOf(address, blockTag) {\n return fail();\n }\n async getCode(address, blockTag) {\n return fail();\n }\n async getStorageAt(address, position, blockTag) {\n return fail();\n }\n // Write\n async broadcastTransaction(signedTx) { return fail(); }\n // Queries\n async getBlock(blockHashOrBlockTag) {\n return fail();\n }\n async getBlockWithTransactions(blockHashOrBlockTag) {\n return fail();\n }\n async getTransaction(hash) {\n return fail();\n }\n async getTransactionReceipt(hash) {\n return fail();\n }\n // Bloom-filter Queries\n async getLogs(filter) {\n return fail();\n }\n // ENS\n async lookupAddress(address) {\n return fail();\n }\n async waitForTransaction(hash, confirms, timeout) {\n return fail();\n }\n async waitForBlock(blockTag) {\n return fail();\n }\n // EventEmitterable\n async on(event, listener) { return fail(); }\n async once(event, listener) { return fail(); }\n async emit(event, ...args) { return fail(); }\n async listenerCount(event) { return fail(); }\n async listeners(event) { return fail(); }\n async off(event, listener) { return fail(); }\n async removeAllListeners(event) { return fail(); }\n async addListener(event, listener) { return fail(); }\n async removeListener(event, listener) { return fail(); }\n}\n// A singleton provider instance that can be used as a placeholder. This\n// allows API that have a Provider added later to not require a null check.\nexport const dummyProvider = new DummyProvider();\n//# sourceMappingURL=provider.js.map","// Belongs to Networks; requires abstract-provider\n// provider requires abstract-provider and network\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Formatter_format, _Formatter_baseBlock;\n/**\n * Formatter\n *\n * This is responsibile for converting much of the various\n * loose network values into a concrete ethers-ready value.\n *\n * For example, converting addresses to checksum addresses,\n * validating a hash is 32 bytes, and so on.\n *\n * By sub-classing this class and providing it in a custom\n * Network object this allows exotic (non-Ethereum) networks\n * to be fairly simple to adapt to ethers.\n */\nimport { getAddress, getCreateAddress } from \"@ethersproject/address\";\nimport { dataLength, dataSlice, isHexString, quantity } from \"@ethersproject/bytes\";\nimport { toHex } from \"@ethersproject/math\";\nimport { Signature } from \"@ethersproject/signing-key\";\nimport { accessListify } from \"@ethersproject/transactions\";\nimport { Block, Log, TransactionReceipt, TransactionResponse } from \"./provider.js\";\nimport { logger } from \"./logger.js\";\nconst BN_MAX_UINT256 = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\n//export type AccessListSet = { address: string, storageKeys: Array };\n//export type AccessList = Array;\n//export type AccessListish = AccessList |\n// Array<[ string, Array ]> |\n// Record>;\nfunction stringify(value) {\n if (typeof (value) !== \"string\") {\n throw new Error(\"invalid string\");\n }\n return value;\n}\nexport class Formatter {\n constructor() {\n _Formatter_format.set(this, void 0);\n _Formatter_baseBlock.set(this, void 0);\n const address = this.address.bind(this);\n const bigNumber = this.bigNumber.bind(this);\n const blockTag = this.blockTag.bind(this);\n const data = this.data.bind(this);\n const hash = this.hash.bind(this);\n const number = this.number.bind(this);\n const uint256 = this.uint256.bind(this);\n const topics = this.arrayOf(hash);\n __classPrivateFieldSet(this, _Formatter_format, {\n address,\n bigNumber,\n blockTag,\n data,\n hash,\n number,\n uint256,\n topics,\n filter: this.object({\n fromBlock: this.allowNull(blockTag, undefined),\n toBlock: this.allowNull(blockTag, undefined),\n blockHash: this.allowNull(hash, undefined),\n address: this.allowNull(address, undefined),\n topics: this.allowNull(topics, undefined)\n }),\n transactionRequest: this.object({\n from: this.allowNull(address),\n type: this.allowNull(number),\n to: this.allowNull(address),\n nonce: this.allowNull(number),\n gasLimit: this.allowNull(uint256),\n gasPrice: this.allowNull(uint256),\n maxFeePerGas: this.allowNull(uint256),\n maxPriorityFeePerGas: this.allowNull(uint256),\n data: this.allowNull(data),\n value: this.allowNull(uint256),\n }),\n transactionResponse: this.object({\n hash: hash,\n index: number,\n type: this.allowNull(number, 0),\n // These can be null for pending blocks\n blockHash: this.allowNull(hash),\n blockNumber: this.allowNull(number),\n // For Legacy transactions, this comes from the v\n chainId: this.allowNull(number),\n from: address,\n to: this.address,\n gasLimit: bigNumber,\n gasPrice: this.allowNull(bigNumber),\n maxFeePerGas: this.allowNull(bigNumber),\n maxPriorityFeePerGas: this.allowNull(bigNumber),\n value: bigNumber,\n data: data,\n nonce: number,\n r: hash,\n s: hash,\n v: number,\n accessList: this.allowNull(this.accessList)\n }, {\n index: [\"transactionIndex\"]\n }),\n }, \"f\");\n __classPrivateFieldSet(this, _Formatter_baseBlock, this.object({\n number: number,\n hash: this.allowNull(hash, null),\n timestamp: number,\n parentHash: hash,\n nonce: this.allowNull(stringify, \"0x0000000000000000\"),\n difficulty: bigNumber,\n gasLimit: bigNumber,\n gasUsed: bigNumber,\n miner: this.allowNull(address, \"0x0000000000000000000000000000000000000000\"),\n extraData: stringify,\n baseFeePerGas: this.allowNull(bigNumber),\n }), \"f\");\n }\n // An address\n address(value) {\n return getAddress(value);\n }\n // An address from a call result; may be zero-padded\n callAddress(value) {\n if (dataLength(value) !== 32 || dataSlice(value, 0, 12) !== \"0x000000000000000000000000\") {\n logger.throwArgumentError(\"invalid call address\", \"value\", value);\n }\n return this.address(dataSlice(value, 12));\n }\n // An address from a transaction (e.g. { from: string, nonce: number })\n contractAddress(value) {\n return getCreateAddress({\n from: this.address(value.from),\n nonce: logger.getNumber(value.nonce, \"value.nonce\")\n });\n }\n // Block Tag\n blockTag(value) {\n if (value == null) {\n return \"latest\";\n }\n switch (value) {\n case \"earliest\":\n return \"0x0\";\n case \"latest\":\n case \"pending\":\n return value;\n }\n if (typeof (value) === \"number\" || (isHexString(value) && dataLength(value) < 32)) {\n return quantity(value);\n }\n return logger.throwArgumentError(\"invalid blockTag\", \"value\", value);\n }\n // Block objects\n block(value, provider) {\n const params = __classPrivateFieldGet(this, _Formatter_baseBlock, \"f\").call(this, value);\n params.transactions = value.transactions.map((t) => this.hash(t));\n return new Block(params, provider);\n }\n blockWithTransactions(value, provider) {\n throw new Error();\n }\n // Transactions\n transactionRequest(value, provider) {\n return __classPrivateFieldGet(this, _Formatter_format, \"f\").transactionRequest(value);\n }\n transactionResponse(value, provider) {\n value = Object.assign({}, value);\n // @TODO: Use the remap feature\n if (value.data == null && value.input != null) {\n value.data = value.input;\n }\n if (value.gasLimit == null && value.gas) {\n value.gasLimit = value.gas;\n }\n value = __classPrivateFieldGet(this, _Formatter_format, \"f\").transactionResponse(value);\n const sig = Signature.fromTransaction(value.r, value.s, value.v);\n value.signature = sig;\n if (value.chainId == null) {\n value.chainId = sig.legacyChainId;\n }\n return new TransactionResponse(value, provider);\n }\n // Receipts\n log(value, provider) {\n const log = this.object({\n address: this.address,\n blockHash: this.hash,\n blockNumber: this.number,\n data: this.data,\n index: this.number,\n removed: this.boolean,\n topics: this.topics,\n transactionHash: this.hash,\n transactionIndex: this.number,\n }, {\n index: [\"logIndex\"]\n })(value);\n return new Log(log, provider);\n }\n receipt(value, provider) {\n const receipt = this.object({\n blockHash: this.hash,\n blockNumber: this.number,\n contractAddress: this.allowNull(this.address),\n cumulativeGasUsed: this.bigNumber,\n from: this.address,\n gasUsed: this.bigNumber,\n logs: this.arrayOf((v) => (this.log(v, provider))),\n logsBloom: this.data,\n root: this.allowNull(this.data),\n status: this.allowNull(this.number),\n to: this.address,\n gasPrice: this.allowNull(this.bigNumber),\n hash: this.hash,\n index: this.number,\n type: this.allowNull(this.number, 0),\n }, {\n hash: [\"transactionHash\"],\n gasPrice: [\"effectiveGasPrice\"],\n index: [\"transactionIndex\"]\n })(value);\n // RSK incorrectly implemented EIP-658, so we munge things a bit here for it\n if (receipt.root != null) {\n if (receipt.root.length <= 4) {\n // Could be 0x00, 0x0, 0x01 or 0x1\n const value = parseInt(receipt.root);\n if (value === 0 || value === 1) {\n // Make sure if both are specified, they match\n if (receipt.status != null && receipt.status !== value) {\n return logger.throwError(\"alt-root-status/status mismatch\", \"BAD_DATA\", {\n value: { root: receipt.root, status: receipt.status }\n });\n }\n receipt.status = value;\n delete receipt.root;\n }\n else {\n return logger.throwError(\"invalid alt-root-status\", \"BAD_DATA\", {\n value: receipt.root\n });\n }\n }\n else if (!isHexString(receipt.root, 32)) {\n // Must be a valid bytes32\n return logger.throwError(\"invalid receipt root hash\", \"BAD_DATA\", {\n value: receipt.root\n });\n }\n }\n //receipt.byzantium = (receipt.root == null);\n return new TransactionReceipt(receipt, provider);\n }\n // Fitlers\n topics(value) {\n return __classPrivateFieldGet(this, _Formatter_format, \"f\").topics(value);\n }\n filter(value) {\n return __classPrivateFieldGet(this, _Formatter_format, \"f\").filter(value);\n }\n filterLog(value) {\n console.log(\"ME\", value);\n return null;\n }\n // Converts a serialized transaction to a TransactionResponse\n transaction(value) {\n throw new Error();\n }\n // Useful utility formatters functions, which if need be use the\n // methods within the formatter to ensure internal compatibility\n // Access List; converts an AccessListish to an AccessList\n accessList(value) {\n return accessListify(value);\n }\n // Converts falsish values to a specific value, otherwise use the formatter. Calls preserve `this`.\n allowFalsish(format, ifFalse) {\n return ((value) => {\n if (!value) {\n return ifFalse;\n }\n return format.call(this, value);\n });\n }\n // Allows null, optionally replacing it with a default value. Calls preserve `this`.\n allowNull(format, ifNull) {\n return ((value) => {\n if (value == null) {\n return ifNull;\n }\n return format.call(this, value);\n });\n }\n // Requires an Array satisfying the formatter. Calls preserves `this`.\n arrayOf(format) {\n return ((array) => {\n if (!Array.isArray(array)) {\n throw new Error(\"not an array\");\n }\n return array.map((i) => format.call(this, i));\n });\n }\n // Requires a value which is a value BigNumber\n bigNumber(value) {\n return logger.getBigInt(value, \"value\");\n }\n uint256(value) {\n const result = this.bigNumber(value);\n if (result < 0 || result > BN_MAX_UINT256) {\n logger.throwArgumentError(\"invalid uint256\", \"value\", value);\n }\n return result;\n }\n // Requires a value which is a value boolean or string equivalent\n boolean(value) {\n switch (value) {\n case true:\n case \"true\":\n return true;\n case false:\n case \"false\":\n return false;\n }\n return logger.throwArgumentError(`invalid boolean; ${JSON.stringify(value)}`, \"value\", value);\n }\n // Requires a value which is a valid hexstring. If dataOrLength is true,\n // the length must be even (i.e. a datahexstring) or if it is a number,\n // specifies teh number of bytes value must represent\n _hexstring(dataOrLength) {\n if (dataOrLength == null) {\n dataOrLength = false;\n }\n return (function (value) {\n if (isHexString(value, dataOrLength)) {\n return value.toLowerCase();\n }\n throw new Error(\"bad hexstring\");\n });\n }\n data(value) {\n if (dataLength(value) == null) {\n logger.throwArgumentError(\"\", \"value\", value);\n }\n return value;\n }\n // Requires a network-native hash\n hash(value) {\n if (dataLength(value) !== 32) {\n logger.throwArgumentError(\"\", \"value\", value);\n }\n return __classPrivateFieldGet(this, _Formatter_format, \"f\").data(value);\n }\n // Requires a valid number, within the IEEE 754 safe range\n number(value) {\n return logger.getNumber(value);\n }\n // Requires an object which matches a fleet of other formatters\n // Any FormatFunc may return `undefined` to have the value omitted\n // from the result object. Calls preserve `this`.\n object(format, altNames) {\n return ((value) => {\n const result = {};\n for (const key in format) {\n let srcKey = key;\n if (altNames && key in altNames && !(srcKey in value)) {\n for (const altKey of altNames[key]) {\n if (altKey in value) {\n srcKey = altKey;\n break;\n }\n }\n }\n try {\n const nv = format[key].call(this, value[srcKey]);\n if (nv !== undefined) {\n result[key] = nv;\n }\n }\n catch (error) {\n const message = (error instanceof Error) ? error.message : \"not-an-error\";\n logger.throwError(`invalid value for value.${key} (${message})`, \"BAD_DATA\", { value });\n }\n }\n return result;\n });\n }\n // Requires a value which matches a network-native storage slot\n storageSlot(value) {\n return toHex(logger.getBigInt(value), 32);\n }\n}\n_Formatter_format = new WeakMap(), _Formatter_baseBlock = new WeakMap();\n//# sourceMappingURL=formatter.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { logger } from \"./logger.js\";\nconst EnsAddress = \"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\";\nexport class NetworkPlugin {\n constructor(name) {\n defineProperties(this, { name });\n }\n clone() {\n return new NetworkPlugin(this.name);\n }\n validate(network) {\n return this;\n }\n}\nexport class GasCostPlugin extends NetworkPlugin {\n constructor(effectiveBlock = 0, costs) {\n super(`org.ethers.plugins.gas-cost#${(effectiveBlock || 0)}`);\n const props = { effectiveBlock };\n function set(name, nullish) {\n let value = (costs || {})[name];\n if (value == null) {\n value = nullish;\n }\n if (typeof (value) !== \"number\") {\n logger.throwArgumentError(`invalud value for ${name}`, \"costs\", costs);\n }\n props[name] = value;\n }\n set(\"txBase\", 21000);\n set(\"txCreate\", 32000);\n set(\"txDataZero\", 4);\n set(\"txDataNonzero\", 16);\n set(\"txAccessListStorageKey\", 1900);\n set(\"txAccessListAddress\", 2400);\n defineProperties(this, props);\n }\n clone() {\n return new GasCostPlugin(this.effectiveBlock, this);\n }\n}\n// Networks shoudl use this plugin to specify the contract address\n// and network necessary to resolve ENS names.\nexport class EnsPlugin extends NetworkPlugin {\n constructor(address, targetNetwork) {\n super(\"org.ethers.plugins.ens\");\n defineProperties(this, {\n address: (address || EnsAddress),\n targetNetwork: ((targetNetwork == null) ? 1 : targetNetwork)\n });\n }\n clone() {\n return new EnsPlugin(this.address, this.targetNetwork);\n }\n validate(network) {\n network.formatter.address(this.address);\n return this;\n }\n}\nexport class MaxPriorityFeePlugin extends NetworkPlugin {\n constructor(priorityFee) {\n super(\"org.ethers.plugins.max-priority-fee\");\n defineProperties(this, {\n priorityFee: logger.getBigInt(priorityFee)\n });\n }\n async getPriorityFee(provider) {\n return this.priorityFee;\n }\n clone() {\n return new MaxPriorityFeePlugin(this.priorityFee);\n }\n}\n//# sourceMappingURL=plugins-network.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Network_props;\nimport { getStore, setStore } from \"@ethersproject/properties\";\nimport { Formatter } from \"./formatter.js\";\nimport { logger } from \"./logger.js\";\nimport { EnsPlugin, GasCostPlugin } from \"./plugins-network.js\";\n/* * * *\n// Networks which operation against an L2 can use this plugin to\n// specify how to access L1, for the purpose of resolving ENS,\n// for example.\nexport class LayerOneConnectionPlugin extends NetworkPlugin {\n readonly provider!: Provider;\n// @TODO: Rename to ChainAccess and allow for connecting to any chain\n constructor(provider: Provider) {\n super(\"org.ethers.plugins.layer-one-connection\");\n defineProperties(this, { provider });\n }\n\n clone(): LayerOneConnectionPlugin {\n return new LayerOneConnectionPlugin(this.provider);\n }\n}\n*/\n/* * * *\nexport class PriceOraclePlugin extends NetworkPlugin {\n readonly address!: string;\n\n constructor(address: string) {\n super(\"org.ethers.plugins.price-oracle\");\n defineProperties(this, { address });\n }\n\n clone(): PriceOraclePlugin {\n return new PriceOraclePlugin(this.address);\n }\n}\n*/\n// Networks or clients with a higher need for security (such as clients\n// that may automatically make CCIP requests without user interaction)\n// can use this plugin to anonymize requests or intercept CCIP requests\n// to notify and/or receive authorization from the user\n/* * * *\nexport type FetchDataFunc = (req: Frozen) => Promise;\nexport class CcipPreflightPlugin extends NetworkPlugin {\n readonly fetchData!: FetchDataFunc;\n\n constructor(fetchData: FetchDataFunc) {\n super(\"org.ethers.plugins.ccip-preflight\");\n defineProperties(this, { fetchData });\n }\n\n clone(): CcipPreflightPlugin {\n return new CcipPreflightPlugin(this.fetchData);\n }\n}\n*/\nconst Networks = new Map();\nconst defaultFormatter = new Formatter();\nexport class Network {\n constructor(name, _chainId, formatter) {\n _Network_props.set(this, void 0);\n const chainId = logger.getBigInt(_chainId);\n if (formatter == null) {\n formatter = defaultFormatter;\n }\n const plugins = new Map();\n __classPrivateFieldSet(this, _Network_props, { name, chainId, formatter, plugins }, \"f\");\n }\n toJSON() {\n return { name: this.name, chainId: this.chainId };\n }\n get name() { return getStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"name\"); }\n set name(value) { setStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"name\", value); }\n get chainId() { return getStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"chainId\"); }\n set chainId(value) { setStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"chainId\", logger.getBigInt(value, \"chainId\")); }\n get formatter() { return getStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"formatter\"); }\n set formatter(value) { setStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"formatter\", value); }\n get plugins() {\n return Array.from(__classPrivateFieldGet(this, _Network_props, \"f\").plugins.values());\n }\n attachPlugin(plugin) {\n if (this.isFrozen()) {\n throw new Error(\"frozen\");\n }\n if (__classPrivateFieldGet(this, _Network_props, \"f\").plugins.get(plugin.name)) {\n throw new Error(`cannot replace existing plugin: ${plugin.name} `);\n }\n __classPrivateFieldGet(this, _Network_props, \"f\").plugins.set(plugin.name, plugin.validate(this));\n return this;\n }\n getPlugin(name) {\n return (__classPrivateFieldGet(this, _Network_props, \"f\").plugins.get(name)) || null;\n }\n // Gets a list of Plugins which match basename, ignoring any fragment\n getPlugins(basename) {\n return (this.plugins.filter((p) => (p.name.split(\"#\")[0] === basename)));\n }\n clone() {\n const clone = new Network(this.name, this.chainId, this.formatter);\n this.plugins.forEach((plugin) => {\n clone.attachPlugin(plugin.clone());\n });\n return clone;\n }\n freeze() {\n Object.freeze(__classPrivateFieldGet(this, _Network_props, \"f\"));\n return this;\n }\n isFrozen() {\n return Object.isFrozen(__classPrivateFieldGet(this, _Network_props, \"f\"));\n }\n computeIntrinsicGas(tx) {\n const costs = this.getPlugin(\"org.ethers.gas-cost\") || (new GasCostPlugin());\n let gas = costs.txBase;\n if (tx.to == null) {\n gas += costs.txCreate;\n }\n if (tx.data) {\n for (let i = 2; i < tx.data.length; i += 2) {\n if (tx.data.substring(i, i + 2) === \"00\") {\n gas += costs.txDataZero;\n }\n else {\n gas += costs.txDataNonzero;\n }\n }\n }\n if (tx.accessList) {\n const accessList = this.formatter.accessList(tx.accessList);\n for (const addr in accessList) {\n gas += costs.txAccessListAddress + costs.txAccessListStorageKey * accessList[addr].storageKeys.length;\n }\n }\n return gas;\n }\n static from(network) {\n // Default network\n if (network == null) {\n return Network.from(\"homestead\");\n }\n // Canonical name or chain ID\n if (typeof (network) === \"number\") {\n network = BigInt(network);\n }\n if (typeof (network) === \"string\" || typeof (network) === \"bigint\") {\n const networkFunc = Networks.get(network);\n if (networkFunc) {\n return networkFunc();\n }\n if (typeof (network) === \"bigint\") {\n return new Network(\"unknown\", network);\n }\n logger.throwArgumentError(\"unknown network\", \"network\", network);\n }\n // Clonable with network-like abilities\n if (typeof (network.clone) === \"function\") {\n const clone = network.clone();\n //if (typeof(network.name) !== \"string\" || typeof(network.chainId) !== \"number\") {\n //}\n return clone;\n }\n // Networkish\n if (typeof (network) === \"object\") {\n if (typeof (network.name) !== \"string\" || typeof (network.chainId) !== \"number\") {\n logger.throwArgumentError(\"invalid network object name or chainId\", \"network\", network);\n }\n const custom = new Network((network.name), (network.chainId));\n if (network.ensAddress || network.ensNetwork != null) {\n custom.attachPlugin(new EnsPlugin(network.ensAddress, network.ensNetwork));\n }\n //if ((network).layerOneConnection) {\n // custom.attachPlugin(new LayerOneConnectionPlugin((network).layerOneConnection));\n //}\n return custom;\n }\n return logger.throwArgumentError(\"invalid network\", \"network\", network);\n }\n static register(nameOrChainId, networkFunc) {\n if (typeof (nameOrChainId) === \"number\") {\n nameOrChainId = BigInt(nameOrChainId);\n }\n const existing = Networks.get(nameOrChainId);\n if (existing) {\n logger.throwArgumentError(`conflicting network for ${JSON.stringify(existing.name)}`, \"nameOrChainId\", nameOrChainId);\n }\n Networks.set(nameOrChainId, networkFunc);\n }\n}\n_Network_props = new WeakMap();\n//# sourceMappingURL=network.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _PollingBlockSubscriber_instances, _PollingBlockSubscriber_provider, _PollingBlockSubscriber_poller, _PollingBlockSubscriber_interval, _PollingBlockSubscriber_blockNumber, _PollingBlockSubscriber_poll, _OnBlockSubscriber_provider, _OnBlockSubscriber_poll, _PollingOrphanSubscriber_filter, _PollingTransactionSubscriber_hash, _PollingEventSubscriber_instances, _PollingEventSubscriber_provider, _PollingEventSubscriber_filter, _PollingEventSubscriber_poller, _PollingEventSubscriber_blockNumber, _PollingEventSubscriber_poll;\nimport { isHexString } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nfunction copy(obj) {\n return JSON.parse(JSON.stringify(obj));\n}\nexport function getPollingSubscriber(provider, event) {\n if (event === \"block\") {\n return new PollingBlockSubscriber(provider);\n }\n if (isHexString(event, 32)) {\n return new PollingTransactionSubscriber(provider, event);\n }\n return logger.throwError(\"unsupported polling event\", \"UNSUPPORTED_OPERATION\", {\n operation: \"getPollingSubscriber\", info: { event }\n });\n}\n// @TODO: refactor this\nexport class PollingBlockSubscriber {\n constructor(provider) {\n _PollingBlockSubscriber_instances.add(this);\n _PollingBlockSubscriber_provider.set(this, void 0);\n _PollingBlockSubscriber_poller.set(this, void 0);\n _PollingBlockSubscriber_interval.set(this, void 0);\n // The most recent block we have scanned for events. The value -2\n // indicates we still need to fetch an initial block number\n _PollingBlockSubscriber_blockNumber.set(this, void 0);\n __classPrivateFieldSet(this, _PollingBlockSubscriber_provider, provider, \"f\");\n __classPrivateFieldSet(this, _PollingBlockSubscriber_poller, null, \"f\");\n __classPrivateFieldSet(this, _PollingBlockSubscriber_interval, 4000, \"f\");\n __classPrivateFieldSet(this, _PollingBlockSubscriber_blockNumber, -2, \"f\");\n }\n get pollingInterval() { return __classPrivateFieldGet(this, _PollingBlockSubscriber_interval, \"f\"); }\n set pollingInterval(value) { __classPrivateFieldSet(this, _PollingBlockSubscriber_interval, value, \"f\"); }\n start() {\n if (__classPrivateFieldGet(this, _PollingBlockSubscriber_poller, \"f\")) {\n throw new Error(\"subscriber already running\");\n }\n __classPrivateFieldGet(this, _PollingBlockSubscriber_instances, \"m\", _PollingBlockSubscriber_poll).call(this);\n __classPrivateFieldSet(this, _PollingBlockSubscriber_poller, setTimeout(__classPrivateFieldGet(this, _PollingBlockSubscriber_instances, \"m\", _PollingBlockSubscriber_poll).bind(this), __classPrivateFieldGet(this, _PollingBlockSubscriber_interval, \"f\")), \"f\");\n }\n stop() {\n if (!__classPrivateFieldGet(this, _PollingBlockSubscriber_poller, \"f\")) {\n throw new Error(\"subscriber not running\");\n }\n clearTimeout(__classPrivateFieldGet(this, _PollingBlockSubscriber_poller, \"f\"));\n __classPrivateFieldSet(this, _PollingBlockSubscriber_poller, null, \"f\");\n }\n pause(dropWhilePaused) {\n this.stop();\n if (dropWhilePaused) {\n __classPrivateFieldSet(this, _PollingBlockSubscriber_blockNumber, -2, \"f\");\n }\n }\n resume() {\n this.start();\n }\n}\n_PollingBlockSubscriber_provider = new WeakMap(), _PollingBlockSubscriber_poller = new WeakMap(), _PollingBlockSubscriber_interval = new WeakMap(), _PollingBlockSubscriber_blockNumber = new WeakMap(), _PollingBlockSubscriber_instances = new WeakSet(), _PollingBlockSubscriber_poll = async function _PollingBlockSubscriber_poll() {\n const blockNumber = await __classPrivateFieldGet(this, _PollingBlockSubscriber_provider, \"f\").getBlockNumber();\n if (__classPrivateFieldGet(this, _PollingBlockSubscriber_blockNumber, \"f\") === -2) {\n __classPrivateFieldSet(this, _PollingBlockSubscriber_blockNumber, blockNumber, \"f\");\n return;\n }\n // @TODO: Put a cap on the maximum number of events per loop?\n if (blockNumber !== __classPrivateFieldGet(this, _PollingBlockSubscriber_blockNumber, \"f\")) {\n for (let b = __classPrivateFieldGet(this, _PollingBlockSubscriber_blockNumber, \"f\") + 1; b <= blockNumber; b++) {\n __classPrivateFieldGet(this, _PollingBlockSubscriber_provider, \"f\").emit(\"block\", b);\n }\n __classPrivateFieldSet(this, _PollingBlockSubscriber_blockNumber, blockNumber, \"f\");\n }\n __classPrivateFieldSet(this, _PollingBlockSubscriber_poller, setTimeout(__classPrivateFieldGet(this, _PollingBlockSubscriber_instances, \"m\", _PollingBlockSubscriber_poll).bind(this), __classPrivateFieldGet(this, _PollingBlockSubscriber_interval, \"f\")), \"f\");\n};\nexport class OnBlockSubscriber {\n constructor(provider) {\n _OnBlockSubscriber_provider.set(this, void 0);\n _OnBlockSubscriber_poll.set(this, void 0);\n __classPrivateFieldSet(this, _OnBlockSubscriber_provider, provider, \"f\");\n __classPrivateFieldSet(this, _OnBlockSubscriber_poll, (blockNumber) => {\n this._poll(blockNumber, __classPrivateFieldGet(this, _OnBlockSubscriber_provider, \"f\"));\n }, \"f\");\n }\n async _poll(blockNumber, provider) {\n throw new Error(\"sub-classes must override this\");\n }\n start() {\n __classPrivateFieldGet(this, _OnBlockSubscriber_poll, \"f\").call(this, -2);\n __classPrivateFieldGet(this, _OnBlockSubscriber_provider, \"f\").on(\"block\", __classPrivateFieldGet(this, _OnBlockSubscriber_poll, \"f\"));\n }\n stop() {\n __classPrivateFieldGet(this, _OnBlockSubscriber_provider, \"f\").off(\"block\", __classPrivateFieldGet(this, _OnBlockSubscriber_poll, \"f\"));\n }\n pause(dropWhilePaused) { this.stop(); }\n resume() { this.start(); }\n}\n_OnBlockSubscriber_provider = new WeakMap(), _OnBlockSubscriber_poll = new WeakMap();\nexport class PollingOrphanSubscriber extends OnBlockSubscriber {\n constructor(provider, filter) {\n super(provider);\n _PollingOrphanSubscriber_filter.set(this, void 0);\n __classPrivateFieldSet(this, _PollingOrphanSubscriber_filter, copy(filter), \"f\");\n }\n async _poll(blockNumber, provider) {\n console.log(__classPrivateFieldGet(this, _PollingOrphanSubscriber_filter, \"f\"));\n throw new Error(\"@TODO\");\n }\n}\n_PollingOrphanSubscriber_filter = new WeakMap();\nexport class PollingTransactionSubscriber extends OnBlockSubscriber {\n constructor(provider, hash) {\n super(provider);\n _PollingTransactionSubscriber_hash.set(this, void 0);\n __classPrivateFieldSet(this, _PollingTransactionSubscriber_hash, hash, \"f\");\n }\n async _poll(blockNumber, provider) {\n const tx = await provider.getTransactionReceipt(__classPrivateFieldGet(this, _PollingTransactionSubscriber_hash, \"f\"));\n if (tx) {\n provider.emit(__classPrivateFieldGet(this, _PollingTransactionSubscriber_hash, \"f\"), tx);\n }\n }\n}\n_PollingTransactionSubscriber_hash = new WeakMap();\nexport class PollingEventSubscriber {\n constructor(provider, filter) {\n _PollingEventSubscriber_instances.add(this);\n _PollingEventSubscriber_provider.set(this, void 0);\n _PollingEventSubscriber_filter.set(this, void 0);\n _PollingEventSubscriber_poller.set(this, void 0);\n // The most recent block we have scanned for events. The value -2\n // indicates we still need to fetch an initial block number\n _PollingEventSubscriber_blockNumber.set(this, void 0);\n __classPrivateFieldSet(this, _PollingEventSubscriber_provider, provider, \"f\");\n __classPrivateFieldSet(this, _PollingEventSubscriber_filter, copy(filter), \"f\");\n __classPrivateFieldSet(this, _PollingEventSubscriber_poller, __classPrivateFieldGet(this, _PollingEventSubscriber_instances, \"m\", _PollingEventSubscriber_poll).bind(this), \"f\");\n __classPrivateFieldSet(this, _PollingEventSubscriber_blockNumber, -2, \"f\");\n }\n start() {\n if (__classPrivateFieldGet(this, _PollingEventSubscriber_blockNumber, \"f\") === -2) {\n __classPrivateFieldGet(this, _PollingEventSubscriber_provider, \"f\").getBlockNumber().then((blockNumber) => {\n __classPrivateFieldSet(this, _PollingEventSubscriber_blockNumber, blockNumber, \"f\");\n });\n }\n __classPrivateFieldGet(this, _PollingEventSubscriber_provider, \"f\").on(\"block\", __classPrivateFieldGet(this, _PollingEventSubscriber_poller, \"f\"));\n }\n stop() {\n __classPrivateFieldGet(this, _PollingEventSubscriber_provider, \"f\").off(\"block\", __classPrivateFieldGet(this, _PollingEventSubscriber_poller, \"f\"));\n }\n pause(dropWhilePaused) {\n this.stop();\n if (dropWhilePaused) {\n __classPrivateFieldSet(this, _PollingEventSubscriber_blockNumber, -2, \"f\");\n }\n }\n resume() {\n this.start();\n }\n}\n_PollingEventSubscriber_provider = new WeakMap(), _PollingEventSubscriber_filter = new WeakMap(), _PollingEventSubscriber_poller = new WeakMap(), _PollingEventSubscriber_blockNumber = new WeakMap(), _PollingEventSubscriber_instances = new WeakSet(), _PollingEventSubscriber_poll = async function _PollingEventSubscriber_poll(blockNumber) {\n // The initial block hasn't been determined yet\n if (__classPrivateFieldGet(this, _PollingEventSubscriber_blockNumber, \"f\") === -2) {\n return;\n }\n const filter = copy(__classPrivateFieldGet(this, _PollingEventSubscriber_filter, \"f\"));\n filter.fromBlock = __classPrivateFieldGet(this, _PollingEventSubscriber_blockNumber, \"f\") + 1;\n filter.toBlock = blockNumber;\n __classPrivateFieldSet(this, _PollingEventSubscriber_blockNumber, blockNumber, \"f\");\n const logs = await __classPrivateFieldGet(this, _PollingEventSubscriber_provider, \"f\").getLogs(filter);\n for (const log of logs) {\n __classPrivateFieldGet(this, _PollingEventSubscriber_provider, \"f\").emit(__classPrivateFieldGet(this, _PollingEventSubscriber_filter, \"f\"), log);\n }\n};\n//# sourceMappingURL=subscriber-polling.js.map","// @TODO\n// Event coalescence\n// When we register an event with an async value (e.g. address is a Signer\n// or ENS name), we need to add it immeidately for the Event API, but also\n// need time to resolve the address. Upon resolving the address, we need to\n// migrate the listener to the static event. We also need to maintain a map\n// of Signer/ENS name to address so we can sync respond to listenerCount.\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _AbstractProvider_instances, _AbstractProvider_subs, _AbstractProvider_plugins, _AbstractProvider_pausedState, _AbstractProvider_networkPromise, _AbstractProvider_anyNetwork, _AbstractProvider_performCache, _AbstractProvider_nextTimer, _AbstractProvider_timers, _AbstractProvider_disableCcipRead, _AbstractProvider_perform, _AbstractProvider_call, _AbstractProvider_getBlock, _AbstractProvider_hasSub, _AbstractProvider_getSub;\nimport { resolveAddress } from \"@ethersproject/address\";\nimport { concat, dataLength, dataSlice, hexlify, isHexString } from \"@ethersproject/bytes\";\nimport { isCallException } from \"@ethersproject/logger\";\nimport { toArray } from \"@ethersproject/math\";\nimport { defineProperties, EventPayload, resolveProperties } from \"@ethersproject/properties\";\nimport { toUtf8String } from \"@ethersproject/strings\";\nimport { fetchData, FetchRequest } from \"@ethersproject/web\";\nimport { EnsResolver } from \"./ens-resolver.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { FeeData } from \"./provider.js\";\nimport { PollingBlockSubscriber, PollingEventSubscriber, PollingOrphanSubscriber, PollingTransactionSubscriber } from \"./subscriber-polling.js\";\n// Constants\nconst BN_2 = BigInt(2);\nconst MAX_CCIP_REDIRECTS = 10;\nfunction getTag(prefix, value) {\n return prefix + \":\" + JSON.stringify(value, (k, v) => {\n if (typeof (v) === \"bigint\") {\n return `bigint:${v.toString()}`;\n }\n if (typeof (v) === \"string\") {\n return v.toLowerCase();\n }\n // Sort object keys\n if (typeof (v) === \"object\" && !Array.isArray(v)) {\n const keys = Object.keys(v);\n keys.sort();\n return keys.reduce((accum, key) => {\n accum[key] = v[key];\n return accum;\n }, {});\n }\n return v;\n });\n}\nexport class UnmanagedSubscriber {\n constructor(name) { defineProperties(this, { name }); }\n start() { }\n stop() { }\n pause(dropWhilePaused) { }\n resume() { }\n}\nfunction copy(value) {\n return JSON.parse(JSON.stringify(value));\n}\nfunction concisify(items) {\n items = Array.from((new Set(items)).values());\n items.sort();\n return items;\n}\n// Normalize a ProviderEvent into a Subscription\n// @TODO: Make events sync if possible; like block\n//function getSyncSubscription(_event: ProviderEvent): Subscription {\n//}\nasync function getSubscription(_event, provider) {\n if (_event == null) {\n throw new Error(\"invalid event\");\n }\n // Normalize topic array info an EventFilter\n if (Array.isArray(_event)) {\n _event = { topics: _event };\n }\n if (typeof (_event) === \"string\") {\n switch (_event) {\n case \"block\":\n case \"pending\":\n case \"debug\":\n case \"network\": {\n return { type: _event, tag: _event };\n }\n }\n }\n if (isHexString(_event, 32)) {\n const hash = _event.toLowerCase();\n return { type: \"transaction\", tag: getTag(\"tx\", { hash }), hash };\n }\n if (_event.orphan) {\n const event = _event;\n // @TODO: Should lowercase and whatnot things here instead of copy...\n return { type: \"orphan\", tag: getTag(\"orphan\", event), filter: copy(event) };\n }\n if ((_event.address || _event.topics)) {\n const event = _event;\n const filter = {\n topics: ((event.topics || []).map((t) => {\n if (t == null) {\n return null;\n }\n if (Array.isArray(t)) {\n return concisify(t.map((t) => t.toLowerCase()));\n }\n return t.toLowerCase();\n }))\n };\n if (event.address) {\n const addresses = [];\n const promises = [];\n const addAddress = (addr) => {\n if (isHexString(addr)) {\n addresses.push(addr);\n }\n else {\n promises.push((async () => {\n addresses.push(await resolveAddress(addr, provider));\n })());\n }\n };\n if (Array.isArray(event.address)) {\n event.address.forEach(addAddress);\n }\n else {\n addAddress(event.address);\n }\n if (promises.length) {\n await Promise.all(promises);\n }\n filter.address = concisify(addresses.map((a) => a.toLowerCase()));\n }\n return { filter, tag: getTag(\"event\", filter), type: \"event\" };\n }\n return logger.throwArgumentError(\"unknown ProviderEvent\", \"event\", _event);\n}\nfunction getTime() { return (new Date()).getTime(); }\nexport function copyRequest(tx) {\n // @TODO: copy the copy from contracts and use it from this\n return tx;\n}\nexport class AbstractProvider {\n // @TODO: This should be a () => Promise so network can be\n // done when needed; or rely entirely on _detectNetwork?\n constructor(_network) {\n _AbstractProvider_instances.add(this);\n _AbstractProvider_subs.set(this, void 0);\n _AbstractProvider_plugins.set(this, void 0);\n // null=unpaused, true=paused+dropWhilePaused, false=paused\n _AbstractProvider_pausedState.set(this, void 0);\n _AbstractProvider_networkPromise.set(this, void 0);\n _AbstractProvider_anyNetwork.set(this, void 0);\n _AbstractProvider_performCache.set(this, void 0);\n _AbstractProvider_nextTimer.set(this, void 0);\n _AbstractProvider_timers.set(this, void 0);\n _AbstractProvider_disableCcipRead.set(this, void 0);\n if (_network === \"any\") {\n __classPrivateFieldSet(this, _AbstractProvider_anyNetwork, true, \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, null, \"f\");\n }\n else if (_network) {\n const network = Network.from(_network);\n __classPrivateFieldSet(this, _AbstractProvider_anyNetwork, false, \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, Promise.resolve(network), \"f\");\n setTimeout(() => { this.emit(\"network\", network, null); }, 0);\n }\n else {\n __classPrivateFieldSet(this, _AbstractProvider_anyNetwork, false, \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, null, \"f\");\n }\n //this.#approxNumber = -2;\n //this.#approxNumberT0 = 0;\n __classPrivateFieldSet(this, _AbstractProvider_performCache, new Map(), \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_subs, new Map(), \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_plugins, new Map(), \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_pausedState, null, \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_nextTimer, 0, \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_timers, new Map(), \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_disableCcipRead, false, \"f\");\n }\n get plugins() {\n return Array.from(__classPrivateFieldGet(this, _AbstractProvider_plugins, \"f\").values());\n }\n attachPlugin(plugin) {\n if (__classPrivateFieldGet(this, _AbstractProvider_plugins, \"f\").get(plugin.name)) {\n throw new Error(`cannot replace existing plugin: ${plugin.name} `);\n }\n __classPrivateFieldGet(this, _AbstractProvider_plugins, \"f\").set(plugin.name, plugin.validate(this));\n return this;\n }\n getPlugin(name) {\n return (__classPrivateFieldGet(this, _AbstractProvider_plugins, \"f\").get(name)) || null;\n }\n set disableCcipRead(value) { __classPrivateFieldSet(this, _AbstractProvider_disableCcipRead, !!value, \"f\"); }\n get disableCcipRead() { return __classPrivateFieldGet(this, _AbstractProvider_disableCcipRead, \"f\"); }\n async ccipReadFetch(tx, calldata, urls) {\n if (this.disableCcipRead || urls.length === 0 || tx.to == null) {\n return null;\n }\n const sender = tx.to.toLowerCase();\n const data = calldata.toLowerCase();\n const errorMessages = [];\n for (let i = 0; i < urls.length; i++) {\n const url = urls[i];\n // URL expansion\n const href = url.replace(\"{sender}\", sender).replace(\"{data}\", data);\n // If no {data} is present, use POST; otherwise GET\n //const json: string | null = (url.indexOf(\"{data}\") >= 0) ? null: JSON.stringify({ data, sender });\n //const result = await fetchJson({ url: href, errorPassThrough: true }, json, (value, response) => {\n // value.status = response.statusCode;\n // return value;\n //});\n const request = new FetchRequest(href);\n if (url.indexOf(\"{data}\") === -1) {\n request.body = { data, sender };\n }\n let errorMessage = \"unknown error\";\n const resp = await fetchData(request);\n try {\n const result = resp.bodyJson;\n if (result.data) {\n return result.data;\n }\n if (result.message) {\n errorMessage = result.message;\n }\n }\n catch (error) { }\n // 4xx indicates the result is not present; stop\n if (resp.statusCode >= 400 && resp.statusCode < 500) {\n return logger.throwError(`response not found during CCIP fetch: ${errorMessage}`, \"OFFCHAIN_FAULT\", {\n reason: \"404_MISSING_RESOURCE\",\n transaction: tx, info: { url, errorMessage }\n });\n }\n // 5xx indicates server issue; try the next url\n errorMessages.push(errorMessage);\n }\n return logger.throwError(`error encountered during CCIP fetch: ${errorMessages.map((m) => JSON.stringify(m)).join(\", \")}`, \"OFFCHAIN_FAULT\", {\n reason: \"500_SERVER_ERROR\",\n transaction: tx, info: { urls, errorMessages }\n });\n }\n _wrapTransaction(tx, hash, blockNumber) {\n return tx;\n }\n _detectNetwork() {\n return logger.throwError(\"sub-classes must implement this\", \"UNSUPPORTED_OPERATION\", {\n operation: \"_detectNetwork\"\n });\n }\n async _perform(req) {\n return logger.throwError(`unsupported method: ${req.method}`, \"UNSUPPORTED_OPERATION\", {\n operation: req.method,\n info: req\n });\n }\n // State\n async getBlockNumber() {\n return logger.getNumber(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getBlockNumber\" }), \"%response\");\n }\n async _getAddress(address) {\n if (typeof (address) === \"string\") {\n return address;\n }\n return await address.getAddress();\n }\n async _getBlockTag(blockTag) {\n const network = await this.getNetwork();\n if (typeof (blockTag) === \"number\" && Number.isSafeInteger(blockTag) && blockTag < 0) {\n //let blockNumber = await this._getApproxBlockNumber(500);\n let blockNumber = await this.getBlockNumber();\n blockNumber += blockTag;\n if (blockNumber < 0) {\n blockNumber = 0;\n }\n return network.formatter.blockTag(blockNumber);\n }\n return network.formatter.blockTag(blockTag);\n }\n async getNetwork() {\n // No explicit network was set and this is our first time\n if (__classPrivateFieldGet(this, _AbstractProvider_networkPromise, \"f\") == null) {\n // Detect the current network (shared with all calls)\n const detectNetwork = this._detectNetwork().then((network) => {\n this.emit(\"network\", network, null);\n return network;\n }, (error) => {\n // Reset the networkPromise on failure, so we will try again\n if (__classPrivateFieldGet(this, _AbstractProvider_networkPromise, \"f\") === detectNetwork) {\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, null, \"f\");\n }\n throw error;\n });\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, detectNetwork, \"f\");\n return await detectNetwork;\n }\n const networkPromise = __classPrivateFieldGet(this, _AbstractProvider_networkPromise, \"f\");\n const [expected, actual] = await Promise.all([\n networkPromise,\n this._detectNetwork() // The actual connected network\n ]);\n if (expected.chainId !== actual.chainId) {\n if (__classPrivateFieldGet(this, _AbstractProvider_anyNetwork, \"f\")) {\n // The \"any\" network can change, so notify listeners\n this.emit(\"network\", actual, expected);\n // Update the network if something else hasn't already changed it\n if (__classPrivateFieldGet(this, _AbstractProvider_networkPromise, \"f\") === networkPromise) {\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, Promise.resolve(actual), \"f\");\n }\n }\n else {\n // Otherwise, we do not allow changes to the underlying network\n logger.throwError(`network changed: ${expected.chainId} => ${actual.chainId} `, \"NETWORK_ERROR\", {\n event: \"changed\"\n });\n }\n }\n return expected.clone().freeze();\n }\n async getFeeData() {\n const { block, gasPrice } = await resolveProperties({\n block: this.getBlock(\"latest\"),\n gasPrice: ((async () => {\n try {\n const gasPrice = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getGasPrice\" });\n return logger.getBigInt(gasPrice, \"%response\");\n }\n catch (error) { }\n return null;\n })())\n });\n let maxFeePerGas = null, maxPriorityFeePerGas = null;\n if (block && block.baseFeePerGas) {\n // We may want to compute this more accurately in the future,\n // using the formula \"check if the base fee is correct\".\n // See: https://eips.ethereum.org/EIPS/eip-1559\n maxPriorityFeePerGas = BigInt(\"1500000000\");\n // Allow a network to override their maximum priority fee per gas\n const priorityFeePlugin = (await this.getNetwork()).getPlugin(\"org.ethers.plugins.max-priority-fee\");\n if (priorityFeePlugin) {\n maxPriorityFeePerGas = await priorityFeePlugin.getPriorityFee(this);\n }\n maxFeePerGas = (block.baseFeePerGas * BN_2) + maxPriorityFeePerGas;\n }\n return new FeeData(gasPrice, maxFeePerGas, maxPriorityFeePerGas);\n }\n async _getTransaction(_request) {\n const network = await this.getNetwork();\n // Fill in any addresses\n const request = Object.assign({}, _request, await resolveProperties({\n to: (_request.to ? resolveAddress(_request.to, this) : undefined),\n from: (_request.from ? resolveAddress(_request.from, this) : undefined),\n }));\n return network.formatter.transactionRequest(request);\n }\n async estimateGas(_tx) {\n const transaction = await this._getTransaction(_tx);\n return logger.getBigInt(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"estimateGas\", transaction\n }), \"%response\");\n }\n async call(_tx) {\n const { tx, blockTag } = await resolveProperties({\n tx: this._getTransaction(_tx),\n blockTag: this._getBlockTag(_tx.blockTag)\n });\n return __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_call).call(this, tx, blockTag, _tx.enableCcipRead ? 0 : -1);\n }\n // Account\n async getBalanceOf(_address, _blockTag) {\n const { address, blockTag } = await resolveProperties({\n address: resolveAddress(_address),\n blockTag: this._getBlockTag(_blockTag)\n });\n return logger.getBigInt(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getBalance\", address, blockTag\n }), \"%response\");\n }\n async getTransactionCountOf(_address, _blockTag) {\n const { address, blockTag } = await resolveProperties({\n address: resolveAddress(_address),\n blockTag: this._getBlockTag(_blockTag)\n });\n return logger.getNumber(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getTransactionCount\", address, blockTag\n }), \"%response\");\n }\n async getCode(_address, _blockTag) {\n const { address, blockTag } = await resolveProperties({\n address: resolveAddress(_address),\n blockTag: this._getBlockTag(_blockTag)\n });\n return hexlify(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getCode\", address, blockTag\n }));\n }\n async getStorageAt(_address, _position, _blockTag) {\n const position = logger.getBigInt(_position);\n const { address, blockTag } = await resolveProperties({\n address: resolveAddress(_address),\n blockTag: this._getBlockTag(_blockTag)\n });\n return hexlify(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getStorageAt\", address, position, blockTag\n }));\n }\n // Write\n async broadcastTransaction(signedTx) {\n throw new Error();\n return {};\n }\n // Queries\n async getBlock(block) {\n const format = (await this.getNetwork()).formatter;\n const params = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_getBlock).call(this, block, false);\n if (params == null) {\n return null;\n }\n return format.block(params, this);\n }\n async getBlockWithTransactions(block) {\n const format = (await this.getNetwork()).formatter;\n const params = __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_getBlock).call(this, block, true);\n if (params == null) {\n return null;\n }\n return format.blockWithTransactions(params, this);\n }\n async getTransaction(hash) {\n const format = (await this.getNetwork()).formatter;\n const params = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getTransaction\", hash });\n return format.transactionResponse(params, this);\n }\n async getTransactionReceipt(hash) {\n const format = (await this.getNetwork()).formatter;\n const receipt = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getTransactionReceipt\", hash });\n if (receipt == null) {\n return null;\n }\n // Some backends did not backfill the effectiveGasPrice into old transactions\n // in the receipt, so we look it up manually and inject it.\n if (receipt.gasPrice == null && receipt.effectiveGasPrice == null) {\n const tx = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getTransaction\", hash });\n receipt.effectiveGasPrice = tx.gasPrice;\n }\n return format.receipt(receipt, this);\n }\n async _getFilter(filter) {\n const lookup = {};\n if (filter.address) {\n if (Array.isArray(filter.address)) {\n lookup.address = Promise.all(filter.address.map((a) => resolveAddress(a, this)));\n }\n else {\n lookup.address = resolveAddress(filter.address, this);\n }\n }\n const addBlockTag = (key) => {\n if (filter[key] == null) {\n return;\n }\n lookup[key] = this._getBlockTag(filter[key]);\n };\n addBlockTag(\"fromBlock\");\n addBlockTag(\"toBlock\");\n const result = await resolveProperties(lookup);\n if (Array.isArray(result.address)) {\n result.address.sort();\n }\n if (filter.blockHash) {\n if (filter.fromBlock || filter.toBlock) {\n throw new Error(\"invalid filter\");\n }\n result.blockHash = filter.blockHash;\n }\n return result;\n }\n // Bloom-filter Queries\n async getLogs(_filter) {\n const { network, filter } = await resolveProperties({\n network: this.getNetwork(),\n filter: this._getFilter(_filter)\n });\n return (await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getLogs\", filter })).map((l) => {\n return network.formatter.log(l, this);\n });\n }\n // ENS\n _getProvider(chainId) {\n return logger.throwError(\"provider cannot connect to target network\", \"UNSUPPORTED_OPERATION\", {\n operation: \"_getProvider()\"\n });\n }\n async getResolver(name) {\n return await EnsResolver.fromName(this, name);\n }\n async getAvatar(name) {\n const resolver = await this.getResolver(name);\n if (resolver) {\n return await resolver.getAvatar();\n }\n return null;\n }\n async resolveName(name) {\n if (typeof (name) === \"string\") {\n const resolver = await this.getResolver(name);\n if (resolver) {\n return await resolver.getAddress();\n }\n }\n else {\n const address = await name.getAddress();\n if (address == null) {\n return logger.throwArgumentError(\"Addressable returned no address\", \"name\", name);\n }\n return address;\n }\n return null;\n }\n async lookupAddress(address) {\n throw new Error();\n //return \"TODO\";\n }\n async waitForTransaction(hash, confirms = 1, timeout) {\n if (confirms === 0) {\n return this.getTransactionReceipt(hash);\n }\n return new Promise(async (resolve, reject) => {\n let timer = null;\n const listener = (async (blockNumber) => {\n try {\n const receipt = await this.getTransactionReceipt(hash);\n if (receipt != null) {\n if (blockNumber - receipt.blockNumber + 1 >= confirms) {\n resolve(receipt);\n this.off(\"block\", listener);\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n return;\n }\n }\n }\n catch (error) {\n console.log(\"EEE\", error);\n }\n this.once(\"block\", listener);\n });\n if (timeout != null) {\n timer = setTimeout(() => {\n if (timer == null) {\n return;\n }\n timer = null;\n this.off(\"block\", listener);\n reject(logger.makeError(\"timeout\", \"TIMEOUT\", {}));\n }, timeout);\n }\n listener(await this.getBlockNumber());\n });\n }\n async waitForBlock(blockTag) {\n throw new Error();\n //return new Block({ }, this);\n }\n _clearTimeout(timerId) {\n const timer = __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").get(timerId);\n if (!timer) {\n return;\n }\n if (timer.timer) {\n clearTimeout(timer.timer);\n }\n __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").delete(timerId);\n }\n _setTimeout(_func, timeout = 0) {\n var _a, _b;\n const timerId = (__classPrivateFieldSet(this, _AbstractProvider_nextTimer, (_b = __classPrivateFieldGet(this, _AbstractProvider_nextTimer, \"f\"), _a = _b++, _b), \"f\"), _a);\n const func = () => {\n __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").delete(timerId);\n _func();\n };\n if (this.paused) {\n __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").set(timerId, { timer: null, func, time: timeout });\n }\n else {\n const timer = setTimeout(func, timeout);\n __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").set(timerId, { timer, func, time: getTime() });\n }\n return timerId;\n }\n _forEachSubscriber(func) {\n for (const sub of __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").values()) {\n func(sub.subscriber);\n }\n }\n // Event API; sub-classes should override this; any supported\n // event filter will have been munged into an EventFilter\n _getSubscriber(sub) {\n switch (sub.type) {\n case \"debug\":\n case \"network\":\n return new UnmanagedSubscriber(sub.type);\n case \"block\":\n return new PollingBlockSubscriber(this);\n case \"event\":\n return new PollingEventSubscriber(this, sub.filter);\n case \"transaction\":\n return new PollingTransactionSubscriber(this, sub.hash);\n case \"orphan\":\n return new PollingOrphanSubscriber(this, sub.filter);\n }\n throw new Error(`unsupported event: ${sub.type}`);\n }\n _recoverSubscriber(oldSub, newSub) {\n for (const sub of __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").values()) {\n if (sub.subscriber === oldSub) {\n if (sub.started) {\n sub.subscriber.stop();\n }\n sub.subscriber = newSub;\n if (sub.started) {\n newSub.start();\n }\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") != null) {\n newSub.pause(__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\"));\n }\n break;\n }\n }\n }\n async on(event, listener) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_getSub).call(this, event);\n sub.listeners.push({ listener, once: false });\n if (!sub.started) {\n sub.subscriber.start();\n sub.started = true;\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") != null) {\n sub.subscriber.pause(__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\"));\n }\n }\n return this;\n }\n async once(event, listener) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_getSub).call(this, event);\n sub.listeners.push({ listener, once: true });\n if (!sub.started) {\n sub.subscriber.start();\n sub.started = true;\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") != null) {\n sub.subscriber.pause(__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\"));\n }\n }\n return this;\n }\n async emit(event, ...args) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_hasSub).call(this, event, args);\n if (!sub) {\n return false;\n }\n ;\n const count = sub.listeners.length;\n sub.listeners = sub.listeners.filter(({ listener, once }) => {\n const payload = new EventPayload(this, (once ? null : listener), event);\n setTimeout(() => { listener.call(this, ...args, payload); }, 0);\n return !once;\n });\n return (count > 0);\n }\n async listenerCount(event) {\n if (event) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_hasSub).call(this, event);\n if (!sub) {\n return 0;\n }\n return sub.listeners.length;\n }\n let total = 0;\n for (const { listeners } of __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").values()) {\n total += listeners.length;\n }\n return total;\n }\n async listeners(event) {\n if (event) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_hasSub).call(this, event);\n if (!sub) {\n return [];\n }\n return sub.listeners.map(({ listener }) => listener);\n }\n let result = [];\n for (const { listeners } of __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").values()) {\n result = result.concat(listeners.map(({ listener }) => listener));\n }\n return result;\n }\n async off(event, listener) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_hasSub).call(this, event);\n if (!sub) {\n return this;\n }\n if (listener) {\n const index = sub.listeners.map(({ listener }) => listener).indexOf(listener);\n if (index >= 0) {\n sub.listeners.splice(index, 1);\n }\n }\n if (!listener || sub.listeners.length === 0) {\n if (sub.started) {\n sub.subscriber.stop();\n }\n __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").delete(sub.tag);\n }\n return this;\n }\n async removeAllListeners(event) {\n if (event) {\n const { tag, started, subscriber } = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_getSub).call(this, event);\n if (started) {\n subscriber.stop();\n }\n __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").delete(tag);\n }\n else {\n for (const [tag, { started, subscriber }] of __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\")) {\n if (started) {\n subscriber.stop();\n }\n __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").delete(tag);\n }\n }\n return this;\n }\n // Alias for \"on\"\n async addListener(event, listener) {\n return await this.on(event, listener);\n }\n // Alias for \"off\"\n async removeListener(event, listener) {\n return this.off(event, listener);\n }\n // Sub-classes should override this to shutdown any sockets, etc.\n // but MUST call this super.shutdown.\n async shutdown() {\n // Stop all listeners\n this.removeAllListeners();\n // Shut down all tiemrs\n for (const timerId of __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").keys()) {\n this._clearTimeout(timerId);\n }\n }\n get paused() { return (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") != null); }\n pause(dropWhilePaused) {\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") != null) {\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") == !!dropWhilePaused) {\n return;\n }\n return logger.throwError(\"cannot change pause type; resume first\", \"UNSUPPORTED_OPERATION\", {\n operation: \"pause\"\n });\n }\n this._forEachSubscriber((s) => s.pause(dropWhilePaused));\n __classPrivateFieldSet(this, _AbstractProvider_pausedState, !!dropWhilePaused, \"f\");\n for (const timer of __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").values()) {\n // Clear the timer\n if (timer.timer) {\n clearTimeout(timer.timer);\n }\n // Remaining time needed for when we become unpaused\n timer.time = getTime() - timer.time;\n }\n }\n resume() {\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") == null) {\n return;\n }\n this._forEachSubscriber((s) => s.resume());\n __classPrivateFieldSet(this, _AbstractProvider_pausedState, null, \"f\");\n for (const timer of __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").values()) {\n // Remaining time when we were paused\n let timeout = timer.time;\n if (timeout < 0) {\n timeout = 0;\n }\n // Start time (in cause paused, so we con compute remaininf time)\n timer.time = getTime();\n // Start the timer\n setTimeout(timer.func, timeout);\n }\n }\n}\n_AbstractProvider_subs = new WeakMap(), _AbstractProvider_plugins = new WeakMap(), _AbstractProvider_pausedState = new WeakMap(), _AbstractProvider_networkPromise = new WeakMap(), _AbstractProvider_anyNetwork = new WeakMap(), _AbstractProvider_performCache = new WeakMap(), _AbstractProvider_nextTimer = new WeakMap(), _AbstractProvider_timers = new WeakMap(), _AbstractProvider_disableCcipRead = new WeakMap(), _AbstractProvider_instances = new WeakSet(), _AbstractProvider_perform = \n// Shares multiple identical requests made during the same 250ms\nasync function _AbstractProvider_perform(req) {\n // Create a tag\n const tag = getTag(req.method, req);\n let perform = __classPrivateFieldGet(this, _AbstractProvider_performCache, \"f\").get(tag);\n if (!perform) {\n perform = this._perform(req);\n __classPrivateFieldGet(this, _AbstractProvider_performCache, \"f\").set(tag, perform);\n setTimeout(() => {\n if (__classPrivateFieldGet(this, _AbstractProvider_performCache, \"f\").get(tag) === perform) {\n __classPrivateFieldGet(this, _AbstractProvider_performCache, \"f\").delete(tag);\n }\n }, 250);\n }\n return await perform;\n}, _AbstractProvider_call = async function _AbstractProvider_call(tx, blockTag, attempt) {\n if (attempt >= MAX_CCIP_REDIRECTS) {\n logger.throwError(\"CCIP read exceeded maximum redirections\", \"OFFCHAIN_FAULT\", {\n reason: \"TOO_MANY_REDIRECTS\",\n transaction: Object.assign({}, tx, { blockTag, enableCcipRead: true })\n });\n }\n const transaction = copyRequest(tx);\n try {\n return hexlify(await this._perform({ method: \"call\", transaction, blockTag }));\n }\n catch (error) {\n // CCIP Read OffchainLookup\n if (!this.disableCcipRead && isCallException(error) && attempt >= 0 && blockTag === \"latest\" && transaction.to != null && dataSlice(error.data, 0, 4) === \"0x556f1830\") {\n const data = error.data;\n const txSender = await resolveAddress(transaction.to, this);\n // Parse the CCIP Read Arguments\n let ccipArgs;\n try {\n ccipArgs = parseOffchainLookup(dataSlice(error.data, 4));\n }\n catch (error) {\n return logger.throwError(error.message, \"OFFCHAIN_FAULT\", {\n reason: \"BAD_DATA\",\n transaction, info: { data }\n });\n }\n // Check the sender of the OffchainLookup matches the transaction\n if (ccipArgs.sender.toLowerCase() !== txSender.toLowerCase()) {\n return logger.throwError(\"CCIP Read sender mismatch\", \"CALL_EXCEPTION\", {\n data, transaction,\n errorSignature: \"OffchainLookup(address,string[],bytes,bytes4,bytes)\",\n errorName: \"OffchainLookup\",\n errorArgs: ccipArgs.errorArgs\n });\n }\n const ccipResult = await this.ccipReadFetch(transaction, ccipArgs.calldata, ccipArgs.urls);\n if (ccipResult == null) {\n return logger.throwError(\"CCIP Read failed to fetch data\", \"OFFCHAIN_FAULT\", {\n reason: \"FETCH_FAILED\",\n transaction, info: { data: error.data, errorArgs: ccipArgs.errorArgs }\n });\n }\n return __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_call).call(this, {\n to: txSender,\n data: concat([\n ccipArgs.selector, encodeBytes([ccipResult, ccipArgs.extraData])\n ]),\n }, blockTag, attempt + 1);\n }\n throw error;\n }\n}, _AbstractProvider_getBlock = async function _AbstractProvider_getBlock(block, includeTransactions) {\n const format = (await this.getNetwork()).formatter;\n if (isHexString(block, 32)) {\n return await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getBlock\", blockHash: block, includeTransactions\n });\n }\n return await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getBlock\", blockTag: format.blockTag(block), includeTransactions\n });\n}, _AbstractProvider_hasSub = async function _AbstractProvider_hasSub(event, emitArgs) {\n let sub = await getSubscription(event, this);\n // This is a log that is removing an existing log; we actually want\n // to emit an orphan event for the removed log\n if (sub.type === \"event\" && emitArgs && emitArgs.length > 0 && emitArgs[0].removed === true) {\n sub = await getSubscription({ orphan: \"drop-log\", log: emitArgs[0] }, this);\n }\n return __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").get(sub.tag) || null;\n}, _AbstractProvider_getSub = async function _AbstractProvider_getSub(event) {\n const subscription = await getSubscription(event, this);\n // Prevent tampering with our tag in any subclass' _getSubscriber\n const tag = subscription.tag;\n let sub = __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").get(tag);\n if (!sub) {\n const subscriber = this._getSubscriber(subscription);\n const addressableMap = new WeakMap();\n const nameMap = new Map();\n sub = { subscriber, tag, addressableMap, nameMap, started: false, listeners: [] };\n __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").set(tag, sub);\n }\n return sub;\n};\nfunction _parseString(result, start) {\n try {\n const bytes = _parseBytes(result, start);\n if (bytes) {\n return toUtf8String(bytes);\n }\n }\n catch (error) { }\n return null;\n}\nfunction _parseBytes(result, start) {\n if (result === \"0x\") {\n return null;\n }\n try {\n const offset = logger.getNumber(dataSlice(result, start, start + 32));\n const length = logger.getNumber(dataSlice(result, offset, offset + 32));\n return dataSlice(result, offset + 32, offset + 32 + length);\n }\n catch (error) { }\n return null;\n}\nfunction numPad(value) {\n const result = toArray(value);\n if (result.length > 32) {\n throw new Error(\"internal; should not happen\");\n }\n const padded = new Uint8Array(32);\n padded.set(result, 32 - result.length);\n return padded;\n}\nfunction bytesPad(value) {\n if ((value.length % 32) === 0) {\n return value;\n }\n const result = new Uint8Array(Math.ceil(value.length / 32) * 32);\n result.set(value);\n return result;\n}\nconst empty = new Uint8Array([]);\n// ABI Encodes a series of (bytes, bytes, ...)\nfunction encodeBytes(datas) {\n const result = [];\n let byteCount = 0;\n // Add place-holders for pointers as we add items\n for (let i = 0; i < datas.length; i++) {\n result.push(empty);\n byteCount += 32;\n }\n for (let i = 0; i < datas.length; i++) {\n const data = logger.getBytes(datas[i]);\n // Update the bytes offset\n result[i] = numPad(byteCount);\n // The length and padded value of data\n result.push(numPad(data.length));\n result.push(bytesPad(data));\n byteCount += 32 + Math.ceil(data.length / 32) * 32;\n }\n return concat(result);\n}\nconst zeros = \"0x0000000000000000000000000000000000000000000000000000000000000000\";\nfunction parseOffchainLookup(data) {\n const result = {\n sender: \"\", urls: [], calldata: \"\", selector: \"\", extraData: \"\", errorArgs: []\n };\n if (dataLength(data) < 5 * 32) {\n throw new Error(\"insufficient OffchainLookup data\");\n }\n const sender = dataSlice(data, 0, 32);\n if (dataSlice(sender, 0, 12) !== dataSlice(zeros, 0, 12)) {\n throw new Error(\"corrupt OffchainLookup sender\");\n }\n result.sender = dataSlice(sender, 12);\n // Read the URLs from the response\n try {\n const urls = [];\n const urlsOffset = logger.getNumber(dataSlice(data, 32, 64));\n const urlsLength = logger.getNumber(dataSlice(data, urlsOffset, urlsOffset + 32));\n const urlsData = dataSlice(data, urlsOffset + 32);\n for (let u = 0; u < urlsLength; u++) {\n const url = _parseString(urlsData, u * 32);\n if (url == null) {\n throw new Error(\"abort\");\n }\n urls.push(url);\n }\n result.urls = urls;\n }\n catch (error) {\n throw new Error(\"corrupt OffchainLookup urls\");\n }\n // Get the CCIP calldata to forward\n try {\n const calldata = _parseBytes(data, 64);\n if (calldata == null) {\n throw new Error(\"abort\");\n }\n result.calldata = calldata;\n }\n catch (error) {\n throw new Error(\"corrupt OffchainLookup calldata\");\n }\n // Get the callbackSelector (bytes4)\n if (dataSlice(data, 100, 128) !== dataSlice(zeros, 0, 28)) {\n throw new Error(\"corrupt OffchainLookup callbaackSelector\");\n }\n result.selector = dataSlice(data, 96, 100);\n // Get the extra data to send back to the contract as context\n try {\n const extraData = _parseBytes(data, 128);\n if (extraData == null) {\n throw new Error(\"abort\");\n }\n result.extraData = extraData;\n }\n catch (error) {\n throw new Error(\"corrupt OffchainLookup extraData\");\n }\n result.errorArgs = \"sender,urls,calldata,selector,extraData\".split(/,/).map((k) => result[k]);\n return result;\n}\n//# sourceMappingURL=abstract-provider.js.map","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar _AbstractSigner_instances, _AbstractSigner_checkProvider, _AbstractSigner_fromify, _VoidSigner_instances, _VoidSigner_throwUnsupported, _WrappedSigner_signer;\nimport { defineProperties, resolveProperties } from \"@ethersproject/properties\";\nimport { Transaction } from \"@ethersproject/transactions\";\nimport { logger } from \"./logger.js\";\nexport class AbstractSigner {\n constructor(provider) {\n _AbstractSigner_instances.add(this);\n defineProperties(this, { provider: (provider || null) });\n }\n async getBalance(blockTag) {\n return __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"getBalance\").getBalanceOf(await this.getAddress(), blockTag);\n }\n async getTransactionCount(blockTag) {\n return __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"getTransactionCount\").getTransactionCountOf(await this.getAddress(), blockTag);\n }\n async estimateGas(tx) {\n return __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"estimateGas\").estimateGas(await __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_fromify).call(this, tx));\n }\n async call(tx) {\n return __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"call\").call(await __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_fromify).call(this, tx));\n }\n async populateTransaction(tx) {\n const provider = __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"populateTransaction\");\n //let pop: Deferrable = Object.assign({ }, tx);\n let pop = Object.assign({}, tx);\n if (pop.to != null) {\n pop.to = provider.resolveName(pop.to).then((to) => {\n if (to == null) {\n return logger.throwArgumentError(\"transaction to ENS name not configured\", \"tx.to\", pop.to);\n }\n return to;\n });\n }\n if (pop.from != null) {\n const from = pop.from;\n pop.from = Promise.all([\n this.getAddress(),\n this.resolveName(from)\n ]).then(([address, from]) => {\n if (!from || address.toLowerCase() !== from.toLowerCase()) {\n return logger.throwArgumentError(\"transaction from mismatch\", \"tx.from\", from);\n }\n return address;\n });\n }\n if (pop.nonce == null) {\n pop.nonce = this.getTransactionCount();\n }\n pop = resolveProperties(pop);\n if (pop.gasLimit == null) {\n pop.gasLimit = provider.estimateGas(pop);\n }\n pop = resolveProperties(pop);\n //@TODO: Copy logic from AbstractSigner in v5\n return await resolveProperties(pop);\n }\n async resolveName(name) {\n const provider = __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"resolveName\");\n return await provider.resolveName(name);\n }\n async sendTransaction(tx) {\n const provider = __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"sendTransaction\");\n const txObj = Transaction.from(await this.populateTransaction(tx));\n return await provider.broadcastTransaction(await this.signTransaction(txObj));\n }\n}\n_AbstractSigner_instances = new WeakSet(), _AbstractSigner_checkProvider = function _AbstractSigner_checkProvider(operation) {\n if (this.provider) {\n return this.provider;\n }\n return logger.throwError(\"missing provider\", \"UNSUPPORTED_OPERATION\", { operation });\n}, _AbstractSigner_fromify = async function _AbstractSigner_fromify(tx) {\n tx = Object.assign({}, tx);\n const actions = [];\n if (tx.from != null) {\n const from = tx.from;\n actions.push(Promise.all([\n this.getAddress(),\n this.resolveName(from)\n ]).then(([address, from]) => {\n if (!from || address.toLowerCase() !== from.toLowerCase()) {\n logger.throwArgumentError(\"transaction from mismatch\", \"tx.from\", from);\n }\n tx.from = address;\n }));\n }\n await Promise.all(actions);\n return tx;\n};\nexport class VoidSigner extends AbstractSigner {\n constructor(address, provider) {\n super(provider);\n _VoidSigner_instances.add(this);\n defineProperties(this, { address });\n }\n async getAddress() { return this.address; }\n connect(provider) {\n return new VoidSigner(this.address, provider);\n }\n async signTransaction(tx) {\n __classPrivateFieldGet(this, _VoidSigner_instances, \"m\", _VoidSigner_throwUnsupported).call(this, \"transactions\", \"signTransaction\");\n }\n async signMessage(message) {\n __classPrivateFieldGet(this, _VoidSigner_instances, \"m\", _VoidSigner_throwUnsupported).call(this, \"messages\", \"signMessage\");\n }\n async signTypedData(domain, types, value) {\n __classPrivateFieldGet(this, _VoidSigner_instances, \"m\", _VoidSigner_throwUnsupported).call(this, \"typed-data\", \"signTypedData\");\n }\n}\n_VoidSigner_instances = new WeakSet(), _VoidSigner_throwUnsupported = function _VoidSigner_throwUnsupported(suffix, operation) {\n return logger.throwError(`VoidSigner cannot sign ${suffix}`, \"UNSUPPORTED_OPERATION\", {\n operation\n });\n};\nexport class WrappedSigner extends AbstractSigner {\n //get provider(): null | Provider { return this.#signer.provider; }\n constructor(signer) {\n super(signer.provider);\n _WrappedSigner_signer.set(this, void 0);\n __classPrivateFieldSet(this, _WrappedSigner_signer, signer, \"f\");\n }\n async getAddress() {\n return await __classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").getAddress();\n }\n connect(provider) {\n return new WrappedSigner(__classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").connect(provider));\n }\n async signTransaction(tx) {\n return await __classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").signTransaction(tx);\n }\n async sendTransaction(tx) {\n return await __classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").sendTransaction(tx);\n }\n async signMessage(message) {\n return await __classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").signMessage(message);\n }\n async signTypedData(domain, types, value) {\n return await __classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").signTypedData(domain, types, value);\n }\n}\n_WrappedSigner_signer = new WeakMap();\n//# sourceMappingURL=abstract-signer.js.map","// Show the throttle message only once\nconst shown = new Set();\nexport function showThrottleMessage(service) {\n if (shown.has(service)) {\n return;\n }\n shown.add(service);\n console.log(\"========= NOTICE =========\");\n console.log(`Request-Rate Exceeded for ${service} (this message will not be repeated)`);\n console.log(\"\");\n console.log(\"The default API keys for each service are provided as a highly-throttled,\");\n console.log(\"community resource for low-traffic projects and early prototyping.\");\n console.log(\"\");\n console.log(\"While your application will continue to function, we highly recommended\");\n console.log(\"signing up for your own API keys to improve performance, increase your\");\n console.log(\"request rate/limit and enable other perks, such as metrics and advanced APIs.\");\n console.log(\"\");\n console.log(\"For more details: https:/\\/docs.ethers.io/api-keys/\");\n console.log(\"==========================\");\n}\n//# sourceMappingURL=community.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _FilterIdSubscriber_instances, _FilterIdSubscriber_provider, _FilterIdSubscriber_filterIdPromise, _FilterIdSubscriber_poller, _FilterIdSubscriber_network, _FilterIdSubscriber_poll, _FilterIdSubscriber_teardown, _FilterIdEventSubscriber_event;\nimport { PollingEventSubscriber } from \"./subscriber-polling.js\";\nfunction copy(obj) {\n return JSON.parse(JSON.stringify(obj));\n}\nexport class FilterIdSubscriber {\n constructor(provider) {\n _FilterIdSubscriber_instances.add(this);\n _FilterIdSubscriber_provider.set(this, void 0);\n _FilterIdSubscriber_filterIdPromise.set(this, void 0);\n _FilterIdSubscriber_poller.set(this, void 0);\n _FilterIdSubscriber_network.set(this, void 0);\n __classPrivateFieldSet(this, _FilterIdSubscriber_provider, provider, \"f\");\n __classPrivateFieldSet(this, _FilterIdSubscriber_filterIdPromise, null, \"f\");\n __classPrivateFieldSet(this, _FilterIdSubscriber_poller, __classPrivateFieldGet(this, _FilterIdSubscriber_instances, \"m\", _FilterIdSubscriber_poll).bind(this), \"f\");\n __classPrivateFieldSet(this, _FilterIdSubscriber_network, null, \"f\");\n }\n _subscribe(provider) {\n throw new Error(\"subclasses must override this\");\n }\n _emitResults(provider, result) {\n throw new Error(\"subclasses must override this\");\n }\n _recover(provider) {\n throw new Error(\"subclasses must override this\");\n }\n start() { __classPrivateFieldGet(this, _FilterIdSubscriber_instances, \"m\", _FilterIdSubscriber_poll).call(this, -2); }\n stop() {\n __classPrivateFieldGet(this, _FilterIdSubscriber_instances, \"m\", _FilterIdSubscriber_teardown).call(this);\n __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").off(\"block\", __classPrivateFieldGet(this, _FilterIdSubscriber_poller, \"f\"));\n }\n pause(dropWhilePaused) {\n if (dropWhilePaused) {\n __classPrivateFieldGet(this, _FilterIdSubscriber_instances, \"m\", _FilterIdSubscriber_teardown).call(this);\n }\n __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").off(\"block\", __classPrivateFieldGet(this, _FilterIdSubscriber_poller, \"f\"));\n }\n resume() { this.start(); }\n}\n_FilterIdSubscriber_provider = new WeakMap(), _FilterIdSubscriber_filterIdPromise = new WeakMap(), _FilterIdSubscriber_poller = new WeakMap(), _FilterIdSubscriber_network = new WeakMap(), _FilterIdSubscriber_instances = new WeakSet(), _FilterIdSubscriber_poll = async function _FilterIdSubscriber_poll(blockNumber) {\n try {\n if (__classPrivateFieldGet(this, _FilterIdSubscriber_filterIdPromise, \"f\") == null) {\n __classPrivateFieldSet(this, _FilterIdSubscriber_filterIdPromise, this._subscribe(__classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\")), \"f\");\n }\n const filterId = await __classPrivateFieldGet(this, _FilterIdSubscriber_filterIdPromise, \"f\");\n if (filterId == null) {\n __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\")._recoverSubscriber(this, this._recover(__classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\")));\n return;\n }\n const network = await __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").getNetwork();\n if (!__classPrivateFieldGet(this, _FilterIdSubscriber_network, \"f\")) {\n __classPrivateFieldSet(this, _FilterIdSubscriber_network, network, \"f\");\n }\n if (__classPrivateFieldGet(this, _FilterIdSubscriber_network, \"f\").chainId !== network.chainId) {\n throw new Error(\"chaid changed\");\n }\n const result = await __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").send(\"eth_getFilterChanges\", [filterId]);\n await this._emitResults(__classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\"), result);\n }\n catch (error) {\n console.log(\"@TODO\", error);\n }\n __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").once(\"block\", __classPrivateFieldGet(this, _FilterIdSubscriber_poller, \"f\"));\n}, _FilterIdSubscriber_teardown = function _FilterIdSubscriber_teardown() {\n const filterIdPromise = __classPrivateFieldGet(this, _FilterIdSubscriber_filterIdPromise, \"f\");\n if (filterIdPromise) {\n __classPrivateFieldSet(this, _FilterIdSubscriber_filterIdPromise, null, \"f\");\n filterIdPromise.then((filterId) => {\n __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").send(\"eth_uninstallFilter\", [filterId]);\n });\n }\n};\nexport class FilterIdEventSubscriber extends FilterIdSubscriber {\n constructor(provider, filter) {\n super(provider);\n _FilterIdEventSubscriber_event.set(this, void 0);\n __classPrivateFieldSet(this, _FilterIdEventSubscriber_event, copy(filter), \"f\");\n }\n _recover(provider) {\n return new PollingEventSubscriber(provider, __classPrivateFieldGet(this, _FilterIdEventSubscriber_event, \"f\"));\n }\n async _subscribe(provider) {\n const filterId = await provider.send(\"eth_newFilter\", [__classPrivateFieldGet(this, _FilterIdEventSubscriber_event, \"f\")]);\n console.log(\"____SUB\", filterId);\n return filterId;\n }\n async _emitResults(provider, results) {\n const network = await provider.getNetwork();\n for (const result of results) {\n const log = network.formatter.log(result, provider);\n provider.emit(__classPrivateFieldGet(this, _FilterIdEventSubscriber_event, \"f\"), log);\n }\n }\n}\n_FilterIdEventSubscriber_event = new WeakMap();\nexport class FilterIdPendingSubscriber extends FilterIdSubscriber {\n async _subscribe(provider) {\n return await provider.send(\"eth_newPendingTransactionFilter\", []);\n }\n async _emitResults(provider, results) {\n const network = await provider.getNetwork();\n for (const result of results) {\n provider.emit(\"pending\", network.formatter.hash(result));\n }\n }\n}\n//# sourceMappingURL=subscriber-filterid.js.map","// @TODO:\n// - Add the batching API\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _JsonRpcApiProvider_nextId, _JsonRpcApiProvider_options, _JsonRpcProvider_connect, _JsonRpcProvider_pollingInterval;\n// https://playground.open-rpc.org/?schemaUrl=https://raw.githubusercontent.com/ethereum/eth1.0-apis/assembled-spec/openrpc.json&uiSchema%5BappBar%5D%5Bui:splitView%5D=true&uiSchema%5BappBar%5D%5Bui:input%5D=false&uiSchema%5BappBar%5D%5Bui:examplesDropdown%5D=false\nimport { resolveAddress } from \"@ethersproject/address\";\nimport { hexlify, isHexString, quantity } from \"@ethersproject/bytes\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { TypedDataEncoder } from \"@ethersproject/hash\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nimport { accessListify } from \"@ethersproject/transactions\";\nimport { fetchData, FetchRequest } from \"@ethersproject/web\";\nimport { AbstractProvider, UnmanagedSubscriber } from \"./abstract-provider.js\";\nimport { Network } from \"./network.js\";\nimport { FilterIdEventSubscriber, FilterIdPendingSubscriber } from \"./subscriber-filterid.js\";\nimport { logger } from \"./logger.js\";\nfunction copy(value) {\n return JSON.parse(JSON.stringify(value));\n}\nconst Primitive = \"bigint,boolean,function,number,string,symbol\".split(/,/g);\n//const Methods = \"getAddress,then\".split(/,/g);\nfunction deepCopy(value) {\n if (value == null || Primitive.indexOf(typeof (value)) >= 0) {\n return value;\n }\n // Keep any Addressable\n if (typeof (value.getAddress) === \"function\") {\n return value;\n }\n if (Array.isArray(value)) {\n return (value.map(deepCopy));\n }\n if (typeof (value) === \"object\") {\n return Object.keys(value).reduce((accum, key) => {\n accum[key] = value[key];\n return accum;\n }, {});\n }\n throw new Error(`should not happen: ${value} (${typeof (value)})`);\n}\nfunction getLowerCase(value) {\n if (value) {\n return value.toLowerCase();\n }\n return value;\n}\nfunction isPollable(value) {\n return (value && typeof (value.pollingInterval) === \"number\");\n}\nconst defaultOptions = {\n // Default to use filter ID (the FilterIdSubscriber will\n // fallback onto polling if subscription fails)\n polling: false,\n // Maximum batch size (in bytes)\n batchMaxSize: (1 << 20),\n // How long to wait before dispatching a new batch\n batchStallTime: 250,\n};\n// @TODO: Unchecked Signers\nexport class JsonRpcSigner {\n constructor(provider, address) {\n defineProperties(this, { provider, address });\n }\n connect(provider) {\n return logger.throwError(\"cannot reconnect JsonRpcSigner\", \"UNSUPPORTED_OPERATION\", {\n operation: \"signer.connect\"\n });\n }\n async getAddress() {\n return this.address;\n }\n async getNetwork() {\n return await this.provider.getNetwork();\n }\n async getFeeData() {\n return await this.provider.getFeeData();\n }\n async estimateGas(tx) {\n return await this.provider.estimateGas(tx);\n }\n async call(tx) {\n return await this.provider.call(tx);\n }\n async resolveName(name) {\n return await this.provider.resolveName(name);\n }\n async getBalance(blockTag) {\n return await this.provider.getBalanceOf(this.address);\n }\n async getTransactionCount(blockTag) {\n return await this.provider.getTransactionCountOf(this.address);\n }\n // Returns just the hash of the transaction after sent, which is what\n // the bare JSON-RPC API does;\n async sendUncheckedTransaction(_tx) {\n const tx = deepCopy(_tx);\n const promises = [];\n // Make sure the from matches the sender\n if (tx.from) {\n const _from = tx.from;\n promises.push((async () => {\n const from = await resolveAddress(_from, this.provider);\n if (from == null || from.toLowerCase() !== this.address.toLowerCase()) {\n logger.throwArgumentError(\"from address mismatch\", \"transaction\", _tx);\n }\n tx.from = from;\n })());\n }\n else {\n tx.from = this.address;\n }\n // The JSON-RPC for eth_sendTransaction uses 90000 gas; if the user\n // wishes to use this, it is easy to specify explicitly, otherwise\n // we look it up for them.\n if (tx.gasLimit == null) {\n promises.push((async () => {\n tx.gasLimit = await this.provider.estimateGas(Object.assign(Object.assign({}, tx), { from: this.address }));\n })());\n }\n // The address may be an ENS name or Addressable\n if (tx.to != null) {\n const _to = tx.to;\n promises.push((async () => {\n tx.to = await resolveAddress(_to, this.provider);\n })());\n }\n // Wait until all of our properties are filled in\n if (promises.length) {\n await Promise.all(promises);\n }\n const hexTx = this.provider.getRpcTransaction(tx);\n return this.provider.send(\"eth_sendTransaction\", [hexTx]);\n }\n async sendTransaction(tx) {\n // This cannot be mined any earlier than any recent block\n const blockNumber = await this.provider.getBlockNumber();\n // Send the transaction\n const hash = await this.sendUncheckedTransaction(tx);\n // Unfortunately, JSON-RPC only provides and opaque transaction hash\n // for a response, and we need the actual transaction, so we poll\n // for it; it should show up very quickly\n return await (new Promise((resolve, reject) => {\n const checkTx = async (duration) => {\n // Try getting the transaction\n const tx = await this.provider.getTransaction(hash);\n if (tx != null) {\n resolve(this.provider._wrapTransaction(tx, hash, blockNumber));\n return;\n }\n // Wait another 4 seconds\n this.provider._setTimeout(() => { checkTx(4000); }, duration);\n };\n checkTx(1000);\n }));\n }\n async signTransaction(_tx) {\n const tx = deepCopy(_tx);\n // Make sure the from matches the sender\n if (tx.from) {\n const from = await resolveAddress(tx.from, this.provider);\n if (from == null || from.toLowerCase() !== this.address.toLowerCase()) {\n return logger.throwArgumentError(\"from address mismatch\", \"transaction\", _tx);\n }\n tx.from = from;\n }\n else {\n tx.from = this.address;\n }\n const hexTx = this.provider.getRpcTransaction(tx);\n return await this.provider.send(\"eth_sign_Transaction\", [hexTx]);\n }\n async signMessage(_message) {\n const message = ((typeof (_message) === \"string\") ? toUtf8Bytes(_message) : _message);\n return await this.provider.send(\"personal_sign\", [\n hexlify(message), this.address.toLowerCase()\n ]);\n }\n async signTypedData(domain, types, _value) {\n const value = deepCopy(_value);\n // Populate any ENS names (in-place)\n const populated = await TypedDataEncoder.resolveNames(domain, types, value, async (value) => {\n const address = await resolveAddress(value);\n if (address == null) {\n return logger.throwArgumentError(\"TypedData does not support null address\", \"value\", value);\n }\n return address;\n });\n return await this.provider.send(\"eth_signTypedData_v4\", [\n this.address.toLowerCase(),\n JSON.stringify(TypedDataEncoder.getPayload(populated.domain, types, populated.value))\n ]);\n }\n async unlock(password) {\n return this.provider.send(\"personal_unlockAccount\", [\n this.address.toLowerCase(), password, null\n ]);\n }\n // https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign\n async _legacySignMessage(_message) {\n const message = ((typeof (_message) === \"string\") ? toUtf8Bytes(_message) : _message);\n return await this.provider.send(\"eth_sign\", [\n this.address.toLowerCase(), hexlify(message)\n ]);\n }\n}\nexport class JsonRpcApiProvider extends AbstractProvider {\n constructor(network) {\n super(network);\n _JsonRpcApiProvider_nextId.set(this, void 0);\n _JsonRpcApiProvider_options.set(this, void 0);\n __classPrivateFieldSet(this, _JsonRpcApiProvider_nextId, 1, \"f\");\n __classPrivateFieldSet(this, _JsonRpcApiProvider_options, Object.assign({}, defaultOptions), \"f\");\n }\n _getOptions(key) {\n return __classPrivateFieldGet(this, _JsonRpcApiProvider_options, \"f\")[key];\n }\n _setOptions(options) {\n // Validate all the options\n for (const _key in options) {\n const key = _key;\n const value = options[key];\n if (typeof (value) !== typeof (__classPrivateFieldGet(this, _JsonRpcApiProvider_options, \"f\")[key])) {\n return logger.throwArgumentError(\"invalid option value\", `options.${key}`, value);\n }\n }\n // Update the values\n for (const _key in options) {\n const key = _key;\n __classPrivateFieldGet(this, _JsonRpcApiProvider_options, \"f\")[key] = (options[key]);\n }\n }\n prepareRequest(method, params) {\n var _a, _b;\n return {\n method, params, id: (__classPrivateFieldSet(this, _JsonRpcApiProvider_nextId, (_b = __classPrivateFieldGet(this, _JsonRpcApiProvider_nextId, \"f\"), _a = _b++, _b), \"f\"), _a), jsonrpc: \"2.0\"\n };\n }\n // Sends the payload to the backend\n //async sendPayload(payload: any): Promise {\n // throw new Error(\"sub-class must implement this\");\n //}\n async send(method, params) {\n // @TODO: This should construct and queue the payload\n throw new Error(\"sub-class must implement this\");\n }\n async getSigner(address = 0) {\n const network = await this.getNetwork();\n const accounts = await this.send(\"eth_accounts\", []);\n // Account index\n if (typeof (address) === \"number\") {\n if (address > accounts.length) {\n throw new Error(\"no such account\");\n }\n return new JsonRpcSigner(this, accounts[address]);\n }\n // Account address\n address = network.formatter.address(address);\n for (const account of accounts) {\n if (network.formatter.address(account) === account) {\n return new JsonRpcSigner(this, account);\n }\n }\n throw new Error(\"invalid account\");\n }\n // Sub-classes can override this; it detects the *actual* network we\n // are connected to\n async _detectNetwork() {\n return Network.from(logger.getBigInt(await this._perform({ method: \"chainId\" })));\n }\n _getSubscriber(sub) {\n // Pending Filters aren't availble via polling\n if (sub.type === \"pending\") {\n return new FilterIdPendingSubscriber(this);\n }\n if (sub.type === \"event\") {\n return new FilterIdEventSubscriber(this, sub.filter);\n }\n // Orphaned Logs are handled automatically, by the filter, since\n // logs with removed are emitted by it\n if (sub.type === \"orphan\" && sub.filter.orphan === \"drop-log\") {\n return new UnmanagedSubscriber(\"orphan\");\n }\n return super._getSubscriber(sub);\n }\n getRpcTransaction(tx) {\n const result = {};\n // JSON-RPC now requires numeric values to be \"quantity\" values\n [\"chainId\", \"gasLimit\", \"gasPrice\", \"type\", \"maxFeePerGas\", \"maxPriorityFeePerGas\", \"nonce\", \"value\"].forEach((key) => {\n if (tx[key] == null) {\n return;\n }\n let dstKey = key;\n if (key === \"gasLimit\") {\n dstKey = \"gas\";\n }\n result[dstKey] = quantity(tx[key]);\n });\n // Make sure addresses and data are lowercase\n [\"from\", \"to\", \"data\"].forEach((key) => {\n if (tx[key] == null) {\n return;\n }\n result[key] = hexlify(tx[key]);\n });\n // Normalize the access list object\n if (tx.accessList) {\n result[\"accessList\"] = accessListify(tx.accessList);\n }\n return result;\n }\n getRpcRequest(req) {\n switch (req.method) {\n case \"chainId\":\n return { method: \"eth_chainId\", args: [] };\n case \"getBlockNumber\":\n return { method: \"eth_blockNumber\", args: [] };\n case \"getGasPrice\":\n return { method: \"eth_gasPrice\", args: [] };\n case \"getBalance\":\n return {\n method: \"eth_getBalance\",\n args: [getLowerCase(req.address), req.blockTag]\n };\n case \"getTransactionCount\":\n return {\n method: \"eth_getTransactionCount\",\n args: [getLowerCase(req.address), req.blockTag]\n };\n case \"getCode\":\n return {\n method: \"eth_getCode\",\n args: [getLowerCase(req.address), req.blockTag]\n };\n case \"getStorageAt\":\n return {\n method: \"eth_getStorageAt\",\n args: [\n getLowerCase(req.address),\n (\"0x\" + req.position.toString(16)),\n req.blockTag\n ]\n };\n case \"sendTransaction\":\n return {\n method: \"eth_sendRawTransaction\",\n args: [req.signedTransaction]\n };\n case \"getBlock\":\n if (\"blockTag\" in req) {\n return {\n method: \"eth_getBlockByNumber\",\n args: [req.blockTag, !!req.includeTransactions]\n };\n }\n else if (\"blockHash\" in req) {\n return {\n method: \"eth_getBlockByHash\",\n args: [req.blockHash, !!req.includeTransactions]\n };\n }\n break;\n case \"getTransaction\":\n return {\n method: \"eth_getTransactionByHash\",\n args: [req.hash]\n };\n case \"getTransactionReceipt\":\n return {\n method: \"eth_getTransactionReceipt\",\n args: [req.hash]\n };\n case \"call\":\n return {\n method: \"eth_call\",\n args: [this.getRpcTransaction(req.transaction), req.blockTag]\n };\n case \"estimateGas\": {\n return {\n method: \"eth_estimateGas\",\n args: [this.getRpcTransaction(req.transaction)]\n };\n }\n case \"getLogs\":\n if (req.filter && req.filter.address != null) {\n if (Array.isArray(req.filter.address)) {\n req.filter.address = req.filter.address.map(getLowerCase);\n }\n else {\n req.filter.address = getLowerCase(req.filter.address);\n }\n }\n return { method: \"eth_getLogs\", args: [req.filter] };\n }\n return null;\n }\n getRpcError(method, args, error) {\n if (method === \"eth_call\") {\n const result = spelunkData(error);\n if (result) {\n // @TODO: Extract errorSignature, errorName, errorArgs, reason if\n // it is Error(string) or Panic(uint25)\n return logger.makeError(\"execution reverted during JSON-RPC call\", \"CALL_EXCEPTION\", {\n data: result.data,\n transaction: args[0]\n });\n }\n return logger.makeError(\"missing revert data during JSON-RPC call\", \"CALL_EXCEPTION\", {\n data: \"0x\", transaction: args[0], info: { error }\n });\n }\n if (method === \"eth_estimateGas\") {\n }\n const message = JSON.stringify(spelunkMessage(error));\n if (message.match(/insufficient funds|base fee exceeds gas limit/)) {\n return logger.makeError(\"insufficient funds for intrinsic transaction cost\", \"INSUFFICIENT_FUNDS\", {\n transaction: args[0]\n });\n }\n if (message.match(/nonce/) && message.match(/too low/)) {\n return logger.makeError(\"nonce has already been used\", \"NONCE_EXPIRED\", {\n transaction: args[0]\n });\n }\n // \"replacement transaction underpriced\"\n if (message.match(/replacement transaction/) && message.match(/underpriced/)) {\n return logger.makeError(\"replacement fee too low\", \"REPLACEMENT_UNDERPRICED\", {\n transaction: args[0]\n });\n }\n if (message.match(/only replay-protected/)) {\n return logger.makeError(\"legacy pre-eip-155 transactions not supported\", \"UNSUPPORTED_OPERATION\", {\n operation: method, info: { transaction: args[0] }\n });\n }\n if (method === \"estimateGas\" && message.match(/gas required exceeds allowance|always failing transaction|execution reverted/)) {\n return logger.makeError(\"cannot estimate gas; transaction may fail or may require manual gas limit\", \"UNPREDICTABLE_GAS_LIMIT\", {\n transaction: args[0]\n });\n }\n return error;\n }\n async _perform(req) {\n // Legacy networks do not like the type field being passed along (which\n // is fair), so we delete type if it is 0 and a non-EIP-1559 network\n if (req.method === \"call\" || req.method === \"estimateGas\") {\n let tx = req.transaction;\n if (tx && tx.type != null && logger.getBigInt(tx.type)) {\n // If there are no EIP-1559 properties, it might be non-EIP-a559\n if (tx.maxFeePerGas == null && tx.maxPriorityFeePerGas == null) {\n const feeData = await this.getFeeData();\n if (feeData.maxFeePerGas == null && feeData.maxPriorityFeePerGas == null) {\n // Network doesn't know about EIP-1559 (and hence type)\n req = Object.assign({}, req, {\n transaction: Object.assign({}, tx, { type: undefined })\n });\n }\n }\n }\n }\n const request = this.getRpcRequest(req);\n if (request != null) {\n this.emit(\"debug\", { type: \"sendRequest\", request });\n try {\n const result = await this.send(request.method, request.args);\n //console.log(\"RR\", result);\n this.emit(\"debug\", { type: \"getResponse\", result });\n return result;\n }\n catch (error) {\n this.emit(\"debug\", { type: \"getError\", error });\n throw this.getRpcError(request.method, request.args, error);\n }\n }\n return super._perform(req);\n }\n}\n_JsonRpcApiProvider_nextId = new WeakMap(), _JsonRpcApiProvider_options = new WeakMap();\nexport class JsonRpcProvider extends JsonRpcApiProvider {\n constructor(url, network) {\n if (url == null) {\n url = \"http:/\\/localhost:8545\";\n }\n super(network);\n _JsonRpcProvider_connect.set(this, void 0);\n _JsonRpcProvider_pollingInterval.set(this, void 0);\n if (typeof (url) === \"string\") {\n __classPrivateFieldSet(this, _JsonRpcProvider_connect, { request: new FetchRequest(url) }, \"f\");\n }\n else {\n __classPrivateFieldSet(this, _JsonRpcProvider_connect, Object.assign({}, url), \"f\");\n __classPrivateFieldGet(this, _JsonRpcProvider_connect, \"f\").request = __classPrivateFieldGet(this, _JsonRpcProvider_connect, \"f\").request.clone();\n }\n __classPrivateFieldSet(this, _JsonRpcProvider_pollingInterval, 4000, \"f\");\n }\n async send(method, params) {\n params = copy(params);\n // Configure a POST connection for the requested method\n const connection = Object.assign({}, __classPrivateFieldGet(this, _JsonRpcProvider_connect, \"f\"));\n connection.request = connection.request.clone();\n connection.request.body = this.prepareRequest(method, params);\n const result = (await fetchData(connection)).bodyJson;\n if (\"error\" in result) {\n return logger.throwError(\"error from JSON-RPC\", \"UNKNOWN_ERROR\", {\n result\n });\n }\n return result.result;\n }\n get pollingInterval() { return __classPrivateFieldGet(this, _JsonRpcProvider_pollingInterval, \"f\"); }\n set pollingInterval(value) {\n if (!Number.isInteger(value) || value < 0) {\n throw new Error(\"invalid interval\");\n }\n __classPrivateFieldSet(this, _JsonRpcProvider_pollingInterval, value, \"f\");\n this._forEachSubscriber((sub) => {\n if (isPollable(sub)) {\n sub.pollingInterval = __classPrivateFieldGet(this, _JsonRpcProvider_pollingInterval, \"f\");\n }\n });\n }\n}\n_JsonRpcProvider_connect = new WeakMap(), _JsonRpcProvider_pollingInterval = new WeakMap();\n// This class should only be used when it is not possible for the\n// underlying network to change, such as with INFURA. If you are\n// using MetaMask or some other client which allows users to change\n// their network DO NOT USE THIS. Bad things will happen.\nexport class StaticJsonRpcProvider extends JsonRpcProvider {\n constructor(url, network) {\n super(url, network);\n defineProperties(this, { network });\n }\n async _detectNetwork() {\n return this.network;\n }\n}\nfunction spelunkData(value) {\n if (value == null) {\n return null;\n }\n // These *are* the droids we're looking for.\n if (typeof (value.message) === \"string\" && value.message.match(\"reverted\") && isHexString(value.data)) {\n return { message: value.message, data: value.data };\n }\n // Spelunk further...\n if (typeof (value) === \"object\") {\n for (const key in value) {\n const result = spelunkData(value[key]);\n if (result) {\n return result;\n }\n }\n return null;\n }\n // Might be a JSON string we can further descend...\n if (typeof (value) === \"string\") {\n try {\n return spelunkData(JSON.parse(value));\n }\n catch (error) { }\n }\n return null;\n}\nfunction _spelunkMessage(value, result) {\n if (value == null) {\n return;\n }\n // These *are* the droids we're looking for.\n if (typeof (value.message) === \"string\") {\n result.push(value.message);\n }\n // Spelunk further...\n if (typeof (value) === \"object\") {\n for (const key in value) {\n _spelunkMessage(value[key], result);\n }\n }\n // Might be a JSON string we can further descend...\n if (typeof (value) === \"string\") {\n try {\n return _spelunkMessage(JSON.parse(value), result);\n }\n catch (error) { }\n }\n}\nfunction spelunkMessage(value) {\n const result = [];\n _spelunkMessage(value, result);\n return result;\n}\n//# sourceMappingURL=provider-jsonrpc.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { FetchRequest } from \"@ethersproject/web\";\nimport { showThrottleMessage } from \"./community.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { StaticJsonRpcProvider } from \"./provider-jsonrpc.js\";\nconst defaultApiKey = \"9f7d929b018cdffb338517efa06f58359e86ff1ffd350bc889738523659e7972\";\nfunction getHost(name) {\n switch (name) {\n case \"homestead\":\n return \"rpc.ankr.com/eth\";\n case \"matic\":\n return \"rpc.ankr.com/polygon\";\n case \"arbitrum\":\n return \"rpc.ankr.com/arbitrum\";\n }\n return logger.throwArgumentError(\"unsupported network\", \"network\", name);\n}\nexport class AnkrProvider extends StaticJsonRpcProvider {\n constructor(_network = \"homestead\", apiKey) {\n const network = Network.from(_network);\n if (apiKey == null) {\n apiKey = defaultApiKey;\n }\n const connection = AnkrProvider.getConnection(network, apiKey);\n super(connection, network);\n defineProperties(this, { apiKey });\n // Ankr does not support filterId, so we force polling\n super._setOptions({ polling: true });\n }\n _getProvider(chainId) {\n try {\n return new AnkrProvider(chainId, this.apiKey);\n }\n catch (error) { }\n return super._getProvider(chainId);\n }\n static getConnection(network, apiKey) {\n if (apiKey == null) {\n apiKey = defaultApiKey;\n }\n const request = new FetchRequest(`https:/\\/${getHost(network.name)}/${apiKey}`);\n request.allowGzip = true;\n const throttleRetry = async (request, response, attempt) => {\n if (apiKey === defaultApiKey) {\n showThrottleMessage(\"AnkrProvider\");\n }\n return true;\n };\n return { request, throttleRetry };\n }\n isCommunityResource() {\n return (this.apiKey === defaultApiKey);\n }\n}\n//# sourceMappingURL=provider-ankr.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { FetchRequest } from \"@ethersproject/web\";\nimport { showThrottleMessage } from \"./community.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { StaticJsonRpcProvider } from \"./provider-jsonrpc.js\";\nconst defaultApiKey = \"_gg7wSSi0KMBsdKnGVfHDueq6xMB9EkC\";\nfunction getHost(name) {\n switch (name) {\n case \"homestead\":\n return \"eth-mainnet.alchemyapi.io\";\n case \"ropsten\":\n return \"eth-ropsten.alchemyapi.io\";\n case \"rinkeby\":\n return \"eth-rinkeby.alchemyapi.io\";\n case \"goerli\":\n return \"eth-goerli.alchemyapi.io\";\n case \"kovan\":\n return \"eth-kovan.alchemyapi.io\";\n case \"matic\":\n return \"polygon-mainnet.g.alchemy.com\";\n case \"maticmum\":\n return \"polygon-mumbai.g.alchemy.com\";\n case \"arbitrum\":\n return \"arb-mainnet.g.alchemy.com\";\n case \"arbitrum-rinkeby\":\n return \"arb-rinkeby.g.alchemy.com\";\n case \"optimism\":\n return \"opt-mainnet.g.alchemy.com\";\n case \"optimism-kovan\":\n return \"opt-kovan.g.alchemy.com\";\n }\n return logger.throwArgumentError(\"unsupported network\", \"network\", name);\n}\nexport class AlchemyProvider extends StaticJsonRpcProvider {\n constructor(_network = \"homestead\", apiKey) {\n const network = Network.from(_network);\n if (apiKey == null) {\n apiKey = defaultApiKey;\n }\n super(AlchemyProvider.getConnection(network, apiKey), network);\n defineProperties(this, { apiKey });\n }\n _getProvider(chainId) {\n try {\n return new AlchemyProvider(chainId, this.apiKey);\n }\n catch (error) { }\n return super._getProvider(chainId);\n }\n isCommunityResource() {\n return (this.apiKey === defaultApiKey);\n }\n static getConnection(network, apiKey) {\n if (apiKey == null) {\n apiKey = defaultApiKey;\n }\n const request = new FetchRequest(`https:/\\/${getHost(network.name)}/v2/${apiKey}`);\n request.allowGzip = true;\n const throttleRetry = async (request, response, attempt) => {\n if (apiKey === defaultApiKey) {\n showThrottleMessage(\"alchemy\");\n }\n return true;\n };\n return { request, throttleRetry };\n }\n}\n//# sourceMappingURL=provider-alchemy.js.map","import { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { StaticJsonRpcProvider } from \"./provider-jsonrpc.js\";\nexport class CloudflareProvider extends StaticJsonRpcProvider {\n constructor(_network = \"homestead\") {\n const network = Network.from(_network);\n if (network.name !== \"homestead\") {\n return logger.throwArgumentError(\"unsupported network\", \"network\", _network);\n }\n super(\"https:/\\/cloudflare-eth.com/\", network);\n }\n}\n//# sourceMappingURL=provider-cloudflare.js.map","import { hexlify, isHexString, quantity } from \"@ethersproject/bytes\";\nimport { isError } from \"@ethersproject/logger\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { toUtf8String } from \"@ethersproject/strings\";\nimport { fetchData, FetchRequest } from \"@ethersproject/web\";\nif (false) {\n console.log(isHexString, isError);\n} // @TODO\nimport { AbstractProvider } from \"./abstract-provider.js\";\nimport { Network } from \"./network.js\";\nimport { NetworkPlugin } from \"./plugins-network.js\";\nimport { logger } from \"./logger.js\";\nconst defaultApiKey = \"9D13ZE7XSBTJ94N9BNJ2MA33VMAY2YPIRB\";\nconst EtherscanPluginId = \"org.ethers.plugins.etherscan\";\nexport class EtherscanPlugin extends NetworkPlugin {\n constructor(baseUrl, communityApiKey) {\n super(EtherscanPluginId);\n //if (communityApiKey == null) { communityApiKey = null; }\n defineProperties(this, { baseUrl, communityApiKey });\n }\n clone() {\n return new EtherscanPlugin(this.baseUrl, this.communityApiKey);\n }\n}\nexport class EtherscanProvider extends AbstractProvider {\n constructor(_network, apiKey) {\n super();\n const network = Network.from(_network);\n if (apiKey == null) {\n const plugin = network.getPlugin(EtherscanPluginId);\n if (plugin) {\n apiKey = plugin.communityApiKey;\n }\n else {\n apiKey = defaultApiKey;\n }\n }\n defineProperties(this, { apiKey, network });\n // Test that the network is supported by Etherscan\n this.getBaseUrl();\n }\n getBaseUrl() {\n const plugin = this.network.getPlugin(EtherscanPluginId);\n if (plugin) {\n return plugin.baseUrl;\n }\n switch (this.network.name) {\n case \"homestead\":\n return \"https:/\\/api.etherscan.io\";\n case \"ropsten\":\n return \"https:/\\/api-ropsten.etherscan.io\";\n case \"rinkeby\":\n return \"https:/\\/api-rinkeby.etherscan.io\";\n case \"kovan\":\n return \"https:/\\/api-kovan.etherscan.io\";\n case \"goerli\":\n return \"https:/\\/api-goerli.etherscan.io\";\n default:\n }\n return logger.throwArgumentError(\"unsupported network\", \"network\", this.network);\n }\n getUrl(module, params) {\n const query = Object.keys(params).reduce((accum, key) => {\n const value = params[key];\n if (value != null) {\n accum += `&${key}=${value}`;\n }\n return accum;\n }, \"\");\n const apiKey = ((this.apiKey) ? `&apikey=${this.apiKey}` : \"\");\n return `${this.getBaseUrl()}/api?module=${module}${query}${apiKey}`;\n }\n getPostUrl() {\n return `${this.getBaseUrl()}/api`;\n }\n getPostData(module, params) {\n params.module = module;\n params.apikey = this.apiKey;\n return params;\n }\n async detectNetwork() {\n return this.network;\n }\n async fetch(module, params, post) {\n const url = (post ? this.getPostUrl() : this.getUrl(module, params));\n const payload = (post ? this.getPostData(module, params) : null);\n /*\n this.emit(\"debug\", {\n action: \"request\",\n request: url,\n provider: this\n });\n */\n const request = new FetchRequest(url);\n const connection = {\n request,\n throttleSlotInterval: 1000,\n processResponse: async (request, response) => {\n const result = response.hasBody() ? JSON.parse(toUtf8String(response.body)) : {};\n const throttle = ((typeof (result.result) === \"string\") ? result.result : \"\").toLowerCase().indexOf(\"rate limit\") >= 0;\n if (module === \"proxy\") {\n // This JSON response indicates we are being throttled\n if (result && result.status == 0 && result.message == \"NOTOK\" && throttle) {\n response.throwThrottleError(result.result);\n }\n }\n else {\n if (throttle) {\n response.throwThrottleError(result.result);\n }\n }\n return response;\n },\n };\n if (payload) {\n request.setHeader(\"content-type\", \"application/x-www-form-urlencoded; charset=UTF-8\");\n request.body = Object.keys(payload).map((k) => `${k}=${payload[k]}`).join(\"&\");\n }\n const response = await fetchData(connection);\n if (!response.hasBody()) {\n throw new Error();\n }\n /*\n this.emit(\"debug\", {\n action: \"response\",\n request: url,\n response: deepCopy(result),\n provider: this\n });\n */\n const result = JSON.parse(toUtf8String(response.body));\n if (module === \"proxy\") {\n if (result.jsonrpc != \"2.0\") {\n // @TODO: not any\n const error = new Error(\"invalid response\");\n error.result = JSON.stringify(result);\n throw error;\n }\n if (result.error) {\n // @TODO: not any\n const error = new Error(result.error.message || \"unknown error\");\n if (result.error.code) {\n error.code = result.error.code;\n }\n if (result.error.data) {\n error.data = result.error.data;\n }\n throw error;\n }\n return result.result;\n }\n else {\n // getLogs, getHistory have weird success responses\n if (result.status == 0 && (result.message === \"No records found\" || result.message === \"No transactions found\")) {\n return result.result;\n }\n if (result.status != 1 || result.message != \"OK\") {\n const error = new Error(\"invalid response\");\n error.result = JSON.stringify(result);\n // if ((result.result || \"\").toLowerCase().indexOf(\"rate limit\") >= 0) {\n // error.throttleRetry = true;\n // }\n throw error;\n }\n return result.result;\n }\n }\n // The transaction has already been sanitized by the calls in Provider\n _getTransactionPostData(transaction) {\n const result = {};\n for (let key in transaction) {\n if (transaction[key] == null) {\n continue;\n }\n let value = transaction[key];\n if (key === \"type\" && value === 0) {\n continue;\n }\n // Quantity-types require no leading zero, unless 0\n if ({ type: true, gasLimit: true, gasPrice: true, maxFeePerGs: true, maxPriorityFeePerGas: true, nonce: true, value: true }[key]) {\n value = quantity(hexlify(value));\n }\n else if (key === \"accessList\") {\n value = \"[\" + this.network.formatter.accessList(value).map((set) => {\n return `{address:\"${set.address}\",storageKeys:[\"${set.storageKeys.join('\",\"')}\"]}`;\n }).join(\",\") + \"]\";\n }\n else {\n value = hexlify(value);\n }\n result[key] = value;\n }\n return result;\n }\n _checkError(req, error, transaction) {\n /*\n let body = \"\";\n if (isError(error, Logger.Errors.SERVER_ERROR) && error.response && error.response.hasBody()) {\n body = toUtf8String(error.response.body);\n }\n console.log(body);\n \n // Undo the \"convenience\" some nodes are attempting to prevent backwards\n // incompatibility; maybe for v6 consider forwarding reverts as errors\n if (method === \"call\" && body) {\n \n // Etherscan keeps changing their string\n if (body.match(/reverted/i) || body.match(/VM execution error/i)) {\n \n // Etherscan prefixes the data like \"Reverted 0x1234\"\n let data = e.data;\n if (data) { data = \"0x\" + data.replace(/^.*0x/i, \"\"); }\n if (!isHexString(data)) { data = \"0x\"; }\n \n logger.throwError(\"call exception\", Logger.Errors.CALL_EXCEPTION, {\n error, data\n });\n }\n }\n \n // Get the message from any nested error structure\n let message = error.message;\n if (isError(error, Logger.Errors.SERVER_ERROR)) {\n if (error.error && typeof(error.error.message) === \"string\") {\n message = error.error.message;\n } else if (typeof(error.body) === \"string\") {\n message = error.body;\n } else if (typeof(error.responseText) === \"string\") {\n message = error.responseText;\n }\n }\n message = (message || \"\").toLowerCase();\n \n // \"Insufficient funds. The account you tried to send transaction from\n // does not have enough funds. Required 21464000000000 and got: 0\"\n if (message.match(/insufficient funds/)) {\n logger.throwError(\"insufficient funds for intrinsic transaction cost\", Logger.Errors.INSUFFICIENT_FUNDS, {\n error, transaction, info: { method }\n });\n }\n \n // \"Transaction with the same hash was already imported.\"\n if (message.match(/same hash was already imported|transaction nonce is too low|nonce too low/)) {\n logger.throwError(\"nonce has already been used\", Logger.Errors.NONCE_EXPIRED, {\n error, transaction, info: { method }\n });\n }\n \n // \"Transaction gas price is too low. There is another transaction with\n // same nonce in the queue. Try increasing the gas price or incrementing the nonce.\"\n if (message.match(/another transaction with same nonce/)) {\n logger.throwError(\"replacement fee too low\", Logger.Errors.REPLACEMENT_UNDERPRICED, {\n error, transaction, info: { method }\n });\n }\n \n if (message.match(/execution failed due to an exception|execution reverted/)) {\n logger.throwError(\"cannot estimate gas; transaction may fail or may require manual gas limit\", Logger.Errors.UNPREDICTABLE_GAS_LIMIT, {\n error, transaction, info: { method }\n });\n }\n */\n throw error;\n }\n async _detectNetwork() {\n return this.network;\n }\n async _perform(req) {\n switch (req.method) {\n case \"chainId\":\n return this.network.chainId;\n case \"getBlockNumber\":\n return this.fetch(\"proxy\", { action: \"eth_blockNumber\" });\n case \"getGasPrice\":\n return this.fetch(\"proxy\", { action: \"eth_gasPrice\" });\n case \"getBalance\":\n // Returns base-10 result\n return this.fetch(\"account\", {\n action: \"balance\",\n address: req.address,\n tag: req.blockTag\n });\n case \"getTransactionCount\":\n return this.fetch(\"proxy\", {\n action: \"eth_getTransactionCount\",\n address: req.address,\n tag: req.blockTag\n });\n case \"getCode\":\n return this.fetch(\"proxy\", {\n action: \"eth_getCode\",\n address: req.address,\n tag: req.blockTag\n });\n case \"getStorageAt\":\n return this.fetch(\"proxy\", {\n action: \"eth_getStorageAt\",\n address: req.address,\n position: req.position,\n tag: req.blockTag\n });\n case \"sendTransaction\":\n return this.fetch(\"proxy\", {\n action: \"eth_sendRawTransaction\",\n hex: req.signedTransaction\n }, true).catch((error) => {\n return this._checkError(req, error, req.signedTransaction);\n });\n case \"getBlock\":\n if (\"blockTag\" in req) {\n return this.fetch(\"proxy\", {\n action: \"eth_getBlockByNumber\",\n tag: req.blockTag,\n boolean: (req.includeTransactions ? \"true\" : \"false\")\n });\n }\n return logger.throwError(\"getBlock by blockHash not supported by Etherscan\", \"UNSUPPORTED_OPERATION\", {\n operation: \"getBlock(blockHash)\"\n });\n case \"getTransaction\":\n return this.fetch(\"proxy\", {\n action: \"eth_getTransactionByHash\",\n txhash: req.hash\n });\n case \"getTransactionReceipt\":\n return this.fetch(\"proxy\", {\n action: \"eth_getTransactionReceipt\",\n txhash: req.hash\n });\n case \"call\": {\n if (req.blockTag !== \"latest\") {\n throw new Error(\"EtherscanProvider does not support blockTag for call\");\n }\n const postData = this._getTransactionPostData(req.transaction);\n postData.module = \"proxy\";\n postData.action = \"eth_call\";\n try {\n return await this.fetch(\"proxy\", postData, true);\n }\n catch (error) {\n return this._checkError(req, error, req.transaction);\n }\n }\n case \"estimateGas\": {\n const postData = this._getTransactionPostData(req.transaction);\n postData.module = \"proxy\";\n postData.action = \"eth_estimateGas\";\n try {\n return await this.fetch(\"proxy\", postData, true);\n }\n catch (error) {\n return this._checkError(req, error, req.transaction);\n }\n }\n /*\n case \"getLogs\": {\n // Needs to complain if more than one address is passed in\n const args: Record = { action: \"getLogs\" }\n \n if (params.filter.fromBlock) {\n args.fromBlock = checkLogTag(params.filter.fromBlock);\n }\n \n if (params.filter.toBlock) {\n args.toBlock = checkLogTag(params.filter.toBlock);\n }\n \n if (params.filter.address) {\n args.address = params.filter.address;\n }\n \n // @TODO: We can handle slightly more complicated logs using the logs API\n if (params.filter.topics && params.filter.topics.length > 0) {\n if (params.filter.topics.length > 1) {\n logger.throwError(\"unsupported topic count\", Logger.Errors.UNSUPPORTED_OPERATION, { topics: params.filter.topics });\n }\n if (params.filter.topics.length === 1) {\n const topic0 = params.filter.topics[0];\n if (typeof(topic0) !== \"string\" || topic0.length !== 66) {\n logger.throwError(\"unsupported topic format\", Logger.Errors.UNSUPPORTED_OPERATION, { topic0: topic0 });\n }\n args.topic0 = topic0;\n }\n }\n \n const logs: Array = await this.fetch(\"logs\", args);\n \n // Cache txHash => blockHash\n let blocks: { [tag: string]: string } = {};\n \n // Add any missing blockHash to the logs\n for (let i = 0; i < logs.length; i++) {\n const log = logs[i];\n if (log.blockHash != null) { continue; }\n if (blocks[log.blockNumber] == null) {\n const block = await this.getBlock(log.blockNumber);\n if (block) {\n blocks[log.blockNumber] = block.hash;\n }\n }\n \n log.blockHash = blocks[log.blockNumber];\n }\n \n return logs;\n }\n */\n default:\n break;\n }\n return super._perform(req);\n }\n async getNetwork() {\n return this.network;\n }\n async getEtherPrice() {\n if (this.network.name !== \"homestead\") {\n return 0.0;\n }\n return parseFloat((await this.fetch(\"stats\", { action: \"ethprice\" })).ethusd);\n }\n isCommunityResource() {\n const plugin = this.network.getPlugin(EtherscanPluginId);\n if (plugin) {\n return (plugin.communityApiKey === this.apiKey);\n }\n return (defaultApiKey === this.apiKey);\n }\n}\n/*\n(async function() {\n const provider = new EtherscanProvider();\n console.log(provider);\n console.log(await provider.getBlockNumber());\n / *\n provider.on(\"block\", (b) => {\n console.log(\"BB\", b);\n });\n console.log(await provider.getTransactionReceipt(\"0xa5ded92f548e9f362192f9ab7e5b3fbc9b5a919a868e29247f177d49ce38de6e\"));\n\n provider.once(\"0xa5ded92f548e9f362192f9ab7e5b3fbc9b5a919a868e29247f177d49ce38de6e\", (tx) => {\n console.log(\"TT\", tx);\n });\n * /\n try {\n console.log(await provider.getBlock(100));\n } catch (error) {\n console.log(error);\n }\n\n try {\n console.log(await provider.getBlock(13821768));\n } catch (error) {\n console.log(error);\n }\n\n})();\n*/\n//# sourceMappingURL=provider-etherscan.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { FetchRequest } from \"@ethersproject/web\";\nimport { showThrottleMessage } from \"./community.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { StaticJsonRpcProvider } from \"./provider-jsonrpc.js\";\nconst defaultProjectId = \"84842078b09946638c03157f83405213\";\nfunction getHost(name) {\n switch (name) {\n case \"homestead\":\n return \"mainnet.infura.io\";\n case \"ropsten\":\n return \"ropsten.infura.io\";\n case \"rinkeby\":\n return \"rinkeby.infura.io\";\n case \"kovan\":\n return \"kovan.infura.io\";\n case \"goerli\":\n return \"goerli.infura.io\";\n case \"matic\":\n return \"polygon-mainnet.infura.io\";\n case \"maticmum\":\n return \"polygon-mumbai.infura.io\";\n case \"optimism\":\n return \"optimism-mainnet.infura.io\";\n case \"optimism-kovan\":\n return \"optimism-kovan.infura.io\";\n case \"arbitrum\":\n return \"arbitrum-mainnet.infura.io\";\n case \"arbitrum-rinkeby\":\n return \"arbitrum-rinkeby.infura.io\";\n }\n return logger.throwArgumentError(\"unsupported network\", \"network\", name);\n}\nexport class InfuraProvider extends StaticJsonRpcProvider {\n constructor(_network = \"homestead\", projectId, projectSecret) {\n const network = Network.from(_network);\n if (projectId == null) {\n projectId = defaultProjectId;\n }\n if (projectSecret == null) {\n projectSecret = null;\n }\n const connection = InfuraProvider.getConnection(network, projectId, projectSecret);\n super(connection, network);\n defineProperties(this, { projectId, projectSecret });\n }\n _getProvider(chainId) {\n try {\n return new InfuraProvider(chainId, this.projectId, this.projectSecret);\n }\n catch (error) { }\n return super._getProvider(chainId);\n }\n static getConnection(network, projectId, projectSecret) {\n if (projectId == null) {\n projectId = defaultProjectId;\n }\n if (projectSecret == null) {\n projectSecret = null;\n }\n const request = new FetchRequest(`https:/\\/${getHost(network.name)}/v3/${projectId}`);\n request.allowGzip = true;\n if (projectSecret) {\n request.setCredentials(\"\", projectSecret);\n }\n const throttleRetry = async (request, response, attempt) => {\n if (projectId === defaultProjectId) {\n showThrottleMessage(\"InfuraProvider\");\n }\n return true;\n };\n return { request, throttleRetry };\n }\n isCommunityResource() {\n return (this.projectId === defaultProjectId);\n }\n}\n//# sourceMappingURL=provider-infura.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { FetchRequest } from \"@ethersproject/web\";\nimport { showThrottleMessage } from \"./community.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { StaticJsonRpcProvider } from \"./provider-jsonrpc.js\";\n// These are load-balancer-based application IDs\nconst defaultAppIds = {\n homestead: \"6004bcd10040261633ade990\",\n ropsten: \"6004bd4d0040261633ade991\",\n rinkeby: \"6004bda20040261633ade994\",\n goerli: \"6004bd860040261633ade992\",\n};\nfunction getHost(name) {\n switch (name) {\n case \"homestead\":\n return \"eth-mainnet.gateway.pokt.network\";\n case \"ropsten\":\n return \"eth-ropsten.gateway.pokt.network\";\n case \"rinkeby\":\n return \"eth-rinkeby.gateway.pokt.network\";\n case \"goerli\":\n return \"eth-goerli.gateway.pokt.network\";\n }\n return logger.throwArgumentError(\"unsupported network\", \"network\", name);\n}\nfunction normalizeApiKey(network, _appId, applicationSecretKey, loadBalancer) {\n loadBalancer = !!loadBalancer;\n let community = false;\n let applicationId = _appId;\n if (applicationId == null) {\n applicationId = defaultAppIds[network.name];\n if (applicationId == null) {\n logger.throwArgumentError(\"network does not support default applicationId\", \"applicationId\", _appId);\n }\n loadBalancer = true;\n community = true;\n }\n else if (applicationId === defaultAppIds[network.name]) {\n loadBalancer = true;\n community = true;\n }\n if (applicationSecretKey == null) {\n applicationSecretKey = null;\n }\n return { applicationId, applicationSecretKey, community, loadBalancer };\n}\nexport class PocketProvider extends StaticJsonRpcProvider {\n constructor(_network = \"homestead\", _appId, _secretKey, _loadBalancer) {\n const network = Network.from(_network);\n const { applicationId, applicationSecretKey, loadBalancer } = normalizeApiKey(network, _appId, _secretKey, _loadBalancer);\n const connection = PocketProvider.getConnection(network, applicationId, applicationSecretKey, loadBalancer);\n super(connection, network);\n defineProperties(this, { applicationId, applicationSecretKey, loadBalancer });\n }\n static getConnection(network, _appId, _secretKey, _loadBalancer) {\n const { applicationId, applicationSecretKey, community, loadBalancer } = normalizeApiKey(network, _appId, _secretKey, _loadBalancer);\n let url = `https:/\\/${getHost(network.name)}/v1/`;\n if (loadBalancer) {\n url += \"lb/\";\n }\n url += applicationId;\n const request = new FetchRequest(url);\n request.allowGzip = true;\n if (applicationSecretKey) {\n request.setCredentials(\"\", applicationSecretKey);\n }\n const throttleRetry = async (request, response, attempt) => {\n if (community) {\n showThrottleMessage(\"PocketProvider\");\n }\n return true;\n };\n return { request, throttleRetry };\n }\n isCommunityResource() {\n return (this.applicationId === defaultAppIds[this.network.name]);\n }\n}\n//# sourceMappingURL=provider-pocket.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _FallbackProvider_instances, _FallbackProvider_configs, _FallbackProvider_initialSyncPromise, _FallbackProvider_getNextConfig, _FallbackProvider_addRunner, _FallbackProvider_initialSync, _FallbackProvider_checkQuorum, _FallbackProvider_waitForQuorum;\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { AbstractProvider } from \"./abstract-provider.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { shuffle } from \"./shuffle.js\";\n//const BN_0 = BigInt(\"0\");\nconst BN_1 = BigInt(\"1\");\nconst BN_2 = BigInt(\"2\");\nfunction stall(duration) {\n return new Promise((resolve) => { setTimeout(resolve, duration); });\n}\nfunction getTime() { return (new Date()).getTime(); }\n;\nconst defaultConfig = { stallTimeout: 400, priority: 1, weight: 1 };\nconst defaultState = {\n blockNumber: -2, requests: 0, lateResponses: 0, errorResponses: 0,\n outOfSync: -1, unsupportedEvents: 0, rollingDuration: 0, score: 0,\n _network: null, _updateNumber: null, _totalTime: 0\n};\nasync function waitForSync(config, blockNumber) {\n while (config.blockNumber < 0 || config.blockNumber < blockNumber) {\n if (!config._updateNumber) {\n config._updateNumber = (async () => {\n const blockNumber = await config.provider.getBlockNumber();\n if (blockNumber > config.blockNumber) {\n config.blockNumber = blockNumber;\n }\n config._updateNumber = null;\n })();\n }\n await config._updateNumber;\n config.outOfSync++;\n }\n}\n// Normalizes a result to a string that can be used to compare against\n// other results using normal string equality\nfunction normalize(network, value, req) {\n switch (req.method) {\n case \"chainId\":\n return logger.getBigInt(value).toString();\n case \"getBlockNumber\":\n return logger.getNumber(value).toString();\n case \"getGasPrice\":\n return logger.getBigInt(value).toString();\n case \"getBalance\":\n return logger.getBigInt(value).toString();\n case \"getTransactionCount\":\n return logger.getNumber(value).toString();\n case \"getCode\":\n return hexlify(value);\n case \"getStorageAt\":\n return hexlify(value);\n case \"getBlock\":\n if (req.includeTransactions) {\n return JSON.stringify(network.formatter.blockWithTransactions(value));\n }\n return JSON.stringify(network.formatter.block(value));\n case \"getTransaction\":\n return JSON.stringify(network.formatter.transactionResponse(value));\n case \"getTransactionReceipt\":\n return JSON.stringify(network.formatter.receipt(value));\n case \"call\":\n return hexlify(value);\n case \"estimateGas\":\n return logger.getBigInt(value).toString();\n case \"getLogs\":\n return JSON.stringify(value.map((v) => network.formatter.log(v)));\n }\n return logger.throwError(\"unsupported method\", \"UNSUPPORTED_OPERATION\", {\n operation: `_perform(${JSON.stringify(req.method)})`\n });\n}\n// This strategy picks the highest wieght result, as long as the weight is\n// equal to or greater than quorum\nfunction checkQuorum(quorum, results) {\n const tally = new Map();\n for (const { result, normal, weight } of results) {\n const t = tally.get(normal) || { result, weight: 0 };\n t.weight += weight;\n tally.set(normal, t);\n }\n let bestWeight = 0;\n let bestResult = undefined;\n for (const { weight, result } of tally.values()) {\n if (weight >= quorum && weight > bestWeight) {\n bestWeight = weight;\n bestResult = result;\n }\n }\n return bestResult;\n}\n/*\nfunction getMean(results: Array): bigint {\n const total = results.reduce((a, r) => (a + BigInt(r.result)), BN_0);\n return total / BigInt(results.length);\n}\n*/\nfunction getMedian(results) {\n // Get the sorted values\n const values = results.map((r) => BigInt(r.result));\n values.sort((a, b) => ((a < b) ? -1 : (b > a) ? 1 : 0));\n const mid = values.length / 2;\n // Odd-length; take the middle value\n if (values.length % 2) {\n return values[mid];\n }\n // Even length; take the ceiling of the mean of the center two values\n return (values[mid - 1] + values[mid] + BN_1) / BN_2;\n}\nexport class FallbackProvider extends AbstractProvider {\n constructor(providers, network) {\n super(network);\n _FallbackProvider_instances.add(this);\n _FallbackProvider_configs.set(this, void 0);\n _FallbackProvider_initialSyncPromise.set(this, void 0);\n __classPrivateFieldSet(this, _FallbackProvider_configs, providers.map((p) => {\n if (p instanceof AbstractProvider) {\n return Object.assign({ provider: p }, defaultConfig, defaultState);\n }\n else {\n return Object.assign({}, defaultConfig, p, defaultState);\n }\n }), \"f\");\n __classPrivateFieldSet(this, _FallbackProvider_initialSyncPromise, null, \"f\");\n this.quorum = 2; //Math.ceil(providers.length / 2);\n this.eventQuorum = 1;\n this.eventWorkers = 1;\n if (this.quorum > __classPrivateFieldGet(this, _FallbackProvider_configs, \"f\").reduce((a, c) => (a + c.weight), 0)) {\n logger.throwArgumentError(\"quorum exceed provider wieght\", \"quorum\", this.quorum);\n }\n }\n async _detectNetwork() {\n return Network.from(logger.getBigInt(await this._perform({ method: \"chainId\" }))).freeze();\n }\n _getSubscriber(sub) {\n throw new Error(\"@TODO\");\n }\n async _perform(req) {\n await __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_initialSync).call(this);\n // Bootstrap enough to meet quorum\n const running = new Set();\n for (let i = 0; i < this.quorum; i++) {\n __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_addRunner).call(this, running, req);\n }\n const result = __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_waitForQuorum).call(this, running, req);\n for (const runner of running) {\n runner.done = true;\n }\n return result;\n }\n}\n_FallbackProvider_configs = new WeakMap(), _FallbackProvider_initialSyncPromise = new WeakMap(), _FallbackProvider_instances = new WeakSet(), _FallbackProvider_getNextConfig = function _FallbackProvider_getNextConfig(configs) {\n // Shuffle the states, sorted by priority\n const allConfigs = __classPrivateFieldGet(this, _FallbackProvider_configs, \"f\").slice();\n shuffle(allConfigs);\n allConfigs.sort((a, b) => (b.priority - a.priority));\n for (const config of allConfigs) {\n if (configs.indexOf(config) === -1) {\n return config;\n }\n }\n return null;\n}, _FallbackProvider_addRunner = function _FallbackProvider_addRunner(running, req) {\n const config = __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_getNextConfig).call(this, Array.from(running).map((r) => r.config));\n if (config == null) {\n return null;\n }\n const result = {};\n const runner = {\n config, result, didBump: false, done: false,\n perform: null, staller: null\n };\n const now = getTime();\n runner.perform = (async () => {\n try {\n config.requests++;\n result.result = await config.provider._perform(req);\n }\n catch (error) {\n config.errorResponses++;\n result.error = error;\n }\n if (runner.done) {\n config.lateResponses++;\n }\n const dt = (getTime() - now);\n config._totalTime += dt;\n config.rollingDuration = 0.95 * config.rollingDuration + 0.05 * dt;\n runner.perform = null;\n })();\n runner.staller = (async () => {\n await stall(config.stallTimeout);\n runner.staller = null;\n })();\n running.add(runner);\n return runner;\n}, _FallbackProvider_initialSync = \n// Initializes the blockNumber and network for each runner and\n// blocks until initialized\nasync function _FallbackProvider_initialSync() {\n let initialSync = __classPrivateFieldGet(this, _FallbackProvider_initialSyncPromise, \"f\");\n if (!initialSync) {\n const promises = [];\n __classPrivateFieldGet(this, _FallbackProvider_configs, \"f\").forEach((config) => {\n promises.push(waitForSync(config, 0));\n promises.push((async () => {\n config._network = await config.provider.getNetwork();\n })());\n });\n __classPrivateFieldSet(this, _FallbackProvider_initialSyncPromise, initialSync = (async () => {\n // Wait for all providers to have a block number and network\n await Promise.all(promises);\n // Check all the networks match\n let chainId = null;\n for (const config of __classPrivateFieldGet(this, _FallbackProvider_configs, \"f\")) {\n const network = (config._network);\n if (chainId == null) {\n chainId = network.chainId;\n }\n else if (network.chainId !== chainId) {\n logger.throwError(\"cannot mix providers on different networks\", \"UNSUPPORTED_OPERATION\", {\n operation: \"new FallbackProvider\"\n });\n }\n }\n })(), \"f\");\n }\n await initialSync;\n}, _FallbackProvider_checkQuorum = async function _FallbackProvider_checkQuorum(running, req) {\n // Get all the result objects\n const results = [];\n for (const runner of running) {\n if (\"result\" in runner.result) {\n const result = runner.result.result;\n results.push({\n result,\n normal: normalize((runner.config._network), result, req),\n weight: runner.config.weight\n });\n }\n }\n // Are there enough results to event meet quorum?\n if (results.reduce((a, r) => (a + r.weight), 0) < this.quorum) {\n return undefined;\n }\n switch (req.method) {\n case \"getBlockNumber\": {\n throw new Error(\"TODO\");\n }\n case \"getGasPrice\":\n case \"estimateGas\":\n return getMedian(results);\n case \"getBlock\":\n // Pending blocks are mempool dependant and already\n // quite untrustworthy\n if (\"blockTag\" in req && req.blockTag === \"pending\") {\n return results[0].result;\n }\n return checkQuorum(this.quorum, results);\n case \"chainId\":\n case \"getBalance\":\n case \"getTransactionCount\":\n case \"getCode\":\n case \"getStorageAt\":\n case \"getTransaction\":\n case \"getTransactionReceipt\":\n case \"getLogs\":\n return checkQuorum(this.quorum, results);\n case \"call\":\n // @TODO: Check errors\n return checkQuorum(this.quorum, results);\n case \"sendTransaction\":\n throw new Error(\"TODO\");\n }\n return logger.throwError(\"unsupported method\", \"UNSUPPORTED_OPERATION\", {\n operation: `_perform(${JSON.stringify(req.method)})`\n });\n}, _FallbackProvider_waitForQuorum = async function _FallbackProvider_waitForQuorum(running, req) {\n if (running.size === 0) {\n throw new Error(\"no runners?!\");\n }\n // Any promises that are interesting to watch for; an expired stall\n // or a successful perform\n const interesting = [];\n //const results: Array = [ ];\n //const errors: Array = [ ];\n let newRunners = 0;\n for (const runner of running) {\n // @TODO: use runner.perfom != null\n /*\n if (\"result\" in runner.result) {\n results.push(runner.result.result);\n } else if (\"error\" in runner.result) {\n errors.push(runner.result.error);\n }\n*/\n // No responses, yet; keep an eye on it\n if (runner.perform) {\n interesting.push(runner.perform);\n }\n // Still stalling...\n if (runner.staller) {\n interesting.push(runner.staller);\n continue;\n }\n // This runner has already triggered another runner\n if (runner.didBump) {\n continue;\n }\n // Got a response (result or error) or stalled; kick off another runner\n runner.didBump = true;\n newRunners++;\n }\n // Check for quorum\n /*\n console.log({ results, errors } );\n if (results.length >= this.quorum) {\n return results[0];\n }\n\n if (errors.length >= this.quorum) {\n return errors[0];\n }\n */\n const value = await __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_checkQuorum).call(this, running, req);\n if (value !== undefined) {\n if (value instanceof Error) {\n throw value;\n }\n return value;\n }\n // Add any new runners, because a staller timed out or a result\n // or error response came in.\n for (let i = 0; i < newRunners; i++) {\n __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_addRunner).call(this, running, req);\n }\n if (interesting.length === 0) {\n throw new Error(\"quorum not met\");\n // return logger.throwError(\"failed to meet quorum\", \"\", {\n // });\n }\n // Wait for someone to either complete its perform or trigger a stall\n await Promise.race(interesting);\n return await __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_waitForQuorum).call(this, running, req);\n};\n//# sourceMappingURL=provider-fallback.js.map","export function shuffle(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n const tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n }\n}\n//# sourceMappingURL=shuffle.js.map","function getGlobal() {\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n throw new Error('unable to locate global object');\n}\n;\nconst _WebSocket = getGlobal().WebSocket;\nexport { _WebSocket as WebSocket };\n//# sourceMappingURL=ws-browser.js.map","/**\n * SocketProvider\n *\n * Generic long-lived socket provider.\n *\n * Sub-classing notes\n * - a sub-class MUST call the `_start()` method once connected\n * - a sub-class MUST override the `_write(string)` method\n * - a sub-class MUST call `_processMessage(string)` for each message\n */\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _SocketSubscriber_provider, _SocketSubscriber_filter, _SocketSubscriber_filterId, _SocketSubscriber_paused, _SocketSubscriber_emitPromise, _SocketEventSubscriber_logFilter, _SocketEventSubscriber_formatter, _SocketProvider_callbacks, _SocketProvider_ready, _SocketProvider_subs, _SocketProvider_pending;\nimport { UnmanagedSubscriber } from \"./abstract-provider.js\";\nimport { logger } from \"./logger.js\";\nimport { JsonRpcApiProvider } from \"./provider-jsonrpc.js\";\nexport class SocketSubscriber {\n constructor(provider, filter) {\n _SocketSubscriber_provider.set(this, void 0);\n _SocketSubscriber_filter.set(this, void 0);\n _SocketSubscriber_filterId.set(this, void 0);\n _SocketSubscriber_paused.set(this, void 0);\n _SocketSubscriber_emitPromise.set(this, void 0);\n __classPrivateFieldSet(this, _SocketSubscriber_provider, provider, \"f\");\n __classPrivateFieldSet(this, _SocketSubscriber_filter, JSON.stringify(filter), \"f\");\n __classPrivateFieldSet(this, _SocketSubscriber_filterId, null, \"f\");\n __classPrivateFieldSet(this, _SocketSubscriber_paused, null, \"f\");\n __classPrivateFieldSet(this, _SocketSubscriber_emitPromise, null, \"f\");\n }\n get filter() { return JSON.parse(__classPrivateFieldGet(this, _SocketSubscriber_filter, \"f\")); }\n start() {\n __classPrivateFieldSet(this, _SocketSubscriber_filterId, __classPrivateFieldGet(this, _SocketSubscriber_provider, \"f\").send(\"eth_subscribe\", this.filter).then((filterId) => {\n ;\n __classPrivateFieldGet(this, _SocketSubscriber_provider, \"f\")._register(filterId, this);\n return filterId;\n }), \"f\");\n }\n stop() {\n (__classPrivateFieldGet(this, _SocketSubscriber_filterId, \"f\")).then((filterId) => {\n __classPrivateFieldGet(this, _SocketSubscriber_provider, \"f\").send(\"eth_unsubscribe\", [filterId]);\n });\n __classPrivateFieldSet(this, _SocketSubscriber_filterId, null, \"f\");\n }\n // @TODO: pause should trap the current blockNumber, unsub, and on resume use getLogs\n // and resume\n pause(dropWhilePaused) {\n if (!dropWhilePaused) {\n logger.throwError(\"preserve logs while paused not supported by SocketSubscriber yet\", \"UNSUPPORTED_OPERATION\", {\n operation: \"pause(false)\"\n });\n }\n __classPrivateFieldSet(this, _SocketSubscriber_paused, !!dropWhilePaused, \"f\");\n }\n resume() {\n __classPrivateFieldSet(this, _SocketSubscriber_paused, null, \"f\");\n }\n _handleMessage(message) {\n if (__classPrivateFieldGet(this, _SocketSubscriber_filterId, \"f\") == null) {\n return;\n }\n if (__classPrivateFieldGet(this, _SocketSubscriber_paused, \"f\") === null) {\n let emitPromise = __classPrivateFieldGet(this, _SocketSubscriber_emitPromise, \"f\");\n if (emitPromise == null) {\n emitPromise = this._emit(__classPrivateFieldGet(this, _SocketSubscriber_provider, \"f\"), message);\n }\n else {\n emitPromise = emitPromise.then(async () => {\n await this._emit(__classPrivateFieldGet(this, _SocketSubscriber_provider, \"f\"), message);\n });\n }\n __classPrivateFieldSet(this, _SocketSubscriber_emitPromise, emitPromise.then(() => {\n if (__classPrivateFieldGet(this, _SocketSubscriber_emitPromise, \"f\") === emitPromise) {\n __classPrivateFieldSet(this, _SocketSubscriber_emitPromise, null, \"f\");\n }\n }), \"f\");\n }\n }\n async _emit(provider, message) {\n throw new Error(\"sub-classes must implemente this; _emit\");\n }\n}\n_SocketSubscriber_provider = new WeakMap(), _SocketSubscriber_filter = new WeakMap(), _SocketSubscriber_filterId = new WeakMap(), _SocketSubscriber_paused = new WeakMap(), _SocketSubscriber_emitPromise = new WeakMap();\nexport class SocketBlockSubscriber extends SocketSubscriber {\n constructor(provider) {\n super(provider, [\"newHeads\"]);\n }\n async _emit(provider, message) {\n provider.emit(\"block\", parseInt(message.number));\n }\n}\nexport class SocketPendingSubscriber extends SocketSubscriber {\n constructor(provider) {\n super(provider, [\"newPendingTransactions\"]);\n }\n async _emit(provider, message) {\n provider.emit(\"pending\", message);\n }\n}\nexport class SocketEventSubscriber extends SocketSubscriber {\n constructor(provider, filter) {\n super(provider, [\"logs\", filter]);\n _SocketEventSubscriber_logFilter.set(this, void 0);\n _SocketEventSubscriber_formatter.set(this, void 0);\n __classPrivateFieldSet(this, _SocketEventSubscriber_logFilter, JSON.stringify(filter), \"f\");\n __classPrivateFieldSet(this, _SocketEventSubscriber_formatter, provider.getNetwork().then((network) => network.formatter), \"f\");\n }\n get logFilter() { return JSON.parse(__classPrivateFieldGet(this, _SocketEventSubscriber_logFilter, \"f\")); }\n async _emit(provider, message) {\n const formatter = await __classPrivateFieldGet(this, _SocketEventSubscriber_formatter, \"f\");\n provider.emit(__classPrivateFieldGet(this, _SocketEventSubscriber_logFilter, \"f\"), formatter.log(message, provider));\n }\n}\n_SocketEventSubscriber_logFilter = new WeakMap(), _SocketEventSubscriber_formatter = new WeakMap();\nexport class SocketProvider extends JsonRpcApiProvider {\n constructor(network) {\n super(network);\n _SocketProvider_callbacks.set(this, void 0);\n _SocketProvider_ready.set(this, void 0);\n // Maps each filterId to its subscriber\n _SocketProvider_subs.set(this, void 0);\n // If any events come in before a subscriber has finished\n // registering, queue them\n _SocketProvider_pending.set(this, void 0);\n __classPrivateFieldSet(this, _SocketProvider_callbacks, new Map(), \"f\");\n __classPrivateFieldSet(this, _SocketProvider_ready, false, \"f\");\n __classPrivateFieldSet(this, _SocketProvider_subs, new Map(), \"f\");\n __classPrivateFieldSet(this, _SocketProvider_pending, new Map(), \"f\");\n }\n _getSubscriber(sub) {\n switch (sub.type) {\n case \"close\":\n return new UnmanagedSubscriber(\"close\");\n case \"block\":\n return new SocketBlockSubscriber(this);\n case \"pending\":\n return new SocketPendingSubscriber(this);\n case \"event\":\n return new SocketEventSubscriber(this, sub.filter);\n case \"orphan\":\n // Handled auto-matically within AbstractProvider\n // when the log.removed = true\n if (sub.filter.orphan === \"drop-log\") {\n return new UnmanagedSubscriber(\"drop-log\");\n }\n }\n return super._getSubscriber(sub);\n }\n _register(filterId, subscriber) {\n __classPrivateFieldGet(this, _SocketProvider_subs, \"f\").set(filterId, subscriber);\n const pending = __classPrivateFieldGet(this, _SocketProvider_pending, \"f\").get(filterId);\n if (pending) {\n for (const message of pending) {\n subscriber._handleMessage(message);\n }\n __classPrivateFieldGet(this, _SocketProvider_pending, \"f\").delete(filterId);\n }\n }\n async send(method, params) {\n const payload = this.prepareRequest(method, params);\n const promise = new Promise((resolve, reject) => {\n __classPrivateFieldGet(this, _SocketProvider_callbacks, \"f\").set(payload.id, { payload, resolve, reject });\n });\n if (__classPrivateFieldGet(this, _SocketProvider_ready, \"f\")) {\n await this._write(JSON.stringify(payload));\n }\n return await promise;\n }\n // Sub-classes must call this once they are connected\n async _start() {\n if (__classPrivateFieldGet(this, _SocketProvider_ready, \"f\")) {\n return;\n }\n __classPrivateFieldSet(this, _SocketProvider_ready, true, \"f\");\n for (const { payload } of __classPrivateFieldGet(this, _SocketProvider_callbacks, \"f\").values()) {\n await this._write(JSON.stringify(payload));\n }\n }\n // Sub-classes must call this for each message\n async _processMessage(message) {\n const result = JSON.parse(message);\n if (\"id\" in result) {\n const promise = __classPrivateFieldGet(this, _SocketProvider_callbacks, \"f\").get(result.id);\n if (!promise) {\n console.log(\"Weird... Response for not a thing we sent\");\n return;\n }\n __classPrivateFieldGet(this, _SocketProvider_callbacks, \"f\").delete(result.id);\n if (\"error\" in result) {\n const { message, code, data } = result.error;\n const error = logger.makeError(message || \"unkonwn error\", \"SERVER_ERROR\", {\n request: `ws:${JSON.stringify(promise.payload)}`,\n info: { code, data }\n });\n promise.reject(error);\n }\n else {\n promise.resolve(result.result);\n }\n }\n else if (result.method === \"eth_subscription\") {\n const filterId = result.params.subscription;\n const subscriber = __classPrivateFieldGet(this, _SocketProvider_subs, \"f\").get(filterId);\n if (subscriber) {\n subscriber._handleMessage(result.params.result);\n }\n else {\n let pending = __classPrivateFieldGet(this, _SocketProvider_pending, \"f\").get(filterId);\n if (pending == null) {\n pending = [];\n __classPrivateFieldGet(this, _SocketProvider_pending, \"f\").set(filterId, pending);\n }\n pending.push(result.params.result);\n }\n }\n }\n async _write(message) {\n throw new Error(\"sub-classes must override this\");\n }\n}\n_SocketProvider_callbacks = new WeakMap(), _SocketProvider_ready = new WeakMap(), _SocketProvider_subs = new WeakMap(), _SocketProvider_pending = new WeakMap();\n//# sourceMappingURL=provider-socket.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _WebSocketProvider_websocket;\nimport { WebSocket } from \"ws\"; /*-browser*/\nimport { SocketProvider } from \"./provider-socket.js\";\nexport class WebSocketProvider extends SocketProvider {\n constructor(url, network) {\n super(network);\n _WebSocketProvider_websocket.set(this, void 0);\n if (typeof (url) === \"string\") {\n __classPrivateFieldSet(this, _WebSocketProvider_websocket, new WebSocket(url), \"f\");\n }\n else {\n __classPrivateFieldSet(this, _WebSocketProvider_websocket, url, \"f\");\n }\n this.websocket.onopen = () => {\n this._start();\n };\n this.websocket.onmessage = (message) => {\n this._processMessage(message.data);\n };\n }\n get websocket() { return __classPrivateFieldGet(this, _WebSocketProvider_websocket, \"f\"); }\n async _write(message) {\n this.websocket.send(message);\n }\n}\n_WebSocketProvider_websocket = new WeakMap();\n//# sourceMappingURL=provider-websocket.js.map","import { EnsPlugin, GasCostPlugin, MaxPriorityFeePlugin } from \"./plugins-network.js\";\nimport { EtherscanPlugin } from \"./provider-etherscan.js\";\nimport { Network as _Network } from \"./network.js\";\n// See: https://chainlist.org\nfunction injectCommonNetworks(Network) {\n /// Register popular Ethereum networks\n function registerEth(name, chainId, options) {\n const func = function () {\n const network = new Network(name, chainId);\n // We use 0 to disable ENS\n if (options.ensNetwork != null) {\n network.attachPlugin(new EnsPlugin(null, options.ensNetwork));\n }\n if (options.priorityFee) {\n network.attachPlugin(new MaxPriorityFeePlugin(options.priorityFee));\n }\n if (options.etherscan) {\n const { url, apiKey } = options.etherscan;\n network.attachPlugin(new EtherscanPlugin(url, apiKey));\n }\n network.attachPlugin(new GasCostPlugin());\n return network;\n };\n // Register the network by name and chain ID\n Network.register(name, func);\n Network.register(chainId, func);\n if (options.altNames) {\n options.altNames.forEach((name) => {\n Network.register(name, func);\n });\n }\n }\n registerEth(\"homestead\", 1, { ensNetwork: 1, altNames: [\"mainnet\"] });\n registerEth(\"ropsten\", 3, { ensNetwork: 3 });\n registerEth(\"rinkeby\", 4, { ensNetwork: 4 });\n registerEth(\"goerli\", 5, { ensNetwork: 5 });\n registerEth(\"kovan\", 42, { ensNetwork: 42 });\n registerEth(\"classic\", 61, {});\n registerEth(\"classicKotti\", 6, {});\n registerEth(\"xdai\", 100, { ensNetwork: 1 });\n // Polygon has a 35 gwei maxPriorityFee requirement\n registerEth(\"matic\", 137, {\n ensNetwork: 1,\n priorityFee: 35000000000,\n etherscan: {\n apiKey: \"W6T8DJW654GNTQ34EFEYYP3EZD9DD27CT7\",\n url: \"https:/\\/api.polygonscan.com/\"\n }\n });\n registerEth(\"maticMumbai\", 80001, {\n priorityFee: 35000000000,\n etherscan: {\n apiKey: \"W6T8DJW654GNTQ34EFEYYP3EZD9DD27CT7\",\n url: \"https:/\\/api-testnet.polygonscan.com/\"\n }\n });\n registerEth(\"bnb\", 56, {\n ensNetwork: 1,\n etherscan: {\n apiKey: \"EVTS3CU31AATZV72YQ55TPGXGMVIFUQ9M9\",\n url: \"http:/\\/api.bscscan.com\"\n }\n });\n registerEth(\"bnbt\", 97, {\n etherscan: {\n apiKey: \"EVTS3CU31AATZV72YQ55TPGXGMVIFUQ9M9\",\n url: \"http:/\\/api-testnet.bscscan.com\"\n }\n });\n return Network;\n}\nconst Network = injectCommonNetworks(_Network);\nexport { Network };\n//# sourceMappingURL=common-networks.js.map","const IpcSocketProvider = undefined;\nexport { IpcSocketProvider };\n//# sourceMappingURL=provider-ipcsocket-browser.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _ContractTransactionReceipt_interface, _ContractTransactionResponse_interface;\nimport { defineProperties, EventPayload } from \"@ethersproject/properties\";\nimport { Log, TransactionReceipt, TransactionResponse } from \"@ethersproject/providers\";\nexport class EventLog extends Log {\n constructor(log, iface, fragment) {\n super(log, log.provider);\n const args = iface.decodeEventLog(fragment, log.data, log.topics);\n defineProperties(this, { args, fragment, interface: iface });\n }\n get eventName() { return this.fragment.name; }\n get eventSignature() { return this.fragment.format(); }\n}\nexport class ContractTransactionReceipt extends TransactionReceipt {\n constructor(iface, provider, tx) {\n super(tx, provider);\n _ContractTransactionReceipt_interface.set(this, void 0);\n __classPrivateFieldSet(this, _ContractTransactionReceipt_interface, iface, \"f\");\n }\n get logs() {\n return super.logs.map((log) => {\n const fragment = log.topics.length ? __classPrivateFieldGet(this, _ContractTransactionReceipt_interface, \"f\").getEvent(log.topics[0]) : null;\n if (fragment) {\n return new EventLog(log, __classPrivateFieldGet(this, _ContractTransactionReceipt_interface, \"f\"), fragment);\n }\n else {\n return log;\n }\n });\n }\n}\n_ContractTransactionReceipt_interface = new WeakMap();\nexport class ContractTransactionResponse extends TransactionResponse {\n constructor(iface, provider, tx) {\n super(tx, provider);\n _ContractTransactionResponse_interface.set(this, void 0);\n __classPrivateFieldSet(this, _ContractTransactionResponse_interface, iface, \"f\");\n }\n async wait(confirms) {\n const receipt = await super.wait();\n if (receipt == null) {\n return null;\n }\n return new ContractTransactionReceipt(__classPrivateFieldGet(this, _ContractTransactionResponse_interface, \"f\"), this.provider, receipt);\n }\n}\n_ContractTransactionResponse_interface = new WeakMap();\nexport class ContractEventPayload extends EventPayload {\n constructor(contract, listener, filter, fragment, _log) {\n super(contract, listener, filter);\n const log = new EventLog(_log, contract.interface, fragment);\n const args = contract.interface.decodeEventLog(fragment, log.data, log.topics);\n defineProperties(this, { args, fragment, log });\n }\n get eventName() {\n return this.fragment.name;\n }\n get eventSignature() {\n return this.fragment.format();\n }\n async getBlock() {\n return await this.log.getBlock();\n }\n async getTransaction() {\n return await this.log.getTransaction();\n }\n async getTransactionReceipt() {\n return await this.log.getTransactionReceipt();\n }\n}\n//# sourceMappingURL=wrappers.js.map","export const version = \"@ethersproject/contract@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _PreparedTopicFilter_filter;\nimport { resolveAddress } from \"@ethersproject/address\";\nimport { Interface, Typed } from \"@ethersproject/abi\";\nimport { isHexString } from \"@ethersproject/bytes\";\nimport { isCallException } from \"@ethersproject/logger\";\nimport { defineProperties, resolveProperties } from \"@ethersproject/properties\";\nimport { copyRequest } from \"@ethersproject/providers\";\nimport { ContractEventPayload, ContractTransactionResponse, EventLog } from \"./wrappers.js\";\nimport { logger } from \"./logger.js\";\nfunction canEstimate(value) {\n return (value && typeof (value.estimateGas) === \"function\");\n}\nfunction canCall(value) {\n return (value && typeof (value.call) === \"function\");\n}\nfunction canSend(value) {\n return (value && typeof (value.sendTransaction) === \"function\");\n}\nfunction canResolve(value) {\n return (value && typeof (value.resolveName) === \"function\");\n}\nfunction canQuery(value) {\n return (value && typeof (value.getLogs) === \"function\");\n}\nfunction canSubscribe(value) {\n return (value && typeof (value.on) === \"function\" && typeof (value.off) === \"function\");\n}\nfunction concisify(items) {\n items = Array.from((new Set(items)).values());\n items.sort();\n return items;\n}\nclass PreparedTopicFilter {\n constructor(contract, fragment, args) {\n _PreparedTopicFilter_filter.set(this, void 0);\n defineProperties(this, { fragment });\n if (fragment.inputs.length < args.length) {\n throw new Error(\"too many arguments\");\n }\n // Recursively descend into args and resolve any addresses\n const runner = getRunner(contract.runner, \"resolveName\");\n const resolver = canResolve(runner) ? runner : null;\n __classPrivateFieldSet(this, _PreparedTopicFilter_filter, (async function () {\n const resolvedArgs = await Promise.all(fragment.inputs.map((param, index) => {\n return param.walkAsync(args[index], (type, value) => {\n if (type === \"address\") {\n return resolveAddress(value, resolver);\n }\n return value;\n });\n }));\n return contract.interface.encodeFilterTopics(fragment, resolvedArgs);\n })(), \"f\");\n }\n getTopicFilter() {\n return __classPrivateFieldGet(this, _PreparedTopicFilter_filter, \"f\");\n }\n}\n_PreparedTopicFilter_filter = new WeakMap();\n// A = Arguments passed in as a tuple\n// R = The result type of the call (i.e. if only one return type,\n// the qualified type, otherwise Result)\n// D = The type the default call will return (i.e. R for view/pure,\n// TransactionResponse otherwise)\n//export interface ContractMethod = Array, R = any, D extends R | ContractTransactionResponse = ContractTransactionResponse> {\nfunction _WrappedMethodBase() {\n return Function;\n}\nfunction getRunner(value, feature) {\n if (value == null) {\n return null;\n }\n if (typeof (value[feature]) === \"function\") {\n return value;\n }\n if (value.provider && typeof (value.provider[feature]) === \"function\") {\n return value.provider;\n }\n return null;\n}\nexport async function copyOverrides(arg) {\n // Create a shallow copy (we'll deep-ify anything needed during normalizing)\n const overrides = copyRequest(Typed.dereference(arg, \"overrides\"));\n // Some sanity checking; these are what these methods adds\n //if ((overrides).to) {\n if (overrides.to) {\n logger.throwArgumentError(\"cannot override to\", \"overrides.to\", overrides.to);\n }\n else if (overrides.data) {\n logger.throwArgumentError(\"cannot override data\", \"overrides.data\", overrides.data);\n }\n // Resolve any from\n if (overrides.from) {\n overrides.from = await resolveAddress(overrides.from);\n }\n return overrides;\n}\nexport async function resolveArgs(_runner, inputs, args) {\n // Recursively descend into args and resolve any addresses\n const runner = getRunner(_runner, \"resolveName\");\n const resolver = canResolve(runner) ? runner : null;\n return await Promise.all(inputs.map((param, index) => {\n return param.walkAsync(args[index], (type, value) => {\n if (type === \"address\") {\n return resolveAddress(value, resolver);\n }\n return value;\n });\n }));\n}\nclass WrappedMethod extends _WrappedMethodBase() {\n constructor(contract, key) {\n super();\n defineProperties(this, {\n name: contract.interface.getFunctionName(key),\n _contract: contract, _key: key\n });\n const proxy = new Proxy(this, {\n // Perform the default operation for this fragment type\n apply: async (target, thisArg, args) => {\n const fragment = target.getFragment(...args);\n if (fragment.constant) {\n return await target.staticCall(...args);\n }\n return await target.send(...args);\n },\n });\n return proxy;\n }\n // Only works on non-ambiguous keys (refined fragment is always non-ambiguous)\n get fragment() {\n return this._contract.interface.getFunction(this._key);\n }\n getFragment(...args) {\n return this._contract.interface.getFunction(this._key, args);\n }\n async populateTransaction(...args) {\n const fragment = this.getFragment(...args);\n // If an overrides was passed in, copy it and normalize the values\n let overrides = {};\n if (fragment.inputs.length + 1 === args.length) {\n overrides = await copyOverrides(args.pop());\n }\n if (fragment.inputs.length !== args.length) {\n throw new Error(\"internal error: fragment inputs doesn't match arguments; should not happen\");\n }\n const resolvedArgs = await resolveArgs(this._contract.runner, fragment.inputs, args);\n return Object.assign({}, overrides, await resolveProperties({\n to: this._contract.getAddress(),\n data: this._contract.interface.encodeFunctionData(fragment, resolvedArgs)\n }));\n }\n async staticCall(...args) {\n const result = await this.staticCallResult(...args);\n if (result.length === 1) {\n return result[0];\n }\n return result;\n }\n async send(...args) {\n const runner = getRunner(this._contract.runner, \"sendTransaction\");\n if (!canSend(runner)) {\n return logger.throwError(\"contract runner does not support sending transactions\", \"UNSUPPORTED_OPERATION\", {\n operation: \"sendTransaction\"\n });\n }\n const tx = await runner.sendTransaction(await this.populateTransaction(...args));\n const provider = getRunner(this._contract.runner, \"getLogs\");\n return new ContractTransactionResponse(this._contract.interface, provider, tx);\n }\n async estimateGas(...args) {\n const runner = getRunner(this._contract.runner, \"estimateGas\");\n if (!canEstimate(runner)) {\n return logger.throwError(\"contract runner does not support gas estimation\", \"UNSUPPORTED_OPERATION\", {\n operation: \"estimateGas\"\n });\n }\n return await runner.estimateGas(await this.populateTransaction(...args));\n }\n async staticCallResult(...args) {\n const runner = getRunner(this._contract.runner, \"call\");\n if (!canCall(runner)) {\n return logger.throwError(\"contract runner does not support calling\", \"UNSUPPORTED_OPERATION\", {\n operation: \"call\"\n });\n }\n const fragment = this.getFragment(...args);\n const tx = await this.populateTransaction(...args);\n let result = \"0x\";\n try {\n result = await runner.call(tx);\n }\n catch (error) {\n if (isCallException(error)) {\n throw this._contract.interface.makeError(fragment, error.data, tx);\n }\n throw error;\n }\n return this._contract.interface.decodeFunctionResult(fragment, result);\n }\n}\nfunction _WrappedEventBase() {\n return Function;\n}\nclass WrappedEvent extends _WrappedEventBase() {\n constructor(contract, key) {\n super();\n defineProperties(this, {\n name: contract.interface.getEventName(key),\n _contract: contract, _key: key\n });\n return new Proxy(this, {\n // Perform the default operation for this fragment type\n apply: async (target, thisArg, args) => {\n return new PreparedTopicFilter(contract, target.getFragment(...args), args);\n },\n });\n }\n // Only works on non-ambiguous keys\n get fragment() {\n return this._contract.interface.getEvent(this._key);\n }\n getFragment(...args) {\n return this._contract.interface.getEvent(this._key, args);\n }\n}\n;\n// The combination of TypeScrype, Private Fields and Proxies makes\n// the world go boom; so we hide variables with some trickery keeping\n// a symbol attached to each BaseContract which its sub-class (even\n// via a Proxy) can reach and use to look up its internal values.\nconst internal = Symbol.for(\"_ethersInternal_contract\");\nconst internalValues = new WeakMap();\nfunction setInternal(contract, values) {\n internalValues.set(contract[internal], values);\n}\nfunction getInternal(contract) {\n return internalValues.get(contract[internal]);\n}\nfunction isDeferred(value) {\n return (value && typeof (value) === \"object\" && (\"getTopicFilter\" in value) &&\n (typeof (value.getTopicFilter) === \"function\") && value.fragment);\n}\nasync function getSubTag(contract, event) {\n let fragment;\n let topics;\n if (Array.isArray(event)) {\n // Topics; e.g. `[ \"0x1234...89ab\" ]`\n fragment = contract.interface.getEvent(event[0]);\n topics = event;\n }\n else if (typeof (event) === \"string\") {\n // Event name (name or signature); `\"Transfer\"`\n fragment = contract.interface.getEvent(event);\n topics = [contract.interface.getEventTopic(fragment)];\n }\n else if (isDeferred(event)) {\n // Deferred Topic Filter; e.g. `contract.filter.Transfer(from)`\n fragment = event.fragment;\n topics = await event.getTopicFilter();\n }\n else if (\"fragment\" in event) {\n // ContractEvent; e.g. `contract.filter.Transfer`\n fragment = event.fragment;\n topics = [contract.interface.getEventTopic(fragment)];\n }\n else {\n console.log(event);\n throw new Error(\"TODO\");\n }\n // Normalize topics and sort TopicSets\n topics = topics.map((t) => {\n if (t == null) {\n return null;\n }\n if (Array.isArray(t)) {\n return concisify(t.map((t) => t.toLowerCase()));\n }\n return t.toLowerCase();\n });\n const tag = topics.map((t) => {\n if (t == null) {\n return \"null\";\n }\n if (Array.isArray(t)) {\n return t.join(\"|\");\n }\n return t;\n }).join(\"&\");\n return { fragment, tag, topics };\n}\nasync function hasSub(contract, event) {\n const { subs } = getInternal(contract);\n return subs.get((await getSubTag(contract, event)).tag) || null;\n}\nasync function getSub(contract, event) {\n // Make sure our runner can actually subscribe to events\n const runner = getRunner(contract.runner, \"on\");\n const runnerOff = getRunner(contract.runner, \"off\");\n if (!runner || runner !== runnerOff || !canSubscribe(runner)) {\n return logger.throwError(\"contract runner does not support subscribing\", \"UNSUPPORTED_OPERATION\", {\n operation: \"on\"\n });\n }\n const { fragment, tag, topics } = await getSubTag(contract, event);\n const { addr, subs } = getInternal(contract);\n let sub = subs.get(tag);\n if (!sub) {\n const address = (addr ? addr : contract);\n const filter = { address, topics };\n const listener = (log) => {\n const payload = new ContractEventPayload(contract, null, event, fragment, log);\n emit(contract, event, payload.args, payload);\n };\n let started = false;\n const start = () => {\n if (started) {\n return;\n }\n runner.on(filter, listener);\n started = true;\n };\n const stop = () => {\n if (!started) {\n return;\n }\n runner.off(filter, listener);\n started = false;\n };\n sub = { tag, listeners: [], start, stop };\n subs.set(tag, sub);\n }\n return sub;\n}\nasync function _emit(contract, event, args, payload) {\n await lastEmit;\n const sub = await hasSub(contract, event);\n if (!sub) {\n return false;\n }\n const count = sub.listeners.length;\n sub.listeners = sub.listeners.filter(({ listener, once }) => {\n const passArgs = args.slice();\n if (payload) {\n passArgs.push(new ContractEventPayload(contract, (once ? null : listener), event, payload.fragment, payload.log));\n }\n setTimeout(() => { listener.call(contract, ...passArgs); }, 0);\n return !once;\n });\n return (count > 0);\n}\n// We use this to ensure one emit resolves before firing the next to\n// ensure correct ordering (note this cannot throw and just adds the\n// notice to the event queu using setTimeout).\nlet lastEmit = Promise.resolve();\nasync function emit(contract, event, args, payload) {\n try {\n await lastEmit;\n }\n catch (error) { }\n const resultPromise = _emit(contract, event, args, payload);\n lastEmit = resultPromise;\n return await resultPromise;\n}\nconst passProperties = [\"then\"];\nexport class BaseContract {\n constructor(target, abi, runner = null, _deployTx) {\n const iface = Interface.from(abi);\n defineProperties(this, { target, runner, interface: iface });\n Object.defineProperty(this, internal, { value: {} });\n let addrPromise;\n let addr = null;\n let deployTx = null;\n if (_deployTx) {\n const provider = getRunner(runner, \"getLogs\");\n deployTx = new ContractTransactionResponse(this.interface, provider, _deployTx);\n }\n let subs = new Map();\n // Resolve the target as the address\n if (typeof (target) === \"string\") {\n if (isHexString(target)) {\n addr = target;\n addrPromise = Promise.resolve(target);\n }\n else {\n const resolver = getRunner(runner, \"resolveName\");\n if (!canResolve(resolver)) {\n throw logger.makeError(\"contract runner does not support name resolution\", \"UNSUPPORTED_OPERATION\", {\n operation: \"resolveName\"\n });\n }\n addrPromise = resolver.resolveName(target).then((addr) => {\n if (addr == null) {\n throw new Error(\"TODO\");\n }\n getInternal(this).addr = addr;\n return addr;\n });\n }\n }\n else {\n addrPromise = target.getAddress().then((addr) => {\n if (addr == null) {\n throw new Error(\"TODO\");\n }\n getInternal(this).addr = addr;\n return addr;\n });\n }\n // Set our private values\n setInternal(this, { addrPromise, addr, deployTx, subs });\n // Add the event filters\n const filters = new Proxy({}, {\n get: (target, _prop, receiver) => {\n // Pass important checks (like `then` for Promise) through\n if (passProperties.indexOf(_prop) >= 0) {\n return Reflect.get(target, _prop, receiver);\n }\n const prop = String(_prop);\n const result = this.getEvent(prop);\n if (result) {\n return result;\n }\n throw new Error(`unknown contract event: ${prop}`);\n }\n });\n defineProperties(this, { filters });\n // Return a Proxy that will respond to functions\n return new Proxy(this, {\n get: (target, _prop, receiver) => {\n if (_prop in target || passProperties.indexOf(_prop) >= 0) {\n return Reflect.get(target, _prop, receiver);\n }\n const prop = String(_prop);\n const result = target.getFunction(prop);\n if (result) {\n return result;\n }\n throw new Error(`unknown contract method: ${prop}`);\n }\n });\n }\n async getAddress() { return await getInternal(this).addrPromise; }\n deploymentTransaction() {\n return getInternal(this).deployTx;\n }\n getFunction(key) {\n if (typeof (key) !== \"string\") {\n key = key.format();\n }\n return (new WrappedMethod(this, key));\n }\n getEvent(key) {\n if (typeof (key) !== \"string\") {\n key = key.format();\n }\n return (new WrappedEvent(this, key));\n }\n async queryFilter(event, fromBlock = 0, toBlock = \"latest\") {\n const { addr, addrPromise } = getInternal(this);\n const address = (addr ? addr : (await addrPromise));\n const { fragment, topics } = await getSubTag(this, event);\n const filter = { address, topics, fromBlock, toBlock };\n const runner = getRunner(this.runner, \"getLogs\");\n if (!canQuery(runner)) {\n return logger.throwError(\"contract runner does not support querying\", \"UNSUPPORTED_OPERATION\", {\n operation: \"getLogs\"\n });\n }\n return (await runner.getLogs(filter)).map((log) => {\n return new EventLog(log, this.interface, fragment);\n });\n }\n async on(event, listener) {\n const sub = await getSub(this, event);\n sub.listeners.push({ listener, once: false });\n sub.start();\n return this;\n }\n async once(event, listener) {\n const sub = await getSub(this, event);\n sub.listeners.push({ listener, once: true });\n sub.start();\n return this;\n }\n async emit(event, ...args) {\n return await emit(this, event, args, null);\n }\n async listenerCount(event) {\n if (event) {\n const sub = await hasSub(this, event);\n if (!sub) {\n return 0;\n }\n return sub.listeners.length;\n }\n const { subs } = getInternal(this);\n let total = 0;\n for (const { listeners } of subs.values()) {\n total += listeners.length;\n }\n return total;\n }\n async listeners(event) {\n if (event) {\n const sub = await hasSub(this, event);\n if (!sub) {\n return [];\n }\n return sub.listeners.map(({ listener }) => listener);\n }\n const { subs } = getInternal(this);\n let result = [];\n for (const { listeners } of subs.values()) {\n result = result.concat(listeners.map(({ listener }) => listener));\n }\n return result;\n }\n async off(event, listener) {\n const sub = await hasSub(this, event);\n if (!sub) {\n return this;\n }\n if (listener) {\n const index = sub.listeners.map(({ listener }) => listener).indexOf(listener);\n if (index >= 0) {\n sub.listeners.splice(index, 1);\n }\n }\n if (listener == null || sub.listeners.length === 0) {\n sub.stop();\n getInternal(this).subs.delete(sub.tag);\n }\n return this;\n }\n async removeAllListeners(event) {\n if (event) {\n const sub = await hasSub(this, event);\n if (!sub) {\n return this;\n }\n sub.stop();\n getInternal(this).subs.delete(sub.tag);\n }\n else {\n const { subs } = getInternal(this);\n for (const { tag, stop } of subs.values()) {\n stop();\n subs.delete(tag);\n }\n }\n return this;\n }\n // Alias for \"on\"\n async addListener(event, listener) {\n return await this.on(event, listener);\n }\n // Alias for \"off\"\n async removeListener(event, listener) {\n return await this.off(event, listener);\n }\n static buildClass(abi) {\n class CustomContract extends BaseContract {\n constructor(address, runner = null) {\n super(address, abi, runner);\n }\n }\n return CustomContract;\n }\n ;\n static from(target, abi, runner = null) {\n const contract = new this(target, abi, runner);\n return contract;\n }\n}\nfunction _ContractBase() {\n return BaseContract;\n}\nexport class Contract extends _ContractBase() {\n}\n//# sourceMappingURL=contract.js.map","import { getAddress } from \"@ethersproject/address\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { SigningKey } from \"@ethersproject/signing-key\";\nexport function computeAddress(key) {\n const publicKey = SigningKey.computePublicKey(key, false);\n return getAddress(keccak256(\"0x\" + publicKey.substring(4)).substring(26));\n}\n//# sourceMappingURL=address.js.map","const subsChrs = \" !#$%&'()*+,-./<=>?@[]^_`{|}~\";\nconst Word = /^[a-z]*$/i;\nfunction unfold(words, sep) {\n let initial = 97;\n return words.reduce((accum, word) => {\n if (word === sep) {\n initial++;\n }\n else if (word.match(Word)) {\n accum.push(String.fromCharCode(initial) + word);\n }\n else {\n initial = 97;\n accum.push(word);\n }\n return accum;\n }, []);\n}\nexport function decode(data, subs) {\n // Replace all the substitutions with their expanded form\n for (let i = subsChrs.length - 1; i >= 0; i--) {\n data = data.split(subsChrs[i]).join(subs.substring(2 * i, 2 * i + 2));\n }\n // Get all tle clumps; each suffix, first-increment and second-increment\n const clumps = [];\n const leftover = data.replace(/(:|([0-9])|([A-Z][a-z]*))/g, (all, item, semi, word) => {\n if (semi) {\n for (let i = parseInt(semi); i >= 0; i--) {\n clumps.push(\";\");\n }\n }\n else {\n clumps.push(item.toLowerCase());\n }\n return \"\";\n });\n if (leftover) {\n throw new Error(`leftovers: ${JSON.stringify(leftover)}`);\n }\n return unfold(unfold(clumps, \";\"), \":\");\n}\nexport function decodeOwl(data) {\n if (data[0] !== \"0\") {\n throw TypeError(\"unsupported auwl data\");\n }\n return decode(data.substring(1 + 2 * subsChrs.length), data.substring(1, 1 + 2 * subsChrs.length));\n}\n//# sourceMappingURL=decode-owl.js.map","export const version = \"@ethersproject/wordlists@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { defineProperties } from \"@ethersproject/properties\";\nexport class Wordlist {\n constructor(locale) {\n defineProperties(this, { locale });\n }\n // Subclasses may override this\n split(mnemonic) {\n return mnemonic.toLowerCase().split(/ +/g);\n }\n // Subclasses may override this\n join(words) {\n return words.join(\" \");\n }\n}\n//# sourceMappingURL=wordlist.js.map","// Use the encode-latin.js script to create the necessary\n// data files to be consumed by this class\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _WordlistOwl_instances, _WordlistOwl_data, _WordlistOwl_checksum, _WordlistOwl_words, _WordlistOwl_loadWords;\nimport { id } from \"@ethersproject/hash\";\nimport { decodeOwl } from \"./decode-owl.js\";\nimport { logger } from \"./logger.js\";\nimport { Wordlist } from \"./wordlist.js\";\nexport class WordlistOwl extends Wordlist {\n constructor(locale, data, checksum) {\n super(locale);\n _WordlistOwl_instances.add(this);\n _WordlistOwl_data.set(this, void 0);\n _WordlistOwl_checksum.set(this, void 0);\n _WordlistOwl_words.set(this, void 0);\n __classPrivateFieldSet(this, _WordlistOwl_data, data, \"f\");\n __classPrivateFieldSet(this, _WordlistOwl_checksum, checksum, \"f\");\n __classPrivateFieldSet(this, _WordlistOwl_words, null, \"f\");\n }\n get _data() { return __classPrivateFieldGet(this, _WordlistOwl_data, \"f\"); }\n _decodeWords() {\n return decodeOwl(__classPrivateFieldGet(this, _WordlistOwl_data, \"f\"));\n }\n getWord(index) {\n const words = __classPrivateFieldGet(this, _WordlistOwl_instances, \"m\", _WordlistOwl_loadWords).call(this);\n if (index < 0 || index >= words.length) {\n logger.throwArgumentError(`invalid word index: ${index}`, \"index\", index);\n }\n return words[index];\n }\n getWordIndex(word) {\n return __classPrivateFieldGet(this, _WordlistOwl_instances, \"m\", _WordlistOwl_loadWords).call(this).indexOf(word);\n }\n}\n_WordlistOwl_data = new WeakMap(), _WordlistOwl_checksum = new WeakMap(), _WordlistOwl_words = new WeakMap(), _WordlistOwl_instances = new WeakSet(), _WordlistOwl_loadWords = function _WordlistOwl_loadWords() {\n if (__classPrivateFieldGet(this, _WordlistOwl_words, \"f\") == null) {\n const words = this._decodeWords();\n // Verify the computed list matches the official list\n const checksum = id(words.join(\"\\n\") + \"\\n\");\n /* c8 ignore start */\n if (checksum !== __classPrivateFieldGet(this, _WordlistOwl_checksum, \"f\")) {\n throw new Error(`BIP39 Wordlist for ${this.locale} FAILED`);\n }\n /* c8 ignore stop */\n __classPrivateFieldSet(this, _WordlistOwl_words, words, \"f\");\n }\n return __classPrivateFieldGet(this, _WordlistOwl_words, \"f\");\n};\n//# sourceMappingURL=wordlist-owl.js.map","import { WordlistOwl } from \"./wordlist-owl.js\";\nconst words = \"0erleonalorenseinceregesticitStanvetearctssi#ch2Athck&tneLl0And#Il.yLeOutO=S|S%b/ra@SurdU'0Ce[Cid|CountCu'Hie=IdOu,-Qui*Ro[TT]T%T*[Tu$0AptDD-tD*[Ju,M.UltV<)Vi)0Rob-0FairF%dRaid0A(EEntRee0Ead0MRRp%tS!_rmBumCoholErtI&LLeyLowMo,O}PhaReadySoT Ways0A>urAz(gOngOuntU'd0Aly,Ch%Ci|G G!GryIm$K!Noun)Nu$O` Sw T&naTiqueXietyY1ArtOlogyPe?P!Pro=Ril1ChCt-EaEnaGueMMedM%MyOundR<+Re,Ri=RowTTefa@Ti,Tw%k0KPe@SaultSetSi,SumeThma0H!>OmTa{T&dT.udeTra@0Ct]D.Gu,NtTh%ToTumn0Era+OcadoOid0AkeA*AyEsomeFulKw?d0Is:ByChel%C#D+GL<)Lc#y~MbooN_{Ad!AftAmA}AshAt AwlAzyEamEd.EekEwI{etImeIspIt-OpO[Ou^OwdUci$UelUi'Umb!Un^UshYY,$2BeLtu*PPbo?dRiousRr|Rta(R=Sh]/omTe3C!:DMa+MpN)Ng R(gShUght WnY3AlBa>BrisCadeCemb CideCl(eC%a>C*a'ErF&'F(eFyG*eLayLiv M3AgramAlAm#dAryCeE'lEtFf G.$Gn.yLemmaNn NosaurRe@RtSag*eScov Sea'ShSmi[S%d Splay/<)V tVideV%)Zzy5Ct%Cum|G~Lph(Ma(Na>NkeyN%OrSeUb!Ve_ftAg#AmaA,-AwEamE[IftIllInkIpI=OpUmY2CkMbNeR(g/T^Ty1Arf1Nam-:G G!RlyRnR`Sily/Sy1HoOlogyOnomy0GeItUca>1F%t0G1GhtTh 2BowD E@r-EgSe0B?kBodyBra)Er+Ot]PloyPow Pty0Ab!A@DD![D%'EmyErgyF%)Ga+G(eH<)JoyLi,OughR-hRollSu*T Ti*TryVelope1Isode0U$Uip0AA'OdeOs]R%Upt0CapeSayS&)Ta>0Ern$H-s1Id&)IlOkeOl=1A@Amp!Ce[Ch<+C.eCludeCu'Ecu>Erci'Hau,Hib.I!I,ItOt-PM&'Mu}Pa@Po'Pro=Pul'0ChCludeComeC*a'DexD-a>Do%Du,ryFN Noc|PutQuirySSue0Em1Ory:CketGu?RZz3AlousAns~yWel9BInKeUr}yY5D+I)MpNg!Ni%Nk/:Ng?oo3EnEpT^upY3CkDD}yNdNgdomSsTT^&TeTt&Wi4EeIfeO{Ow:BBelB%Dd DyKeMpNgua+PtopR+T T(UghUndryVaWWnWsu.Y Zy3Ad AfArnA=Ctu*FtGG$G&dIsu*M#NdNg`NsOp?dSs#Tt Vel3ArB tyBr?yC&'FeFtGhtKeMbM.NkOnQuid/Tt!VeZ?d5AdAnB, C$CkG-NelyNgOpTt yUdUn+VeY$5CkyGga+Mb N?N^Xury3R-s:Ch(eDG-G}tIdIlInJ%KeMm$NNa+Nda>NgoNs]Nu$P!Rb!R^Rg(R(eRketRria+SkSs/ T^T i$ThTrixTt XimumZe3AdowAnAsu*AtCh<-D$DiaLodyLtMb M%yNt]NuRcyR+R.RryShSsa+T$Thod3Dd!DnightLk~]M-NdNimumN%Nu>Rac!Rr%S ySs/akeXXedXtu*5Bi!DelDifyMM|N.%NkeyN, N`OnR$ReRn(gSqu.oTh T]T%Unta(U'VeVie5ChFf(LeLtiplySc!SeumShroomS-/Tu$3Self/ yTh:I=MePk(Rrow/yT]Tu*3ArCkEdGati=G!@I` PhewR=/TTw%kUtr$V WsXt3CeGht5B!I'M(eeOd!Rm$R`SeTab!TeTh(gTi)VelW5C!?Mb R'T:K0EyJe@Li+Scu*S =Ta(Vious0CurEAyEa'Ed+U{UgUn+2EmEtIntL?LeLi)NdNyOlPul?Rt]S.]Ssib!/TatoTt yV tyWd W _@i)Ai'Ed-tEf Epa*Es|EttyEv|I)IdeIm?yIntI%.yIs#Iva>IzeOb!mO)[Odu)Of.OgramOje@Omo>OofOp tyOsp O>@OudOvide2Bl-Dd(g~LpL'Mpk(N^PilPpyR^a'R.yRpo'R'ShTZz!3Ramid:99Al.yAntumArt E,]I{ItIzO>:Bb.Cco#CeCkD?DioIlInI'~yMpN^NdomN+PidReTeTh V&WZ%3AdyAlAs#BelBuildC$lCei=CipeC%dCyc!Du)F!@F%mFu'G]G*tGul?Je@LaxLea'LiefLyMa(Memb M(dMo=Nd NewNtOp&PairPeatPla)P%tQui*ScueSemb!Si,Sour)Sp#'SultTi*T*atTurnUn]Ve$ViewW?d2Y`m0BBb#CeChDeD+F!GhtGidNgOtPp!SkTu$V$V 5AdA,BotBu,CketM<)OfOkieOmSeTa>UghUndU>Y$5Bb DeGLeNNwayR$:DDd!D}[FeIlLadLm#L#LtLu>MeMp!NdTisfyToshiU)Usa+VeY1A!AnA*Att E}HemeHoolI&)I[%sOrp]OutRapRe&RiptRub1AAr^As#AtC#dC*tCt]Cur.yEdEkGm|Le@~M(?Ni%N'Nt&)RiesRvi)Ss]Tt!TupV&_dowAftAllowA*EdEllEriffIeldIftI}IpIv O{OeOotOpOrtOuld O=RimpRugUff!Y0Bl(gCkDeE+GhtGnL|Lk~yLv Mil?Mp!N)NgR&/ Tua>XZe1A>Et^IIllInIrtUll0AbAmEepEnd I)IdeIghtImOgAyEakEelEmEpE*oI{IllIngO{Oma^O}OolOryO=Ra>gyReetRikeR#gRugg!Ud|UffUmb!Y!0Bje@Bm.BwayC)[ChDd&Ff G?G+,ItMm NNnyN'tP PplyP*meReRfa)R+Rpri'RroundR=ySpe@/a(1AllowAmpApArmE?EetIftImIngIt^Ord1MbolMptomRup/em:B!Ck!GIlL|LkNkPeR+tSk/eTtooXi3A^Am~NNGradeHoldOnP Set1BOng::Rd3Ar~ow9UUngU`:3BraRo9NeO\";\nconst checksum = \"0x3c8acc1e7b08d8e76f9fda015ef48dc8c710a73cb7e0f77b2c18a9b5a7adde60\";\nexport class LangEn extends WordlistOwl {\n constructor() { super(\"en\", words, checksum); }\n}\nexport const langEn = new LangEn();\n//# sourceMappingURL=lang-en.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","export const version = \"@ethersproject/wallet@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { langEn as en } from \"./lang-en.js\";\nexport const wordlists = Object.freeze({\n en\n});\n//# sourceMappingURL=wordlists-en.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _WordlistOwlA_accent;\nimport { WordlistOwl } from \"./wordlist-owl.js\";\nimport { decodeOwlA } from \"./decode-owla.js\";\nexport class WordlistOwlA extends WordlistOwl {\n constructor(locale, data, accent, checksum) {\n super(locale, data, checksum);\n _WordlistOwlA_accent.set(this, void 0);\n __classPrivateFieldSet(this, _WordlistOwlA_accent, accent, \"f\");\n }\n get _accent() { return __classPrivateFieldGet(this, _WordlistOwlA_accent, \"f\"); }\n _decodeWords() {\n return decodeOwlA(this._data, this._accent);\n }\n}\n_WordlistOwlA_accent = new WeakMap();\n//# sourceMappingURL=wordlist-owla.js.map","import { decodeBits } from \"./bit-reader.js\";\nimport { decodeOwl } from \"./decode-owl.js\";\nexport function decodeOwlA(data, accents) {\n let words = decodeOwl(data).join(\",\");\n // Inject the accents\n accents.split(/,/g).forEach((accent) => {\n const match = accent.match(/^([a-z]*)([0-9]+)([0-9])(.*)$/);\n if (!match) {\n throw new Error(\"internal error parsing accents\");\n }\n let posOffset = 0;\n const positions = decodeBits(parseInt(match[3]), match[4]);\n const charCode = parseInt(match[2]);\n const regex = new RegExp(`([${match[1]}])`, \"g\");\n words = words.replace(regex, (all, letter) => {\n const rem = --positions[posOffset];\n if (rem === 0) {\n letter = String.fromCharCode(letter.charCodeAt(0), charCode);\n posOffset++;\n }\n return letter;\n });\n });\n return words.split(\",\");\n}\n//# sourceMappingURL=decode-owla.js.map","const Base64 = \")!@#$%^&*(ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_\";\nexport function decodeBits(width, data) {\n const maxValue = (1 << width) - 1;\n const result = [];\n let accum = 0, bits = 0, flood = 0;\n for (let i = 0; i < data.length; i++) {\n // Accumulate 6 bits of data\n accum = ((accum << 6) | Base64.indexOf(data[i]));\n bits += 6;\n // While we have enough for a word...\n while (bits >= width) {\n // ...read the word\n const value = (accum >> (bits - width));\n accum &= (1 << (bits - width)) - 1;\n bits -= width;\n // A value of 0 indicates we exceeded maxValue, it\n // floods over into the next value\n if (value === 0) {\n flood += maxValue;\n }\n else {\n result.push(value + flood);\n flood = 0;\n }\n }\n }\n return result;\n}\n//# sourceMappingURL=bit-reader.js.map","import { arrayify, hexlify } from \"@ethersproject/bytes\";\nimport { pbkdf2, sha256 } from \"@ethersproject/crypto\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { toUtf8Bytes, UnicodeNormalizationForm } from \"@ethersproject/strings\";\nimport { langEn } from \"@ethersproject/wordlists\";\nimport { logger } from \"./logger.js\";\n// Returns a byte with the MSB bits set\nfunction getUpperMask(bits) {\n return ((1 << bits) - 1) << (8 - bits) & 0xff;\n}\n// Returns a byte with the LSB bits set\nfunction getLowerMask(bits) {\n return ((1 << bits) - 1) & 0xff;\n}\nfunction mnemonicToEntropy(mnemonic, wordlist = langEn) {\n logger.assertNormalize(\"NFKD\");\n if (wordlist == null) {\n wordlist = langEn;\n }\n const words = wordlist.split(mnemonic);\n if ((words.length % 3) !== 0 || words.length < 12 || words.length > 24) {\n logger.throwArgumentError(\"invalid mnemonic length\", \"mnemonic\", \"[ REDACTED ]\");\n }\n const entropy = arrayify(new Uint8Array(Math.ceil(11 * words.length / 8)));\n let offset = 0;\n for (let i = 0; i < words.length; i++) {\n let index = wordlist.getWordIndex(words[i].normalize(\"NFKD\"));\n if (index === -1) {\n logger.throwArgumentError(`invalid mnemonic word at index ${i}`, \"mnemonic\", \"[ REDACTED ]\");\n }\n for (let bit = 0; bit < 11; bit++) {\n if (index & (1 << (10 - bit))) {\n entropy[offset >> 3] |= (1 << (7 - (offset % 8)));\n }\n offset++;\n }\n }\n const entropyBits = 32 * words.length / 3;\n const checksumBits = words.length / 3;\n const checksumMask = getUpperMask(checksumBits);\n const checksum = arrayify(sha256(entropy.slice(0, entropyBits / 8)))[0] & checksumMask;\n if (checksum !== (entropy[entropy.length - 1] & checksumMask)) {\n logger.throwArgumentError(\"invalid mnemonic checksum\", \"mnemonic\", \"[ REDACTED ]\");\n }\n return hexlify(entropy.slice(0, entropyBits / 8));\n}\nfunction entropyToMnemonic(entropy, wordlist = langEn) {\n if ((entropy.length % 4) || entropy.length < 16 || entropy.length > 32) {\n logger.throwArgumentError(\"invalid entropy size\", \"entropy\", \"[ REDACTED ]\");\n }\n if (wordlist == null) {\n wordlist = langEn;\n }\n const indices = [0];\n let remainingBits = 11;\n for (let i = 0; i < entropy.length; i++) {\n // Consume the whole byte (with still more to go)\n if (remainingBits > 8) {\n indices[indices.length - 1] <<= 8;\n indices[indices.length - 1] |= entropy[i];\n remainingBits -= 8;\n // This byte will complete an 11-bit index\n }\n else {\n indices[indices.length - 1] <<= remainingBits;\n indices[indices.length - 1] |= entropy[i] >> (8 - remainingBits);\n // Start the next word\n indices.push(entropy[i] & getLowerMask(8 - remainingBits));\n remainingBits += 3;\n }\n }\n // Compute the checksum bits\n const checksumBits = entropy.length / 4;\n const checksum = parseInt(sha256(entropy).substring(2, 4), 16) & getUpperMask(checksumBits);\n // Shift the checksum into the word indices\n indices[indices.length - 1] <<= checksumBits;\n indices[indices.length - 1] |= (checksum >> (8 - checksumBits));\n return wordlist.join(indices.map((index) => wordlist.getWord(index)));\n}\nconst _guard = {};\nexport class Mnemonic {\n constructor(guard, entropy, phrase, password, wordlist) {\n if (password == null) {\n password = \"\";\n }\n if (wordlist == null) {\n wordlist = langEn;\n }\n logger.assertPrivate(guard, _guard, \"Mnemonic\");\n defineProperties(this, { phrase, password, wordlist, entropy });\n }\n computeSeed() {\n const salt = toUtf8Bytes(\"mnemonic\" + this.password, UnicodeNormalizationForm.NFKD);\n return pbkdf2(toUtf8Bytes(this.phrase, UnicodeNormalizationForm.NFKD), salt, 2048, 64, \"sha512\");\n }\n static fromPhrase(phrase, password, wordlist) {\n // Normalize the case and space; throws if invalid\n const entropy = mnemonicToEntropy(phrase, wordlist);\n phrase = entropyToMnemonic(logger.getBytes(entropy), wordlist);\n return new Mnemonic(_guard, entropy, phrase, password, wordlist);\n }\n static fromEntropy(_entropy, password, wordlist) {\n const entropy = logger.getBytes(_entropy, \"entropy\");\n const phrase = entropyToMnemonic(entropy, wordlist);\n return new Mnemonic(_guard, hexlify(entropy), phrase, password, wordlist);\n }\n static entropyToPhrase(_entropy, wordlist) {\n const entropy = logger.getBytes(_entropy, \"entropy\");\n return entropyToMnemonic(entropy, wordlist);\n }\n static phraseToEntropy(phrase, wordlist) {\n return mnemonicToEntropy(phrase, wordlist);\n }\n static isValidMnemonic(phrase, wordlist) {\n try {\n mnemonicToEntropy(phrase, wordlist);\n return true;\n }\n catch (error) { }\n return false;\n }\n}\n//# sourceMappingURL=mnemonic.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _BaseWallet_signingKey;\nimport { getAddress, resolveAddress } from \"@ethersproject/address\";\nimport { hashMessage, TypedDataEncoder } from \"@ethersproject/hash\";\nimport { defineProperties, resolveProperties } from \"@ethersproject/properties\";\nimport { AbstractSigner } from \"@ethersproject/providers\";\nimport { Transaction } from \"@ethersproject/transactions\";\nimport { computeAddress } from \"./address.js\";\nimport { logger } from \"./logger.js\";\nexport class BaseWallet extends AbstractSigner {\n constructor(privateKey, provider) {\n super(provider);\n _BaseWallet_signingKey.set(this, void 0);\n __classPrivateFieldSet(this, _BaseWallet_signingKey, privateKey, \"f\");\n const address = computeAddress(this.signingKey.publicKey);\n defineProperties(this, { address });\n }\n // Store these in getters to reduce visibility in console.log\n get signingKey() { return __classPrivateFieldGet(this, _BaseWallet_signingKey, \"f\"); }\n get privateKey() { return this.signingKey.privateKey; }\n async getAddress() { return this.address; }\n connect(provider) {\n return new BaseWallet(__classPrivateFieldGet(this, _BaseWallet_signingKey, \"f\"), provider);\n }\n async signTransaction(_tx) {\n // Replace any Addressable or ENS name with an address\n const tx = Object.assign({}, _tx, await resolveProperties({\n to: (_tx.to ? resolveAddress(_tx.to, this.provider) : undefined),\n from: (_tx.from ? resolveAddress(_tx.from, this.provider) : undefined)\n }));\n if (tx.from != null) {\n if (getAddress(tx.from) !== this.address) {\n logger.throwArgumentError(\"transaction from address mismatch\", \"tx.from\", _tx.from);\n }\n delete tx.from;\n }\n // Build the transaction\n const btx = Transaction.from(tx);\n btx.signature = this.signingKey.sign(btx.unsignedHash);\n return btx.serialized;\n }\n async signMessage(message) {\n return this.signingKey.sign(hashMessage(message)).serialized;\n }\n async signTypedData(domain, types, value) {\n // Populate any ENS names\n const populated = await TypedDataEncoder.resolveNames(domain, types, value, async (name) => {\n if (this.provider == null) {\n return logger.throwError(\"cannot resolve ENS names without a provider\", \"UNSUPPORTED_OPERATION\", {\n operation: \"resolveName\",\n info: { name }\n });\n }\n const address = await this.provider.resolveName(name);\n if (address == null) {\n return logger.throwError(\"unconfigured ENS name\", \"UNCONFIGURED_NAME\", {\n value: name\n });\n }\n return address;\n });\n return this.signingKey.sign(TypedDataEncoder.hash(populated.domain, types, populated.value)).serialized;\n }\n}\n_BaseWallet_signingKey = new WeakMap();\n//# sourceMappingURL=base-wallet.js.map","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar _a, _HDNodeWallet_fromSeed, _HDNodeWalletManager_root;\nimport { arrayify, concat, dataSlice, hexlify } from \"@ethersproject/bytes\";\nimport { computeHmac, randomBytes, ripemd160, sha256 } from \"@ethersproject/crypto\";\nimport { decodeBase58, encodeBase58, toBigInt, toHex } from \"@ethersproject/math\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { VoidSigner } from \"@ethersproject/providers\";\nimport { SigningKey } from \"@ethersproject/signing-key\";\nimport { langEn } from \"@ethersproject/wordlists/lib/lang-en.js\";\nimport { computeAddress } from \"./address.js\";\nimport { logger } from \"./logger.js\";\nimport { Mnemonic } from \"./mnemonic.js\";\nimport { BaseWallet } from \"./base-wallet.js\";\nexport const defaultPath = \"m/44'/60'/0'/0/0\";\n// \"Bitcoin seed\"\nconst MasterSecret = new Uint8Array([66, 105, 116, 99, 111, 105, 110, 32, 115, 101, 101, 100]);\nconst HardenedBit = 0x80000000;\nconst N = BigInt(\"0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141\");\nconst Nibbles = \"0123456789abcdef\";\nfunction zpad(value, length) {\n let result = \"\";\n while (value) {\n result = Nibbles[value % 16] + result;\n value = Math.trunc(value / 16);\n }\n while (result.length < length * 2) {\n result = \"0\" + result;\n }\n return \"0x\" + result;\n}\nfunction encodeBase58Check(_value) {\n const value = logger.getBytes(_value);\n const check = dataSlice(sha256(sha256(value)), 0, 4);\n const bytes = concat([value, check]);\n return encodeBase58(bytes);\n}\nconst _guard = {};\nfunction ser_I(index, chainCode, publicKey, privateKey) {\n const data = new Uint8Array(37);\n if (index & HardenedBit) {\n if (privateKey == null) {\n return logger.throwError(\"cannot derive child of neutered node\", \"UNSUPPORTED_OPERATION\", {\n operation: \"deriveChild\"\n });\n }\n // Data = 0x00 || ser_256(k_par)\n data.set(arrayify(privateKey), 1);\n }\n else {\n // Data = ser_p(point(k_par))\n data.set(arrayify(publicKey));\n }\n // Data += ser_32(i)\n for (let i = 24; i >= 0; i -= 8) {\n data[33 + (i >> 3)] = ((index >> (24 - i)) & 0xff);\n }\n const I = arrayify(computeHmac(\"sha512\", chainCode, data));\n return { IL: I.slice(0, 32), IR: I.slice(32) };\n}\nfunction derivePath(node, path) {\n const components = path.split(\"/\");\n if (components.length === 0 || (components[0] === \"m\" && node.depth !== 0)) {\n throw new Error(\"invalid path - \" + path);\n }\n if (components[0] === \"m\") {\n components.shift();\n }\n let result = node;\n for (let i = 0; i < components.length; i++) {\n const component = components[i];\n if (component.match(/^[0-9]+'$/)) {\n const index = parseInt(component.substring(0, component.length - 1));\n if (index >= HardenedBit) {\n throw new Error(\"invalid path index - \" + component);\n }\n result = result.deriveChild(HardenedBit + index);\n }\n else if (component.match(/^[0-9]+$/)) {\n const index = parseInt(component);\n if (index >= HardenedBit) {\n throw new Error(\"invalid path index - \" + component);\n }\n result = result.deriveChild(index);\n }\n else {\n throw new Error(\"invalid path component - \" + component);\n }\n }\n return result;\n}\nexport class HDNodeWallet extends BaseWallet {\n constructor(guard, signingKey, parentFingerprint, chainCode, path, index, depth, mnemonic, provider) {\n super(signingKey, provider);\n logger.assertPrivate(guard, _guard, \"HDNodeWallet\");\n defineProperties(this, { publicKey: signingKey.compressedPublicKey });\n const fingerprint = dataSlice(ripemd160(sha256(this.publicKey)), 0, 4);\n defineProperties(this, {\n parentFingerprint, fingerprint,\n chainCode, path, index, depth\n });\n defineProperties(this, { mnemonic });\n }\n connect(provider) {\n return new HDNodeWallet(_guard, this.signingKey, this.parentFingerprint, this.chainCode, this.path, this.index, this.depth, this.mnemonic, provider);\n }\n get extendedKey() {\n // We only support the mainnet values for now, but if anyone needs\n // testnet values, let me know. I believe current sentiment is that\n // we should always use mainnet, and use BIP-44 to derive the network\n // - Mainnet: public=0x0488B21E, private=0x0488ADE4\n // - Testnet: public=0x043587CF, private=0x04358394\n if (this.depth >= 256) {\n throw new Error(\"Depth too large!\");\n }\n return encodeBase58Check(concat([\n \"0x0488ADE4\", zpad(this.depth, 1), this.parentFingerprint,\n zpad(this.index, 4), this.chainCode,\n concat([\"0x00\", this.privateKey])\n ]));\n }\n hasPath() { return (this.path != null); }\n neuter() {\n return new HDNodeVoidWallet(_guard, this.address, this.publicKey, this.parentFingerprint, this.chainCode, this.path, this.index, this.depth, this.provider);\n }\n deriveChild(_index) {\n const index = logger.getNumber(_index, \"index\");\n if (index > 0xffffffff) {\n throw new Error(\"invalid index - \" + String(index));\n }\n // Base path\n let path = this.path;\n if (path) {\n path += \"/\" + (index & ~HardenedBit);\n if (index & HardenedBit) {\n path += \"'\";\n }\n }\n const { IR, IL } = ser_I(index, this.chainCode, this.publicKey, this.privateKey);\n const ki = new SigningKey(toHex((toBigInt(IL) + BigInt(this.privateKey)) % N, 32));\n return new HDNodeWallet(_guard, ki, this.fingerprint, hexlify(IR), path, index, this.depth + 1, this.mnemonic, this.provider);\n }\n derivePath(path) {\n return derivePath(this, path);\n }\n static fromSeed(seed) {\n return __classPrivateFieldGet(HDNodeWallet, _a, \"m\", _HDNodeWallet_fromSeed).call(HDNodeWallet, seed, null);\n }\n static fromPhrase(phrase, password = \"\", path = defaultPath, wordlist = langEn) {\n if (!path) {\n path = defaultPath;\n }\n const mnemonic = Mnemonic.fromPhrase(phrase, password, wordlist);\n return __classPrivateFieldGet(HDNodeWallet, _a, \"m\", _HDNodeWallet_fromSeed).call(HDNodeWallet, mnemonic.computeSeed(), mnemonic).derivePath(path);\n }\n static fromMnemonic(mnemonic, path = defaultPath) {\n if (!path) {\n path = defaultPath;\n }\n return __classPrivateFieldGet(HDNodeWallet, _a, \"m\", _HDNodeWallet_fromSeed).call(HDNodeWallet, mnemonic.computeSeed(), mnemonic).derivePath(path);\n }\n static fromExtendedKey(extendedKey) {\n const bytes = arrayify(decodeBase58(extendedKey)); // @TODO: redact\n if (bytes.length !== 82 || encodeBase58Check(bytes.slice(0, 78)) !== extendedKey) {\n logger.throwArgumentError(\"invalid extended key\", \"extendedKey\", \"[ REDACTED ]\");\n }\n const depth = bytes[4];\n const parentFingerprint = hexlify(bytes.slice(5, 9));\n const index = parseInt(hexlify(bytes.slice(9, 13)).substring(2), 16);\n const chainCode = hexlify(bytes.slice(13, 45));\n const key = bytes.slice(45, 78);\n switch (hexlify(bytes.slice(0, 4))) {\n // Public Key\n case \"0x0488b21e\":\n case \"0x043587cf\": {\n const publicKey = hexlify(key);\n return new HDNodeVoidWallet(_guard, computeAddress(publicKey), publicKey, parentFingerprint, chainCode, null, index, depth, null);\n }\n // Private Key\n case \"0x0488ade4\":\n case \"0x04358394 \":\n if (key[0] !== 0) {\n break;\n }\n return new HDNodeWallet(_guard, new SigningKey(key.slice(1)), parentFingerprint, chainCode, null, index, depth, null, null);\n }\n return logger.throwArgumentError(\"invalid extended key prefix\", \"extendedKey\", \"[ REDACTED ]\");\n }\n static createRandom(password = \"\", path = defaultPath, wordlist = langEn) {\n if (!path) {\n path = defaultPath;\n }\n const mnemonic = Mnemonic.fromEntropy(randomBytes(16), password, wordlist);\n return __classPrivateFieldGet(HDNodeWallet, _a, \"m\", _HDNodeWallet_fromSeed).call(HDNodeWallet, mnemonic.computeSeed(), mnemonic).derivePath(path);\n }\n}\n_a = HDNodeWallet, _HDNodeWallet_fromSeed = function _HDNodeWallet_fromSeed(_seed, mnemonic) {\n const seed = logger.getBytes(_seed, \"seed\");\n if (seed.length < 16 || seed.length > 64) {\n throw new Error(\"invalid seed\");\n }\n const I = arrayify(computeHmac(\"sha512\", MasterSecret, seed));\n const signingKey = new SigningKey(hexlify(I.slice(0, 32)));\n return new HDNodeWallet(_guard, signingKey, \"0x00000000\", hexlify(I.slice(32)), \"m\", 0, 0, mnemonic, null);\n};\nexport class HDNodeVoidWallet extends VoidSigner {\n constructor(guard, address, publicKey, parentFingerprint, chainCode, path, index, depth, provider) {\n super(address, provider);\n logger.assertPrivate(guard, _guard, \"HDNodeVoidWallet\");\n defineProperties(this, { publicKey });\n const fingerprint = dataSlice(ripemd160(sha256(publicKey)), 0, 4);\n defineProperties(this, {\n publicKey, fingerprint, parentFingerprint, chainCode, path, index, depth\n });\n }\n connect(provider) {\n return new HDNodeVoidWallet(_guard, this.address, this.publicKey, this.parentFingerprint, this.chainCode, this.path, this.index, this.depth, provider);\n }\n get extendedKey() {\n // We only support the mainnet values for now, but if anyone needs\n // testnet values, let me know. I believe current sentiment is that\n // we should always use mainnet, and use BIP-44 to derive the network\n // - Mainnet: public=0x0488B21E, private=0x0488ADE4\n // - Testnet: public=0x043587CF, private=0x04358394\n if (this.depth >= 256) {\n throw new Error(\"Depth too large!\");\n }\n return encodeBase58Check(concat([\n \"0x0488B21E\",\n zpad(this.depth, 1),\n this.parentFingerprint,\n zpad(this.index, 4),\n this.chainCode,\n this.publicKey,\n ]));\n }\n hasPath() { return (this.path != null); }\n deriveChild(_index) {\n const index = logger.getNumber(_index, \"index\");\n if (index > 0xffffffff) {\n throw new Error(\"invalid index - \" + String(index));\n }\n // Base path\n let path = this.path;\n if (path) {\n path += \"/\" + (index & ~HardenedBit);\n if (index & HardenedBit) {\n path += \"'\";\n }\n }\n const { IR, IL } = ser_I(index, this.chainCode, this.publicKey, null);\n const Ki = SigningKey._addPoints(IL, this.publicKey, true);\n const address = computeAddress(Ki);\n return new HDNodeVoidWallet(_guard, address, Ki, this.fingerprint, hexlify(IR), path, index, this.depth + 1, this.provider);\n }\n derivePath(path) {\n return derivePath(this, path);\n }\n}\nexport class HDNodeWalletManager {\n constructor(phrase, password = \"\", path = \"m/44'/60'/0'/0\", locale = langEn) {\n _HDNodeWalletManager_root.set(this, void 0);\n __classPrivateFieldSet(this, _HDNodeWalletManager_root, HDNodeWallet.fromPhrase(phrase, password, path, locale), \"f\");\n }\n getSigner(index = 0) {\n return __classPrivateFieldGet(this, _HDNodeWalletManager_root, \"f\").deriveChild(index);\n }\n}\n_HDNodeWalletManager_root = new WeakMap();\nexport function getAccountPath(_index) {\n const index = logger.getNumber(_index, \"index\");\n if (index < 0 || index >= HardenedBit) {\n logger.throwArgumentError(\"invalid account index\", \"index\", index);\n }\n return `m/44'/60'/${index}'/0/0`;\n}\n//# sourceMappingURL=hdwallet.js.map","/*! MIT License. Copyright 2015-2022 Richard Moore . See LICENSE.txt. */\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _AES_key, _AES_Kd, _AES_Ke;\n// Number of rounds by keysize\nconst numberOfRounds = { 16: 10, 24: 12, 32: 14 };\n// Round constant words\nconst rcon = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91];\n// S-box and Inverse S-box (S is for Substitution)\nconst S = [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16];\nconst Si = [0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d];\n// Transformations for encryption\nconst T1 = [0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a];\nconst T2 = [0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616];\nconst T3 = [0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16];\nconst T4 = [0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c];\n// Transformations for decryption\nconst T5 = [0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742];\nconst T6 = [0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857];\nconst T7 = [0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8];\nconst T8 = [0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0];\n// Transformations for decryption key expansion\nconst U1 = [0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3];\nconst U2 = [0x00000000, 0x0b0e090d, 0x161c121a, 0x1d121b17, 0x2c382434, 0x27362d39, 0x3a24362e, 0x312a3f23, 0x58704868, 0x537e4165, 0x4e6c5a72, 0x4562537f, 0x74486c5c, 0x7f466551, 0x62547e46, 0x695a774b, 0xb0e090d0, 0xbbee99dd, 0xa6fc82ca, 0xadf28bc7, 0x9cd8b4e4, 0x97d6bde9, 0x8ac4a6fe, 0x81caaff3, 0xe890d8b8, 0xe39ed1b5, 0xfe8ccaa2, 0xf582c3af, 0xc4a8fc8c, 0xcfa6f581, 0xd2b4ee96, 0xd9bae79b, 0x7bdb3bbb, 0x70d532b6, 0x6dc729a1, 0x66c920ac, 0x57e31f8f, 0x5ced1682, 0x41ff0d95, 0x4af10498, 0x23ab73d3, 0x28a57ade, 0x35b761c9, 0x3eb968c4, 0x0f9357e7, 0x049d5eea, 0x198f45fd, 0x12814cf0, 0xcb3bab6b, 0xc035a266, 0xdd27b971, 0xd629b07c, 0xe7038f5f, 0xec0d8652, 0xf11f9d45, 0xfa119448, 0x934be303, 0x9845ea0e, 0x8557f119, 0x8e59f814, 0xbf73c737, 0xb47dce3a, 0xa96fd52d, 0xa261dc20, 0xf6ad766d, 0xfda37f60, 0xe0b16477, 0xebbf6d7a, 0xda955259, 0xd19b5b54, 0xcc894043, 0xc787494e, 0xaedd3e05, 0xa5d33708, 0xb8c12c1f, 0xb3cf2512, 0x82e51a31, 0x89eb133c, 0x94f9082b, 0x9ff70126, 0x464de6bd, 0x4d43efb0, 0x5051f4a7, 0x5b5ffdaa, 0x6a75c289, 0x617bcb84, 0x7c69d093, 0x7767d99e, 0x1e3daed5, 0x1533a7d8, 0x0821bccf, 0x032fb5c2, 0x32058ae1, 0x390b83ec, 0x241998fb, 0x2f1791f6, 0x8d764dd6, 0x867844db, 0x9b6a5fcc, 0x906456c1, 0xa14e69e2, 0xaa4060ef, 0xb7527bf8, 0xbc5c72f5, 0xd50605be, 0xde080cb3, 0xc31a17a4, 0xc8141ea9, 0xf93e218a, 0xf2302887, 0xef223390, 0xe42c3a9d, 0x3d96dd06, 0x3698d40b, 0x2b8acf1c, 0x2084c611, 0x11aef932, 0x1aa0f03f, 0x07b2eb28, 0x0cbce225, 0x65e6956e, 0x6ee89c63, 0x73fa8774, 0x78f48e79, 0x49deb15a, 0x42d0b857, 0x5fc2a340, 0x54ccaa4d, 0xf741ecda, 0xfc4fe5d7, 0xe15dfec0, 0xea53f7cd, 0xdb79c8ee, 0xd077c1e3, 0xcd65daf4, 0xc66bd3f9, 0xaf31a4b2, 0xa43fadbf, 0xb92db6a8, 0xb223bfa5, 0x83098086, 0x8807898b, 0x9515929c, 0x9e1b9b91, 0x47a17c0a, 0x4caf7507, 0x51bd6e10, 0x5ab3671d, 0x6b99583e, 0x60975133, 0x7d854a24, 0x768b4329, 0x1fd13462, 0x14df3d6f, 0x09cd2678, 0x02c32f75, 0x33e91056, 0x38e7195b, 0x25f5024c, 0x2efb0b41, 0x8c9ad761, 0x8794de6c, 0x9a86c57b, 0x9188cc76, 0xa0a2f355, 0xabacfa58, 0xb6bee14f, 0xbdb0e842, 0xd4ea9f09, 0xdfe49604, 0xc2f68d13, 0xc9f8841e, 0xf8d2bb3d, 0xf3dcb230, 0xeecea927, 0xe5c0a02a, 0x3c7a47b1, 0x37744ebc, 0x2a6655ab, 0x21685ca6, 0x10426385, 0x1b4c6a88, 0x065e719f, 0x0d507892, 0x640a0fd9, 0x6f0406d4, 0x72161dc3, 0x791814ce, 0x48322bed, 0x433c22e0, 0x5e2e39f7, 0x552030fa, 0x01ec9ab7, 0x0ae293ba, 0x17f088ad, 0x1cfe81a0, 0x2dd4be83, 0x26dab78e, 0x3bc8ac99, 0x30c6a594, 0x599cd2df, 0x5292dbd2, 0x4f80c0c5, 0x448ec9c8, 0x75a4f6eb, 0x7eaaffe6, 0x63b8e4f1, 0x68b6edfc, 0xb10c0a67, 0xba02036a, 0xa710187d, 0xac1e1170, 0x9d342e53, 0x963a275e, 0x8b283c49, 0x80263544, 0xe97c420f, 0xe2724b02, 0xff605015, 0xf46e5918, 0xc544663b, 0xce4a6f36, 0xd3587421, 0xd8567d2c, 0x7a37a10c, 0x7139a801, 0x6c2bb316, 0x6725ba1b, 0x560f8538, 0x5d018c35, 0x40139722, 0x4b1d9e2f, 0x2247e964, 0x2949e069, 0x345bfb7e, 0x3f55f273, 0x0e7fcd50, 0x0571c45d, 0x1863df4a, 0x136dd647, 0xcad731dc, 0xc1d938d1, 0xdccb23c6, 0xd7c52acb, 0xe6ef15e8, 0xede11ce5, 0xf0f307f2, 0xfbfd0eff, 0x92a779b4, 0x99a970b9, 0x84bb6bae, 0x8fb562a3, 0xbe9f5d80, 0xb591548d, 0xa8834f9a, 0xa38d4697];\nconst U3 = [0x00000000, 0x0d0b0e09, 0x1a161c12, 0x171d121b, 0x342c3824, 0x3927362d, 0x2e3a2436, 0x23312a3f, 0x68587048, 0x65537e41, 0x724e6c5a, 0x7f456253, 0x5c74486c, 0x517f4665, 0x4662547e, 0x4b695a77, 0xd0b0e090, 0xddbbee99, 0xcaa6fc82, 0xc7adf28b, 0xe49cd8b4, 0xe997d6bd, 0xfe8ac4a6, 0xf381caaf, 0xb8e890d8, 0xb5e39ed1, 0xa2fe8cca, 0xaff582c3, 0x8cc4a8fc, 0x81cfa6f5, 0x96d2b4ee, 0x9bd9bae7, 0xbb7bdb3b, 0xb670d532, 0xa16dc729, 0xac66c920, 0x8f57e31f, 0x825ced16, 0x9541ff0d, 0x984af104, 0xd323ab73, 0xde28a57a, 0xc935b761, 0xc43eb968, 0xe70f9357, 0xea049d5e, 0xfd198f45, 0xf012814c, 0x6bcb3bab, 0x66c035a2, 0x71dd27b9, 0x7cd629b0, 0x5fe7038f, 0x52ec0d86, 0x45f11f9d, 0x48fa1194, 0x03934be3, 0x0e9845ea, 0x198557f1, 0x148e59f8, 0x37bf73c7, 0x3ab47dce, 0x2da96fd5, 0x20a261dc, 0x6df6ad76, 0x60fda37f, 0x77e0b164, 0x7aebbf6d, 0x59da9552, 0x54d19b5b, 0x43cc8940, 0x4ec78749, 0x05aedd3e, 0x08a5d337, 0x1fb8c12c, 0x12b3cf25, 0x3182e51a, 0x3c89eb13, 0x2b94f908, 0x269ff701, 0xbd464de6, 0xb04d43ef, 0xa75051f4, 0xaa5b5ffd, 0x896a75c2, 0x84617bcb, 0x937c69d0, 0x9e7767d9, 0xd51e3dae, 0xd81533a7, 0xcf0821bc, 0xc2032fb5, 0xe132058a, 0xec390b83, 0xfb241998, 0xf62f1791, 0xd68d764d, 0xdb867844, 0xcc9b6a5f, 0xc1906456, 0xe2a14e69, 0xefaa4060, 0xf8b7527b, 0xf5bc5c72, 0xbed50605, 0xb3de080c, 0xa4c31a17, 0xa9c8141e, 0x8af93e21, 0x87f23028, 0x90ef2233, 0x9de42c3a, 0x063d96dd, 0x0b3698d4, 0x1c2b8acf, 0x112084c6, 0x3211aef9, 0x3f1aa0f0, 0x2807b2eb, 0x250cbce2, 0x6e65e695, 0x636ee89c, 0x7473fa87, 0x7978f48e, 0x5a49deb1, 0x5742d0b8, 0x405fc2a3, 0x4d54ccaa, 0xdaf741ec, 0xd7fc4fe5, 0xc0e15dfe, 0xcdea53f7, 0xeedb79c8, 0xe3d077c1, 0xf4cd65da, 0xf9c66bd3, 0xb2af31a4, 0xbfa43fad, 0xa8b92db6, 0xa5b223bf, 0x86830980, 0x8b880789, 0x9c951592, 0x919e1b9b, 0x0a47a17c, 0x074caf75, 0x1051bd6e, 0x1d5ab367, 0x3e6b9958, 0x33609751, 0x247d854a, 0x29768b43, 0x621fd134, 0x6f14df3d, 0x7809cd26, 0x7502c32f, 0x5633e910, 0x5b38e719, 0x4c25f502, 0x412efb0b, 0x618c9ad7, 0x6c8794de, 0x7b9a86c5, 0x769188cc, 0x55a0a2f3, 0x58abacfa, 0x4fb6bee1, 0x42bdb0e8, 0x09d4ea9f, 0x04dfe496, 0x13c2f68d, 0x1ec9f884, 0x3df8d2bb, 0x30f3dcb2, 0x27eecea9, 0x2ae5c0a0, 0xb13c7a47, 0xbc37744e, 0xab2a6655, 0xa621685c, 0x85104263, 0x881b4c6a, 0x9f065e71, 0x920d5078, 0xd9640a0f, 0xd46f0406, 0xc372161d, 0xce791814, 0xed48322b, 0xe0433c22, 0xf75e2e39, 0xfa552030, 0xb701ec9a, 0xba0ae293, 0xad17f088, 0xa01cfe81, 0x832dd4be, 0x8e26dab7, 0x993bc8ac, 0x9430c6a5, 0xdf599cd2, 0xd25292db, 0xc54f80c0, 0xc8448ec9, 0xeb75a4f6, 0xe67eaaff, 0xf163b8e4, 0xfc68b6ed, 0x67b10c0a, 0x6aba0203, 0x7da71018, 0x70ac1e11, 0x539d342e, 0x5e963a27, 0x498b283c, 0x44802635, 0x0fe97c42, 0x02e2724b, 0x15ff6050, 0x18f46e59, 0x3bc54466, 0x36ce4a6f, 0x21d35874, 0x2cd8567d, 0x0c7a37a1, 0x017139a8, 0x166c2bb3, 0x1b6725ba, 0x38560f85, 0x355d018c, 0x22401397, 0x2f4b1d9e, 0x642247e9, 0x692949e0, 0x7e345bfb, 0x733f55f2, 0x500e7fcd, 0x5d0571c4, 0x4a1863df, 0x47136dd6, 0xdccad731, 0xd1c1d938, 0xc6dccb23, 0xcbd7c52a, 0xe8e6ef15, 0xe5ede11c, 0xf2f0f307, 0xfffbfd0e, 0xb492a779, 0xb999a970, 0xae84bb6b, 0xa38fb562, 0x80be9f5d, 0x8db59154, 0x9aa8834f, 0x97a38d46];\nconst U4 = [0x00000000, 0x090d0b0e, 0x121a161c, 0x1b171d12, 0x24342c38, 0x2d392736, 0x362e3a24, 0x3f23312a, 0x48685870, 0x4165537e, 0x5a724e6c, 0x537f4562, 0x6c5c7448, 0x65517f46, 0x7e466254, 0x774b695a, 0x90d0b0e0, 0x99ddbbee, 0x82caa6fc, 0x8bc7adf2, 0xb4e49cd8, 0xbde997d6, 0xa6fe8ac4, 0xaff381ca, 0xd8b8e890, 0xd1b5e39e, 0xcaa2fe8c, 0xc3aff582, 0xfc8cc4a8, 0xf581cfa6, 0xee96d2b4, 0xe79bd9ba, 0x3bbb7bdb, 0x32b670d5, 0x29a16dc7, 0x20ac66c9, 0x1f8f57e3, 0x16825ced, 0x0d9541ff, 0x04984af1, 0x73d323ab, 0x7ade28a5, 0x61c935b7, 0x68c43eb9, 0x57e70f93, 0x5eea049d, 0x45fd198f, 0x4cf01281, 0xab6bcb3b, 0xa266c035, 0xb971dd27, 0xb07cd629, 0x8f5fe703, 0x8652ec0d, 0x9d45f11f, 0x9448fa11, 0xe303934b, 0xea0e9845, 0xf1198557, 0xf8148e59, 0xc737bf73, 0xce3ab47d, 0xd52da96f, 0xdc20a261, 0x766df6ad, 0x7f60fda3, 0x6477e0b1, 0x6d7aebbf, 0x5259da95, 0x5b54d19b, 0x4043cc89, 0x494ec787, 0x3e05aedd, 0x3708a5d3, 0x2c1fb8c1, 0x2512b3cf, 0x1a3182e5, 0x133c89eb, 0x082b94f9, 0x01269ff7, 0xe6bd464d, 0xefb04d43, 0xf4a75051, 0xfdaa5b5f, 0xc2896a75, 0xcb84617b, 0xd0937c69, 0xd99e7767, 0xaed51e3d, 0xa7d81533, 0xbccf0821, 0xb5c2032f, 0x8ae13205, 0x83ec390b, 0x98fb2419, 0x91f62f17, 0x4dd68d76, 0x44db8678, 0x5fcc9b6a, 0x56c19064, 0x69e2a14e, 0x60efaa40, 0x7bf8b752, 0x72f5bc5c, 0x05bed506, 0x0cb3de08, 0x17a4c31a, 0x1ea9c814, 0x218af93e, 0x2887f230, 0x3390ef22, 0x3a9de42c, 0xdd063d96, 0xd40b3698, 0xcf1c2b8a, 0xc6112084, 0xf93211ae, 0xf03f1aa0, 0xeb2807b2, 0xe2250cbc, 0x956e65e6, 0x9c636ee8, 0x877473fa, 0x8e7978f4, 0xb15a49de, 0xb85742d0, 0xa3405fc2, 0xaa4d54cc, 0xecdaf741, 0xe5d7fc4f, 0xfec0e15d, 0xf7cdea53, 0xc8eedb79, 0xc1e3d077, 0xdaf4cd65, 0xd3f9c66b, 0xa4b2af31, 0xadbfa43f, 0xb6a8b92d, 0xbfa5b223, 0x80868309, 0x898b8807, 0x929c9515, 0x9b919e1b, 0x7c0a47a1, 0x75074caf, 0x6e1051bd, 0x671d5ab3, 0x583e6b99, 0x51336097, 0x4a247d85, 0x4329768b, 0x34621fd1, 0x3d6f14df, 0x267809cd, 0x2f7502c3, 0x105633e9, 0x195b38e7, 0x024c25f5, 0x0b412efb, 0xd7618c9a, 0xde6c8794, 0xc57b9a86, 0xcc769188, 0xf355a0a2, 0xfa58abac, 0xe14fb6be, 0xe842bdb0, 0x9f09d4ea, 0x9604dfe4, 0x8d13c2f6, 0x841ec9f8, 0xbb3df8d2, 0xb230f3dc, 0xa927eece, 0xa02ae5c0, 0x47b13c7a, 0x4ebc3774, 0x55ab2a66, 0x5ca62168, 0x63851042, 0x6a881b4c, 0x719f065e, 0x78920d50, 0x0fd9640a, 0x06d46f04, 0x1dc37216, 0x14ce7918, 0x2bed4832, 0x22e0433c, 0x39f75e2e, 0x30fa5520, 0x9ab701ec, 0x93ba0ae2, 0x88ad17f0, 0x81a01cfe, 0xbe832dd4, 0xb78e26da, 0xac993bc8, 0xa59430c6, 0xd2df599c, 0xdbd25292, 0xc0c54f80, 0xc9c8448e, 0xf6eb75a4, 0xffe67eaa, 0xe4f163b8, 0xedfc68b6, 0x0a67b10c, 0x036aba02, 0x187da710, 0x1170ac1e, 0x2e539d34, 0x275e963a, 0x3c498b28, 0x35448026, 0x420fe97c, 0x4b02e272, 0x5015ff60, 0x5918f46e, 0x663bc544, 0x6f36ce4a, 0x7421d358, 0x7d2cd856, 0xa10c7a37, 0xa8017139, 0xb3166c2b, 0xba1b6725, 0x8538560f, 0x8c355d01, 0x97224013, 0x9e2f4b1d, 0xe9642247, 0xe0692949, 0xfb7e345b, 0xf2733f55, 0xcd500e7f, 0xc45d0571, 0xdf4a1863, 0xd647136d, 0x31dccad7, 0x38d1c1d9, 0x23c6dccb, 0x2acbd7c5, 0x15e8e6ef, 0x1ce5ede1, 0x07f2f0f3, 0x0efffbfd, 0x79b492a7, 0x70b999a9, 0x6bae84bb, 0x62a38fb5, 0x5d80be9f, 0x548db591, 0x4f9aa883, 0x4697a38d];\nfunction convertToInt32(bytes) {\n const result = [];\n for (let i = 0; i < bytes.length; i += 4) {\n result.push((bytes[i] << 24) | (bytes[i + 1] << 16) | (bytes[i + 2] << 8) | bytes[i + 3]);\n }\n return result;\n}\nexport class AES {\n constructor(key) {\n _AES_key.set(this, void 0);\n _AES_Kd.set(this, void 0);\n _AES_Ke.set(this, void 0);\n if (!(this instanceof AES)) {\n throw Error('AES must be instanitated with `new`');\n }\n __classPrivateFieldSet(this, _AES_key, new Uint8Array(key), \"f\");\n const rounds = numberOfRounds[this.key.length];\n if (rounds == null) {\n throw new TypeError('invalid key size (must be 16, 24 or 32 bytes)');\n }\n // encryption round keys\n __classPrivateFieldSet(this, _AES_Ke, [], \"f\");\n // decryption round keys\n __classPrivateFieldSet(this, _AES_Kd, [], \"f\");\n for (let i = 0; i <= rounds; i++) {\n __classPrivateFieldGet(this, _AES_Ke, \"f\").push([0, 0, 0, 0]);\n __classPrivateFieldGet(this, _AES_Kd, \"f\").push([0, 0, 0, 0]);\n }\n const roundKeyCount = (rounds + 1) * 4;\n const KC = this.key.length / 4;\n // convert the key into ints\n const tk = convertToInt32(this.key);\n // copy values into round key arrays\n let index;\n for (let i = 0; i < KC; i++) {\n index = i >> 2;\n __classPrivateFieldGet(this, _AES_Ke, \"f\")[index][i % 4] = tk[i];\n __classPrivateFieldGet(this, _AES_Kd, \"f\")[rounds - index][i % 4] = tk[i];\n }\n // key expansion (fips-197 section 5.2)\n let rconpointer = 0;\n let t = KC, tt;\n while (t < roundKeyCount) {\n tt = tk[KC - 1];\n tk[0] ^= ((S[(tt >> 16) & 0xFF] << 24) ^\n (S[(tt >> 8) & 0xFF] << 16) ^\n (S[tt & 0xFF] << 8) ^\n S[(tt >> 24) & 0xFF] ^\n (rcon[rconpointer] << 24));\n rconpointer += 1;\n // key expansion (for non-256 bit)\n if (KC != 8) {\n for (let i = 1; i < KC; i++) {\n tk[i] ^= tk[i - 1];\n }\n // key expansion for 256-bit keys is \"slightly different\" (fips-197)\n }\n else {\n for (let i = 1; i < (KC / 2); i++) {\n tk[i] ^= tk[i - 1];\n }\n tt = tk[(KC / 2) - 1];\n tk[KC / 2] ^= (S[tt & 0xFF] ^\n (S[(tt >> 8) & 0xFF] << 8) ^\n (S[(tt >> 16) & 0xFF] << 16) ^\n (S[(tt >> 24) & 0xFF] << 24));\n for (let i = (KC / 2) + 1; i < KC; i++) {\n tk[i] ^= tk[i - 1];\n }\n }\n // copy values into round key arrays\n let i = 0, r, c;\n while (i < KC && t < roundKeyCount) {\n r = t >> 2;\n c = t % 4;\n __classPrivateFieldGet(this, _AES_Ke, \"f\")[r][c] = tk[i];\n __classPrivateFieldGet(this, _AES_Kd, \"f\")[rounds - r][c] = tk[i++];\n t++;\n }\n }\n // inverse-cipher-ify the decryption round key (fips-197 section 5.3)\n for (let r = 1; r < rounds; r++) {\n for (let c = 0; c < 4; c++) {\n tt = __classPrivateFieldGet(this, _AES_Kd, \"f\")[r][c];\n __classPrivateFieldGet(this, _AES_Kd, \"f\")[r][c] = (U1[(tt >> 24) & 0xFF] ^\n U2[(tt >> 16) & 0xFF] ^\n U3[(tt >> 8) & 0xFF] ^\n U4[tt & 0xFF]);\n }\n }\n }\n get key() { return __classPrivateFieldGet(this, _AES_key, \"f\").slice(); }\n encrypt(plaintext) {\n if (plaintext.length != 16) {\n throw new TypeError('invalid plaintext size (must be 16 bytes)');\n }\n const rounds = __classPrivateFieldGet(this, _AES_Ke, \"f\").length - 1;\n const a = [0, 0, 0, 0];\n // convert plaintext to (ints ^ key)\n let t = convertToInt32(plaintext);\n for (let i = 0; i < 4; i++) {\n t[i] ^= __classPrivateFieldGet(this, _AES_Ke, \"f\")[0][i];\n }\n // apply round transforms\n for (let r = 1; r < rounds; r++) {\n for (let i = 0; i < 4; i++) {\n a[i] = (T1[(t[i] >> 24) & 0xff] ^\n T2[(t[(i + 1) % 4] >> 16) & 0xff] ^\n T3[(t[(i + 2) % 4] >> 8) & 0xff] ^\n T4[t[(i + 3) % 4] & 0xff] ^\n __classPrivateFieldGet(this, _AES_Ke, \"f\")[r][i]);\n }\n t = a.slice();\n }\n // the last round is special\n const result = new Uint8Array(16);\n let tt = 0;\n for (let i = 0; i < 4; i++) {\n tt = __classPrivateFieldGet(this, _AES_Ke, \"f\")[rounds][i];\n result[4 * i] = (S[(t[i] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\n result[4 * i + 1] = (S[(t[(i + 1) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\n result[4 * i + 2] = (S[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff;\n result[4 * i + 3] = (S[t[(i + 3) % 4] & 0xff] ^ tt) & 0xff;\n }\n return result;\n }\n decrypt(ciphertext) {\n if (ciphertext.length != 16) {\n throw new TypeError('invalid ciphertext size (must be 16 bytes)');\n }\n const rounds = __classPrivateFieldGet(this, _AES_Kd, \"f\").length - 1;\n const a = [0, 0, 0, 0];\n // convert plaintext to (ints ^ key)\n let t = convertToInt32(ciphertext);\n for (let i = 0; i < 4; i++) {\n t[i] ^= __classPrivateFieldGet(this, _AES_Kd, \"f\")[0][i];\n }\n // apply round transforms\n for (let r = 1; r < rounds; r++) {\n for (let i = 0; i < 4; i++) {\n a[i] = (T5[(t[i] >> 24) & 0xff] ^\n T6[(t[(i + 3) % 4] >> 16) & 0xff] ^\n T7[(t[(i + 2) % 4] >> 8) & 0xff] ^\n T8[t[(i + 1) % 4] & 0xff] ^\n __classPrivateFieldGet(this, _AES_Kd, \"f\")[r][i]);\n }\n t = a.slice();\n }\n // the last round is special\n const result = new Uint8Array(16);\n let tt = 0;\n for (let i = 0; i < 4; i++) {\n tt = __classPrivateFieldGet(this, _AES_Kd, \"f\")[rounds][i];\n result[4 * i] = (Si[(t[i] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\n result[4 * i + 1] = (Si[(t[(i + 3) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\n result[4 * i + 2] = (Si[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff;\n result[4 * i + 3] = (Si[t[(i + 1) % 4] & 0xff] ^ tt) & 0xff;\n }\n return result;\n }\n}\n_AES_key = new WeakMap(), _AES_Kd = new WeakMap(), _AES_Ke = new WeakMap();\n//# sourceMappingURL=aes.js.map","import { AES } from \"./aes.js\";\nexport class ModeOfOperation {\n constructor(name, key, cls) {\n if (cls && !(this instanceof cls)) {\n throw new Error(`${name} must be instantiated with \"new\"`);\n }\n Object.defineProperties(this, {\n aes: { enumerable: true, value: new AES(key) },\n name: { enumerable: true, value: name }\n });\n }\n}\n//# sourceMappingURL=mode.js.map","// Cipher Block Chaining\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _CBC_iv, _CBC_lastBlock;\nimport { ModeOfOperation } from \"./mode.js\";\nexport class CBC extends ModeOfOperation {\n constructor(key, iv) {\n super(\"ECC\", key, CBC);\n _CBC_iv.set(this, void 0);\n _CBC_lastBlock.set(this, void 0);\n if (iv) {\n if (iv.length % 16) {\n throw new TypeError(\"invalid iv size (must be 16 bytes)\");\n }\n __classPrivateFieldSet(this, _CBC_iv, new Uint8Array(iv), \"f\");\n }\n else {\n __classPrivateFieldSet(this, _CBC_iv, new Uint8Array(16), \"f\");\n }\n __classPrivateFieldSet(this, _CBC_lastBlock, this.iv, \"f\");\n }\n get iv() { return new Uint8Array(__classPrivateFieldGet(this, _CBC_iv, \"f\")); }\n encrypt(plaintext) {\n if (plaintext.length % 16) {\n throw new TypeError(\"invalid plaintext size (must be multiple of 16 bytes)\");\n }\n const ciphertext = new Uint8Array(plaintext.length);\n for (let i = 0; i < plaintext.length; i += 16) {\n for (let j = 0; j < 16; j++) {\n __classPrivateFieldGet(this, _CBC_lastBlock, \"f\")[j] ^= plaintext[i + j];\n }\n __classPrivateFieldSet(this, _CBC_lastBlock, this.aes.encrypt(__classPrivateFieldGet(this, _CBC_lastBlock, \"f\")), \"f\");\n ciphertext.set(__classPrivateFieldGet(this, _CBC_lastBlock, \"f\"), i);\n }\n return ciphertext;\n }\n decrypt(ciphertext) {\n if (ciphertext.length % 16) {\n throw new TypeError(\"invalid ciphertext size (must be multiple of 16 bytes)\");\n }\n const plaintext = new Uint8Array(ciphertext.length);\n for (let i = 0; i < ciphertext.length; i += 16) {\n const block = this.aes.decrypt(ciphertext.subarray(i, i + 16));\n for (let j = 0; j < 16; j++) {\n plaintext[i + j] = block[j] ^ __classPrivateFieldGet(this, _CBC_lastBlock, \"f\")[j];\n __classPrivateFieldGet(this, _CBC_lastBlock, \"f\")[j] = ciphertext[i + j];\n }\n }\n return plaintext;\n }\n}\n_CBC_iv = new WeakMap(), _CBC_lastBlock = new WeakMap();\n//# sourceMappingURL=mode-cbc.js.map","// Cipher Feedback\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _CFB_instances, _CFB_iv, _CFB_shiftRegister, _CFB_shift;\nimport { ModeOfOperation } from \"./mode.js\";\nexport class CFB extends ModeOfOperation {\n constructor(key, iv, segmentSize = 8) {\n super(\"CFB\", key, CFB);\n _CFB_instances.add(this);\n _CFB_iv.set(this, void 0);\n _CFB_shiftRegister.set(this, void 0);\n // This library currently only handles byte-aligned segmentSize\n if (!Number.isInteger(segmentSize) || (segmentSize % 8)) {\n throw new TypeError(\"invalid segmentSize\");\n }\n Object.defineProperties(this, {\n segmentSize: { enumerable: true, value: segmentSize }\n });\n if (iv) {\n if (iv.length % 16) {\n throw new TypeError(\"invalid iv size (must be 16 bytes)\");\n }\n __classPrivateFieldSet(this, _CFB_iv, new Uint8Array(iv), \"f\");\n }\n else {\n __classPrivateFieldSet(this, _CFB_iv, new Uint8Array(16), \"f\");\n }\n __classPrivateFieldSet(this, _CFB_shiftRegister, this.iv, \"f\");\n }\n get iv() { return new Uint8Array(__classPrivateFieldGet(this, _CFB_iv, \"f\")); }\n encrypt(plaintext) {\n if (8 * plaintext.length % this.segmentSize) {\n throw new TypeError(\"invalid plaintext size (must be multiple of segmentSize bytes)\");\n }\n const segmentSize = this.segmentSize / 8;\n const ciphertext = new Uint8Array(plaintext);\n for (let i = 0; i < ciphertext.length; i += segmentSize) {\n const xorSegment = this.aes.encrypt(__classPrivateFieldGet(this, _CFB_shiftRegister, \"f\"));\n for (let j = 0; j < segmentSize; j++) {\n ciphertext[i + j] ^= xorSegment[j];\n }\n __classPrivateFieldGet(this, _CFB_instances, \"m\", _CFB_shift).call(this, ciphertext.subarray(i));\n }\n return ciphertext;\n }\n decrypt(ciphertext) {\n if (8 * ciphertext.length % this.segmentSize) {\n throw new TypeError(\"invalid ciphertext size (must be multiple of segmentSize bytes)\");\n }\n const segmentSize = this.segmentSize / 8;\n const plaintext = new Uint8Array(ciphertext);\n for (let i = 0; i < plaintext.length; i += segmentSize) {\n const xorSegment = this.aes.encrypt(__classPrivateFieldGet(this, _CFB_shiftRegister, \"f\"));\n for (let j = 0; j < segmentSize; j++) {\n plaintext[i + j] ^= xorSegment[j];\n }\n __classPrivateFieldGet(this, _CFB_instances, \"m\", _CFB_shift).call(this, ciphertext.subarray(i));\n }\n return plaintext;\n }\n}\n_CFB_iv = new WeakMap(), _CFB_shiftRegister = new WeakMap(), _CFB_instances = new WeakSet(), _CFB_shift = function _CFB_shift(data) {\n const segmentSize = this.segmentSize / 8;\n // Shift the register\n __classPrivateFieldGet(this, _CFB_shiftRegister, \"f\").set(__classPrivateFieldGet(this, _CFB_shiftRegister, \"f\").subarray(segmentSize));\n __classPrivateFieldGet(this, _CFB_shiftRegister, \"f\").set(data.subarray(0, segmentSize), 16 - segmentSize);\n};\n//# sourceMappingURL=mode-cfb.js.map","// Counter Mode\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _CTR_remaining, _CTR_remainingIndex, _CTR_counter;\nimport { ModeOfOperation } from \"./mode.js\";\nexport class CTR extends ModeOfOperation {\n constructor(key, initialValue) {\n super(\"CTR\", key, CTR);\n // Remaining bytes for the one-time pad\n _CTR_remaining.set(this, void 0);\n _CTR_remainingIndex.set(this, void 0);\n // The current counter\n _CTR_counter.set(this, void 0);\n __classPrivateFieldSet(this, _CTR_counter, new Uint8Array(16), \"f\");\n __classPrivateFieldGet(this, _CTR_counter, \"f\").fill(0);\n __classPrivateFieldSet(this, _CTR_remaining, __classPrivateFieldGet(this, _CTR_counter, \"f\"), \"f\"); // This will be discarded immediately\n __classPrivateFieldSet(this, _CTR_remainingIndex, 16, \"f\");\n if (initialValue == null) {\n initialValue = 1;\n }\n if (typeof (initialValue) === \"number\") {\n this.setCounterValue(initialValue);\n }\n else {\n this.setCounterBytes(initialValue);\n }\n }\n get counter() { return new Uint8Array(__classPrivateFieldGet(this, _CTR_counter, \"f\")); }\n setCounterValue(value) {\n if (!Number.isInteger(value) || value < 0 || value > Number.MAX_SAFE_INTEGER) {\n throw new TypeError(\"invalid counter initial integer value\");\n }\n for (let index = 15; index >= 0; --index) {\n __classPrivateFieldGet(this, _CTR_counter, \"f\")[index] = value % 256;\n value = Math.floor(value / 256);\n }\n }\n setCounterBytes(value) {\n if (value.length !== 16) {\n throw new TypeError(\"invalid counter initial Uint8Array value length\");\n }\n __classPrivateFieldGet(this, _CTR_counter, \"f\").set(value);\n }\n increment() {\n for (let i = 15; i >= 0; i--) {\n if (__classPrivateFieldGet(this, _CTR_counter, \"f\")[i] === 255) {\n __classPrivateFieldGet(this, _CTR_counter, \"f\")[i] = 0;\n }\n else {\n __classPrivateFieldGet(this, _CTR_counter, \"f\")[i]++;\n break;\n }\n }\n }\n encrypt(plaintext) {\n var _a, _b;\n const crypttext = new Uint8Array(plaintext);\n for (let i = 0; i < crypttext.length; i++) {\n if (__classPrivateFieldGet(this, _CTR_remainingIndex, \"f\") === 16) {\n __classPrivateFieldSet(this, _CTR_remaining, this.aes.encrypt(__classPrivateFieldGet(this, _CTR_counter, \"f\")), \"f\");\n __classPrivateFieldSet(this, _CTR_remainingIndex, 0, \"f\");\n this.increment();\n }\n crypttext[i] ^= __classPrivateFieldGet(this, _CTR_remaining, \"f\")[__classPrivateFieldSet(this, _CTR_remainingIndex, (_b = __classPrivateFieldGet(this, _CTR_remainingIndex, \"f\"), _a = _b++, _b), \"f\"), _a];\n }\n return crypttext;\n }\n decrypt(ciphertext) {\n return this.encrypt(ciphertext);\n }\n}\n_CTR_remaining = new WeakMap(), _CTR_remainingIndex = new WeakMap(), _CTR_counter = new WeakMap();\n//# sourceMappingURL=mode-ctr.js.map","import { arrayify, hexlify } from \"@ethersproject/bytes\";\nimport { toUtf8Bytes, UnicodeNormalizationForm } from '@ethersproject/strings';\nimport { logger } from \"./logger.js\";\nexport function looseArrayify(hexString) {\n if (typeof (hexString) === 'string' && hexString.substring(0, 2) !== '0x') {\n hexString = '0x' + hexString;\n }\n return arrayify(hexString);\n}\nexport function zpad(value, length) {\n value = String(value);\n while (value.length < length) {\n value = '0' + value;\n }\n return value;\n}\nexport function getPassword(password) {\n if (typeof (password) === 'string') {\n return toUtf8Bytes(password, UnicodeNormalizationForm.NFKC);\n }\n return arrayify(password);\n}\nexport function spelunk(object, _path) {\n const match = _path.match(/^([a-z0-9$_.-]*)(:([a-z]+))?(!)?$/i);\n if (match == null) {\n return logger.throwArgumentError(\"invalid path\", \"path\", _path);\n }\n const path = match[1];\n const type = match[3];\n const reqd = (match[4] === \"!\");\n let cur = object;\n for (const comp of path.toLowerCase().split('.')) {\n // Search for a child object with a case-insensitive matching key\n if (Array.isArray(cur)) {\n if (!comp.match(/^[0-9]+$/)) {\n break;\n }\n cur = cur[parseInt(comp)];\n }\n else if (typeof (cur) === \"object\") {\n let found = null;\n for (const key in cur) {\n if (key.toLowerCase() === comp) {\n found = cur[key];\n break;\n }\n }\n cur = found;\n }\n else {\n cur = null;\n }\n if (cur == null) {\n break;\n }\n }\n if (reqd && cur == null) {\n logger.throwArgumentError(\"missing required value\", \"path\", path);\n }\n if (type && cur != null) {\n if (type === \"int\") {\n if (typeof (cur) === \"string\" && cur.match(/^-?[0-9]+$/)) {\n return parseInt(cur);\n }\n else if (Number.isSafeInteger(cur)) {\n return cur;\n }\n }\n if (type === \"number\") {\n if (typeof (cur) === \"string\" && cur.match(/^-?[0-9.]*$/)) {\n return parseFloat(cur);\n }\n }\n if (type === \"data\") {\n if (typeof (cur) === \"string\") {\n return looseArrayify(cur);\n }\n }\n if (type === \"array\" && Array.isArray(cur)) {\n return cur;\n }\n if (type === typeof (cur)) {\n return cur;\n }\n logger.throwArgumentError(`wrong type found for ${type} `, \"path\", path);\n }\n return cur;\n}\n/*\nexport function follow(object: any, path: string): null | string {\n let currentChild = object;\n\n for (const comp of path.toLowerCase().split('/')) {\n\n // Search for a child object with a case-insensitive matching key\n let matchingChild = null;\n for (const key in currentChild) {\n if (key.toLowerCase() === comp) {\n matchingChild = currentChild[key];\n break;\n }\n }\n\n if (matchingChild === null) { return null; }\n\n currentChild = matchingChild;\n }\n\n return currentChild;\n}\n\n// \"path/to/something:type!\"\nexport function followRequired(data: any, path: string): string {\n const value = follow(data, path);\n if (value != null) { return value; }\n return logger.throwArgumentError(\"invalid value\", `data:${ path }`,\n JSON.stringify(data));\n}\n*/\n// See: https://www.ietf.org/rfc/rfc4122.txt (Section 4.4)\nexport function uuidV4(randomBytes) {\n const bytes = logger.getBytes(randomBytes, \"randomBytes\");\n // Section: 4.1.3:\n // - time_hi_and_version[12:16] = 0b0100\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n // Section 4.4\n // - clock_seq_hi_and_reserved[6] = 0b0\n // - clock_seq_hi_and_reserved[7] = 0b1\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const value = hexlify(bytes);\n return [\n value.substring(2, 10),\n value.substring(10, 14),\n value.substring(14, 18),\n value.substring(18, 22),\n value.substring(22, 34),\n ].join(\"-\");\n}\n//# sourceMappingURL=utils.js.map","import { CBC, pkcs7Strip } from \"aes-js\";\nimport { getAddress } from \"@ethersproject/address\";\nimport { arrayify } from \"@ethersproject/bytes\";\nimport { pbkdf2 } from \"@ethersproject/crypto\";\nimport { id } from \"@ethersproject/hash\";\nimport { logger } from \"./logger.js\";\nimport { getPassword, looseArrayify, spelunk } from \"./utils.js\";\nexport function isCrowdsaleJson(json) {\n try {\n const data = JSON.parse(json);\n if (data.encseed) {\n return true;\n }\n }\n catch (error) { }\n return false;\n}\n// See: https://github.com/ethereum/pyethsaletool\nexport function decryptCrowdsaleJson(json, _password) {\n const data = JSON.parse(json);\n const password = getPassword(_password);\n // Ethereum Address\n const address = getAddress(spelunk(data, \"ethaddr:string!\"));\n // Encrypted Seed\n const encseed = looseArrayify(spelunk(data, \"encseed:string!\"));\n if (!encseed || (encseed.length % 16) !== 0) {\n logger.throwArgumentError(\"invalid encseed\", \"json\", json);\n }\n const key = arrayify(pbkdf2(password, password, 2000, 32, \"sha256\")).slice(0, 16);\n const iv = encseed.slice(0, 16);\n const encryptedSeed = encseed.slice(16);\n // Decrypt the seed\n const aesCbc = new CBC(key, iv);\n const seed = pkcs7Strip(arrayify(aesCbc.decrypt(encryptedSeed)));\n // This wallet format is weird... Convert the binary encoded hex to a string.\n let seedHex = \"\";\n for (let i = 0; i < seed.length; i++) {\n seedHex += String.fromCharCode(seed[i]);\n }\n return { address, privateKey: id(seedHex) };\n}\n//# sourceMappingURL=json-crowdsale.js.map","export function pkcs7Pad(data) {\n const padder = 16 - (data.length % 16);\n const result = new Uint8Array(data.length + padder);\n result.set(data);\n for (let i = data.length; i < result.length; i++) {\n result[i] = padder;\n }\n return result;\n}\nexport function pkcs7Strip(data) {\n if (data.length < 16) {\n throw new TypeError('PKCS#7 invalid length');\n }\n const padder = data[data.length - 1];\n if (padder > 16) {\n throw new TypeError('PKCS#7 padding byte out of range');\n }\n const length = data.length - padder;\n for (let i = 0; i < padder; i++) {\n if (data[length + i] !== padder) {\n throw new TypeError('PKCS#7 invalid padding byte');\n }\n }\n return new Uint8Array(data.subarray(0, length));\n}\n//# sourceMappingURL=padding.js.map","// Output Feedback\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _OFB_iv, _OFB_lastPrecipher, _OFB_lastPrecipherIndex;\nimport { ModeOfOperation } from \"./mode.js\";\nexport class OFB extends ModeOfOperation {\n constructor(key, iv) {\n super(\"OFB\", key, OFB);\n _OFB_iv.set(this, void 0);\n _OFB_lastPrecipher.set(this, void 0);\n _OFB_lastPrecipherIndex.set(this, void 0);\n if (iv) {\n if (iv.length % 16) {\n throw new TypeError(\"invalid iv size (must be 16 bytes)\");\n }\n __classPrivateFieldSet(this, _OFB_iv, new Uint8Array(iv), \"f\");\n }\n else {\n __classPrivateFieldSet(this, _OFB_iv, new Uint8Array(16), \"f\");\n }\n __classPrivateFieldSet(this, _OFB_lastPrecipher, this.iv, \"f\");\n __classPrivateFieldSet(this, _OFB_lastPrecipherIndex, 16, \"f\");\n }\n get iv() { return new Uint8Array(__classPrivateFieldGet(this, _OFB_iv, \"f\")); }\n encrypt(plaintext) {\n var _a, _b;\n if (plaintext.length % 16) {\n throw new TypeError(\"invalid plaintext size (must be multiple of 16 bytes)\");\n }\n const ciphertext = new Uint8Array(plaintext);\n for (let i = 0; i < ciphertext.length; i++) {\n if (__classPrivateFieldGet(this, _OFB_lastPrecipherIndex, \"f\") === 16) {\n __classPrivateFieldSet(this, _OFB_lastPrecipher, this.aes.encrypt(__classPrivateFieldGet(this, _OFB_lastPrecipher, \"f\")), \"f\");\n __classPrivateFieldSet(this, _OFB_lastPrecipherIndex, 0, \"f\");\n }\n ciphertext[i] ^= __classPrivateFieldGet(this, _OFB_lastPrecipher, \"f\")[__classPrivateFieldSet(this, _OFB_lastPrecipherIndex, (_b = __classPrivateFieldGet(this, _OFB_lastPrecipherIndex, \"f\"), _a = _b++, _b), \"f\"), _a];\n }\n return ciphertext;\n }\n decrypt(ciphertext) {\n if (ciphertext.length % 16) {\n throw new TypeError(\"invalid ciphertext size (must be multiple of 16 bytes)\");\n }\n return this.encrypt(ciphertext);\n }\n}\n_OFB_iv = new WeakMap(), _OFB_lastPrecipher = new WeakMap(), _OFB_lastPrecipherIndex = new WeakMap();\n//# sourceMappingURL=mode-ofb.js.map","import { CTR } from \"aes-js\";\nimport { getAddress } from \"@ethersproject/address\";\nimport { arrayify, concat, hexlify } from \"@ethersproject/bytes\";\nimport { keccak256, pbkdf2, randomBytes, scrypt, scryptSync } from \"@ethersproject/crypto\";\nimport { computeAddress } from \"./address.js\";\nimport { logger } from \"./logger.js\";\nimport { getPassword, spelunk, uuidV4, zpad } from \"./utils.js\";\nimport { version } from \"./_version.js\";\nconst defaultPath = \"m/44'/60'/0'/0/0\";\nexport function isKeystoreJson(json) {\n try {\n const data = JSON.parse(json);\n const version = ((data.version != null) ? parseInt(data.version) : 0);\n if (version === 3) {\n return true;\n }\n }\n catch (error) { }\n return false;\n}\nfunction decrypt(data, key, ciphertext) {\n const cipher = spelunk(data, \"crypto.cipher:string\");\n if (cipher === \"aes-128-ctr\") {\n const iv = spelunk(data, \"crypto.cipherparams.iv:data!\");\n const aesCtr = new CTR(key, iv);\n return hexlify(aesCtr.decrypt(ciphertext));\n }\n return logger.throwError(\"unsupported cipher\", \"UNSUPPORTED_OPERATION\", {\n operation: \"decrypt\"\n });\n}\nfunction getAccount(data, _key) {\n const key = logger.getBytes(_key);\n const ciphertext = spelunk(data, \"crypto.ciphertext:data!\");\n const computedMAC = hexlify(keccak256(concat([key.slice(16, 32), ciphertext]))).substring(2);\n if (computedMAC !== spelunk(data, \"crypto.mac:string!\").toLowerCase()) {\n return logger.throwArgumentError(\"incorrect password\", \"password\", \"[ REDACTED ]\");\n }\n const privateKey = decrypt(data, key.slice(0, 16), ciphertext);\n const address = computeAddress(privateKey);\n if (data.address) {\n let check = data.address.toLowerCase();\n if (check.substring(0, 2) !== \"0x\") {\n check = \"0x\" + check;\n }\n if (getAddress(check) !== address) {\n logger.throwArgumentError(\"keystore address/privateKey mismatch\", \"address\", data.address);\n }\n }\n const account = { address, privateKey };\n // Version 0.1 x-ethers metadata must contain an encrypted mnemonic phrase\n const version = spelunk(data, \"x-ethers.version:string\");\n if (version === \"0.1\") {\n const mnemonicKey = key.slice(32, 64);\n const mnemonicCiphertext = spelunk(data, \"x-ethers.mnemonicCiphertext:data!\");\n const mnemonicIv = spelunk(data, \"x-ethers.mnemonicCounter:data!\");\n const mnemonicAesCtr = new CTR(mnemonicKey, mnemonicIv);\n account.mnemonic = {\n path: (spelunk(data, \"x-ethers.path:string\") || defaultPath),\n locale: (spelunk(data, \"x-ethers.locale:string\") || \"en\"),\n entropy: hexlify(arrayify(mnemonicAesCtr.decrypt(mnemonicCiphertext)))\n };\n }\n return account;\n}\nfunction getKdfParams(data) {\n const kdf = spelunk(data, \"crypto.kdf:string\");\n if (kdf && typeof (kdf) === \"string\") {\n const throwError = function (name, value) {\n return logger.throwArgumentError(\"invalid key-derivation function parameters\", name, value);\n };\n if (kdf.toLowerCase() === \"scrypt\") {\n const salt = spelunk(data, \"crypto.kdfparams.salt:data!\");\n const N = spelunk(data, \"crypto.kdfparams.n:int!\");\n const r = spelunk(data, \"crypto.kdfparams.r:int!\");\n const p = spelunk(data, \"crypto.kdfparams.p:int!\");\n // Check for all required parameters\n if (!N || !r || !p) {\n return throwError(\"kdf\", kdf);\n }\n // Make sure N is a power of 2\n if ((N & (N - 1)) !== 0) {\n return throwError(\"N\", N);\n }\n const dkLen = spelunk(data, \"crypto.kdfparams.dklen:int!\");\n if (dkLen !== 32) {\n return throwError(\"dklen\", dkLen);\n }\n return { name: \"scrypt\", salt, N, r, p, dkLen: 64 };\n }\n else if (kdf.toLowerCase() === \"pbkdf2\") {\n const salt = spelunk(data, \"crypto.kdfparams.salt:data!\");\n const prf = spelunk(data, \"crypto.kdfparams.prf:string!\");\n const algorithm = prf.split(\"-\").pop();\n if (algorithm !== \"sha256\" && algorithm !== \"sha512\") {\n return throwError(\"prf\", prf);\n }\n const count = spelunk(data, \"crypto.kdfparams.c:int!\");\n const dkLen = spelunk(data, \"crypto.kdfparams.dklen:int!\");\n if (dkLen !== 32) {\n throwError(\"dklen\", dkLen);\n }\n return { name: \"pbkdf2\", salt, count, dkLen, algorithm };\n }\n }\n return logger.throwArgumentError(\"unsupported key-derivation function\", \"kdf\", kdf);\n}\nexport function decryptKeystoreJsonSync(json, _password) {\n const data = JSON.parse(json);\n const password = getPassword(_password);\n const params = getKdfParams(data);\n if (params.name === \"pbkdf2\") {\n const { salt, count, dkLen, algorithm } = params;\n const key = pbkdf2(password, salt, count, dkLen, algorithm);\n return getAccount(data, key);\n }\n else if (params.name === \"scrypt\") {\n const { salt, N, r, p, dkLen } = params;\n const key = scryptSync(password, salt, N, r, p, dkLen);\n return getAccount(data, key);\n }\n throw new Error(\"unreachable\");\n}\nfunction stall(duration) {\n return new Promise((resolve) => { setTimeout(() => { resolve(); }, duration); });\n}\nexport async function decryptKeystoreJson(json, _password, progress) {\n const data = JSON.parse(json);\n const password = getPassword(_password);\n const params = getKdfParams(data);\n if (params.name === \"pbkdf2\") {\n if (progress) {\n progress(0);\n await stall(0);\n }\n const { salt, count, dkLen, algorithm } = params;\n const key = pbkdf2(password, salt, count, dkLen, algorithm);\n if (progress) {\n progress(1);\n await stall(0);\n }\n return getAccount(data, key);\n }\n else if (params.name === \"scrypt\") {\n const { salt, N, r, p, dkLen } = params;\n const key = await scrypt(password, salt, N, r, p, dkLen, progress);\n return getAccount(data, key);\n }\n throw new Error(\"unreachable\");\n}\nexport async function encryptKeystoreJson(account, password, options, progressCallback) {\n // Check the address matches the private key\n //if (getAddress(account.address) !== computeAddress(account.privateKey)) {\n // throw new Error(\"address/privateKey mismatch\");\n //}\n // Check the mnemonic (if any) matches the private key\n /*\n if (hasMnemonic(account)) {\n const mnemonic = account.mnemonic;\n const node = HDNode.fromMnemonic(mnemonic.phrase, null, mnemonic.locale).derivePath(mnemonic.path || defaultPath);\n\n if (node.privateKey != account.privateKey) {\n throw new Error(\"mnemonic mismatch\");\n }\n }\n */\n // The options are optional, so adjust the call as needed\n if (typeof (options) === \"function\" && !progressCallback) {\n progressCallback = options;\n options = {};\n }\n if (!options) {\n options = {};\n }\n const privateKey = logger.getBytes(account.privateKey, \"privateKey\");\n const passwordBytes = getPassword(password);\n /*\n let mnemonic: null | Mnemonic = null;\n let entropy: Uint8Array = null\n let path: string = null;\n let locale: string = null;\n if (hasMnemonic(account)) {\n const srcMnemonic = account.mnemonic;\n entropy = arrayify(mnemonicToEntropy(srcMnemonic.phrase, srcMnemonic.locale || \"en\"));\n path = srcMnemonic.path || defaultPath;\n locale = srcMnemonic.locale || \"en\";\n mnemonic = Mnemonic.from(\n }\n */\n // Check/generate the salt\n const salt = (options.salt != null) ? logger.getBytes(options.salt, \"options.slat\") : randomBytes(32);\n // Override initialization vector\n const iv = (options.iv != null) ? logger.getBytes(options.iv, \"options.iv\") : randomBytes(16);\n if (iv.length !== 16) {\n logger.throwArgumentError(\"invalid options.iv\", \"options.iv\", options.iv);\n }\n // Override the uuid\n const uuidRandom = (options.uuid != null) ? logger.getBytes(options.uuid, \"options.uuid\") : randomBytes(16);\n if (uuidRandom.length !== 16) {\n logger.throwArgumentError(\"invalid options.uuid\", \"options.uuid\", options.iv);\n }\n if (uuidRandom.length !== 16) {\n throw new Error(\"invalid uuid\");\n }\n // Override the scrypt password-based key derivation function parameters\n let N = (1 << 17), r = 8, p = 1;\n if (options.scrypt) {\n if (options.scrypt.N) {\n N = options.scrypt.N;\n }\n if (options.scrypt.r) {\n r = options.scrypt.r;\n }\n if (options.scrypt.p) {\n p = options.scrypt.p;\n }\n }\n // We take 64 bytes:\n // - 32 bytes As normal for the Web3 secret storage (derivedKey, macPrefix)\n // - 32 bytes AES key to encrypt mnemonic with (required here to be Ethers Wallet)\n const _key = await scrypt(passwordBytes, salt, N, r, p, 64, progressCallback);\n const key = arrayify(_key);\n // This will be used to encrypt the wallet (as per Web3 secret storage)\n const derivedKey = key.slice(0, 16);\n const macPrefix = key.slice(16, 32);\n // Encrypt the private key\n const aesCtr = new CTR(derivedKey, iv);\n const ciphertext = arrayify(aesCtr.encrypt(privateKey));\n // Compute the message authentication code, used to check the password\n const mac = keccak256(concat([macPrefix, ciphertext]));\n // See: https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition\n const data = {\n address: account.address.substring(2).toLowerCase(),\n id: uuidV4(uuidRandom),\n version: 3,\n Crypto: {\n cipher: \"aes-128-ctr\",\n cipherparams: {\n iv: hexlify(iv).substring(2),\n },\n ciphertext: hexlify(ciphertext).substring(2),\n kdf: \"scrypt\",\n kdfparams: {\n salt: hexlify(salt).substring(2),\n n: N,\n dklen: 32,\n p: p,\n r: r\n },\n mac: mac.substring(2)\n }\n };\n // If we have a mnemonic, encrypt it into the JSON wallet\n if (account.mnemonic) {\n const client = (options.client != null) ? options.client : `ethers/${version}`;\n const path = account.mnemonic.path || defaultPath;\n const locale = account.mnemonic.locale || \"en\";\n const mnemonicKey = key.slice(32, 64);\n const entropy = logger.getBytes(account.mnemonic.entropy, \"account.mnemonic.entropy\");\n const mnemonicIv = randomBytes(16);\n const mnemonicAesCtr = new CTR(mnemonicKey, mnemonicIv);\n const mnemonicCiphertext = arrayify(mnemonicAesCtr.encrypt(entropy));\n const now = new Date();\n const timestamp = (now.getUTCFullYear() + \"-\" +\n zpad(now.getUTCMonth() + 1, 2) + \"-\" +\n zpad(now.getUTCDate(), 2) + \"T\" +\n zpad(now.getUTCHours(), 2) + \"-\" +\n zpad(now.getUTCMinutes(), 2) + \"-\" +\n zpad(now.getUTCSeconds(), 2) + \".0Z\");\n const gethFilename = (\"UTC--\" + timestamp + \"--\" + data.address);\n data[\"x-ethers\"] = {\n client, gethFilename, path, locale,\n mnemonicCounter: hexlify(mnemonicIv).substring(2),\n mnemonicCiphertext: hexlify(mnemonicCiphertext).substring(2),\n version: \"0.1\"\n };\n }\n return JSON.stringify(data);\n}\n//# sourceMappingURL=json-keystore.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Wallet_mnemonic;\nimport { isHexString } from \"@ethersproject/bytes\";\nimport { randomBytes } from \"@ethersproject/crypto\";\nimport { SigningKey } from \"@ethersproject/signing-key\";\nimport { computeAddress } from \"./address.js\";\nimport { BaseWallet } from \"./base-wallet.js\";\nimport { HDNodeWallet } from \"./hdwallet.js\";\nimport { decryptCrowdsaleJson, isCrowdsaleJson } from \"./json-crowdsale.js\";\nimport { decryptKeystoreJson, decryptKeystoreJsonSync, isKeystoreJson } from \"./json-keystore.js\";\nimport { logger } from \"./logger.js\";\nimport { Mnemonic } from \"./mnemonic.js\";\nfunction tryWallet(value) {\n try {\n if (!value || !value.signingKey) {\n return null;\n }\n const key = trySigningKey(value.signingKey);\n if (key == null || computeAddress(key.publicKey) !== value.address) {\n return null;\n }\n if (value.mnemonic) {\n const wallet = HDNodeWallet.fromMnemonic(value.mnemonic);\n if (wallet.privateKey !== key.privateKey) {\n return null;\n }\n }\n return value;\n }\n catch (e) {\n console.log(e);\n }\n return null;\n}\n// Try using value as mnemonic to derive the defaultPath HDodeWallet\nfunction tryMnemonic(value) {\n try {\n if (value == null || typeof (value.phrase) !== \"string\" ||\n typeof (value.password) !== \"string\" ||\n value.wordlist == null) {\n return null;\n }\n return HDNodeWallet.fromPhrase(value.phrase, value.password, null, value.wordlist);\n }\n catch (error) {\n console.log(error);\n }\n return null;\n}\nfunction trySigningKey(value) {\n try {\n if (!value || !isHexString(value.privateKey, 32)) {\n return null;\n }\n const key = value.privateKey;\n if (SigningKey.computePublicKey(key) !== value.publicKey) {\n return null;\n }\n return new SigningKey(key);\n }\n catch (e) {\n console.log(e);\n }\n return null;\n}\nfunction stall(duration) {\n return new Promise((resolve) => { setTimeout(() => { resolve(); }, duration); });\n}\nexport class Wallet extends BaseWallet {\n constructor(key, provider) {\n let signingKey = null;\n let mnemonic = null;\n // A normal private key\n if (typeof (key) === \"string\") {\n signingKey = new SigningKey(key);\n }\n // Try Wallet\n if (signingKey == null) {\n const wallet = tryWallet(key);\n if (wallet) {\n signingKey = wallet.signingKey;\n mnemonic = wallet.mnemonic || null;\n }\n }\n // Try Mnemonic, with the defaultPath wallet\n if (signingKey == null) {\n const wallet = tryMnemonic(key);\n if (wallet) {\n signingKey = wallet.signingKey;\n mnemonic = wallet.mnemonic || null;\n }\n }\n // A signing key\n if (signingKey == null) {\n signingKey = trySigningKey(key);\n }\n if (signingKey == null) {\n logger.throwArgumentError(\"invalid key\", \"key\", \"[ REDACTED ]\");\n }\n super(signingKey, provider);\n _Wallet_mnemonic.set(this, void 0);\n __classPrivateFieldSet(this, _Wallet_mnemonic, mnemonic, \"f\");\n }\n // Store this in a getter to reduce visibility in console.log\n get mnemonic() { return __classPrivateFieldGet(this, _Wallet_mnemonic, \"f\"); }\n connect(provider) {\n return new Wallet(this, provider);\n }\n async encrypt(password, options, progressCallback) {\n throw new Error(\"TODO\");\n }\n encryptSync(password, options) {\n throw new Error(\"TODO\");\n }\n static async fromEncryptedJson(json, password, progress) {\n let account = null;\n if (isKeystoreJson(json)) {\n account = await decryptKeystoreJson(json, password, progress);\n }\n else if (isCrowdsaleJson(json)) {\n if (progress) {\n progress(0);\n await stall(0);\n }\n account = decryptCrowdsaleJson(json, password);\n if (progress) {\n progress(1);\n await stall(0);\n }\n }\n else {\n return logger.throwArgumentError(\"invalid JSON wallet\", \"json\", \"[ REDACTED ]\");\n }\n const wallet = new Wallet(account.privateKey);\n if (wallet.address !== account.address) {\n logger.throwArgumentError(\"address/privateKey mismatch\", \"json\", \"[ REDACTED ]\");\n }\n // @TODO: mnemonic\n return wallet;\n }\n static fromEncryptedJsonSync(json, password) {\n let account = null;\n if (isKeystoreJson(json)) {\n account = decryptKeystoreJsonSync(json, password);\n }\n else if (isCrowdsaleJson(json)) {\n account = decryptCrowdsaleJson(json, password);\n }\n else {\n return logger.throwArgumentError(\"invalid JSON wallet\", \"json\", \"[ REDACTED ]\");\n }\n const wallet = new Wallet(account.privateKey);\n if (wallet.address !== account.address) {\n logger.throwArgumentError(\"address/privateKey mismatch\", \"json\", \"[ REDACTED ]\");\n }\n // @TODO: mnemonic\n return wallet;\n }\n static createRandom(provider, password, wordlist) {\n return new Wallet(Mnemonic.fromEntropy(randomBytes(16), password, wordlist), provider);\n }\n static fromMnemonic(mnemonic, provider) {\n return new Wallet(mnemonic, provider);\n }\n static fromPhrase(phrase, provider, password = \"\", wordlist) {\n return new Wallet(Mnemonic.fromPhrase(phrase, password, wordlist), provider);\n }\n}\n_Wallet_mnemonic = new WeakMap();\n//# sourceMappingURL=wallet.js.map","export const version = \"ethers@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map"],"names":["async","resolveProperties","value","keys","Object","Promise","all","map","k","resolve","reduce","accum","v","index","checkType","type","types","split","t","trim","i","length","Error","defineProperties","target","values","defaults","key","fallback","undefined","defineProperty","enumerable","writable","_EventPayload_listener","__classPrivateFieldSet","this","receiver","state","kind","f","TypeError","has","call","set","__classPrivateFieldGet","get","EventPayload","constructor","emitter","listener","filter","off","getStore","store","setStore","isFrozen","isError","error","code","isCallException","WeakMap","_Logger_instances","_Logger_assertIntRange","_Logger_getBytes","_Logger_log","LogLevel","LogLevels","debug","default","info","warning","_logLevel","_globalLogger","_normalizeForms","form","normalize","check","String","fromCharCode","push","defineReadOnly","object","name","maxValue","ErrorConstructors","INVALID_ARGUMENT","NUMERIC_FAULT","RangeError","BUFFER_OVERRUN","Logger","version","add","makeError","message","details","JSON","stringify","join","throwError","throwArgumentError","argument","assert","condition","assertArgument","assertIntegerArgument","lower","upper","Number","isInteger","assertSafeUint53","operation","fault","assertNormalize","indexOf","assertPrivate","givenGuard","guard","className","method","assertArgumentCount","count","expectedCount","assertInt53","assertUint53","assertInteger","min","max","getBytes","getBytesCopy","getNumber","BigInt","e","getBigInt","args","DEBUG","INFO","warn","WARNING","static","logLevel","level","toLowerCase","globalLogger","WeakSet","minValue","isNaN","Math","floor","copy","Uint8Array","match","result","offset","parseInt","substring","console","log","apply","logger","_TokenString_instances","_TokenString_offset","_TokenString_tokens","_TokenString_subTokenString","_ParamType_instances","_ParamType_walkAsync","FormatType","setify","items","Set","forEach","freeze","_kwVisib","KwVisib","_kwTypes","KwTypes","_kwModifiers","KwModifiers","Keywords","SimpleTokens","regexWhitespace","RegExp","regexNumber","regexIdentifier","regexType","TokenString","tokens","slice","clone","reset","popKeyword","allowed","top","peek","text","pop","popType","popParen","popParams","link","linkNext","peekKeyword","peekType","_a","toString","token","lex","brackets","commas","cur","depth","linkBack","suffix","allowSingle","included","consumeName","keyword","consumeKeywords","keywords","consumeParams","allowIndexed","ParamType","fromTokens","consumeGas","consumeEoi","from","to","assign","regexArrayType","verifyBasicType","size","_guard","internal","Symbol","for","baseType","indexed","components","arrayLength","arrayChildren","format","sighash","json","isTuple","c","parse","isArray","comp","full","isIndexable","walk","process","Array","promises","obj","isParamType","arrayMatch","comps","bracket","FragmentType","setValue","childType","param","then","Fragment","inputs","fromString","fromObject","ConstructorFragment","ErrorFragment","EventFragment","FunctionFragment","StructFragment","NamedFragment","super","joinParams","params","p","input","anonymous","event","payable","gas","stateMutability","outputs","function","constant","o","mutability","modifiers","consumeMutability","struct","BN_0","toBigInt","_value","toNumber","toHex","_width","width","toArray","hex","BN_1","fromTwos","toTwos","mask","_bits","bits","_FixedNumber_instances","_FixedNumber_value","_FixedNumber_checkFormat","_constructorGuard","NegativeOne","throwFault","zeros","getMultiplier","decimals","formatFixed","_decimals","multiplier","multiplierStr","negative","fraction","parseFixed","whole","wei","FixedFormat","constructorGuard","signed","_multiplier","defaultValue","FixedNumber","_isFixedNumber","addUnsafe","other","a","b","fromValue","subUnsafe","mulUnsafe","divUnsafe","hasFraction","isNegative","ONE","toFormat","ceiling","round","factor","bump","BUMP","isZero","toHexString","toUnsafeFloat","parseFloat","fixedFormat","numeric","decimal","fromBytes","Alphabet","Lookup","getAlpha","letter","BN_58","encodeBase58","decodeBase58","isHexString","isBytesLike","BN_8","BN_255","arrayify","data","unshift","_noCopyArrayify","decodeBase64","textData","Buffer","encodeBase64","hexlify","bytes","quantity","concat","datas","d","dataLength","dataSlice","start","end","buffer","stripZerosLeft","zeroPad","left","fill","zeroPadLeft","zeroPadRight","_Result_instances","_Result_indices","_Result_throwError","_Writer_instances","_Writer_data","_Writer_dataLength","_Writer_writeData","_Reader_instances","_Reader_data","_Reader_offset","_Reader_coerceFunc","_Reader_peekBytes","Padding","passProperties","Result","Map","Proxy","prop","item","Reflect","getValue","wrapped","Coder","localName","dynamic","_throwError","Writer","appendWriter","writer","writeBytes","paddingOffset","writeValue","writeUpdatableValue","Reader","coerceFunc","allowLoose","coerce","consumed","subReader","readBytes","loose","readValue","readIndex","alignedLength","ceil","u32","arr","Uint32Array","byteOffset","byteLength","createView","DataView","rotr","word","shift","padStart","nextTick","nodeRequire","module","require","bind","setImmediate","setTimeout","asyncLoop","iters","tick","cb","ts","Date","now","diff","toBytes","str","TextEncoder","encode","utf8ToBytes","assertNumber","n","isSafeInteger","assertHash","hash","create","outputLen","blockLen","Hash","_cloneInto","checkOpts","def","_opts","prototype","wrapConstructor","hashConstructor","hashC","update","digest","tmp","HMAC","_key","finished","destroyed","iHash","pad","oHash","buf","digestInto","out","destroy","getPrototypeOf","hmac","pbkdf2","password","salt","opts","dkLen","DK","PRF","PRFSalt","_password","_salt","asyncTick","pbkdf2Init","prfW","view","u","ti","pos","Ti","subarray","setInt32","ui","pbkdf2Output","SHA2","padOffset","isLE","len","take","dataView","roundClean","setBigUint64","_32n","_u32_max","wh","wl","h","l","setUint32","oview","res","Chi","Maj","SHA256_K","IV","SHA256_W","SHA256","A","B","C","D","E","F","G","H","getUint32","W15","W2","s0","s1","T1","T2","sha256","U32_MASK64","fromBig","le","lst","Ah","Al","shrSH","s","shrSL","rotrSH","rotrSL","rotrBH","rotrBL","Bh","Bl","add3L","Cl","add3H","low","Ch","add4L","Dl","add4H","Dh","add5L","El","add5H","Eh","SHA512_Kh","SHA512_Kl","u64.split","SHA512_W_H","SHA512_W_L","SHA512","Fh","Fl","Gh","Gl","Hh","Hl","W15h","W15l","s0h","u64.rotrSH","u64.shrSH","s0l","u64.rotrSL","u64.shrSL","W2h","W2l","s1h","u64.rotrBH","s1l","u64.rotrBL","SUMl","u64.add4L","SUMh","u64.add4H","sigma1h","sigma1l","CHIh","T1ll","u64.add5L","T1h","u64.add5H","T1l","sigma0h","sigma0l","MAJh","MAJl","u64.add","All","u64.add3L","u64.add3H","SHA512_256","SHA384","sha512","anyGlobal","self","window","global","getGlobal","crypto","msCrypto","createHash","algo","locked","_computeHmac","algorithm","_algo","createHmac","__computeHmac","computeHmac","_data","_","lock","register","func","SHA3_PI","SHA3_ROTL","_SHA3_IOTA","_0n","_1n","_2n","_7n","_256n","_0x71n","R","x","y","j","SHA3_IOTA_H","SHA3_IOTA_L","rotlH","u64.rotlBH","u64.rotlSH","rotlL","u64.rotlBL","u64.rotlSL","Keccak","enableXOF","rounds","posOut","state32","keccak","idx1","idx0","B0","B1","Th","Tl","curH","curL","PI","keccakP","finish","writeInto","xofInto","xof","gen","keccak_256","genShake","hashCons","msg","wrapConstructorWithOpts","_keccak256","__keccak256","keccak256","Rho","Id","Pi","idxL","idxR","shifts","shiftsL","idx","shiftsR","Kl","Kr","rotl","group","z","BUF","RIPEMD160","h0","h1","h2","h3","h4","al","ar","bl","br","cl","cr","dl","dr","el","er","rGroup","hbl","hbr","rl","rr","sl","sr","tl","tr","ripemd160","_ripemd160","noble_ripemd160","__ripemd160","_pbkdf2","iterations","keylen","pbkdf2Sync","__pbkdf2","_randomBytes","getRandomValues","crypto_random","__randomBytes","randomBytes","XorAndSalsa","prev","pi","ii","oi","y00","y01","y02","y03","y04","y05","y06","y07","y08","y09","y10","y11","y12","y13","y14","y15","x00","x01","x02","x03","x04","x05","x06","x07","x08","x09","x10","x11","x12","x13","x14","x15","BlockMix","r","head","tail","scryptInit","maxmem","N","onProgress","blockSize","blockSize32","memUsed","B32","V","blockMixCb","totalBlockMix","callbackPer","blockMixCnt","scryptOutput","lockedSync","lockedAsync","_scryptAsync","passwd","_nobleAsync","_scryptSync","_nobleSync","__scryptAsync","__scryptSync","scrypt","_passwd","progress","scryptSync","_sha256","_sha512","__sha256","__sha512","locked256","locked512","BN_36","getChecksumAddress","address","chars","expanded","charCodeAt","hashed","toUpperCase","ibanLookup","ibanChecksum","block","checksum","Base36","getAddress","fromBase36","getIcapAddress","base36","arrayifyInteger","_encode","payload","child","encodeRlp","hexlifyByte","unarrayifyInteger","_decodeChildren","childOffset","decoded","_decode","checkOffset","lengthLength","decodeRlp","getCreateAddress","tx","nonceHex","nonce","getCreate2Address","_from","_initCodeHash","initCodeHash","isAddressable","isAddress","resolveAddress","resolver","resolveName","_Typed_options","_gaurd","Typed","_typedSymbol","gaurd","options","isBigInt","isData","isString","tupleName","isTyped","AddressCoder","dereference","decode","reader","AnonymousCoder","coder","pack","coders","arrayValues","unique","staticWriter","dynamicWriter","updateFuncs","dynamicOffset","updateFunc","baseOffset","unpack","baseReader","offsetReader","fromItems","ArrayCoder","defaultChild","BooleanCoder","DynamicBytesCoder","BytesCoder","FixedBytesCoder","Empty","NullCoder","BN_MAX_UINT256","NumberCoder","maxUintValue","WordSize","bounds","UnicodeNormalizationForm","Utf8ErrorReason","ignoreFunc","reason","output","badCodepoint","BAD_PREFIX","UNEXPECTED_CONTINUE","OVERRUN","Utf8ErrorFuncs","ignore","replace","OVERLONG","getUtf8CodePoints","_bytes","onError","extraLength","overlongMask","nextChar","MISSING_CONTINUE","OUT_OF_RANGE","UTF16_SURROGATE","toUtf8Bytes","current","c2","pair","escapeChar","_toEscapedUtf8String","codePoint","_toUtf8String","codePoints","toUtf8String","toUtf8CodePoints","formatBytes32String","parseBytes32String","createTable","_func","lo","createRangeTable","hi","matchMap","ranges","range","Table_A_1_ranges","Table_B_1_flags","Table_B_2_ranges","Table_B_2_lut_abs","Table_B_2_lut_rel","Table_B_2_complex","Table_C_ranges","nameprep","codes","codesTableB2","codepoint","_nameprepTableB2","NFKC","StringCoder","TupleCoder","uniqueNames","_AbiCoder_instances","_AbiCoder_getCoder","paramTypeBytes","paramTypeNumber","defaultAbiCoder","getDefaultValue","id","Zeros","Partition","isValidName","namehash","partition","dnsEncode","messagePrefix","hashMessage","_TypedDataEncoder_instances","_TypedDataEncoder_types","_TypedDataEncoder_fullTypes","_TypedDataEncoder_encoderCache","_TypedDataEncoder_getEncoder","padding","BN__1","hexTrue","hexFalse","domainFieldTypes","chainId","verifyingContract","domainFieldNames","checkString","domainChecks","getBaseEncoder","boundsUpper","boundsLower","hexPadRight","encodeType","fields","TypedDataEncoder","links","parents","subtypes","field","primaryTypes","primaryType","checkCircular","found","subtype","delete","st","sort","getEncoder","encoder","encodeData","hashStruct","_visit","callback","visit","domain","domainFields","EIP712Domain","hashDomain","ensCache","domainValues","domainTypes","typesWithDomain","subEncoder","encodedType","_Interface_instances","_Interface_errors","_Interface_events","_Interface_functions","_Interface_abiCoder","_Interface_getFunction","_Interface_getEvent","LogDescription","fragment","topic","signature","TransactionDescription","selector","ErrorDescription","Indexed","_isIndexed","PanicReasons","BuiltinErrors","Interface","fragments","abi","getAbiCoder","bucket","deploy","getFunctionName","getFunction","getEventName","getEvent","getError","getSelector","matching","getEventTopic","_decodeParams","_encodeParams","encodeDeploy","decodeErrorResult","encodeErrorResult","decodeFunctionData","encodeFunctionData","decodeFunctionResult","errorArgs","errorName","errorSignature","builtin","transaction","encodeFunctionResult","functionFragment","encodeFilterTopics","eventFragment","topics","encodeTopic","encodeEventLog","dataTypes","dataValues","decodeEventLog","eventTopic","nonIndexed","resultIndexed","resultNonIndexed","nonIndexedIndex","indexedIndex","parseTransaction","parseLog","parseError","hexData","forceUnique","lastValue","valueLength","allowOptions","splice","lastArg","matchStr","m","_FetchResponse_props","_FetchResponse_error","FetchResponse","statusCode","statusMessage","headers","body","request","bodyText","response","bodyJson","iterator","next","done","makeServerError","throwThrottleError","stall","throttle","getHeader","hasBody","ok","assertOk","getUrl","req","timeout","protocol","url","credentials","allowInsecureAuthentication","init","Headers","resp","fetch","arrayBuffer","status","statusText","_FetchRequest_props","FetchRequest","allowInsecure","gzip","bodyType","allowGzip","setHeader","clearHeaders","setCredentials","username","redirect","location","delay","duration","getTime","lockGateways","fetchData","connection","conn","attempts","throttleLimit","slotInterval","throttleSlotInterval","retryFunc","throttleRetry","preflightRequest","processResponse","t0","retryAfter","trunc","random","pow","setGateway","gateway","setIpfsGateway","setArGateway","_EnsResolver_supports2544","_EnsResolver_getResolver","HashZero","parseBytes","parseString","numPad","padded","bytesPad","encodeBytes","byteCount","getIpfsLink","MulticoinProviderPlugin","validate","proivder","supportsCoinType","coinType","matcherIpfs","matchers","EnsResolver","provider","catch","parameters","addrData","enableCcipRead","supportsWildcard","_fetch","getNetwork","formatter","callAddress","coinPlugin","plugin","plugins","encodeAddress","keyBytes","calldata","hexBytes","ipfs","scheme","swarm","_getAvatar","linkage","avatar","getText","owner","addr","tokenId","tokenOwner","balance","metadataUrl","metadata","imageUrl","image","currentName","network","ensPlugin","getPlugin","_Signature_props","BN_2","BN_27","BN_28","BN_35","BN_MASK_255","Zero","Signature","networkV","legacyChainId","getChainId","vs","yParity","serialized","toJSON","_type","bv","_v","sig","getNormalizedV","_3n","_8n","POW_2_256","CURVE","P","Gx","Gy","beta","weistrass","x2","mod","x3","USE_ENDOMORPHISM","JacobianPoint","Point","points","toInv","nums","scratch","inverted","invert","acc","num","reduceRight","invertBatch","toAffine","toAffineBatch","fromAffine","equals","X1","Y1","Z1","X2","Y2","Z2","Z1Z1","Z2Z2","U1","U2","S1","S2","negate","double","X3","Y3","Z3","ZERO","HH","HHH","subtract","multiplyUnsafe","scalar","normalizeScalar","P0","k1neg","k1","k2neg","k2","splitScalarEndo","k1p","k2p","precomputeWindow","W","windows","base","wNAF","affinePoint","BASE","_WINDOW_SIZE","precomputes","pointPrecomputes","normalizeZ","windowSize","maxNumber","shiftBy","wbits","pr","cached","abs","multiply","point","fake","f1p","f2p","invZ","iz1","iz2","iz3","ax","ay","_setWindowSize","isShort","bytesToNumber","isValidFieldElement","_6n","_11n","_22n","_23n","_44n","_88n","b2","b3","b6","pow2","b9","b11","b22","b44","b88","b176","b220","b223","t1","t2","sqrtMod","isYOdd","assertValidity","ensureBytes","header","fromCompressedHex","fromUncompressedHex","privateKey","normalizePrivateKey","msgHash","recovery","delta","truncateHash","fromDER","fromCompact","normalizeSignature","prefix","fromHex","numTo32bStr","rinv","u1","u2","Q","multiplyAndAddUnsafe","toRawBytes","isCompressed","hexToBytes","toHexX","toRawX","aP","bQ","sum","sliceDER","parseDERInt","bytesToHex","isUint8a","hexToNumber","sBytes","rBytesLeft","parseDERSignature","isWithinCurveOrder","hasHighS","HALF","normalizeS","toDERRawBytes","toDERHex","sHex","numberToHexUnpadded","rHex","rLen","sLen","toCompactRawBytes","toCompactHex","concatBytes","arrays","every","hexes","uint8a","array","hexByte","byte","power","number","modulo","divNearest","POW_2_128","a1","b1","a2","c1","HmacDrbg","counter","utils","hmacSha256","hmacSync","hmacSha256Sync","incr","seed","reseedSync","generateSync","kmdToSig","kBytes","q","isPub","getSharedSecret","privateA","publicB","publicKey","bits2int","bits2octets","z1","z2","int2octets","signSync","privKey","extraEntropy","seedArgs","initSigArgs","drbg","recSig","canonical","der","recovered","finalizeSig","node","web","isValidPrivateKey","hashToPrivateKey","numTo32b","bytesLength","randomPrivateKey","subtle","messages","ckey","importKey","sign","sha256Sync","precompute","_SigningKey_privateKey","secp256k1.utils","SigningKey","computePublicKey","compressedPublicKey","sigDer","recid","secp256k1.signSync","secp256k1.Signature","computeShardSecret","pubKey","secp256k1.getSharedSecret","compressed","fromPrivateKey","secp256k1.getPublicKey","pub","secp256k1.Point","fromSignature","secp256k1.recoverPublicKey","p0","p1","pub0","pub1","accessSetify","storageKeys","storageKey","accessListify","localeCompare","_Transaction_props","formatNumber","formatAccessList","_serializeLegacy","gasPrice","gasLimit","legacy","getChainIdV","_serializeEip1559","maxPriorityFeePerGas","maxFeePerGas","accessList","_serializeEip2930","Transaction","typeName","unsignedHash","unsignedSerialized","fromPublicKey","isSigned","inferTypes","hasGasPrice","hasFee","hasAccessList","_parseEip1559","_Block_transactions","_TransactionReceipt_logs","toJson","FeeData","Block","dummyProvider","transactions","timestamp","parentHash","difficulty","gasUsed","miner","extraData","baseFeePerGas","date","getTransaction","isMined","isLondon","orphanedEvent","orphan","Log","transactionHash","blockHash","blockNumber","removed","transactionIndex","getBlock","getTransactionReceipt","removedEvent","TransactionReceipt","logs","contractAddress","logsBloom","cumulativeGasUsed","effectiveGasPrice","byzantium","root","fee","getBlockNumber","createRemovedTransactionFilter","reorderedEvent","createReorderedTransactionFilter","TransactionResponse","confirms","waitForTransaction","isLegacy","isBerlin","fail","blockTag","position","signedTx","blockHashOrBlockTag","_Formatter_format","_Formatter_baseBlock","Formatter","bigNumber","uint256","arrayOf","fromBlock","allowNull","toBlock","transactionRequest","transactionResponse","blockWithTransactions","fromTransaction","boolean","receipt","filterLog","allowFalsish","ifFalse","ifNull","_hexstring","dataOrLength","altNames","srcKey","altKey","nv","storageSlot","NetworkPlugin","GasCostPlugin","effectiveBlock","costs","props","nullish","EnsPlugin","targetNetwork","MaxPriorityFeePlugin","priorityFee","_Network_props","Networks","defaultFormatter","Network","_chainId","attachPlugin","getPlugins","basename","computeIntrinsicGas","txBase","txCreate","txDataZero","txDataNonzero","txAccessListAddress","txAccessListStorageKey","networkFunc","custom","ensAddress","ensNetwork","nameOrChainId","existing","_PollingBlockSubscriber_instances","_PollingBlockSubscriber_provider","_PollingBlockSubscriber_poller","_PollingBlockSubscriber_interval","_PollingBlockSubscriber_blockNumber","_PollingBlockSubscriber_poll","_OnBlockSubscriber_provider","_OnBlockSubscriber_poll","_PollingOrphanSubscriber_filter","_PollingTransactionSubscriber_hash","_PollingEventSubscriber_instances","_PollingEventSubscriber_provider","_PollingEventSubscriber_filter","_PollingEventSubscriber_poller","_PollingEventSubscriber_blockNumber","_PollingEventSubscriber_poll","PollingBlockSubscriber","pollingInterval","stop","clearTimeout","pause","dropWhilePaused","resume","emit","OnBlockSubscriber","_poll","on","PollingOrphanSubscriber","PollingTransactionSubscriber","PollingEventSubscriber","getLogs","_AbstractProvider_instances","_AbstractProvider_subs","_AbstractProvider_plugins","_AbstractProvider_pausedState","_AbstractProvider_networkPromise","_AbstractProvider_anyNetwork","_AbstractProvider_performCache","_AbstractProvider_nextTimer","_AbstractProvider_timers","_AbstractProvider_disableCcipRead","_AbstractProvider_perform","_AbstractProvider_call","_AbstractProvider_getBlock","_AbstractProvider_hasSub","_AbstractProvider_getSub","getTag","UnmanagedSubscriber","concisify","getSubscription","_event","tag","addresses","addAddress","AbstractProvider","_network","disableCcipRead","urls","sender","errorMessages","href","errorMessage","_wrapTransaction","_detectNetwork","detectNetwork","networkPromise","expected","actual","priorityFeePlugin","getPriorityFee","_request","_tx","_getTransaction","_getBlockTag","_address","_blockTag","_position","lookup","addBlockTag","_filter","_getFilter","_getProvider","fromName","getResolver","getAvatar","reject","timer","once","_clearTimeout","timerId","_setTimeout","_b","paused","time","_forEachSubscriber","sub","subscriber","_getSubscriber","_recoverSubscriber","oldSub","newSub","started","listeners","total","removeAllListeners","_parseString","_parseBytes","perform","_perform","attempt","txSender","ccipArgs","urlsOffset","urlsLength","urlsData","parseOffchainLookup","ccipResult","ccipReadFetch","includeTransactions","emitArgs","subscription","addressableMap","nameMap","empty","_AbstractSigner_instances","_AbstractSigner_checkProvider","_AbstractSigner_fromify","_VoidSigner_instances","_VoidSigner_throwUnsupported","_WrappedSigner_signer","AbstractSigner","getBalanceOf","getTransactionCountOf","estimateGas","getTransactionCount","txObj","populateTransaction","broadcastTransaction","signTransaction","actions","VoidSigner","connect","WrappedSigner","signer","sendTransaction","signMessage","signTypedData","shown","showThrottleMessage","service","_FilterIdSubscriber_instances","_FilterIdSubscriber_provider","_FilterIdSubscriber_filterIdPromise","_FilterIdSubscriber_poller","_FilterIdSubscriber_network","_FilterIdSubscriber_poll","_FilterIdSubscriber_teardown","_FilterIdEventSubscriber_event","FilterIdSubscriber","_subscribe","_emitResults","_recover","filterId","send","filterIdPromise","FilterIdEventSubscriber","results","FilterIdPendingSubscriber","_JsonRpcApiProvider_nextId","_JsonRpcApiProvider_options","_JsonRpcProvider_connect","_JsonRpcProvider_pollingInterval","Primitive","deepCopy","getLowerCase","defaultOptions","polling","batchMaxSize","batchStallTime","JsonRpcSigner","getFeeData","_to","hexTx","getRpcTransaction","sendUncheckedTransaction","checkTx","_message","populated","resolveNames","getPayload","JsonRpcApiProvider","_getOptions","_setOptions","prepareRequest","jsonrpc","accounts","account","dstKey","getRpcRequest","signedTransaction","getRpcError","spelunkData","_spelunkMessage","spelunkMessage","feeData","JsonRpcProvider","isPollable","StaticJsonRpcProvider","defaultApiKey","AnkrProvider","apiKey","getConnection","getHost","isCommunityResource","AlchemyProvider","CloudflareProvider","EtherscanPluginId","EtherscanPlugin","baseUrl","communityApiKey","EtherscanProvider","getBaseUrl","query","getPostUrl","getPostData","apikey","post","_getTransactionPostData","maxFeePerGs","_checkError","action","txhash","postData","ethusd","defaultProjectId","InfuraProvider","projectId","projectSecret","defaultAppIds","homestead","ropsten","rinkeby","goerli","normalizeApiKey","_appId","applicationSecretKey","loadBalancer","community","applicationId","PocketProvider","_secretKey","_loadBalancer","_FallbackProvider_instances","_FallbackProvider_configs","_FallbackProvider_initialSyncPromise","_FallbackProvider_getNextConfig","_FallbackProvider_addRunner","_FallbackProvider_initialSync","_FallbackProvider_checkQuorum","_FallbackProvider_waitForQuorum","defaultConfig","stallTimeout","priority","weight","defaultState","requests","lateResponses","errorResponses","outOfSync","unsupportedEvents","rollingDuration","score","_updateNumber","_totalTime","checkQuorum","quorum","tally","normal","bestResult","bestWeight","FallbackProvider","providers","eventQuorum","eventWorkers","running","runner","configs","allConfigs","shuffle","config","didBump","staller","dt","initialSync","waitForSync","mid","getMedian","interesting","newRunners","race","_WebSocket","WebSocket","_SocketSubscriber_provider","_SocketSubscriber_filter","_SocketSubscriber_filterId","_SocketSubscriber_paused","_SocketSubscriber_emitPromise","_SocketEventSubscriber_logFilter","_SocketEventSubscriber_formatter","_SocketProvider_callbacks","_SocketProvider_ready","_SocketProvider_subs","_SocketProvider_pending","SocketSubscriber","_register","_handleMessage","emitPromise","_emit","SocketBlockSubscriber","SocketPendingSubscriber","SocketEventSubscriber","logFilter","SocketProvider","pending","promise","_write","_WebSocketProvider_websocket","WebSocketProvider","websocket","onopen","_start","onmessage","_processMessage","registerEth","etherscan","injectCommonNetworks","_Network","IpcSocketProvider","_ContractTransactionReceipt_interface","_ContractTransactionResponse_interface","EventLog","iface","interface","eventName","eventSignature","ContractTransactionReceipt","ContractTransactionResponse","wait","ContractEventPayload","contract","_log","_PreparedTopicFilter_filter","canResolve","PreparedTopicFilter","getRunner","resolvedArgs","walkAsync","getTopicFilter","feature","copyOverrides","arg","overrides","bigIntKeys","numberKeys","enableCcipReadEnabled","customData","copyRequest","WrappedMethod","Function","_WrappedMethodBase","_contract","thisArg","getFragment","staticCall","_runner","resolveArgs","staticCallResult","WrappedEvent","_WrappedEventBase","internalValues","getInternal","getSubTag","hasSub","subs","getSub","runnerOff","lastEmit","resultPromise","passArgs","BaseContract","_deployTx","addrPromise","deployTx","filters","_prop","deploymentTransaction","Contract","_ContractBase","computeAddress","subsChrs","Word","unfold","words","sep","initial","decodeOwl","clumps","leftover","semi","Wordlist","locale","mnemonic","_WordlistOwl_instances","_WordlistOwl_data","_WordlistOwl_checksum","_WordlistOwl_words","_WordlistOwl_loadWords","WordlistOwl","_decodeWords","getWord","getWordIndex","langEn","wordlists","en","_WordlistOwlA_accent","WordlistOwlA","accent","_accent","accents","posOffset","positions","flood","decodeBits","charCode","regex","decodeOwlA","getUpperMask","mnemonicToEntropy","wordlist","entropy","bit","entropyBits","checksumMask","entropyToMnemonic","indices","remainingBits","checksumBits","Mnemonic","phrase","computeSeed","NFKD","_entropy","_BaseWallet_signingKey","BaseWallet","signingKey","btx","_HDNodeWallet_fromSeed","_HDNodeWalletManager_root","defaultPath","MasterSecret","zpad","encodeBase58Check","ser_I","chainCode","I","IL","IR","derivePath","path","component","deriveChild","HDNodeWallet","parentFingerprint","fingerprint","extendedKey","hasPath","neuter","HDNodeVoidWallet","_index","ki","fromPhrase","fromEntropy","_seed","Ki","_addPoints","HDNodeWalletManager","getSigner","getAccountPath","_AES_key","_AES_Kd","_AES_Ke","numberOfRounds","rcon","S","Si","T3","T4","T5","T6","T7","T8","U3","U4","convertToInt32","AES","roundKeyCount","KC","tk","tt","rconpointer","encrypt","plaintext","decrypt","ciphertext","ModeOfOperation","cls","aes","_CBC_iv","_CBC_lastBlock","CBC","iv","_CTR_remaining","_CTR_remainingIndex","_CTR_counter","CTR","initialValue","setCounterValue","setCounterBytes","MAX_SAFE_INTEGER","increment","crypttext","looseArrayify","hexString","getPassword","spelunk","_path","reqd","isCrowdsaleJson","encseed","decryptCrowdsaleJson","encryptedSeed","padder","pkcs7Strip","seedHex","isKeystoreJson","getAccount","mnemonicKey","mnemonicCiphertext","mnemonicIv","mnemonicAesCtr","getKdfParams","kdf","prf","_Wallet_mnemonic","trySigningKey","Wallet","wallet","fromMnemonic","tryWallet","tryMnemonic","progressCallback","encryptSync","decryptKeystoreJson","decryptKeystoreJsonSync"],"mappings":"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IAAM,GAAM,IAAM,GAAM,IAAM,EAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,GAAM,IAAM,GAAM,IAAM,EAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,GAAM,GAAM,GAAM,EAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,EAAM,IAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,EAAM,IAAM,GAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,IAC//CC,GAAK,CAAC,GAAM,EAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,EAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,EAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,EAAM,IAAM,IAAM,GAAM,EAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,GAAM,EAAM,IAAM,IAAM,IAAM,EAAM,EAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,EAAM,IAAM,GAAM,IAAM,GAAM,GAAM,GAAM,GAAM,IAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,GAAM,EAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,GAAM,GAAM,GAAM,GAAM,KAEhgDhkD,GAAK,CAAC,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,EAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAC1/FC,GAAK,CAAC,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,EAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,SAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAC1/FgkD,GAAK,CAAC,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,SAAY,WAAY,UAAY,WAAY,UAAY,WAAY,SAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,EAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAC1/FC,GAAK,CAAC,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,SAAY,WAAY,UAAY,WAAY,UAAY,WAAY,SAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,EAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAE1/FC,GAAK,CAAC,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,EAAY,UAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/FC,GAAK,CAAC,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,EAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,SAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/FC,GAAK,CAAC,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,SAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,EAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/FC,GAAK,CAAC,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,SAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,WAAY,SAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,SAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,EAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,YAE1/Fx1B,GAAK,CAAC,EAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/FC,GAAK,CAAC,EAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,SAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,SAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/Fw1B,GAAK,CAAC,EAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,UAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,UAAY,UAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,UAAY,UAAY,WAAY,UAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/FC,GAAK,CAAC,EAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAA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"} \ No newline at end of file diff --git a/packages/ethers/dist/ethers.umd.min.js b/packages/ethers/dist/ethers.umd.min.js new file mode 100644 index 000000000..57cb143b7 --- /dev/null +++ b/packages/ethers/dist/ethers.umd.min.js @@ -0,0 +1,6 @@ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).ethers={})}(this,(function(t){"use strict";async function e(t){const e=Object.keys(t);return(await Promise.all(e.map((e=>Promise.resolve(t[e]))))).reduce(((t,r,n)=>(t[e[n]]=r,t)),{})}function r(t,e){const r=e.split("|").map((t=>t.trim()));for(let n=0;n{try{if("test"!=="test".normalize(e))throw new Error("bad");if("NFD"===e){const t=String.fromCharCode(233).normalize("NFD");if(t!==String.fromCharCode(101,769))throw new Error("broken")}t.push(e)}catch(t){}return t}),[]);function T(t,e,r){Object.defineProperty(t,e,{enumerable:!0,writable:!1,value:r})}const k=9007199254740991,A={};A.INVALID_ARGUMENT=TypeError,A.NUMERIC_FAULT=RangeError,A.BUFFER_OVERRUN=RangeError;class N{constructor(t){f.add(this),T(this,"version",t||"_")}makeError(t,e,r){{const s=[];if(r)for(const t in r){const e=r[t];try{s.push(t+"="+JSON.stringify(e))}catch(n){s.push(t+"=[could not serialize object]")}}s.push(`code=${e}`),s.push(`version=${this.version}`),s.length&&(t+=" ("+s.join(", ")+")")}const n=new(A[e]||Error)(t);if(T(n,"code",e),r)for(const t in r)T(n,t,r[t]);return n}throwError(t,e,r){throw this.makeError(t,e,r)}throwArgumentError(t,e,r){return this.throwError(t,"INVALID_ARGUMENT",{argument:e,value:r})}assert(t,e,r,n){t||this.throwError(e,r||"UNKNOWN_ERROR",n)}assertArgument(t,e,r,n){return this.assert(t,e,"INVALID_ARGUMENT",{argument:r,value:n})}assertIntegerArgument(t,e,r,n){let s=null;"number"!=typeof e?s="expected a number":Number.isInteger(e)?(null!=r&&en)&&(s="value is out of range"):s="invalid integer",s&&this.throwArgumentError(s,t,e)}assertSafeUint53(t,e){this.assertArgument("number"==typeof t,"invalid number","value",t),null==e&&(e="value not safe");const r="assertSafeInteger";this.assert(t>=0&&t<9007199254740991,e,"NUMERIC_FAULT",{operation:r,fault:"out-of-safe-range",value:t}),this.assert(t%1==0,e,"NUMERIC_FAULT",{operation:r,fault:"non-integer",value:t})}assertNormalize(t){-1===E.indexOf(t)&&this.throwError("platform missing String.prototype.normalize","UNSUPPORTED_OPERATION",{operation:"String.prototype.normalize",info:{form:t}})}assertPrivate(t,e,r=""){if(t!==e){let t=r,e="new";r&&(t+=".",e+=" "+r),this.throwError(`private constructor; use ${t}from* methods`,"UNSUPPORTED_OPERATION",{operation:e})}}assertArgumentCount(t,e,r=""){r&&(r=": "+r),this.assert(t>=e,"missing arguemnt"+r,"MISSING_ARGUMENT",{count:t,expectedCount:e}),this.assert(t>=e,"too many arguemnts"+r,"UNEXPECTED_ARGUMENT",{count:t,expectedCount:e})}assertInt53(t,e){m(this,f,"m",d).call(this,"Int53",t,e||"unknown",-k)}assertUint53(t,e){m(this,f,"m",d).call(this,"Int53",t,e||"unknown",0)}assertInteger(t,e="unknown",r=0,n=k){}getBytes(t,e){return m(this,f,"m",p).call(this,t,e,!1)}getBytesCopy(t,e){return m(this,f,"m",p).call(this,t,e,!0)}getNumber(t,e){switch(typeof t){case"bigint":return(t<-k||t>k)&&this.throwArgumentError("overflow",e||"value",t),Number(t);case"number":return Number.isInteger(t)?(t<-k||t>k)&&this.throwArgumentError("overflow",e||"value",t):this.throwArgumentError("underflow",e||"value",t),t;case"string":try{return this.getNumber(BigInt(t),e)}catch(r){this.throwArgumentError(`invalid numeric string: ${r.message}`,e||"value",t)}}return this.throwArgumentError("invalid numeric value",e||"value",t)}getBigInt(t,e){switch(typeof t){case"bigint":return t;case"number":return Number.isInteger(t)?(t<-k||t>k)&&this.throwArgumentError("overflow",e||"value",t):this.throwArgumentError("underflow",e||"value",t),BigInt(t);case"string":try{return BigInt(t)}catch(r){this.throwArgumentError(`invalid BigNumberish string: ${r.message}`,e||"value",t)}}return this.throwArgumentError("invalid BigNumberish value",e||"value",t)}debug(...t){m(this,f,"m",w).call(this,g.DEBUG,t)}info(...t){m(this,f,"m",w).call(this,g.INFO,t)}warn(...t){m(this,f,"m",w).call(this,g.WARNING,t)}static globalLogger(){return v||(v=new N("@ethersproject/logger@6.0.0-beta.1")),v}static setLogLevel(t){const e=y[t.toLowerCase()];null!=e?b=e:N.globalLogger().warn("invalid log level - "+t)}}f=new WeakSet,d=function(t,e,r,n){("number"!=typeof e||isNaN(e))&&this.throwArgumentError(`invalid ${t}`,"INVALID_ARGUMENT",{name:"value",value:e});let s=`invalid ${t} value`,i=null;isNaN(e)?i="not-a-number":ek?(s=`unsafe ${t} value`,i="overflow"):Math.floor(e)!==e&&(i="underflow"),i&&this.throwError(s,"NUMERIC_FAULT",{operation:r,fault:i,value:e})},p=function(t,e,r){if(t instanceof Uint8Array)return r?new Uint8Array(t):t;if("string"==typeof t&&t.match(/^0x([0-9a-f][0-9a-f])*$/i)){const e=new Uint8Array((t.length-2)/2);let r=2;for(let n=0;ny[r]||console.log.apply(console,e)},N.LogLevels=g;const P=new N("@ethersproject/abi@6.0.0-beta.1");var x,O,I,S,R,_,C,B=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},F=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};function U(t){const e=new Set;return t.forEach((t=>e.add(t))),Object.freeze(e)}!function(t){t.sighash="sighash",t.minimal="minimal",t.full="full",t.json="json"}(C||(C={}));const L="constant external internal payable private public pure view",D=U(L.split(" ")),M="constructor error event function struct",j=U(M.split(" ")),G="calldata memory storage payable indexed",$=U(G.split(" ")),z=U([M,G,"tuple returns",L].join(" ").split(" ")),W={"(":"OPEN_PAREN",")":"CLOSE_PAREN","[":"OPEN_BRACKET","]":"CLOSE_BRACKET",",":"COMMA","@":"AT"},H=new RegExp("^(\\s*)"),V=new RegExp("^([0-9]+)"),K=new RegExp("^([a-zA-Z$_][a-zA-Z0-9$_]*)"),J=new RegExp("^(address|bool|bytes(0-9*)|string|u?int([0-9]*))");class q{constructor(t){x.add(this),O.set(this,void 0),I.set(this,void 0),B(this,O,0,"f"),B(this,I,t.slice(),"f")}get offset(){return F(this,O,"f")}get length(){return F(this,I,"f").length-F(this,O,"f")}clone(){return new q(F(this,I,"f"))}reset(){B(this,O,0,"f")}popKeyword(t){const e=this.peek();if("KEYWORD"!==e.type||!t.has(e.text))throw new Error(`expected keyword ${e.text}`);return this.pop().text}popType(t){if(this.peek().type!==t)throw new Error(`expected ${t}; got ${JSON.stringify(this.peek())}`);return this.pop().text}popParen(){const t=this.peek();if("OPEN_PAREN"!==t.type)throw new Error("bad start");const e=F(this,x,"m",S).call(this,F(this,O,"f")+1,t.match+1);return B(this,O,t.match+1,"f"),e}popParams(){const t=this.peek();if("OPEN_PAREN"!==t.type)throw new Error("bad start");const e=[];for(;F(this,O,"f")=F(this,I,"f").length)throw new Error("out-of-bounds");return F(this,I,"f")[F(this,O,"f")]}peekKeyword(t){const e=this.peekType("KEYWORD");return null!=e&&t.has(e)?e:null}peekType(t){if(0===this.length)return null;const e=this.peek();return e.type===t?e.text:null}pop(){var t;const e=this.peek();return B(this,O,(t=F(this,O,"f"),++t),"f"),e}toString(){const t=[];for(let e=F(this,O,"f");e`}}function X(t){const e=[],r=e=>{const r=i0&&"NUMBER"===e[e.length-1].type){const r=e.pop().text;t=r+t,e[e.length-1].value=P.getNumber(r)}if(0===e.length||"BRACKET"!==e[e.length-1].type)throw new Error("missing opening bracket");e[e.length-1].text+=t}}else if(a=o.match(K),a){if(c.text=a[1],i+=c.text.length,z.has(c.text)){c.type="KEYWORD";continue}if(c.text.match(J)){c.type="TYPE";continue}c.type="ID"}else{if(a=o.match(V),!a)throw new Error(`unexpected token ${JSON.stringify(o[0])} at position ${i}`);c.text=a[1],c.type="NUMBER",i+=c.text.length}}return new q(e.map((t=>Object.freeze(t))))}function Y(t,e){let r=[];for(const n in e.keys())t.has(n)&&r.push(n);if(r.length>1)throw new Error(`conflicting types: ${r.join(", ")}`)}function Z(t,e){if(e.peekKeyword(j)){const r=e.pop().text;if(r!==t)throw new Error(`expected ${t}, got ${r}`)}return e.popType("ID")}function Q(t,e){const r=new Set;for(;;){const n=t.peekType("KEYWORD");if(null==n||e&&!e.has(n))break;if(t.pop(),r.has(n))throw new Error(`duplicate keywords: ${JSON.stringify(n)}`);r.add(n)}return Object.freeze(r)}function tt(t,e){return t.popParams().map((t=>ct.fromTokens(t,e)))}function et(t){if(t.peekType("AT")){if(t.pop(),t.peekType("NUMBER"))return P.getBigInt(t.pop().text);throw new Error("invalid gas")}return null}function rt(t){if(t.length)throw new Error(`unexpected tokens: ${t.toString()}`)}O=new WeakMap,I=new WeakMap,x=new WeakSet,S=function(t=0,e=0){return new q(F(this,I,"f").slice(t,e).map((e=>Object.freeze(Object.assign({},e,{match:e.match-t,linkBack:e.linkBack-t,linkNext:e.linkNext-t})))))};const nt=new RegExp(/^(.*)\[([0-9]*)\]$/);function st(t){const e=t.match(J);if(!e)return P.throwArgumentError("invalid type","type",t);if("uint"===t)return"uint256";if("int"===t)return"int256";if(e[2]){const r=parseInt(e[2]);(0===r||r>32)&&P.throwArgumentError("invalid bytes length","type",t)}else if(e[3]){const r=parseInt(e[3]);(0===r||r>256||r%8)&&P.throwArgumentError("invalid numeric width","type",t)}return t}const it={},ot=Symbol.for("_ethers_internal"),at="_ParamTypeInternal";class ct{constructor(t,e,r,s,i,o,a,c){if(R.add(this),P.assertPrivate(t,it,"ParamType"),Object.defineProperty(this,ot,{value:at}),o&&(o=Object.freeze(o.slice())),"array"===s){if(null==a||null==c)throw new Error("")}else if(null!=a||null!=c)throw new Error("");if("tuple"===s){if(null==o)throw new Error("")}else if(null!=o)throw new Error("");n(this,{name:e,type:r,baseType:s,indexed:i,components:o,arrayLength:a,arrayChildren:c})}format(t=C.sighash){if(C[t]||P.throwArgumentError("invalid format type","format",t),t===C.json){let e={type:"tuple"===this.baseType?"tuple":this.type,name:this.name||void 0};return"boolean"==typeof this.indexed&&(e.indexed=this.indexed),this.isTuple()&&(e.components=this.components.map((e=>JSON.parse(e.format(t))))),JSON.stringify(e)}let e="";return this.isArray()?(e+=this.arrayChildren.format(t),e+=`[${this.arrayLength<0?"":String(this.arrayLength)}]`):this.isTuple()?(t!==C.sighash&&(e+=this.type),e+="("+this.components.map((e=>e.format(t))).join(t===C.full?", ":",")+")"):e+=this.type,t!==C.sighash&&(!0===this.indexed&&(e+=" indexed"),t===C.full&&this.name&&(e+=" "+this.name)),e}static isArray(t){return t&&"array"===t.baseType}isArray(){return"array"===this.baseType}isTuple(){return"tuple"===this.baseType}isIndexable(){return null!=this.indexed}walk(t,e){if(this.isArray()){if(!Array.isArray(t))throw new Error("invlaid array value");if(-1!==this.arrayLength&&t.length!==this.arrayLength)throw new Error("array is wrong length");return t.map((t=>this.arrayChildren.walk(t,e)))}if(this.isTuple()){if(!Array.isArray(t))throw new Error("invlaid tuple value");if(t.length!==this.components.length)throw new Error("array is wrong length");return t.map(((t,r)=>this.components[r].walk(t,e)))}return e(this.type,t)}async walkAsync(t,e){const r=[],n=[t];return F(this,R,"m",_).call(this,r,t,e,(t=>{n[0]=t})),r.length&&await Promise.all(r),n[0]}static from(t,e){if(ct.isParamType(t))return t;if("string"==typeof t)return ct.fromTokens(X(t),e);if(t instanceof q)return ct.fromTokens(t,e);const r=t.name;!r||"string"==typeof r&&r.match(K)||P.throwArgumentError("invalid name","obj.name",r);let n=t.indexed;null!=n&&(e||P.throwArgumentError("parameter cannot be indexed","obj.indexed",t.indexed),n=!!n);let s=t.type,i=s.match(nt);if(i){const e=i[2],o=ct.from({type:i[1],components:t.components});return new ct(it,r,s,"array",n,null,e,o)}if("tuple("===s.substring(0,5)||"("===s[0]){const e=null!=t.components?t.components.map((t=>ct.from(t))):null;return new ct(it,r,s,"tuple",n,e,null,null)}return s=st(t.type),new ct(it,r,s,s,n,null,null,null)}static fromObject(t,e){throw new Error("@TODO")}static fromTokens(t,e){let r="",n="",s=null;Q(t,U(["tuple"])).has("tuple")||t.peekType("OPEN_PAREN")?(n="tuple",s=t.popParams().map((t=>ct.from(t))),r=`tuple(${s.map((t=>t.format())).join(",")})`):(r=st(t.popType("TYPE")),n=r);let i=null,o=null;for(;t.length&&t.peekType("BRACKET");){const e=t.pop();i=new ct(it,"",r,n,null,s,o,i),o=e.value,r+=e.text,n="array",s=null}let a=null;if(Q(t,$).has("indexed")){if(!e)throw new Error("");a=!0}const c=t.peekType("ID")?t.pop().text:"";if(t.length)throw new Error("leftover tokens");return new ct(it,c,r,n,a,s,o,i)}static isParamType(t){return t&&t[ot]===at}}var lt;R=new WeakSet,_=function t(e,r,n,s){if(this.isArray()){if(!Array.isArray(r))throw new Error("invlaid array value");if(-1!==this.arrayLength&&r.length!==this.arrayLength)throw new Error("array is wrong length");const i=this.arrayChildren,o=r.slice();return o.forEach(((r,s)=>{F(i,R,"m",t).call(i,e,r,n,(t=>{o[s]=t}))})),void s(o)}if(this.isTuple()){const i=this.components;let o;if(Array.isArray(r))o=r.slice();else{if(null==r||"object"!=typeof r)throw new Error("invlaid tuple value");o=i.map((t=>{if(!t.name)throw new Error("cannot use object value with unnamed components");if(!(t.name in r))throw new Error(`missing value for component ${t.name}`);return r[t.name]}))}if(r.length!==this.components.length)throw new Error("array is wrong length");return o.forEach(((r,s)=>{var a;F(a=i[s],R,"m",t).call(a,e,r,n,(t=>{o[s]=t}))})),void s(o)}const i=n(this.type,r);i.then?e.push(async function(){s(await i)}()):s(i)},function(t){t.constructor="constructor",t.error="error",t.event="event",t.function="function",t.struct="struct"}(lt||(lt={}));class ut{constructor(t,e,r){P.assertPrivate(t,it,"Fragment"),n(this,{type:e,inputs:r=Object.freeze(r.slice())})}static from(t){if("string"==typeof t)return this.fromString(t);if(t instanceof q)return this.fromTokens(t);if("object"==typeof t)return this.fromObject(t);throw new Error(`unsupported type: ${t}`)}static fromObject(t){switch(t.type){case"constructor":return wt.fromObject(t);case"error":return dt.fromObject(t);case"event":return pt.fromObject(t);case"function":return gt.fromObject(t);case"struct":return mt.fromObject(t)}throw new Error("not implemented yet")}static fromString(t){try{ut.from(JSON.parse(t))}catch(t){}return ut.fromTokens(X(t))}static fromTokens(t){const e=t.popKeyword(j);switch(e){case"constructor":return wt.fromTokens(t);case"error":return dt.fromTokens(t);case"event":return pt.fromTokens(t);case"function":return gt.fromTokens(t);case"struct":return mt.fromTokens(t)}throw new Error(`unsupported type: ${e}`)}static isConstructor(t){return t&&"constructor"===t.type}static isError(t){return t&&"error"===t.type}static isEvent(t){return t&&"event"===t.type}static isFunction(t){return t&&"function"===t.type}static isStruct(t){return t&&"struct"===t.type}}class ht extends ut{constructor(t,e,r,s){super(t,e,s),s=Object.freeze(s.slice()),n(this,{name:r})}}function ft(t,e){return"("+e.map((e=>e.format(t))).join(t===C.full?", ":",")+")"}class dt extends ht{constructor(t,e,r){super(t,lt.error,e,r)}format(t=C.sighash){if(C[t]||P.throwArgumentError("invalid format type","format",t),t===C.json)return JSON.stringify({type:"error",name:this.name,inputs:this.inputs.map((e=>JSON.parse(e.format(t))))});const e=[];return t!==C.sighash&&e.push("error"),e.push(this.name+ft(t,this.inputs)),e.join(" ")}static fromString(t){return dt.fromTokens(X(t))}static fromTokens(t){const e=Z("error",t),r=tt(t);return rt(t),new dt(it,e,r)}}class pt extends ht{constructor(t,e,r,s){super(t,lt.event,e,r),n(this,{anonymous:s})}format(t=C.sighash){if(C[t]||P.throwArgumentError("invalid format type","format",t),t===C.json)return JSON.stringify({type:"event",anonymous:this.anonymous,name:this.name,inputs:this.inputs.map((e=>JSON.parse(e.format(t))))});const e=[];return t!==C.sighash&&e.push("event"),e.push(this.name+ft(t,this.inputs)),t!==C.sighash&&this.anonymous&&e.push("anonymous"),e.join(" ")}static fromString(t){return pt.fromTokens(X(t))}static fromTokens(t){const e=Z("event",t),r=tt(t,!0),n=!!Q(t,U(["anonymous"])).has("anonymous");return rt(t),new pt(it,e,r,n)}}class wt extends ut{constructor(t,e,r,s,i){super(t,e,r),n(this,{payable:s,gas:i})}format(t=C.sighash){if(C[t]||P.throwArgumentError("invalid format type","format",t),t===C.sighash&&P.throwError("cannot format a constructor for sighash","UNSUPPORTED_OPERATION",{operation:"format(sighash)"}),t===C.json)return JSON.stringify({type:"constructor",stateMutability:this.payable?"payable":"undefined",payable:this.payable,gas:null!=this.gas?this.gas:void 0,inputs:this.inputs.map((e=>JSON.parse(e.format(t))))});const e=[`constructor${ft(t,this.inputs)}`];return e.push(this.payable?"payable":"nonpayable"),null!=this.gas&&e.push(`@${this.gas.toString()}`),e.join(" ")}static fromString(t){return wt.fromTokens(X(t))}static fromObject(t){throw new Error("TODO")}static fromTokens(t){Q(t,U(["constructor"]));const e=tt(t),r=!!Q(t,U(["payable"])).has("payable"),n=et(t);return rt(t),new wt(it,lt.constructor,e,r,n)}}class gt extends ht{constructor(t,e,r,s,i,o){super(t,lt.function,e,s);n(this,{constant:"view"===r||"pure"===r,gas:o,outputs:i=Object.freeze(i.slice()),payable:"payable"===r,stateMutability:r})}format(t=C.sighash){if(C[t]||P.throwArgumentError("invalid format type","format",t),t===C.json)return JSON.stringify({type:"function",name:this.name,constant:this.constant,stateMutability:"nonpayable"!==this.stateMutability?this.stateMutability:void 0,payable:this.payable,gas:null!=this.gas?this.gas:void 0,inputs:this.inputs.map((e=>JSON.parse(e.format(t)))),outputs:this.outputs.map((e=>JSON.parse(e.format(t))))});const e=[];return t!==C.sighash&&e.push("function"),e.push(this.name+ft(t,this.inputs)),t!==C.sighash&&("nonpayable"!==this.stateMutability&&e.push(this.stateMutability),this.outputs&&this.outputs.length&&(e.push("returns"),e.push(ft(t,this.outputs))),null!=this.gas&&e.push(`@${this.gas.toString()}`)),e.join(" ")}static fromString(t){return gt.fromTokens(X(t))}static fromTokens(t){const e=Z("function",t),r=tt(t),n=function(t){let e=Q(t,D);return Y(e,U("constant payable nonpayable".split(" "))),Y(e,U("pure view payable nonpayable".split(" "))),e.has("view")?"view":e.has("pure")?"pure":e.has("payable")?"payable":e.has("nonpayable")?"nonpayable":e.has("constant")?"view":"nonpayable"}(t);let s=[];Q(t,U(["returns"])).has("returns")&&(s=tt(t));const i=et(t);return rt(t),new gt(it,e,n,r,s,i)}}class mt extends ht{format(){throw new Error("@TODO")}static fromString(t){return mt.fromTokens(X(t))}static fromTokens(t){const e=Z("struct",t),r=tt(t);return rt(t),new mt(it,lt.struct,e,r)}}const yt=new N("@ethersproject/math@6.0.0-beta.1"),bt=9007199254740991,vt="0123456789abcdef",Et=BigInt(0);function Tt(t){if(t instanceof Uint8Array){let e="0x0";for(const r of t)e+=vt[r>>4],e+=vt[15&r];return BigInt(e)}return yt.getBigInt(t,"value")}function kt(t){const e=Tt(t);return(e<-bt||e>bt)&&yt.throwArgumentError("overflow","value",t),Number(e)}function At(t,e){const r=yt.getBigInt(t,"value");if(r<0)throw new Error("cannot convert negative value to hex");let n=r.toString(16);if(null==e)n.length%2&&(n="0"+n);else{const t=yt.getNumber(e,"width");if(2*t>n-xt){return-((~r&(xt<256||t%1)&&yt.throwArgumentError("invalid decimal length","decimals",t),BigInt("1"+Mt.substring(0,t))}function Gt(t,e=0){let r=yt.getBigInt(t,"value");const n=jt(yt.getNumber(e,"decimals")),s=String(n),i=r<0;i&&(r*=Lt);let o=String(r%n);for(;o.length1&&"0"===o.substring(o.length-1);)o=o.substring(0,o.length-1);let a=String(r/n);return 1!==s.length&&(a+="."+o),i&&(a="-"+a),a}function $t(t,e=0){const r=jt(yt.getNumber(e,"decimals"));"string"==typeof t&&t.match(/^-?[0-9.]+$/)||yt.throwArgumentError("invalid decimal value","value",t);const n="-"===t.substring(0,1);n&&(t=t.substring(1)),"."===t&&yt.throwArgumentError("missing value","value",t);const s=t.split(".");s.length>2&&yt.throwArgumentError("too many decimal points","value",t);let i=s[0]||"0",o=s[1]||"0";for(;"0"===o[o.length-1];)o=o.substring(0,o.length-1);for(o.length>String(r).length-1&&Dt("fractional component exceeds decimals","underflow","parseFixed"),""===o&&(o="0");o.lengthnull==t[e]?n:(typeof t[e]!==r&&yt.throwArgumentError("invalid fixed format ("+e+" not "+r+")","format."+e,t[e]),t[e]);e=s("signed","boolean",e),r=s("width","number",r),n=s("decimals","number",n)}return r%8&&yt.throwArgumentError("invalid fixed format width (not byte aligned)","format.width",r),n>80&&yt.throwArgumentError("invalid fixed format (decimals too large)","format.decimals",n),new zt(Ut,e,r,n)}}class Wt{constructor(t,e,r,n){Rt.add(this),_t.set(this,void 0),t!==Ut&&yt.throwError("cannot use FixedNumber constructor; use FixedNumber.from","UNSUPPORTED_OPERATION",{operation:"new FixedFormat"}),this.format=zt.from(n),Bt(this,_t,r,"f"),this._isFixedNumber=!0,Object.freeze(this)}addUnsafe(t){Ft(this,Rt,"m",Ct).call(this,t);const e=$t(Ft(this,_t,"f"),this.format.decimals),r=$t(Ft(t,_t,"f"),t.format.decimals);return Wt.fromValue(e+r,this.format.decimals,this.format)}subUnsafe(t){Ft(this,Rt,"m",Ct).call(this,t);const e=$t(Ft(this,_t,"f"),this.format.decimals),r=$t(Ft(t,_t,"f"),t.format.decimals);return Wt.fromValue(e-r,this.format.decimals,this.format)}mulUnsafe(t){Ft(this,Rt,"m",Ct).call(this,t);const e=$t(Ft(this,_t,"f"),this.format.decimals),r=$t(Ft(t,_t,"f"),t.format.decimals);return Wt.fromValue(e*r/this.format._multiplier,this.format.decimals,this.format)}divUnsafe(t){Ft(this,Rt,"m",Ct).call(this,t);const e=$t(Ft(this,_t,"f"),this.format.decimals),r=$t(Ft(t,_t,"f"),t.format.decimals);return Wt.fromValue(e*this.format._multiplier/r,this.format.decimals,this.format)}floor(){const t=this.toString().split(".");1===t.length&&t.push("0");let e=Wt.from(t[0],this.format);const r=!t[1].match(/^(0*)$/);return this.isNegative()&&r&&(e=e.subUnsafe(Ht.toFormat(e.format))),e}ceiling(){const t=this.toString().split(".");1===t.length&&t.push("0");let e=Wt.from(t[0],this.format);const r=!t[1].match(/^(0*)$/);return!this.isNegative()&&r&&(e=e.addUnsafe(Ht.toFormat(e.format))),e}round(t){null==t&&(t=0);const e=this.toString().split(".");if(1===e.length&&e.push("0"),(t<0||t>80||t%1)&&yt.throwArgumentError("invalid decimal count","decimals",t),e[1].length<=t)return this;const r=Wt.from("1"+Mt.substring(0,t),this.format),n=Vt.toFormat(this.format);return this.mulUnsafe(r).addUnsafe(n).floor().divUnsafe(r)}isZero(){return"0.0"===Ft(this,_t,"f")||"0"===Ft(this,_t,"f")}isNegative(){return"-"===Ft(this,_t,"f")[0]}toString(){return Ft(this,_t,"f")}toHexString(t){throw new Error("TODO")}toUnsafeFloat(){return parseFloat(this.toString())}toFormat(t){return Wt.fromString(Ft(this,_t,"f"),t)}static fromValue(t,e=0,r="fixed"){return Wt.fromString(Gt(t,e),zt.from(r))}static fromString(t,e="fixed"){const r=zt.from(e),n=$t(t,r.decimals);!r.signed&&n<0&&Dt("unsigned value cannot be negative","overflow","value",t);const s=r.signed?At(It(n,r.width)):At(n,r.width/8),i=Gt(n,r.decimals);return new Wt(Ut,s,i,r)}static fromBytes(t,e="fixed"){const r=yt.getBytes(t,"value"),n=zt.from(e);if(r.length>n.width/8)throw new Error("overflow");let s=Tt(r);n.signed&&(s=Ot(s,n.width));const i=At(It(s,(n.signed?0:1)+n.width)),o=Gt(s,n.decimals);return new Wt(Ut,i,o,n)}static from(t,e){if("string"==typeof t)return Wt.fromString(t,e);if(t instanceof Uint8Array)return Wt.fromBytes(t,e);try{return Wt.fromValue(t,0,e)}catch(t){if("INVALID_ARGUMENT"!==t.code)throw t}return yt.throwArgumentError("invalid FixedNumber value","value",t)}static isFixedNumber(t){return!(!t||!t._isFixedNumber)}}_t=new WeakMap,Rt=new WeakSet,Ct=function(t){this.format.name!==t.format.name&&yt.throwArgumentError("incompatible format; use fixedNumber.toFormat","other",t)};const Ht=Wt.from(1),Vt=Wt.from("0.5"),Kt="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";let Jt=null;function qt(t){if(null==Jt){Jt={};for(let t=0;t>=ne;return 0===e.length&&e.push(0),new Uint8Array(e)}if((e=t)&&"function"==typeof e.toHexString)return ie(t.toHexString());var e;if("string"==typeof t){let e=t;if(!e.match(/^0x[0-9a-f]*$/i))throw new RangeError(`invalid hex data string (${JSON.stringify(t)})`);const r=[];for(let t=2;t>4]+le[15&n]}return r}function he(t){let e=ue(ie(t)).substring(2);for(;"0"===e.substring(0,1);)e=e.substring(1);return""===e&&(e="0"),"0x"+e}function fe(t){return"0x"+t.map((t=>ue(t).substring(2))).join("")}function de(t){return te(t,!0)?(t.length-2)/2:oe(t).length}function pe(t,e,r){const n=oe(t);return null!=r&&r>n.length&&re.throwError("cannot slice beyond data bounds","BUFFER_OVERRUN",{buffer:n,length:n.length,offset:r}),ue(n.slice(null==e?0:e,null==r?n.length:r))}function we(t){let e=ue(t).substring(2);for(;"00"==e.substring(0,2);)e=e.substring(2);return"0x"+e}function ge(t,e,r){const n=oe(t);e{null!=t&&(_e(this,ve,"f").has(t)?_e(this,ve,"f").get(t).push(e):_e(this,ve,"f").set(t,[e]))})),Object.freeze(this),new Proxy(this,{get:(t,e,r)=>{if("string"==typeof e){if(e.match(/^[0-9]+$/)){const r=P.getNumber(e,"%index");if(r<0||r>=this.length)throw new RangeError("out of result range");const n=t[r];return n instanceof Error&&_e(this,be,"m",Ee).call(this,`index ${r}`,n),n}if(e in t||Fe.indexOf(e)>=0)return Reflect.get(t,e,r);if(!(e in t))return t.getValue(e)}return Reflect.get(t,e,r)}})}slice(t,e){null==t&&(t=0),null==e&&(e=this.length);const r=[];for(let n=t;nCe&&P.throwError("value out-of-bounds","BUFFER_OVERRUN",{buffer:e,length:Ce,offset:e.length}),e.length%Ce&&(e=ie(fe([Be.slice(e.length%Ce),e]))),e}ve=new WeakMap,be=new WeakSet,Ee=function(t,e){const r=new Error(`deferred error during ABI decoding triggered accessing ${t}`);throw r.error=e,r};class Me{constructor(t,e,r,s){n(this,{name:t,type:e,localName:r,dynamic:s},{name:"string",type:"string",localName:"string",dynamic:"boolean"})}_throwError(t,e){return P.throwArgumentError(t,this.localName,e)}}class je{constructor(){Te.add(this),ke.set(this,void 0),Ae.set(this,void 0),Re(this,ke,[],"f"),Re(this,Ae,0,"f")}get data(){return fe(_e(this,ke,"f"))}get length(){return _e(this,Ae,"f")}appendWriter(t){return _e(this,Te,"m",Ne).call(this,ie(t.data))}writeBytes(t){let e=ie(t);const r=e.length%Ce;return r&&(e=ie(fe([e,Be.slice(r)]))),_e(this,Te,"m",Ne).call(this,e)}writeValue(t){return _e(this,Te,"m",Ne).call(this,De(t))}writeUpdatableValue(){const t=_e(this,ke,"f").length;return _e(this,ke,"f").push(Be),Re(this,Ae,_e(this,Ae,"f")+Ce,"f"),e=>{_e(this,ke,"f")[t]=De(e)}}}ke=new WeakMap,Ae=new WeakMap,Te=new WeakSet,Ne=function(t){return _e(this,ke,"f").push(t),Re(this,Ae,_e(this,Ae,"f")+t.length,"f"),t.length};class Ge{constructor(t,e,r){Pe.add(this),xe.set(this,void 0),Oe.set(this,void 0),Ie.set(this,void 0),n(this,{allowLoose:!!r}),Re(this,xe,ie(t),"f"),Re(this,Ie,e||Ge.coerce,"f"),Re(this,Oe,0,"f")}get data(){return ue(_e(this,xe,"f"))}get dataLength(){return _e(this,xe,"f").length}get consumed(){return _e(this,Oe,"f")}get bytes(){return new Uint8Array(_e(this,xe,"f"))}static coerce(t,e){let r=t.match("^u?int([0-9]+)$");return r&&parseInt(r[1])<=48&&(e=e.toNumber()),e}coerce(t,e){return _e(this,Ie,"f").call(this,t,e)}subReader(t){return new Ge(_e(this,xe,"f").slice(_e(this,Oe,"f")+t),_e(this,Ie,"f"),this.allowLoose)}readBytes(t,e){let r=_e(this,Pe,"m",Se).call(this,0,t,!!e);return Re(this,Oe,_e(this,Oe,"f")+r.length,"f"),r.slice(0,t)}readValue(){return Tt(this.readBytes(Ce))}readIndex(){return kt(this.readBytes(Ce))}}xe=new WeakMap,Oe=new WeakMap,Ie=new WeakMap,Pe=new WeakSet,Se=function(t,e,r){let n=Math.ceil(e/Ce)*Ce;return _e(this,Oe,"f")+n>_e(this,xe,"f").length&&(this.allowLoose&&r&&_e(this,Oe,"f")+e<=_e(this,xe,"f").length?n=e:P.throwError("data out-of-bounds","BUFFER_OVERRUN",{buffer:ie(_e(this,xe,"f")),length:_e(this,xe,"f").length,offset:_e(this,Oe,"f")+n})),_e(this,xe,"f").slice(_e(this,Oe,"f"),_e(this,Oe,"f")+n)}; +/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */ +const $e=t=>new Uint32Array(t.buffer,t.byteOffset,Math.floor(t.byteLength/4)),ze=t=>new DataView(t.buffer,t.byteOffset,t.byteLength),We=(t,e)=>t<<32-e|t>>>e;if(!(68===new Uint8Array(new Uint32Array([287454020]).buffer)[0]))throw new Error("Non little-endian hardware is not supported");Array.from({length:256},((t,e)=>e.toString(16).padStart(2,"0")));const He=(()=>{const t="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);try{if(t){const{setImmediate:e}=t("timers");return()=>new Promise((t=>e(t)))}}catch(t){}return()=>new Promise((t=>setTimeout(t,0)))})();async function Ve(t,e,r){let n=Date.now();for(let s=0;s=0&&tt().update(Ke(e)).digest(),r=t();return e.outputLen=r.outputLen,e.blockLen=r.blockLen,e.create=()=>t(),e}class Qe extends Xe{constructor(t,e){super(),this.finished=!1,this.destroyed=!1,qe(t);const r=Ke(e);if(this.iHash=t.create(),!(this.iHash instanceof Xe))throw new TypeError("Expected instance of class which extends utils.Hash");const n=this.blockLen=this.iHash.blockLen;this.outputLen=this.iHash.outputLen;const s=new Uint8Array(n);s.set(r.length>this.iHash.blockLen?t.create().update(r).digest():r);for(let t=0;tnew Qe(t,e).update(r).digest();function er(t,e,r,n){const{c:s,dkLen:i,DK:o,PRF:a,PRFSalt:c}=function(t,e,r,n){qe(t);const s=Ye({dkLen:32,asyncTick:10},n),{c:i,dkLen:o,asyncTick:a}=s;if(Je(i),Je(o),Je(a),i<1)throw new Error("PBKDF2: iterations (c) should be >= 1");const c=Ke(e),l=Ke(r),u=new Uint8Array(o),h=tr.create(t,c),f=h._cloneInto().update(l);return{c:i,dkLen:o,asyncTick:a,DK:u,PRF:h,PRFSalt:f}}(t,e,r,n);let l;const u=new Uint8Array(4),h=ze(u),f=new Uint8Array(a.outputLen);for(let t=1,e=0;enew Qe(t,e);class rr extends Xe{constructor(t,e,r,n){super(),this.blockLen=t,this.outputLen=e,this.padOffset=r,this.isLE=n,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(t),this.view=ze(this.buffer)}update(t){if(this.destroyed)throw new Error("instance is destroyed");const{view:e,buffer:r,blockLen:n,finished:s}=this;if(s)throw new Error("digest() was already called");const i=(t=Ke(t)).length;for(let s=0;sn-i&&(this.process(r,0),i=0);for(let t=i;t>s&i),a=Number(r&i),c=n?4:0,l=n?0:4;t.setUint32(e+c,o,n),t.setUint32(e+l,a,n)}(r,n-8,BigInt(8*this.length),s),this.process(r,0);const o=ze(t);this.get().forEach(((t,e)=>o.setUint32(4*e,t,s)))}digest(){const{buffer:t,outputLen:e}=this;this.digestInto(t);const r=t.slice(0,e);return this.destroy(),r}_cloneInto(t){t||(t=new this.constructor),t.set(...this.get());const{blockLen:e,buffer:r,length:n,finished:s,destroyed:i,pos:o}=this;return t.length=n,t.pos=o,t.finished=s,t.destroyed=i,n%e&&t.buffer.set(r),t}}const nr=(t,e,r)=>t&e^~t&r,sr=(t,e,r)=>t&e^t&r^e&r,ir=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),or=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),ar=new Uint32Array(64);class cr extends rr{constructor(){super(64,32,8,!1),this.A=0|or[0],this.B=0|or[1],this.C=0|or[2],this.D=0|or[3],this.E=0|or[4],this.F=0|or[5],this.G=0|or[6],this.H=0|or[7]}get(){const{A:t,B:e,C:r,D:n,E:s,F:i,G:o,H:a}=this;return[t,e,r,n,s,i,o,a]}set(t,e,r,n,s,i,o,a){this.A=0|t,this.B=0|e,this.C=0|r,this.D=0|n,this.E=0|s,this.F=0|i,this.G=0|o,this.H=0|a}process(t,e){for(let r=0;r<16;r++,e+=4)ar[r]=t.getUint32(e,!1);for(let t=16;t<64;t++){const e=ar[t-15],r=ar[t-2],n=We(e,7)^We(e,18)^e>>>3,s=We(r,17)^We(r,19)^r>>>10;ar[t]=s+ar[t-7]+n+ar[t-16]|0}let{A:r,B:n,C:s,D:i,E:o,F:a,G:c,H:l}=this;for(let t=0;t<64;t++){const e=l+(We(o,6)^We(o,11)^We(o,25))+nr(o,a,c)+ir[t]+ar[t]|0,u=(We(r,2)^We(r,13)^We(r,22))+sr(r,n,s)|0;l=c,c=a,a=o,o=i+e|0,i=s,s=n,n=r,r=e+u|0}r=r+this.A|0,n=n+this.B|0,s=s+this.C|0,i=i+this.D|0,o=o+this.E|0,a=a+this.F|0,c=c+this.G|0,l=l+this.H|0,this.set(r,n,s,i,o,a,c,l)}roundClean(){ar.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}}const lr=Ze((()=>new cr)),ur=BigInt(2**32-1),hr=BigInt(32);function fr(t,e=!1){return e?{h:Number(t&ur),l:Number(t>>hr&ur)}:{h:0|Number(t>>hr&ur),l:0|Number(t&ur)}}function dr(t,e=!1){let r=new Uint32Array(t.length),n=new Uint32Array(t.length);for(let s=0;st>>>r,wr=(t,e,r)=>t<<32-r|e>>>r,gr=(t,e,r)=>t>>>r|e<<32-r,mr=(t,e,r)=>t<<32-r|e>>>r,yr=(t,e,r)=>t<<64-r|e>>>r-32,br=(t,e,r)=>t>>>r-32|e<<64-r;function vr(t,e,r,n){const s=(e>>>0)+(n>>>0);return{h:t+r+(s/2**32|0)|0,l:0|s}}const Er=(t,e,r)=>(t>>>0)+(e>>>0)+(r>>>0),Tr=(t,e,r,n)=>e+r+n+(t/2**32|0)|0,kr=(t,e,r,n)=>(t>>>0)+(e>>>0)+(r>>>0)+(n>>>0),Ar=(t,e,r,n,s)=>e+r+n+s+(t/2**32|0)|0,Nr=(t,e,r,n,s)=>(t>>>0)+(e>>>0)+(r>>>0)+(n>>>0)+(s>>>0),Pr=(t,e,r,n,s,i)=>e+r+n+s+i+(t/2**32|0)|0,[xr,Or]=dr(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map((t=>BigInt(t)))),Ir=new Uint32Array(80),Sr=new Uint32Array(80);class Rr extends rr{constructor(){super(128,64,16,!1),this.Ah=1779033703,this.Al=-205731576,this.Bh=-1150833019,this.Bl=-2067093701,this.Ch=1013904242,this.Cl=-23791573,this.Dh=-1521486534,this.Dl=1595750129,this.Eh=1359893119,this.El=-1377402159,this.Fh=-1694144372,this.Fl=725511199,this.Gh=528734635,this.Gl=-79577749,this.Hh=1541459225,this.Hl=327033209}get(){const{Ah:t,Al:e,Bh:r,Bl:n,Ch:s,Cl:i,Dh:o,Dl:a,Eh:c,El:l,Fh:u,Fl:h,Gh:f,Gl:d,Hh:p,Hl:w}=this;return[t,e,r,n,s,i,o,a,c,l,u,h,f,d,p,w]}set(t,e,r,n,s,i,o,a,c,l,u,h,f,d,p,w){this.Ah=0|t,this.Al=0|e,this.Bh=0|r,this.Bl=0|n,this.Ch=0|s,this.Cl=0|i,this.Dh=0|o,this.Dl=0|a,this.Eh=0|c,this.El=0|l,this.Fh=0|u,this.Fl=0|h,this.Gh=0|f,this.Gl=0|d,this.Hh=0|p,this.Hl=0|w}process(t,e){for(let r=0;r<16;r++,e+=4)Ir[r]=t.getUint32(e),Sr[r]=t.getUint32(e+=4);for(let t=16;t<80;t++){const e=0|Ir[t-15],r=0|Sr[t-15],n=gr(e,r,1)^gr(e,r,8)^pr(e,0,7),s=mr(e,r,1)^mr(e,r,8)^wr(e,r,7),i=0|Ir[t-2],o=0|Sr[t-2],a=gr(i,o,19)^yr(i,o,61)^pr(i,0,6),c=mr(i,o,19)^br(i,o,61)^wr(i,o,6),l=kr(s,c,Sr[t-7],Sr[t-16]),u=Ar(l,n,a,Ir[t-7],Ir[t-16]);Ir[t]=0|u,Sr[t]=0|l}let{Ah:r,Al:n,Bh:s,Bl:i,Ch:o,Cl:a,Dh:c,Dl:l,Eh:u,El:h,Fh:f,Fl:d,Gh:p,Gl:w,Hh:g,Hl:m}=this;for(let t=0;t<80;t++){const e=gr(u,h,14)^gr(u,h,18)^yr(u,h,41),y=mr(u,h,14)^mr(u,h,18)^br(u,h,41),b=u&f^~u&p,v=Nr(m,y,h&d^~h&w,Or[t],Sr[t]),E=Pr(v,g,e,b,xr[t],Ir[t]),T=0|v,k=gr(r,n,28)^yr(r,n,34)^yr(r,n,39),A=mr(r,n,28)^br(r,n,34)^br(r,n,39),N=r&s^r&o^s&o,P=n&i^n&a^i&a;g=0|p,m=0|w,p=0|f,w=0|d,f=0|u,d=0|h,({h:u,l:h}=vr(0|c,0|l,0|E,0|T)),c=0|o,l=0|a,o=0|s,a=0|i,s=0|r,i=0|n;const x=Er(T,A,P);r=Tr(x,E,k,N),n=0|x}({h:r,l:n}=vr(0|this.Ah,0|this.Al,0|r,0|n)),({h:s,l:i}=vr(0|this.Bh,0|this.Bl,0|s,0|i)),({h:o,l:a}=vr(0|this.Ch,0|this.Cl,0|o,0|a)),({h:c,l:l}=vr(0|this.Dh,0|this.Dl,0|c,0|l)),({h:u,l:h}=vr(0|this.Eh,0|this.El,0|u,0|h)),({h:f,l:d}=vr(0|this.Fh,0|this.Fl,0|f,0|d)),({h:p,l:w}=vr(0|this.Gh,0|this.Gl,0|p,0|w)),({h:g,l:m}=vr(0|this.Hh,0|this.Hl,0|g,0|m)),this.set(r,n,s,i,o,a,c,l,u,h,f,d,p,w,g,m)}roundClean(){Ir.fill(0),Sr.fill(0)}destroy(){this.buffer.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}}class _r extends Rr{constructor(){super(),this.Ah=573645204,this.Al=-64227540,this.Bh=-1621794909,this.Bl=-934517566,this.Ch=596883563,this.Cl=1867755857,this.Dh=-1774684391,this.Dl=1497426621,this.Eh=-1775747358,this.El=-1467023389,this.Fh=-1101128155,this.Fl=1401305490,this.Gh=721525244,this.Gl=746961066,this.Hh=246885852,this.Hl=-2117784414,this.outputLen=32}}class Cr extends Rr{constructor(){super(),this.Ah=-876896931,this.Al=-1056596264,this.Bh=1654270250,this.Bl=914150663,this.Ch=-1856437926,this.Cl=812702999,this.Dh=355462360,this.Dl=-150054599,this.Eh=1731405415,this.El=-4191439,this.Fh=-1900787065,this.Fl=1750603025,this.Gh=-619958771,this.Gl=1694076839,this.Hh=1203062813,this.Hl=-1090891868,this.outputLen=48}}const Br=Ze((()=>new Rr));Ze((()=>new _r)),Ze((()=>new Cr));const Fr=new N("@ethersproject/crypto@6.0.0-beta.1");const Ur=function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if("undefined"!=typeof global)return global;throw new Error("unable to locate global object")}();let Lr=Ur.crypto||Ur.msCrypto;function Dr(t){switch(t){case"sha256":return lr.create();case"sha512":return Br.create()}return Fr.throwArgumentError("invalid hashing algorithm name","algorithm",t)}let Mr=!1;const jr=function(t,e,r){return"0x"+function(t,e){const r={sha256:lr,sha512:Br}[t];return null==r?Fr.throwArgumentError("invalid hmac algorithm","algorithm",t):tr.create(r,e)}(t,e).update(r).digest("hex")};let Gr=jr;function $r(t,e,r){const n=Fr.getBytes(e,"key"),s=Fr.getBytes(r,"data");return ue(Gr(t,n,s))}$r._=jr,$r.lock=function(){Mr=!0},$r.register=function(t){if(Mr)throw new Error("computeHmac is locked");Gr=t},Object.freeze($r);const[zr,Wr,Hr]=[[],[],[]],Vr=BigInt(0),Kr=BigInt(1),Jr=BigInt(2),qr=BigInt(7),Xr=BigInt(256),Yr=BigInt(113);for(let t=0,e=Kr,r=1,n=0;t<24;t++){[r,n]=[n,(2*r+3*n)%5],zr.push(2*(5*n+r)),Wr.push((t+1)*(t+2)/2%64);let s=Vr;for(let t=0;t<7;t++)e=(e<>qr)*Yr)%Xr,e&Jr&&(s^=Kr<<(Kr<r>32?((t,e,r)=>e<>>64-r)(t,e,r):((t,e,r)=>t<>>32-r)(t,e,r),en=(t,e,r)=>r>32?((t,e,r)=>t<>>64-r)(t,e,r):((t,e,r)=>e<>>32-r)(t,e,r);class rn extends Xe{constructor(t,e,r,n=!1,s=24){if(super(),this.blockLen=t,this.suffix=e,this.outputLen=r,this.enableXOF=n,this.rounds=s,this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,Je(r),0>=this.blockLen||this.blockLen>=200)throw new Error("Sha3 supports only keccak-f1600 function");this.state=new Uint8Array(200),this.state32=$e(this.state)}keccak(){!function(t,e=24){const r=new Uint32Array(10);for(let n=24-e;n<24;n++){for(let e=0;e<10;e++)r[e]=t[e]^t[e+10]^t[e+20]^t[e+30]^t[e+40];for(let e=0;e<10;e+=2){const n=(e+8)%10,s=(e+2)%10,i=r[s],o=r[s+1],a=tn(i,o,1)^r[n],c=en(i,o,1)^r[n+1];for(let r=0;r<50;r+=10)t[e+r]^=a,t[e+r+1]^=c}let e=t[2],s=t[3];for(let r=0;r<24;r++){const n=Wr[r],i=tn(e,s,n),o=en(e,s,n),a=zr[r];e=t[a],s=t[a+1],t[a]=i,t[a+1]=o}for(let e=0;e<50;e+=10){for(let n=0;n<10;n++)r[n]=t[e+n];for(let n=0;n<10;n++)t[e+n]^=~r[(n+2)%10]&r[(n+4)%10]}t[0]^=Zr[n],t[1]^=Qr[n]}r.fill(0)}(this.state32,this.rounds),this.posOut=0,this.pos=0}update(t){if(this.destroyed)throw new Error("instance is destroyed");if(this.finished)throw new Error("digest() was already called");const{blockLen:e,state:r}=this,n=(t=Ke(t)).length;for(let s=0;s=this.blockLen&&this.keccak();const n=Math.min(this.blockLen-this.posOut,r-e);t.set(this.state.subarray(this.posOut,this.posOut+n),e),this.posOut+=n,e+=n}return t}xofInto(t){if(!this.enableXOF)throw new Error("XOF is not possible for this instance");return this.writeInto(t)}xof(t){return Je(t),this.xofInto(new Uint8Array(t))}digestInto(t){if(t.lengthZe((()=>new rn(e,t,r)));nn(6,144,28),nn(6,136,32),nn(6,104,48),nn(6,72,64),nn(1,144,28);const sn=nn(1,136,32);nn(1,104,48),nn(1,72,64);const on=(t,e,r)=>function(t){const e=(e,r)=>t(r).update(Ke(e)).digest(),r=t({});return e.outputLen=r.outputLen,e.blockLen=r.blockLen,e.create=e=>t(e),e}(((n={})=>new rn(e,t,void 0!==n.dkLen?n.dkLen:r,!0)));on(31,168,16),on(31,136,32);let an=!1;const cn=function(t){return sn(t)};let ln=cn;function un(t){const e=Fr.getBytes(t,"data");return ue(ln(e))}un._=cn,un.lock=function(){an=!0},un.register=function(t){if(an)throw new TypeError("keccak256 is locked");ln=t},Object.freeze(un);const hn=new Uint8Array([7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8]),fn=Uint8Array.from({length:16},((t,e)=>e)),dn=fn.map((t=>(9*t+5)%16));let pn=[fn],wn=[dn];for(let t=0;t<4;t++)for(let e of[pn,wn])e.push(e[t].map((t=>hn[t])));const gn=[[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8],[12,13,11,15,6,9,9,7,12,15,11,13,7,8,7,7],[13,15,14,11,7,7,6,8,13,14,13,12,5,5,6,9],[14,11,12,14,8,6,5,5,15,12,15,14,9,9,8,6],[15,12,13,13,9,5,8,6,14,11,12,11,8,6,5,5]].map((t=>new Uint8Array(t))),mn=pn.map(((t,e)=>t.map((t=>gn[e][t])))),yn=wn.map(((t,e)=>t.map((t=>gn[e][t])))),bn=new Uint32Array([0,1518500249,1859775393,2400959708,2840853838]),vn=new Uint32Array([1352829926,1548603684,1836072691,2053994217,0]),En=(t,e)=>t<>>32-e;function Tn(t,e,r,n){return 0===t?e^r^n:1===t?e&r|~e&n:2===t?(e|~r)^n:3===t?e&n|r&~n:e^(r|~n)}const kn=new Uint32Array(16);class An extends rr{constructor(){super(64,20,8,!0),this.h0=1732584193,this.h1=-271733879,this.h2=-1732584194,this.h3=271733878,this.h4=-1009589776}get(){const{h0:t,h1:e,h2:r,h3:n,h4:s}=this;return[t,e,r,n,s]}set(t,e,r,n,s){this.h0=0|t,this.h1=0|e,this.h2=0|r,this.h3=0|n,this.h4=0|s}process(t,e){for(let r=0;r<16;r++,e+=4)kn[r]=t.getUint32(e,!0);let r=0|this.h0,n=r,s=0|this.h1,i=s,o=0|this.h2,a=o,c=0|this.h3,l=c,u=0|this.h4,h=u;for(let t=0;t<5;t++){const e=4-t,f=bn[t],d=vn[t],p=pn[t],w=wn[t],g=mn[t],m=yn[t];for(let e=0;e<16;e++){const n=En(r+Tn(t,s,o,c)+kn[p[e]]+f,g[e])+u|0;r=u,u=c,c=0|En(o,10),o=s,s=n}for(let t=0;t<16;t++){const r=En(n+Tn(e,i,a,l)+kn[w[t]]+d,m[t])+h|0;n=h,h=l,l=0|En(a,10),a=i,i=r}}this.set(this.h1+o+l|0,this.h2+c+h|0,this.h3+u+n|0,this.h4+r+i|0,this.h0+s+a|0)}roundClean(){kn.fill(0)}destroy(){this.destroyed=!0,this.buffer.fill(0),this.set(0,0,0,0,0)}}const Nn=Ze((()=>new An));let Pn=!1;const xn=function(t){return Nn(t)};let On=xn;function In(t){const e=Fr.getBytes(t,"data");return ue(On(e))}In._=xn,In.lock=function(){Pn=!0},In.register=function(t){if(Pn)throw new TypeError("ripemd160 is locked");On=t},Object.freeze(In);let Sn=!1;const Rn=function(t,e,r,n,s){return function(t,e,r,n,s){const i={sha256:lr,sha512:Br}[s];return null==i?Fr.throwArgumentError("invalid pbkdf2 algorithm","algorithm",s):er(i,t,e,{c:r,dkLen:n})}(t,e,r,n,s)};let _n=Rn;function Cn(t,e,r,n,s){const i=Fr.getBytes(t,"password"),o=Fr.getBytes(e,"salt");return ue(_n(i,o,r,n,s))}Cn._=Rn,Cn.lock=function(){Sn=!0},Cn.register=function(t){if(Sn)throw new Error("pbkdf2 is locked");_n=t},Object.freeze(Cn);let Bn=!1;const Fn=function(t){return new Uint8Array(function(t){if(null==Lr)return Fr.throwError("platform does not support secure random numbers","UNSUPPORTED_OPERATION",{operation:"randomBytes"});(t<=0||t>1024||t%1||t!=t)&&Fr.throwArgumentError("invalid length","length",t);const e=new Uint8Array(t);return Lr.getRandomValues(e),e}(t))};let Un=Fn;function Ln(t){return Un(t)}Ln._=Fn,Ln.lock=function(){Bn=!0},Ln.register=function(t){if(Bn)throw new Error("random is locked");Un=t},Object.freeze(Ln);const Dn=(t,e)=>t<>>32-e;function Mn(t,e,r,n,s,i){let o=t[e++]^r[n++],a=t[e++]^r[n++],c=t[e++]^r[n++],l=t[e++]^r[n++],u=t[e++]^r[n++],h=t[e++]^r[n++],f=t[e++]^r[n++],d=t[e++]^r[n++],p=t[e++]^r[n++],w=t[e++]^r[n++],g=t[e++]^r[n++],m=t[e++]^r[n++],y=t[e++]^r[n++],b=t[e++]^r[n++],v=t[e++]^r[n++],E=t[e++]^r[n++],T=o,k=a,A=c,N=l,P=u,x=h,O=f,I=d,S=p,R=w,_=g,C=m,B=y,F=b,U=v,L=E;for(let t=0;t<8;t+=2)P^=Dn(T+B|0,7),S^=Dn(P+T|0,9),B^=Dn(S+P|0,13),T^=Dn(B+S|0,18),R^=Dn(x+k|0,7),F^=Dn(R+x|0,9),k^=Dn(F+R|0,13),x^=Dn(k+F|0,18),U^=Dn(_+O|0,7),A^=Dn(U+_|0,9),O^=Dn(A+U|0,13),_^=Dn(O+A|0,18),N^=Dn(L+C|0,7),I^=Dn(N+L|0,9),C^=Dn(I+N|0,13),L^=Dn(C+I|0,18),k^=Dn(T+N|0,7),A^=Dn(k+T|0,9),N^=Dn(A+k|0,13),T^=Dn(N+A|0,18),O^=Dn(x+P|0,7),I^=Dn(O+x|0,9),P^=Dn(I+O|0,13),x^=Dn(P+I|0,18),C^=Dn(_+R|0,7),S^=Dn(C+_|0,9),R^=Dn(S+C|0,13),_^=Dn(R+S|0,18),B^=Dn(L+U|0,7),F^=Dn(B+L|0,9),U^=Dn(F+B|0,13),L^=Dn(U+F|0,18);s[i++]=o+T|0,s[i++]=a+k|0,s[i++]=c+A|0,s[i++]=l+N|0,s[i++]=u+P|0,s[i++]=h+x|0,s[i++]=f+O|0,s[i++]=d+I|0,s[i++]=p+S|0,s[i++]=w+R|0,s[i++]=g+_|0,s[i++]=m+C|0,s[i++]=y+B|0,s[i++]=b+F|0,s[i++]=v+U|0,s[i++]=E+L|0}function jn(t,e,r,n,s){let i=n+0,o=n+16*s;for(let n=0;n<16;n++)r[o+n]=t[e+16*(2*s-1)+n];for(let n=0;n0&&(o+=16),Mn(r,i,t,e+=16,r,o)}function Gn(t,e,r){const n=Ye({dkLen:32,asyncTick:10,maxmem:1073742848},r),{N:s,r:i,p:o,dkLen:a,asyncTick:c,maxmem:l,onProgress:u}=n;if(Je(s),Je(i),Je(o),Je(a),Je(c),Je(l),void 0!==u&&"function"!=typeof u)throw new Error("progressCb should be function");const h=128*i,f=h/4;if(s<=1||0!=(s&s-1)||s>=2**(h/8)||s>2**32)throw new Error("Scrypt: N must be larger than 1, a power of 2, less than 2^(128 * r / 8) and less than 2^32");if(o<0||o>137438953440/h)throw new Error("Scrypt: p must be a positive integer less than or equal to ((2^32 - 1) * 32) / (128 * r)");if(a<0||a>137438953440)throw new Error("Scrypt: dkLen should be positive integer less than or equal to (2^32 - 1) * 32");const d=h*(s+o);if(d>l)throw new Error(`Scrypt: parameters too large, ${d} (128 * r * (N + p)) > ${l} (maxmem)`);const p=er(lr,t,e,{c:1,dkLen:h*o}),w=$e(p),g=$e(new Uint8Array(h*s)),m=$e(new Uint8Array(h));let y=()=>{};if(u){const t=2*s*o,e=Math.max(Math.floor(t/1e4),1);let r=0;y=()=>{r++,!u||r%e&&r!==t||u(r/t)}}return{N:s,r:i,p:o,dkLen:a,blockSize32:f,V:g,B32:w,B:p,tmp:m,blockMixCb:y,asyncTick:c}}function $n(t,e,r,n,s){const i=er(lr,t,r,{c:1,dkLen:e});return r.fill(0),n.fill(0),s.fill(0),i}let zn=!1,Wn=!1;const Hn=async function(t,e,r,n,s,i,o){return await async function(t,e,r){const{N:n,r:s,p:i,dkLen:o,blockSize32:a,V:c,B32:l,B:u,tmp:h,blockMixCb:f,asyncTick:d}=Gn(t,e,r);for(let t=0;t{jn(c,r,c,r+=a,s),f()})),jn(c,(n-1)*a,l,e,s),f(),await Ve(n,d,(t=>{const r=l[e+a-16]%n;for(let t=0;t>1]>>4>=8&&(e[t]=e[t].toUpperCase()),(15&n[t>>1])>=8&&(e[t+1]=e[t+1].toUpperCase());return"0x"+e.join("")}const us={};for(let t=0;t<10;t++)us[String(t)]=String(t);for(let t=0;t<26;t++)us[String.fromCharCode(65+t)]=String(10+t);function hs(t){let e=(t=(t=t.toUpperCase()).substring(4)+t.substring(0,2)+"00").split("").map((t=>us[t])).join("");for(;e.length>=15;){let t=e.substring(0,15);e=parseInt(t,10)%97+e.substring(t.length)}let r=String(98-parseInt(e,10)%97);for(;r.length<2;)r="0"+r;return r}const fs=function(){const t={};for(let e=0;e<36;e++){t["0123456789abcdefghijklmnopqrstuvwxyz"[e]]=BigInt(e)}return t}();function ds(t){if("string"!=typeof t&&os.throwArgumentError("invalid address","address",t),t.match(/^(0x)?[0-9a-fA-F]{40}$/)){"0x"!==t.substring(0,2)&&(t="0x"+t);const e=ls(t);return t.match(/([A-F].*[a-f])|([a-f].*[A-F])/)&&e!==t&&os.throwArgumentError("bad address checksum","address",t),e}if(t.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)){t.substring(2,4)!==hs(t)&&os.throwArgumentError("bad icap checksum","address",t);let e=function(t){t=t.toLowerCase();let e=as;for(let r=0;r>=8;return e}function ms(t){if(Array.isArray(t)){let e=[];if(t.forEach((function(t){e=e.concat(ms(t))})),e.length<=55)return e.unshift(192+e.length),e;const r=gs(e.length);return r.unshift(247+r.length),r.concat(e)}const e=Array.prototype.slice.call(ws.getBytes(t,"object"));if(1===e.length&&e[0]<=127)return e;if(e.length<=55)return e.unshift(128+e.length),e;const r=gs(e.length);return r.unshift(183+r.length),r.concat(e)}const ys="0123456789abcdef";function bs(t){let e="0x";for(const r of ms(t))e+=ys[r>>4],e+=ys[15&r];return e}function vs(t){let e=t.toString(16);for(;e.length<2;)e="0"+e;return"0x"+e}function Es(t,e,r){let n=0;for(let s=0;se+1+n&&ws.throwError("child data too short","BUFFER_OVERRUN",{buffer:t,length:n,offset:e})}return{consumed:1+n,result:s}}function ks(t,e){0===t.length&&ws.throwError("data too short","BUFFER_OVERRUN",{buffer:t,length:0,offset:1});const r=e=>{e>t.length&&ws.throwError("data short segment too short","BUFFER_OVERRUN",{buffer:t,length:t.length,offset:e})};if(t[e]>=248){const n=t[e]-247;r(e+1+n);const s=Es(t,e+1,n);return r(e+1+n+s),Ts(t,e,e+1+n,n+s)}if(t[e]>=192){const n=t[e]-192;return r(e+1+n),Ts(t,e,e+1,n)}if(t[e]>=184){const n=t[e]-183;r(e+1+n);const s=Es(t,e+1,n);r(e+1+n+s);return{consumed:1+n+s,result:ue(t.slice(e+1+n,e+1+n+s))}}if(t[e]>=128){const n=t[e]-128;r(e+1+n);return{consumed:1+n,result:ue(t.slice(e+1,e+1+n))}}return{consumed:1,result:vs(t[e])}}function As(t){const e=ws.getBytes(t,"data"),r=ks(e,0);return r.consumed!==e.length&&ws.throwArgumentError("unexpected junk after rlp payload","data",t),r.result}function Ns(t){const e=ds(t.from);let r=os.getBigInt(t.nonce,"tx.nonce").toString(16);return r="0"===r?"0x":r.length%2?"0x0"+r:"0x"+r,ds(pe(un(bs([e,r])),12))}function Ps(t,e,r){const n=ds(t),s=os.getBytes(e,"salt"),i=os.getBytes(r,"initCodeHash");return 32!==s.length&&os.throwArgumentError("salt must be 32 bytes","salt",e),32!==i.length&&os.throwArgumentError("initCodeHash must be 32 bytes","initCodeHash",r),ds(pe(un(fe(["0xff",n,s,i])),12))}function xs(t){return t&&"function"==typeof t.getAddress}function Os(t){try{return ds(t),!0}catch(t){}return!1}async function Is(t,e){if("string"==typeof t){if(t.match(/^0x[0-9a-f]{40}$/i))return ds(t);if(null==e)return os.throwError("ENS resolution requires a provider","UNSUPPORTED_OPERATION",{operation:"resolveName"});const r=await e.resolveName(t);return null==r||"0x0000000000000000000000000000000000000000"===r?os.throwError("unconfigured name","UNCONFIGURED_NAME",{value:t}):ds(r)}if(xs(t)){const e=await t.getAddress();return null==e&&os.throwArgumentError("addressable resolved to null","target",t),ds(e)}return os.throwArgumentError("unsupported addressable value","target",t)}var Ss,Rs=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},_s=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const Cs={};function Bs(t,e){let r=!1;return e<0&&(r=!0,e*=-1),new Ls(Cs,`${r?"":"u"}int${e}`,t,{signed:r,width:e})}function Fs(t,e){return new Ls(Cs,`bytes${e||""}`,t,{size:e})}const Us=Symbol.for("_ethers_typed");class Ls{constructor(t,e,r,s=null){if(Ss.set(this,void 0),t!==Cs)throw new Error("private constructor");n(this,{_typedSymbol:Us,type:e,value:r}),Rs(this,Ss,s,"f"),this.format()}format(){if("array"===this.type)throw new Error("");if("dynamicArray"===this.type)throw new Error("");return"tuple"===this.type?`tuple(${this.value.map((t=>t.format())).join(",")})`:this.type}defaultValue(){return 0}minValue(){return 0}maxValue(){return 0}isBigInt(){return!!this.type.match(/^u?int[0-9]+$/)}isData(){return"bytes"===this.type.substring(0,5)}isString(){return"string"===this.type}get tupleName(){if("tuple"!==this.type)throw TypeError("not a tuple");return _s(this,Ss,"f")}get arrayLength(){if("array"!==this.type)throw TypeError("not an array");return!0===_s(this,Ss,"f")?-1:!1===_s(this,Ss,"f")?this.value.length:null}static from(t,e){return new Ls(Cs,t,e)}static uint8(t){return Bs(t,8)}static uint16(t){return Bs(t,16)}static uint24(t){return Bs(t,24)}static uint32(t){return Bs(t,32)}static uint40(t){return Bs(t,40)}static uint48(t){return Bs(t,46)}static uint56(t){return Bs(t,56)}static uint64(t){return Bs(t,64)}static uint72(t){return Bs(t,72)}static uint80(t){return Bs(t,80)}static uint88(t){return Bs(t,88)}static uint96(t){return Bs(t,96)}static uint104(t){return Bs(t,104)}static uint112(t){return Bs(t,112)}static uint120(t){return Bs(t,120)}static uint128(t){return Bs(t,128)}static uint136(t){return Bs(t,136)}static uint144(t){return Bs(t,144)}static uint152(t){return Bs(t,152)}static uint160(t){return Bs(t,160)}static uint168(t){return Bs(t,168)}static uint176(t){return Bs(t,176)}static uint184(t){return Bs(t,184)}static uint192(t){return Bs(t,192)}static uint200(t){return Bs(t,200)}static uint208(t){return Bs(t,208)}static uint216(t){return Bs(t,216)}static uint224(t){return Bs(t,224)}static uint232(t){return Bs(t,232)}static uint240(t){return Bs(t,240)}static uint248(t){return Bs(t,248)}static uint256(t){return Bs(t,256)}static uint(t){return Bs(t,256)}static int8(t){return Bs(t,-8)}static int16(t){return Bs(t,-16)}static int24(t){return Bs(t,-24)}static int32(t){return Bs(t,-32)}static int40(t){return Bs(t,-40)}static int48(t){return Bs(t,-46)}static int56(t){return Bs(t,-56)}static int64(t){return Bs(t,-64)}static int72(t){return Bs(t,-72)}static int80(t){return Bs(t,-80)}static int88(t){return Bs(t,-88)}static int96(t){return Bs(t,-96)}static int104(t){return Bs(t,-104)}static int112(t){return Bs(t,-112)}static int120(t){return Bs(t,-120)}static int128(t){return Bs(t,-128)}static int136(t){return Bs(t,-136)}static int144(t){return Bs(t,-144)}static int152(t){return Bs(t,-152)}static int160(t){return Bs(t,-160)}static int168(t){return Bs(t,-168)}static int176(t){return Bs(t,-176)}static int184(t){return Bs(t,-184)}static int192(t){return Bs(t,-192)}static int200(t){return Bs(t,-200)}static int208(t){return Bs(t,-208)}static int216(t){return Bs(t,-216)}static int224(t){return Bs(t,-224)}static int232(t){return Bs(t,-232)}static int240(t){return Bs(t,-240)}static int248(t){return Bs(t,-248)}static int256(t){return Bs(t,-256)}static int(t){return Bs(t,-256)}static bytes(t){return Fs(t)}static bytes1(t){return Fs(t,1)}static bytes2(t){return Fs(t,2)}static bytes3(t){return Fs(t,3)}static bytes4(t){return Fs(t,4)}static bytes5(t){return Fs(t,5)}static bytes6(t){return Fs(t,6)}static bytes7(t){return Fs(t,7)}static bytes8(t){return Fs(t,8)}static bytes9(t){return Fs(t,9)}static bytes10(t){return Fs(t,10)}static bytes11(t){return Fs(t,11)}static bytes12(t){return Fs(t,12)}static bytes13(t){return Fs(t,13)}static bytes14(t){return Fs(t,14)}static bytes15(t){return Fs(t,15)}static bytes16(t){return Fs(t,16)}static bytes17(t){return Fs(t,17)}static bytes18(t){return Fs(t,18)}static bytes19(t){return Fs(t,19)}static bytes20(t){return Fs(t,20)}static bytes21(t){return Fs(t,21)}static bytes22(t){return Fs(t,22)}static bytes23(t){return Fs(t,23)}static bytes24(t){return Fs(t,24)}static bytes25(t){return Fs(t,25)}static bytes26(t){return Fs(t,26)}static bytes27(t){return Fs(t,27)}static bytes28(t){return Fs(t,28)}static bytes29(t){return Fs(t,29)}static bytes30(t){return Fs(t,30)}static bytes31(t){return Fs(t,31)}static bytes32(t){return Fs(t,32)}static address(t){return new Ls(Cs,"address",t)}static bool(t){return new Ls(Cs,"bool",!!t)}static string(t){return new Ls(Cs,"string",t)}static array(t,e){throw new Error("not implemented yet")}static tuple(t,e){throw new Error("not implemented yet")}static overrides(t){return new Ls(Cs,"overrides",Object.assign({},t))}static isTyped(t){return t&&t._typedSymbol===Us}static dereference(t,e){if(Ls.isTyped(t)){if(t.type!==e)throw new Error(`invalid type: expecetd ${e}, got ${t.type}`);return t.value}return t}}Ss=new WeakMap;class Ds extends Me{constructor(t){super("address","address",t,!1)}defaultValue(){return"0x0000000000000000000000000000000000000000"}encode(t,e){let r=Ls.dereference(e,"string");try{r=ds(r)}catch(t){return this._throwError(t.message,e)}return t.writeValue(r)}decode(t){return ds(At(t.readValue(),20))}}class Ms extends Me{constructor(t){super(t.name,t.type,"_",t.dynamic),this.coder=t}defaultValue(){return this.coder.defaultValue()}encode(t,e){return this.coder.encode(t,e)}decode(t){return this.coder.decode(t)}}function js(t,e,r){let n=[];if(Array.isArray(r))n=r;else if(r&&"object"==typeof r){let t={};n=e.map((e=>{const n=e.localName;return n||P.throwError("cannot encode object for signature with missing names","INVALID_ARGUMENT",{argument:"values",info:{coder:e},value:r}),t[n]&&P.throwError("cannot encode object for signature with duplicate names","INVALID_ARGUMENT",{argument:"values",info:{coder:e},value:r}),t[n]=!0,r[n]}))}else P.throwArgumentError("invalid tuple value","tuple",r);e.length!==n.length&&P.throwArgumentError("types/value length mismatch","tuple",r);let s=new je,i=new je,o=[];e.forEach(((t,e)=>{let r=n[e];if(t.dynamic){let e=i.length;t.encode(i,r);let n=s.writeUpdatableValue();o.push((t=>{n(t+e)}))}else t.encode(s,r)})),o.forEach((t=>{t(s.length)}));let a=t.appendWriter(s);return a+=t.appendWriter(i),a}function Gs(t,e){let r=[],n=[],s=t.subReader(0);return e.forEach((e=>{let i=null;if(e.dynamic){let r=t.readIndex(),n=s.subReader(r);try{i=e.decode(n)}catch(t){if(u(t,"BUFFER_OVERRUN"))throw t;i=t,i.baseType=e.name,i.name=e.localName,i.type=e.type}}else try{i=e.decode(t)}catch(t){if(u(t,"BUFFER_OVERRUN"))throw t;i=t,i.baseType=e.name,i.name=e.localName,i.type=e.type}if(null==i)throw new Error("investigate");r.push(i),n.push(e.localName||null)})),Le.fromItems(r,n)}class $s extends Me{constructor(t,e,r){super("array",t.type+"["+(e>=0?e:"")+"]",r,-1===e||t.dynamic),n(this,{coder:t,length:e})}defaultValue(){const t=this.coder.defaultValue(),e=[];for(let r=0;rt.dataLength&&P.throwError("insufficient data length","BUFFER_OVERRUN",{buffer:t.bytes,offset:e*Ce,length:t.dataLength}));let r=[];for(let t=0;tt||r<-(t+Xs))&&this._throwError("value out-of-bounds",e)}else(rSt(n,8*this.size))&&this._throwError("value out-of-bounds",e);return r=St(It(r,8*this.size),8*this.size),this.signed&&(r=It(Ot(r,8*this.size),256)),t.writeValue(r)}decode(t){let e=St(t.readValue(),8*this.size);return this.signed&&(e=Ot(e,8*this.size)),t.coerce(this.name,e)}}const Qs=new N("@ethersproject/strings@6.0.0-beta.1");var ti,ei;function ri(e,r,n,s,i){if(e===t.Utf8ErrorReason.BAD_PREFIX||e===t.Utf8ErrorReason.UNEXPECTED_CONTINUE){let t=0;for(let e=r+1;e>6==2;e++)t++;return t}return e===t.Utf8ErrorReason.OVERRUN?n.length-r-1:0}t.UnicodeNormalizationForm=void 0,(ti=t.UnicodeNormalizationForm||(t.UnicodeNormalizationForm={})).current="",ti.NFC="NFC",ti.NFD="NFD",ti.NFKC="NFKC",ti.NFKD="NFKD",t.Utf8ErrorReason=void 0,(ei=t.Utf8ErrorReason||(t.Utf8ErrorReason={})).UNEXPECTED_CONTINUE="unexpected continuation byte",ei.BAD_PREFIX="bad codepoint prefix",ei.OVERRUN="string overrun",ei.MISSING_CONTINUE="missing continuation byte",ei.OUT_OF_RANGE="out of UTF-8 range",ei.UTF16_SURROGATE="UTF-16 surrogate",ei.OVERLONG="overlong representation";const ni=Object.freeze({error:function(t,e,r,n,s){return Qs.throwArgumentError(`invalid codepoint at offset ${e}; ${t}`,"bytes",r)},ignore:ri,replace:function(e,r,n,s,i){return e===t.Utf8ErrorReason.OVERLONG?(s.push(null!=i?i:-1),0):(s.push(65533),ri(e,r,n))}});function si(e,r){null==r&&(r=ni.error);const n=Qs.getBytes(e,"bytes"),s=[];let i=0;for(;i>7==0){s.push(e);continue}let o=null,a=null;if(192==(224&e))o=1,a=127;else if(224==(240&e))o=2,a=2047;else{if(240!=(248&e)){i+=r(128==(192&e)?t.Utf8ErrorReason.UNEXPECTED_CONTINUE:t.Utf8ErrorReason.BAD_PREFIX,i-1,n,s);continue}o=3,a=65535}if(i-1+o>=n.length){i+=r(t.Utf8ErrorReason.OVERRUN,i-1,n,s);continue}let c=e&(1<<8-o-1)-1;for(let e=0;e1114111?i+=r(t.Utf8ErrorReason.OUT_OF_RANGE,i-1-o,n,s,c):c>=55296&&c<=57343?i+=r(t.Utf8ErrorReason.UTF16_SURROGATE,i-1-o,n,s,c):c<=a?i+=r(t.Utf8ErrorReason.OVERLONG,i-1-o,n,s,c):s.push(c))}return s}function ii(e,r=t.UnicodeNormalizationForm.current){r!=t.UnicodeNormalizationForm.current&&(Qs.assertNormalize(r),e=e.normalize(r));let n=[];for(let t=0;t>6|192),n.push(63&r|128);else if(55296==(64512&r)){t++;const s=e.charCodeAt(t);if(t>=e.length||56320!=(64512&s))throw new Error("invalid utf-8 string");const i=65536+((1023&r)<<10)+(1023&s);n.push(i>>18|240),n.push(i>>12&63|128),n.push(i>>6&63|128),n.push(63&i|128)}else n.push(r>>12|224),n.push(r>>6&63|128),n.push(63&r|128)}return new Uint8Array(n)}function oi(t){const e="0000"+t.toString(16);return"\\u"+e.substring(e.length-4)}function ai(t,e){return'"'+si(t,e).map((t=>{if(t<256){switch(t){case 8:return"\\b";case 9:return"\\t";case 10:return"\\n";case 13:return"\\r";case 34:return'\\"';case 92:return"\\\\"}if(t>=32&&t<127)return String.fromCharCode(t)}return t<=65535?oi(t):oi(55296+((t-=65536)>>10&1023))+oi(56320+(1023&t))})).join("")+'"'}function ci(t){return t.map((t=>t<=65535?String.fromCharCode(t):(t-=65536,String.fromCharCode(55296+(t>>10&1023),56320+(1023&t))))).join("")}function li(t,e){return ci(si(t,e))}function ui(e,r=t.UnicodeNormalizationForm.current){return si(ii(e,r))}function hi(t){const e=ii(t);if(e.length>31)throw new Error("bytes32 string must be less than 32 bytes");return ye(e,32)}function fi(t){const e=Qs.getBytes(t,"bytes");if(32!==e.length)throw new Error("invalid bytes32 - not 32 bytes long");if(0!==e[31])throw new Error("invalid bytes32 string - no null terminator");let r=31;for(;0===e[r-1];)r--;return li(e.slice(0,r))}function di(t,e){const r=e||function(t){return[parseInt(t,16)]};let n=0,s={};return t.split(",").forEach((t=>{let e=t.split(":");n+=parseInt(e[0],16),s[n]=r(e[1])})),s}function pi(t){let e=0;return t.split(",").map((t=>{let r=t.split("-");1===r.length?r[1]="0":""===r[1]&&(r[1]="1");let n=e+parseInt(r[0],16);return e=parseInt(r[1],16),{l:n,h:e}}))}function wi(t,e){let r=0;for(let n=0;n=r&&t<=r+s.h&&(t-r)%(s.d||1)==0){if(s.e&&-1!==s.e.indexOf(t-r))continue;return s}}return null}const gi=pi("221,13-1b,5f-,40-10,51-f,11-3,3-3,2-2,2-4,8,2,15,2d,28-8,88,48,27-,3-5,11-20,27-,8,28,3-5,12,18,b-a,1c-4,6-16,2-d,2-2,2,1b-4,17-9,8f-,10,f,1f-2,1c-34,33-14e,4,36-,13-,6-2,1a-f,4,9-,3-,17,8,2-2,5-,2,8-,3-,4-8,2-3,3,6-,16-6,2-,7-3,3-,17,8,3,3,3-,2,6-3,3-,4-a,5,2-6,10-b,4,8,2,4,17,8,3,6-,b,4,4-,2-e,2-4,b-10,4,9-,3-,17,8,3-,5-,9-2,3-,4-7,3-3,3,4-3,c-10,3,7-2,4,5-2,3,2,3-2,3-2,4-2,9,4-3,6-2,4,5-8,2-e,d-d,4,9,4,18,b,6-3,8,4,5-6,3-8,3-3,b-11,3,9,4,18,b,6-3,8,4,5-6,3-6,2,3-3,b-11,3,9,4,18,11-3,7-,4,5-8,2-7,3-3,b-11,3,13-2,19,a,2-,8-2,2-3,7,2,9-11,4-b,3b-3,1e-24,3,2-,3,2-,2-5,5,8,4,2,2-,3,e,4-,6,2,7-,b-,3-21,49,23-5,1c-3,9,25,10-,2-2f,23,6,3,8-2,5-5,1b-45,27-9,2a-,2-3,5b-4,45-4,53-5,8,40,2,5-,8,2,5-,28,2,5-,20,2,5-,8,2,5-,8,8,18,20,2,5-,8,28,14-5,1d-22,56-b,277-8,1e-2,52-e,e,8-a,18-8,15-b,e,4,3-b,5e-2,b-15,10,b-5,59-7,2b-555,9d-3,5b-5,17-,7-,27-,7-,9,2,2,2,20-,36,10,f-,7,14-,4,a,54-3,2-6,6-5,9-,1c-10,13-1d,1c-14,3c-,10-6,32-b,240-30,28-18,c-14,a0,115-,3,66-,b-76,5,5-,1d,24,2,5-2,2,8-,35-2,19,f-10,1d-3,311-37f,1b,5a-b,d7-19,d-3,41,57-,68-4,29-3,5f,29-37,2e-2,25-c,2c-2,4e-3,30,78-3,64-,20,19b7-49,51a7-59,48e-2,38-738,2ba5-5b,222f-,3c-94,8-b,6-4,1b,6,2,3,3,6d-20,16e-f,41-,37-7,2e-2,11-f,5-b,18-,b,14,5-3,6,88-,2,bf-2,7-,7-,7-,4-2,8,8-9,8-2ff,20,5-b,1c-b4,27-,27-cbb1,f7-9,28-2,b5-221,56,48,3-,2-,3-,5,d,2,5,3,42,5-,9,8,1d,5,6,2-2,8,153-3,123-3,33-27fd,a6da-5128,21f-5df,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3,2-1d,61-ff7d"),mi="ad,34f,1806,180b,180c,180d,200b,200c,200d,2060,feff".split(",").map((t=>parseInt(t,16))),yi=[{h:25,s:32,l:65},{h:30,s:32,e:[23],l:127},{h:54,s:1,e:[48],l:64,d:2},{h:14,s:1,l:57,d:2},{h:44,s:1,l:17,d:2},{h:10,s:1,e:[2,6,8],l:61,d:2},{h:16,s:1,l:68,d:2},{h:84,s:1,e:[18,24,66],l:19,d:2},{h:26,s:32,e:[17],l:435},{h:22,s:1,l:71,d:2},{h:15,s:80,l:40},{h:31,s:32,l:16},{h:32,s:1,l:80,d:2},{h:52,s:1,l:42,d:2},{h:12,s:1,l:55,d:2},{h:40,s:1,e:[38],l:15,d:2},{h:14,s:1,l:48,d:2},{h:37,s:48,l:49},{h:148,s:1,l:6351,d:2},{h:88,s:1,l:160,d:2},{h:15,s:16,l:704},{h:25,s:26,l:854},{h:25,s:32,l:55915},{h:37,s:40,l:1247},{h:25,s:-119711,l:53248},{h:25,s:-119763,l:52},{h:25,s:-119815,l:52},{h:25,s:-119867,e:[1,4,5,7,8,11,12,17],l:52},{h:25,s:-119919,l:52},{h:24,s:-119971,e:[2,7,8,17],l:52},{h:24,s:-120023,e:[2,7,13,15,16,17],l:52},{h:25,s:-120075,l:52},{h:25,s:-120127,l:52},{h:25,s:-120179,l:52},{h:25,s:-120231,l:52},{h:25,s:-120283,l:52},{h:25,s:-120335,l:52},{h:24,s:-119543,e:[17],l:56},{h:24,s:-119601,e:[17],l:58},{h:24,s:-119659,e:[17],l:58},{h:24,s:-119717,e:[17],l:58},{h:24,s:-119775,e:[17],l:58}],bi=di("b5:3bc,c3:ff,7:73,2:253,5:254,3:256,1:257,5:259,1:25b,3:260,1:263,2:269,1:268,5:26f,1:272,2:275,7:280,3:283,5:288,3:28a,1:28b,5:292,3f:195,1:1bf,29:19e,125:3b9,8b:3b2,1:3b8,1:3c5,3:3c6,1:3c0,1a:3ba,1:3c1,1:3c3,2:3b8,1:3b5,1bc9:3b9,1c:1f76,1:1f77,f:1f7a,1:1f7b,d:1f78,1:1f79,1:1f7c,1:1f7d,107:63,5:25b,4:68,1:68,1:68,3:69,1:69,1:6c,3:6e,4:70,1:71,1:72,1:72,1:72,7:7a,2:3c9,2:7a,2:6b,1:e5,1:62,1:63,3:65,1:66,2:6d,b:3b3,1:3c0,6:64,1b574:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3"),vi=di("179:1,2:1,2:1,5:1,2:1,a:4f,a:1,8:1,2:1,2:1,3:1,5:1,3:1,4:1,2:1,3:1,4:1,8:2,1:1,2:2,1:1,2:2,27:2,195:26,2:25,1:25,1:25,2:40,2:3f,1:3f,33:1,11:-6,1:-9,1ac7:-3a,6d:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,b:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,c:-8,2:-8,2:-8,2:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,49:-8,1:-8,1:-4a,1:-4a,d:-56,1:-56,1:-56,1:-56,d:-8,1:-8,f:-8,1:-8,3:-7"),Ei=di("df:00730073,51:00690307,19:02BC006E,a7:006A030C,18a:002003B9,16:03B903080301,20:03C503080301,1d7:05650582,190f:00680331,1:00740308,1:0077030A,1:0079030A,1:006102BE,b6:03C50313,2:03C503130300,2:03C503130301,2:03C503130342,2a:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,3:1F7003B9,1:03B103B9,1:03AC03B9,2:03B10342,1:03B1034203B9,5:03B103B9,6:1F7403B9,1:03B703B9,1:03AE03B9,2:03B70342,1:03B7034203B9,5:03B703B9,6:03B903080300,1:03B903080301,3:03B90342,1:03B903080342,b:03C503080300,1:03C503080301,1:03C10313,2:03C50342,1:03C503080342,b:1F7C03B9,1:03C903B9,1:03CE03B9,2:03C90342,1:03C9034203B9,5:03C903B9,ac:00720073,5b:00B00063,6:00B00066,d:006E006F,a:0073006D,1:00740065006C,1:0074006D,124f:006800700061,2:00610075,2:006F0076,b:00700061,1:006E0061,1:03BC0061,1:006D0061,1:006B0061,1:006B0062,1:006D0062,1:00670062,3:00700066,1:006E0066,1:03BC0066,4:0068007A,1:006B0068007A,1:006D0068007A,1:00670068007A,1:00740068007A,15:00700061,1:006B00700061,1:006D00700061,1:006700700061,8:00700076,1:006E0076,1:03BC0076,1:006D0076,1:006B0076,1:006D0076,1:00700077,1:006E0077,1:03BC0077,1:006D0077,1:006B0077,1:006D0077,1:006B03C9,1:006D03C9,2:00620071,3:00632215006B0067,1:0063006F002E,1:00640062,1:00670079,2:00680070,2:006B006B,1:006B006D,9:00700068,2:00700070006D,1:00700072,2:00730076,1:00770062,c723:00660066,1:00660069,1:0066006C,1:006600660069,1:00660066006C,1:00730074,1:00730074,d:05740576,1:05740565,1:0574056B,1:057E0576,1:0574056D",(function(t){if(t.length%4!=0)throw new Error("should not happen; bad data");let e=[];for(let r=0;r{if(mi.indexOf(t)>=0)return[];if(t>=65024&&t<=65039)return[];let e=function(t){const e=wi(t,yi);if(e){if(null==e.s)throw new Error("should not happenl bad range");return[t+e.s]}const r=bi[t];if(r)return r;const n=vi[t];return n?[t+n[0]]:Ei[t]||null}(t);return e||[t]})),r=n.reduce(((t,e)=>(e.forEach((e=>{t.push(e)})),t)),[]),r=ui(ci(r),t.UnicodeNormalizationForm.NFKC),r.forEach((t=>{wi(t,Ti)&&Qs.throwArgumentError("STRINGPREP_CONTAINS_PROHIBITED","value",e)})),r.forEach((t=>{wi(t,gi)&&Qs.throwArgumentError("STRINGPREP_CONTAINS_UNASSIGNED","value",e)}));let s=ci(r);return"-"!==s.substring(0,1)&&"--"!==s.substring(2,4)&&"-"!==s.substring(s.length-1)||Qs.throwArgumentError("invalid hyphen","value",e),s.length>63&&Qs.throwArgumentError("too long","value",e),s}class Ai extends Ws{constructor(t){super("string",t)}defaultValue(){return""}encode(t,e){return super.encode(t,ii(Ls.dereference(e,"string")))}decode(t){return li(super.decode(t))}}class Ni extends Me{constructor(t,e){let r=!1;const s=[];t.forEach((t=>{t.dynamic&&(r=!0),s.push(t.type)}));super("tuple","tuple("+s.join(",")+")",e,r),n(this,{coders:Object.freeze(t.slice())})}defaultValue(){const t=[];this.coders.forEach((e=>{t.push(e.defaultValue())}));const e=this.coders.reduce(((t,e)=>{const r=e.localName;return r&&(t[r]||(t[r]=0),t[r]++),t}),{});return this.coders.forEach(((r,n)=>{let s=r.localName;s&&1===e[s]&&("length"===s&&(s="_length"),null==t[s]&&(t[s]=t[n]))})),Object.freeze(t)}encode(t,e){const r=Ls.dereference(e,"tuple");return js(t,this.coders,r)}decode(t){return t.coerce(this.name,Gs(t,this.coders))}}var Pi,xi,Oi=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const Ii=new RegExp(/^bytes([0-9]*)$/),Si=new RegExp(/^(u?int)([0-9]*)$/);Pi=new WeakSet,xi=function t(e){if(e.isArray())return new $s(Oi(this,Pi,"m",t).call(this,e.arrayChildren),e.arrayLength,e.name);if(e.isTuple())return new Ni(e.components.map((e=>Oi(this,Pi,"m",t).call(this,e))),e.name);switch(e.baseType){case"address":return new Ds(e.name);case"bool":return new zs(e.name);case"string":return new Ai(e.name);case"bytes":return new Hs(e.name);case"":return new Js(e.name)}let r=e.type.match(Si);if(r){let t=parseInt(r[2]||"256");return(0===t||t>256||t%8!=0)&&P.throwArgumentError("invalid "+r[1]+" bit length","param",e),new Zs(t/8,"int"===r[1],e.name)}if(r=e.type.match(Ii),r){let t=parseInt(r[1]);return(0===t||t>32)&&P.throwArgumentError("invalid bytes length","param",e),new Vs(t,e.name)}return P.throwArgumentError("invalid type","type",e.type)};const Ri=new class{constructor(t){Pi.add(this),n(this,{coerceFunc:t},{},{coerceFunc:null})}getDefaultValue(t){const e=t.map((t=>Oi(this,Pi,"m",xi).call(this,ct.from(t))));return new Ni(e,"_").defaultValue()}encode(t,e){P.assertArgumentCount(e.length,t.length,"types/values length mismatch");const r=t.map((t=>Oi(this,Pi,"m",xi).call(this,ct.from(t)))),n=new Ni(r,"_"),s=new je;return n.encode(s,e),s.data}decode(t,e,r){const n=t.map((t=>Oi(this,Pi,"m",xi).call(this,ct.from(t))));return new Ni(n,"_").decode(new Ge(e,this.coerceFunc,r))}};function _i(t){return un(ii(t))}const Ci=new N("@ethersproject/hash@6.0.0-beta.1"),Bi=new Uint8Array(32);Bi.fill(0);const Fi=new RegExp("^((.*)\\.)?([^.]+)$");function Ui(t){try{const e=t.split(".");for(let t=0;t{""===e&&Ci.throwArgumentError("invalid DNS name; missing component","name",t);const r=ii("_"+ki(e));return r[0]=r.length-1,r})))+"00"}const Mi="Ethereum Signed Message:\n";function ji(t){return"string"==typeof t&&(t=ii(t)),un(fe([ii(Mi),ii(String(t.length)),t]))}var Gi,$i,zi,Wi,Hi,Vi=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Ki=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const Ji=new Uint8Array(32);Ji.fill(0);const qi=BigInt(-1),Xi=BigInt(0),Yi=BigInt(1),Zi=BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");const Qi=At(Yi,32),to=At(Xi,32),eo={name:"string",version:"string",chainId:"uint256",verifyingContract:"address",salt:"bytes32"},ro=["name","version","chainId","verifyingContract","salt"];function no(t){return function(e){return"string"!=typeof e&&Ci.throwArgumentError(`invalid domain value for ${JSON.stringify(t)}`,`domain.${t}`,e),e}}const so={name:no("name"),version:no("version"),chainId:function(t){return Ci.getBigInt(t,"domain.chainId")},verifyingContract:function(t){try{return ds(t).toLowerCase()}catch(t){}return Ci.throwArgumentError('invalid domain value "verifyingContract"',"domain.verifyingContract",t)},salt:function(t){const e=Ci.getBytes(t,"domain.salt");return 32!==e.length&&Ci.throwArgumentError('invalid domain value "salt"',"domain.salt",t),ue(e)}};function io(t){{const e=t.match(/^(u?)int(\d*)$/);if(e){const r=""===e[1],n=parseInt(e[2]||"256");(n%8!=0||n>256||e[2]&&e[2]!==String(n))&&Ci.throwArgumentError("invalid numeric width","type",t);const s=St(Zi,r?n-1:n),i=r?(s+Yi)*qi:Xi;return function(e){const r=Ci.getBigInt(e,"value");return(rs)&&Ci.throwArgumentError(`value out-of-bounds for ${t}`,"value",r),At(It(r,256),32)}}}{const e=t.match(/^bytes(\d+)$/);if(e){const r=parseInt(e[1]);return(0===r||r>32||e[1]!==String(r))&&Ci.throwArgumentError("invalid bytes width","type",t),function(e){return ie(e).length!==r&&Ci.throwArgumentError(`invalid length for ${t}`,"value",e),function(t){const e=ie(t),r=e.length%32;return r?fe([e,Ji.slice(r)]):ue(e)}(e)}}}switch(t){case"address":return function(t){return me(ds(t),32)};case"bool":return function(t){return t?Qi:to};case"bytes":return function(t){return un(t)};case"string":return function(t){return _i(t)}}return null}function oo(t,e){return`${t}(${e.map((({name:t,type:e})=>e+" "+t)).join(",")})`}class ao{constructor(t){Gi.add(this),$i.set(this,void 0),zi.set(this,void 0),Wi.set(this,void 0),Vi(this,$i,JSON.stringify(t),"f"),Vi(this,zi,new Map,"f"),Vi(this,Wi,new Map,"f");const e=new Map,r=new Map,s=new Map;Object.keys(t).forEach((t=>{e.set(t,new Set),r.set(t,[]),s.set(t,new Set)}));for(const n in t){const s=new Set;for(const i of t[n]){s.has(i.name)&&Ci.throwArgumentError(`duplicate variable name ${JSON.stringify(i.name)} in ${JSON.stringify(n)}`,"types",t),s.add(i.name);const o=i.type.match(/^([^\x5b]*)(\x5b|$)/)[1]||null;o===n&&Ci.throwArgumentError(`circular type reference to ${JSON.stringify(o)}`,"types",t);io(o)||(r.has(o)||Ci.throwArgumentError(`unknown type ${JSON.stringify(o)}`,"types",t),r.get(o).push(n),e.get(n).add(o))}}const i=Array.from(r.keys()).filter((t=>0===r.get(t).length));0===i.length?Ci.throwArgumentError("missing primary type","types",t):i.length>1&&Ci.throwArgumentError(`ambiguous primary types or unused types: ${i.map((t=>JSON.stringify(t))).join(", ")}`,"types",t),n(this,{primaryType:i[0]}),function n(i,o){o.has(i)&&Ci.throwArgumentError(`circular type reference to ${JSON.stringify(i)}`,"types",t),o.add(i);for(const t of e.get(i))if(r.has(t)){n(t,o);for(const e of o)s.get(e).add(t)}o.delete(i)}(this.primaryType,new Set);for(const[e,r]of s){const n=Array.from(r);n.sort(),Ki(this,zi,"f").set(e,oo(e,t[e])+n.map((e=>oo(e,t[e]))).join(""))}}get types(){return JSON.parse(Ki(this,$i,"f"))}getEncoder(t){let e=Ki(this,Wi,"f").get(t);return e||(e=Ki(this,Gi,"m",Hi).call(this,t),Ki(this,Wi,"f").set(t,e)),e}encodeType(t){const e=Ki(this,zi,"f").get(t);return e||Ci.throwArgumentError(`unknown type: ${JSON.stringify(t)}`,"name",t)}encodeData(t,e){return this.getEncoder(t)(e)}hashStruct(t,e){return un(this.encodeData(t,e))}encode(t){return this.encodeData(this.primaryType,t)}hash(t){return this.hashStruct(this.primaryType,t)}_visit(t,e,r){if(io(t))return r(t,e);const n=t.match(/^(.*)(\x5b(\d*)\x5d)$/);if(n){const t=n[1],s=parseInt(n[3]);return s>=0&&e.length!==s&&Ci.throwArgumentError("array length mismatch; expected length ${ arrayLength }","value",e),e.map((e=>this._visit(t,e,r)))}const s=this.types[t];return s?s.reduce(((t,{name:n,type:s})=>(t[n]=this._visit(s,e[n],r),t)),{}):Ci.throwArgumentError(`unknown type: ${t}`,"type",t)}visit(t,e){return this._visit(this.primaryType,t,e)}static from(t){return new ao(t)}static getPrimaryType(t){return ao.from(t).primaryType}static hashStruct(t,e,r){return ao.from(e).hashStruct(t,r)}static hashDomain(t){const e=[];for(const r in t){const n=eo[r];n||Ci.throwArgumentError(`invalid typed-data domain key: ${JSON.stringify(r)}`,"domain",t),e.push({name:r,type:n})}return e.sort(((t,e)=>ro.indexOf(t.name)-ro.indexOf(e.name))),ao.hashStruct("EIP712Domain",{EIP712Domain:e},t)}static encode(t,e,r){return fe(["0x1901",ao.hashDomain(t),ao.from(e).hash(r)])}static hash(t,e,r){return un(ao.encode(t,e,r))}static async resolveNames(t,e,r,n){t=Object.assign({},t);const s={};t.verifyingContract&&!te(t.verifyingContract,20)&&(s[t.verifyingContract]="0x");const i=ao.from(e);i.visit(r,((t,e)=>("address"!==t||te(e,20)||(s[e]="0x"),e)));for(const t in s)s[t]=await n(t);return t.verifyingContract&&s[t.verifyingContract]&&(t.verifyingContract=s[t.verifyingContract]),{domain:t,value:r=i.visit(r,((t,e)=>"address"===t&&s[e]?s[e]:e))}}static getPayload(t,e,r){ao.hashDomain(t);const n={},s=[];ro.forEach((e=>{const r=t[e];null!=r&&(n[e]=so[e](r),s.push({name:e,type:eo[e]}))}));const i=ao.from(e),o=Object.assign({},e);return o.EIP712Domain?Ci.throwArgumentError("types must not contain EIP712Domain type","types.EIP712Domain",e):o.EIP712Domain=s,i.encode(r),{types:o,domain:n,primaryType:i.primaryType,message:i.visit(r,((t,e)=>{if(t.match(/^bytes(\d*)/))return ue(Ci.getBytes(e));if(t.match(/^u?int/))return Ci.getBigInt(e).toString();switch(t){case"address":return e.toLowerCase();case"bool":return!!e;case"string":return"string"!=typeof e&&Ci.throwArgumentError("invalid string","value",e),e}return Ci.throwArgumentError("unsupported type","type",t)}))}}}$i=new WeakMap,zi=new WeakMap,Wi=new WeakMap,Gi=new WeakSet,Hi=function(t){{const e=io(t);if(e)return e}const e=t.match(/^(.*)(\x5b(\d*)\x5d)$/);if(e){const t=e[1],r=this.getEncoder(t),n=parseInt(e[3]);return e=>{n>=0&&e.length!==n&&Ci.throwArgumentError("array length mismatch; expected length ${ arrayLength }","value",e);let s=e.map(r);return Ki(this,zi,"f").has(t)&&(s=s.map(un)),un(fe(s))}}const r=this.types[t];if(r){const e=_i(Ki(this,zi,"f").get(t));return t=>{const n=r.map((({name:e,type:r})=>{const n=this.getEncoder(r)(t[e]);return Ki(this,zi,"f").has(r)?un(n):n}));return n.unshift(e),fe(n)}}return Ci.throwArgumentError(`unknown type: ${t}`,"type",t)};var co,lo,uo,ho,fo,po,wo,go=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},mo=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class yo{constructor(t,e,r){const s=t.name,i=t.format();n(this,{fragment:t,name:s,signature:i,topic:e,args:r})}}class bo{constructor(t,e,r,s){const i=t.name,o=t.format();n(this,{fragment:t,name:i,args:r,signature:o,selector:e,value:s})}}class vo{constructor(t,e,r){const s=t.name,i=t.format();n(this,{fragment:t,name:s,args:r,signature:i,selector:e})}}class Eo{constructor(t){n(this,{hash:t,_isIndexed:!0})}static isIndexed(t){return!(!t||!t._isIndexed)}}const To={0:"generic panic",1:"assert(false)",17:"arithmetic overflow",18:"division or modulo by zero",33:"enum overflow",34:"invalid encoded storage byte array accessed",49:"out-of-bounds array access; popping on an empty array",50:"out-of-bounds access of an array or bytesN",65:"out of memory",81:"uninitialized function"},ko={"0x08c379a0":{signature:"Error(string)",name:"Error",inputs:["string"],reason:t=>`reverted with reason string ${JSON.stringify(t)}`},"0x4e487b71":{signature:"Panic(uint256)",name:"Panic",inputs:["uint256"],reason:t=>{let e="unknown panic code";return t>=0&&t<=255&&To[t.toString()]&&(e=To[t.toString()]),`reverted with panic code 0x${t.toString(16)} (${e})`}}};class Ao{constructor(t){co.add(this),lo.set(this,void 0),uo.set(this,void 0),ho.set(this,void 0),fo.set(this,void 0);let e=[];e="string"==typeof t?JSON.parse(t):t,go(this,ho,new Map,"f"),go(this,lo,new Map,"f"),go(this,uo,new Map,"f"),n(this,{fragments:Object.freeze(e.map((t=>ut.from(t))).filter((t=>null!=t)))}),go(this,fo,this.getAbiCoder(),"f"),this.fragments.forEach((t=>{let e;switch(t.type){case"constructor":return this.deploy?void P.warn("duplicate definition - constructor"):void n(this,{deploy:t});case"function":e=mo(this,ho,"f");break;case"event":e=mo(this,uo,"f");break;case"error":e=mo(this,lo,"f");break;default:return}const r=t.format();e.has(r)?P.warn("duplicate definition - "+r):e.set(r,t)})),this.deploy||n(this,{deploy:wt.fromString("constructor()")})}format(t){t||(t=C.full),t===C.sighash&&P.throwArgumentError("interface does not support formatting sighash","format",t);const e=this.fragments.map((e=>e.format(t)));return t===C.json?JSON.stringify(e.map((t=>JSON.parse(t)))):e}getAbiCoder(){return Ri}getFunctionName(t){return mo(this,co,"m",po).call(this,t,null,!1).name}getFunction(t,e){return mo(this,co,"m",po).call(this,t,e||null,!0)}getEventName(t){return mo(this,co,"m",wo).call(this,t,null,!1).name}getEvent(t,e){return mo(this,co,"m",wo).call(this,t,e||null,!0)}getError(t,e){if(te(t)){const e=t.toLowerCase();for(const t of mo(this,lo,"f").values())if(e===this.getSelector(t))return t;P.throwArgumentError("no matching error","selector",t)}if(-1===t.indexOf("(")){const e=[];for(const[r,n]of mo(this,lo,"f"))r.split("(")[0]===t&&e.push(n);return 0===e.length?P.throwArgumentError("no matching error","name",t):e.length>1&&P.throwArgumentError("multiple matching errors","name",t),e[0]}const r=mo(this,lo,"f").get(dt.fromString(t).format());return r||P.throwArgumentError("no matching error","signature",t)}getSelector(t){return pe(_i(t.format()),0,4)}getEventTopic(t){return _i(t.format())}_decodeParams(t,e){return mo(this,fo,"f").decode(t,e)}_encodeParams(t,e){return mo(this,fo,"f").encode(t,e)}encodeDeploy(t){return this._encodeParams(this.deploy.inputs,t||[])}decodeErrorResult(t,e){return"string"==typeof t&&(t=this.getError(t)),pe(e,0,4)!==this.getSelector(t)&&P.throwArgumentError(`data signature does not match error ${t.name}.`,"data",e),this._decodeParams(t.inputs,pe(e,4))}encodeErrorResult(t,e){return"string"==typeof t&&(t=this.getError(t)),fe([this.getSelector(t),this._encodeParams(t.inputs,e||[])])}decodeFunctionData(t,e){return"string"==typeof t&&(t=this.getFunction(t)),pe(e,0,4)!==this.getSelector(t)&&P.throwArgumentError(`data signature does not match function ${t.name}.`,"data",e),this._decodeParams(t.inputs,pe(e,4))}encodeFunctionData(t,e){return"string"==typeof t&&(t=this.getFunction(t)),fe([this.getSelector(t),this._encodeParams(t.inputs,e||[])])}decodeFunctionResult(t,e){"string"==typeof t&&(t=this.getFunction(t));let r="invalid length for result data";const n=ie(e);if(n.length%32==0)try{return mo(this,fo,"f").decode(t.outputs,n)}catch(t){r="could not decode result data"}return P.throwError(r,"BAD_DATA",{value:ue(n),info:{method:t.name,signature:t.format()}})}makeError(t,e,r){"string"==typeof t&&(t=this.getFunction(t));const n=P.getBytes(e);let s,i,o,a;if(r)try{s=mo(this,fo,"f").decode(t.inputs,r.data||"0x")}catch(t){console.log(t)}let c="unknown reason";if(0===n.length)c="missing error reason";else if(n.length%32==4){const t=ue(n.slice(0,4)),e=ko[t];if(e)try{o=e.name,a=e.signature,i=mo(this,fo,"f").decode(e.inputs,n.slice(4)),c=e.reason(...i)}catch(t){console.log(t)}else{c="unknown custom error";try{const e=this.getError(t);o=e.name,a=e.format(),c=`custom error: ${a}`;try{i=mo(this,fo,"f").decode(e.inputs,n.slice(4))}catch(t){c=`custom error: ${a} (coult not decode error data)`}}catch(t){console.log(t)}}}return P.makeError("call revert exception","CALL_EXCEPTION",{data:ue(n),transaction:null,method:t.name,signature:t.format(),args:s,errorArgs:i,errorName:o,errorSignature:a,reason:c})}encodeFunctionResult(t,e){return"string"==typeof t&&(t=this.getFunction(t)),ue(mo(this,fo,"f").encode(t.outputs,e||[]))}encodeFilterTopics(t,e){"string"==typeof t&&(t=this.getEvent(t)),e.length>t.inputs.length&&P.throwError("too many arguments for "+t.format(),"UNEXPECTED_ARGUMENT",{count:e.length,expectedCount:t.inputs.length});const r=[];t.anonymous||r.push(this.getEventTopic(t));const n=(t,e)=>"string"===t.type?_i(e):"bytes"===t.type?un(ue(e)):("address"===t.type&&mo(this,fo,"f").encode(["address"],[e]),me(ue(e),32));for(e.forEach(((e,s)=>{const i=t.inputs[s];i.indexed?null==e?r.push(null):"array"===i.baseType||"tuple"===i.baseType?P.throwArgumentError("filtering with tuples or arrays not supported","contract."+i.name,e):Array.isArray(e)?r.push(e.map((t=>n(i,t)))):r.push(n(i,e)):null!=e&&P.throwArgumentError("cannot filter non-indexed parameters; must be null","contract."+i.name,e)}));r.length&&null===r[r.length-1];)r.pop();return r}encodeEventLog(t,e){"string"==typeof t&&(t=this.getEvent(t));const r=[],n=[],s=[];return t.anonymous||r.push(this.getEventTopic(t)),e.length!==t.inputs.length&&P.throwArgumentError("event arguments/values mismatch","values",e),t.inputs.forEach(((t,i)=>{const o=e[i];if(t.indexed)if("string"===t.type)r.push(_i(o));else if("bytes"===t.type)r.push(un(o));else{if("tuple"===t.baseType||"array"===t.baseType)throw new Error("not implemented");r.push(mo(this,fo,"f").encode([t.type],[o]))}else n.push(t),s.push(o)})),{data:mo(this,fo,"f").encode(n,s),topics:r}}decodeEventLog(t,e,r){if("string"==typeof t&&(t=this.getEvent(t)),null!=r&&!t.anonymous){const e=this.getEventTopic(t);te(r[0],32)&&r[0].toLowerCase()===e||P.throwArgumentError("fragment/topic mismatch","topics[0]",r[0]),r=r.slice(1)}const n=[],s=[],i=[];t.inputs.forEach(((t,e)=>{t.indexed?"string"===t.type||"bytes"===t.type||"tuple"===t.baseType||"array"===t.baseType?(n.push(ct.fromObject({type:"bytes32",name:t.name})),i.push(!0)):(n.push(t),i.push(!1)):(s.push(t),i.push(!1))}));const o=null!=r?mo(this,fo,"f").decode(n,fe(r)):null,a=mo(this,fo,"f").decode(s,e,!0),c=[],l=[];let u=0,h=0;return t.inputs.forEach(((t,e)=>{let r=null;if(t.indexed)if(null==o)r=new Eo(null);else if(i[e])r=new Eo(o[h++]);else try{r=o[h++]}catch(t){r=t}else try{r=a[u++]}catch(t){r=t}c.push(r),l.push(t.name||null)})),Le.fromItems(c,l)}parseTransaction(t){const e=P.getBytes(t.data,"tx.data"),r=P.getBigInt(null!=t.value?t.value:0,"tx.value"),n=this.getFunction(ue(e.slice(0,4)));if(!n)return null;const s=mo(this,fo,"f").decode(n.inputs,e.slice(4));return new bo(n,this.getSelector(n),s,r)}parseLog(t){const e=this.getEvent(t.topics[0]);return!e||e.anonymous?null:new yo(e,this.getEventTopic(e),this.decodeEventLog(e,t.data,t.topics))}parseError(t){const e=ue(t),r=this.getError(pe(e,0,4));if(!r)return null;const n=mo(this,fo,"f").decode(r.inputs,pe(e,4));return new vo(r,this.getSelector(r),n)}static from(t){return t instanceof Ao?t:"string"==typeof t?new Ao(JSON.parse(t)):"function"==typeof t.format?new Ao(t.format(C.json)):new Ao(t)}}lo=new WeakMap,uo=new WeakMap,ho=new WeakMap,fo=new WeakMap,co=new WeakSet,po=function(t,e,r){if(te(t)){const e=t.toLowerCase();for(const t of mo(this,ho,"f").values())if(e===this.getSelector(t))return t;P.throwArgumentError("no matching function","selector",t)}if(-1===t.indexOf("(")){const n=[];for(const[e,r]of mo(this,ho,"f"))e.split("(")[0]===t&&n.push(r);if(e){const t=e.length>0?e[e.length-1]:null;let r=e.length,s=!0;Ls.isTyped(t)&&"overrides"===t.type&&(s=!1,r--);for(let t=n.length-1;t>=0;t--){const e=n[t].inputs.length;e===r||s&&e===r-1||n.splice(t,1)}for(let t=n.length-1;t>=0;t--){const r=n[t].inputs;for(let s=0;s=r.length){if("overrides"===e[s].type)continue;n.splice(t,1);break}if(e[s].type!==r[s].baseType){n.splice(t,1);break}}}}if(1===n.length&&e&&e.length!==n[0].inputs.length){const t=e[e.length-1];(null==t||Array.isArray(t)||"object"!=typeof t)&&n.splice(0,1)}if(0===n.length)P.throwArgumentError("no matching function","name",t);else if(n.length>1&&r){const e=n.map((t=>JSON.stringify(t.format()))).join(", ");P.throwArgumentError(`multiple matching functions (i.e. ${e})`,"name",t)}return n[0]}const n=mo(this,ho,"f").get(gt.fromString(t).format());return n||P.throwArgumentError("no matching function","signature",t)},wo=function(t,e,r){if(te(t)){const e=t.toLowerCase();for(const t of mo(this,uo,"f").values())if(e===this.getEventTopic(t))return t;P.throwArgumentError("no matching event","eventTopic",t)}if(-1===t.indexOf("(")){const n=[];for(const[e,r]of mo(this,uo,"f"))e.split("(")[0]===t&&n.push(r);if(e){for(let t=n.length-1;t>=0;t--)n[t].inputs.length=0;t--){const r=n[t].inputs;for(let s=0;s1&&r&&P.throwArgumentError("multiple matching events","name",t),n[0]}const n=mo(this,uo,"f").get(pt.fromString(t).format());return n||P.throwArgumentError("no matching event","signature",t)};const No=new N("@ethersproject/web@6.0.0-beta.1");var Po,xo,Oo=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Io=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class So{constructor(t,e,r,n,s){Po.set(this,void 0),xo.set(this,void 0),Oo(this,Po,{statusCode:t,statusMessage:e,headers:Object.freeze(Object.assign({},Object.keys(r).reduce(((t,e)=>(t[e.toLowerCase()]=r[e],t)),{}))),body:null==n?null:new Uint8Array(n),request:s||null},"f"),Oo(this,xo,{message:""},"f")}toString(){const t=c(Io(this,Po,"f"),"body");return``}get statusCode(){return c(Io(this,Po,"f"),"statusCode")}get statusMessage(){return c(Io(this,Po,"f"),"statusMessage")}get headers(){return c(Io(this,Po,"f"),"headers")}get body(){const t=c(Io(this,Po,"f"),"body");return null==t?null:new Uint8Array(t)}get bodyText(){try{const t=c(Io(this,Po,"f"),"body");return null==t?"":li(t)}catch(t){return No.throwError("response body is not valid UTF-8 data","UNSUPPORTED_OPERATION",{operation:"bodyText",info:{response:this}})}}get bodyJson(){try{return JSON.parse(this.bodyText)}catch(t){return No.throwError("response body is not valid JSON","UNSUPPORTED_OPERATION",{operation:"bodyJson",info:{response:this}})}}[(Po=new WeakMap,xo=new WeakMap,Symbol.iterator)](){const t=this.headers,e=Object.keys(t);let r=0;return{next:()=>{if(r=200&&this.statusCode<300}assertOk(){if(this.ok())return;let{message:t,error:e}=Io(this,xo,"f");""===t&&(t=`server response ${this.statusCode} ${this.statusMessage}`),No.throwError(t,"SERVER_ERROR",{request:this.request||"unknown request",response:this,error:e})}}async function Ro(t,e){const r=t.url.split(":")[0].toLowerCase();"http"!==r&&"https"!==r&&No.throwError(`unsupported protocol ${r}`,"UNSUPPORTED_OPERATION",{info:{protocol:r},operation:"request"}),t.credentials&&!t.allowInsecureAuthentication&&No.throwError("insecure authorized connections unsupported","UNSUPPORTED_OPERATION",{operation:"request"});const n={method:t.method,headers:new Headers(Array.from(t)),body:t.body||void 0},s=await fetch(t.url,n),i={};s.headers.forEach(((t,e)=>{i[e.toLowerCase()]=t}));const o=new Uint8Array(await s.arrayBuffer());return new So(s.status,s.statusText,i,o,t)}var _o,Co=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Bo=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};function Fo(t,e,r){if(typeof t!==e)throw new Error(`invalid ${r}`);return t}class Uo{constructor(t){_o.set(this,void 0),Co(this,_o,{allowInsecure:!1,gzip:!1,headers:{},method:"",timeout:300,url:Fo(t,"string","url")},"f")}get url(){return c(Bo(this,_o,"f"),"url")}set url(t){l(Bo(this,_o,"f"),"url",Fo(t,"string","url"))}get body(){const t=c(Bo(this,_o,"f"),"body");return null==t?null:this.isFrozen()?new Uint8Array(t):t}set body(t){if(null==t)l(Bo(this,_o,"f"),"body",void 0),l(Bo(this,_o,"f"),"bodyType",void 0);else if("string"==typeof t)l(Bo(this,_o,"f"),"body",ii(t)),l(Bo(this,_o,"f"),"bodyType","text/plain");else if(t instanceof Uint8Array)l(Bo(this,_o,"f"),"body",t),l(Bo(this,_o,"f"),"bodyType","application/octet-stream");else{if("object"!=typeof t)throw new Error("invalid body");l(Bo(this,_o,"f"),"body",ii(JSON.stringify(t))),l(Bo(this,_o,"f"),"bodyType","application/json")}}hasBody(){return null!=c(Bo(this,_o,"f"),"body")}get method(){const t=c(Bo(this,_o,"f"),"method");return t?t.toUpperCase():this.body?"POST":"GET"}set method(t){null==t&&(t=""),l(Bo(this,_o,"f"),"method",Fo(t,"string","method"))}get headers(){const t=Object.assign({},c(Bo(this,_o,"f"),"headers")),e=c(Bo(this,_o,"f"),"bodyType");return this.credentials,this.allowGzip&&(t["accept-encoding"]="gzip"),null==t["content-type"]&&e&&(t["content-type"]=e),this.body&&(t["content-length"]=String(this.body.length)),Object.freeze(t)}getHeader(t){return this.headers[t.toLowerCase()]}setHeader(t,e){const r=c(Bo(this,_o,"f"),"headers");l(Bo(this,_o,"f"),"headers",r),r[Fo(t,"string","key").toLowerCase()]=String(e)}clearHeaders(){l(Bo(this,_o,"f"),"headers",{})}[(_o=new WeakMap,Symbol.iterator)](){const t=this.headers,e=Object.keys(t);let r=0;return{next:()=>{if(r ${JSON.stringify(t)})`});const n=new Uo(t);return n.method="GET",n.allowGzip=this.allowGzip,n.timeout=this.timeout,l(Bo(n,_o,"f"),"body",c(Bo(this,_o,"f"),"body")),l(Bo(n,_o,"f"),"headers",Object.assign({},c(Bo(this,_o,"f"),"headers"))),l(Bo(n,_o,"f"),"bodyType",c(Bo(this,_o,"f"),"bodyType")),n}clone(){const t=new Uo(this.url);l(Bo(t,_o,"f"),"method",c(Bo(this,_o,"f"),"method"));const e=c(Bo(this,_o,"f"),"body");return l(Bo(t,_o,"f"),"body",null==e?void 0:new Uint8Array(e)),l(Bo(t,_o,"f"),"bodyType",c(Bo(this,_o,"f"),"bodyType")),l(Bo(t,_o,"f"),"headers",Object.assign({},c(Bo(this,_o,"f"),"headers"))),l(Bo(t,_o,"f"),"creds",c(Bo(this,_o,"f"),"creds")),this.allowGzip&&(t.allowGzip=!0),t.timeout=this.timeout,this.allowInsecureAuthentication&&(t.allowInsecureAuthentication=!0),t}freeze(){const t=c(Bo(this,_o,"f"),"body");return null!=t&&l(Bo(this,_o,"f"),"body",new Uint8Array(t)),Object.freeze(Bo(this,_o,"f").headers),Object.freeze(Bo(this,_o,"f")),this}isFrozen(){return Object.isFrozen(Bo(this,_o,"f"))}}async function Lo(t){return new Promise((e=>{setTimeout(e,t)}))}function Do(){return(new Date).getTime()}let Mo=!1;async function jo(t){const e="string"==typeof t?{request:new Uo(t)}:t instanceof Uo?{request:t}:Object.assign({},t);if(null==e.request)return No.throwArgumentError("missing request","connection",t);let r=e.request.clone().freeze();switch(e.request.url.split(":")[0]){case"data":{const t=r.url.match(/^data:([^;:]*)?(;base64)?,(.*)$/i);if(t)try{const e={"content-type":t[1]?t[1]:"text/plain"},n=t[2]?ae(t[3]):ii(t[3].replace(/%([0-9a-f][0-9a-f])/gi,((t,e)=>String.fromCharCode(parseInt(e,16)))));return new So(200,"OK",e,n,r.clone())}catch(t){return new So(400,"BAD REQUEST (invalid base64 encoded data)",{},null,r.clone())}return new So(500,"INTERNAL SERVER ERROR (unsupported dara URI)",{},null,r.clone())}case"ipfs":case"ipns":case"ar":throw new Error("not implemented yet");case"http":case"https":break;default:throw new Error("unsupported scheme")}const n=null!=e.throttleLimit?e.throttleLimit:12;if(!Number.isInteger(n)||n<1)return No.throwArgumentError("invalid throttleLimit","connection",t);const s=null!=e.throttleSlotInterval?e.throttleSlotInterval:100;if(!Number.isInteger(s)||n<0)return No.throwArgumentError("invalid throttleSlotInterval","connection",t);const i=null!=e.throttleRetry?e.throttleRetry:null;if(i&&"function"!=typeof i)return No.throwArgumentError("invalid throttleRetry callback","connection",t);const o=e.preflightRequest||null;if(o&&"function"!=typeof o)return No.throwArgumentError("invalid preflightRequest callback","connection",t);const a=e.processResponse||null;if(a&&"function"!=typeof a)return No.throwArgumentError("invalid processResponse callback","connection",t);const c=Do();let l=null;for(let t=0;t32)throw new Error("internal; should not happen");const r=new Uint8Array(32);return r.set(e,32-e.length),r}function Qo(t){if(t.length%32==0)return t;const e=new Uint8Array(32*Math.ceil(t.length/32));return e.set(t),e}function ta(t){const e=[];let r=0;for(let n=0;nGo.getBigInt(t)===Ko)).catch((t=>{if("CALL_EXCEPTION"===t.code)return!1;throw Ho(this,zo,null,"f"),t})),"f"),await Vo(this,zo,"f")}async _fetch(t,e="0x"){const r=fe([t,Li(this.name),e]),n={to:this.address,enableCcipRead:!0,data:r};let s=!1;await this.supportsWildcard()&&(s=!0,n.data=fe(["0x9061b923",ta([Di(this.name),r])]));try{let t=await this.provider.call(n);return Go.getBytes(t).length%32==4?Go.throwError("resolver threw error","CALL_EXCEPTION",{transaction:n,data:t}):s?Xo(t,0):t}catch(t){if("CALL_EXCEPTION"!==t.code)throw t}return null}async getAddress(t=60){if(60===t)try{const t=await this._fetch("0x3b3b57de");if("0x"===t||t===qo)return null;return(await this.provider.getNetwork()).formatter.callAddress(t)}catch(t){if("CALL_EXCEPTION"===t.code)return null;throw t}let e=null;for(const r of this.provider.plugins)if(r instanceof ra&&r.supportsCoinType(t)){e=r;break}if(null==e)return null;const r=Xo(await this._fetch("0xf1cb7e06",Zo(t))||"0x",0);if(null==r||"0x"===r)return null;const n=await e.encodeAddress(t,r);return null!=n?n:Go.throwError("invalid coin data","UNSUPPORTED_OPERATION",{operation:`getAddress(${t})`,info:{coinType:t,data:r}})}async getText(t){let e=ii(t);const r=Go.getBytes(fe([Zo(64),Zo(e.length),e])),n=Xo(await this._fetch("0x59d1d43c",Qo(r))||"0x",0);return null==n||"0x"===n?null:li(n)}async getContentHash(){const t=Xo(await this._fetch("0xbc1c58d1")||"0x",0);if(null==t||"0x"===t)return null;const e=t.match(/^0x(e3010170|e5010172)(([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f]*))$/);if(e){const t="e3010170"===e[1]?"ipfs":"ipns",r=parseInt(e[4],16);if(e[5].length===2*r)return`${t}://${Zt("0x"+e[2])}`}const r=t.match(/^0xe40101fa011b20([0-9a-f]*)$/);return r&&64===r[1].length?`bzz://${r[1]}`:Go.throwError("invalid or unsupported content hash data","UNSUPPORTED_OPERATION",{operation:"getContentHash()",info:{data:t}})}async getAvatar(){return(await this._getAvatar()).url}async _getAvatar(){const t=[{type:"name",value:this.name}];try{const e=await this.getText("avatar");if(null==e)throw t.push({type:"!avatar",value:""}),new Error("!avatar");t.push({type:"avatar",value:e});for(let r=0;roa.throwArgumentError(e,"signature",t);if("string"==typeof t){65!==de(t)&&e("invlaid raw signature length");const r=pe(t,0,32),n=pe(t,32,64);BigInt(n)>>ga&&e("non-canonical s");const s=va.getNormalizedV(pe(t,64,65));return new va(ya,r,n,s)}if(t instanceof va)return t.clone();const r=t.r;null==r&&e("missing r"),te(r,32)||e("invalid r");const n=function(t,r){return t?(te(t,32)||e("invalid s"),t):r?(te(r,32)||e("invalid vs"),At(BigInt(r)&ma,32)):e("missing s")}(t.s,t.vs);BigInt(n)>>ga&&e("non-canonical s");const s=function(t,r,n){if(t)return va.getNormalizedV(t);if(r)return te(r,32)||e("invalid vs"),128&ie(r)[0]?28:27;if(n){switch(n){case 0:return 27;case 1:return 28}return e("invalid yParity")}return e("missing v")}(t.v,t.vs,t.yParity),i=new va(ya,r,n,s);return t.yParity&&(t.yParity,i.yParity),t.vs&&(t.vs,i.vs),i}} +/*! noble-secp256k1 - MIT License (c) 2019 Paul Miller (paulmillr.com) */const Ea=BigInt(0),Ta=BigInt(1),ka=BigInt(2),Aa=BigInt(3),Na=BigInt(8),Pa=ka**BigInt(256),xa={a:Ea,b:BigInt(7),P:Pa-ka**BigInt(32)-BigInt(977),n:Pa-BigInt("432420386565659656852420866394968145599"),h:Ta,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee")};function Oa(t){const{a:e,b:r}=xa,n=Ka(t*t),s=Ka(n*t);return Ka(s+e*t+r)}const Ia=xa.a===Ea;class Sa{constructor(t,e,r){this.x=t,this.y=e,this.z=r}static fromAffine(t){if(!(t instanceof _a))throw new TypeError("JacobianPoint#fromAffine: expected Point");return new Sa(t.x,t.y,Ta)}static toAffineBatch(t){const e=function(t,e=xa.P){const r=new Array(t.length),n=qa(t.reduce(((t,n,s)=>n===Ea?t:(r[s]=t,Ka(t*n,e))),Ta),e);return t.reduceRight(((t,n,s)=>n===Ea?t:(r[s]=Ka(t*r[s],e),Ka(t*n,e))),n),r}(t.map((t=>t.z)));return t.map(((t,r)=>t.toAffine(e[r])))}static normalizeZ(t){return Sa.toAffineBatch(t).map(Sa.fromAffine)}equals(t){if(!(t instanceof Sa))throw new TypeError("JacobianPoint expected");const{x:e,y:r,z:n}=this,{x:s,y:i,z:o}=t,a=Ka(n**ka),c=Ka(o**ka),l=Ka(e*c),u=Ka(s*a),h=Ka(Ka(r*o)*c),f=Ka(Ka(i*n)*a);return l===u&&h===f}negate(){return new Sa(this.x,Ka(-this.y),this.z)}double(){const{x:t,y:e,z:r}=this,n=Ka(t**ka),s=Ka(e**ka),i=Ka(s**ka),o=Ka(ka*(Ka((t+s)**ka)-n-i)),a=Ka(Aa*n),c=Ka(a**ka),l=Ka(c-ka*o),u=Ka(a*(o-l)-Na*i),h=Ka(ka*e*r);return new Sa(l,u,h)}add(t){if(!(t instanceof Sa))throw new TypeError("JacobianPoint expected");const{x:e,y:r,z:n}=this,{x:s,y:i,z:o}=t;if(s===Ea||i===Ea)return this;if(e===Ea||r===Ea)return t;const a=Ka(n**ka),c=Ka(o**ka),l=Ka(e*c),u=Ka(s*a),h=Ka(Ka(r*o)*c),f=Ka(Ka(i*n)*a),d=Ka(u-l),p=Ka(f-h);if(d===Ea)return p===Ea?this.double():Sa.ZERO;const w=Ka(d**ka),g=Ka(d*w),m=Ka(l*w),y=Ka(p**ka-g-ka*m),b=Ka(p*(m-y)-h*g),v=Ka(n*o*d);return new Sa(y,b,v)}subtract(t){return this.add(t.negate())}multiplyUnsafe(t){let e=Va(t);const r=Sa.ZERO;if(e===Ea)return r;if(e===Ta)return this;if(!Ia){let t=r,n=this;for(;e>Ea;)e&Ta&&(t=t.add(n)),n=n.double(),e>>=Ta;return t}let{k1neg:n,k1:s,k2neg:i,k2:o}=Za(e),a=r,c=r,l=this;for(;s>Ea||o>Ea;)s&Ta&&(a=a.add(l)),o&Ta&&(c=c.add(l)),l=l.double(),s>>=Ta,o>>=Ta;return n&&(a=a.negate()),i&&(c=c.negate()),c=new Sa(Ka(c.x*xa.beta),c.y,c.z),a.add(c)}precomputeWindow(t){const e=Ia?128/t+1:256/t+1,r=[];let n=this,s=n;for(let i=0;i>=u,o>a&&(o-=l,t+=Ta),0===o){let t=n[r];e%2&&(t=t.negate()),i=i.add(t)}else{let t=n[r+Math.abs(o)-1];o<0&&(t=t.negate()),s=s.add(t)}}return{p:s,f:i}}multiply(t,e){let r,n,s=Va(t);if(Ia){const{k1neg:t,k1:i,k2neg:o,k2:a}=Za(s);let{p:c,f:l}=this.wNAF(i,e),{p:u,f:h}=this.wNAF(a,e);t&&(c=c.negate()),o&&(u=u.negate()),u=new Sa(Ka(u.x*xa.beta),u.y,u.z),r=c.add(u),n=l.add(h)}else{const{p:t,f:i}=this.wNAF(s,e);r=t,n=i}return Sa.normalizeZ([r,n])[0]}toAffine(t=qa(this.z)){const{x:e,y:r,z:n}=this,s=t,i=Ka(s*s),o=Ka(i*s),a=Ka(e*i),c=Ka(r*o);if(Ka(n*s)!==Ta)throw new Error("invZ was invalid");return new _a(a,c)}}Sa.BASE=new Sa(xa.Gx,xa.Gy,Ta),Sa.ZERO=new Sa(Ea,Ta,Ea);const Ra=new WeakMap;class _a{constructor(t,e){this.x=t,this.y=e}_setWindowSize(t){this._WINDOW_SIZE=t,Ra.delete(this)}static fromCompressedHex(t){const e=32===t.length,r=Wa(e?t:t.subarray(1));if(!ec(r))throw new Error("Point is not on curve");let n=function(t){const{P:e}=xa,r=BigInt(6),n=BigInt(11),s=BigInt(22),i=BigInt(23),o=BigInt(44),a=BigInt(88),c=t*t*t%e,l=c*c*t%e,u=Ja(l,Aa)*l%e,h=Ja(u,Aa)*l%e,f=Ja(h,ka)*c%e,d=Ja(f,n)*f%e,p=Ja(d,s)*d%e,w=Ja(p,o)*p%e,g=Ja(w,a)*w%e,m=Ja(g,o)*p%e,y=Ja(m,Aa)*l%e,b=Ja(y,i)*d%e,v=Ja(b,r)*c%e;return Ja(v,ka)}(Oa(r));const s=(n&Ta)===Ta;if(e)s&&(n=Ka(-n));else{1==(1&t[0])!==s&&(n=Ka(-n))}const i=new _a(r,n);return i.assertValidity(),i}static fromUncompressedHex(t){const e=Wa(t.subarray(1,33)),r=Wa(t.subarray(33,65)),n=new _a(e,r);return n.assertValidity(),n}static fromHex(t){const e=Ha(t),r=e.length,n=e[0];if(32===r||33===r&&(2===n||3===n))return this.fromCompressedHex(e);if(65===r&&4===n)return this.fromUncompressedHex(e);throw new Error(`Point.fromHex: received invalid point. Expected 32-33 compressed bytes or 65 uncompressed bytes, not ${r}`)}static fromPrivateKey(t){return _a.BASE.multiply(nc(t))}static fromSignature(t,e,r){const n=function(t){const{n:e}=xa,r=8*t.length-256;let n=Wa(t);r>0&&(n>>=BigInt(r));n>=e&&(n-=e);return n}(t=Ha(t)),{r:s,s:i}=function(t){if(t instanceof Fa)return t.assertValidity(),t;try{return Fa.fromDER(t)}catch(e){return Fa.fromCompact(t)}}(e);if(0!==r&&1!==r)throw new Error("Cannot recover signature: invalid recovery bit");if(n===Ea)throw new Error("Cannot recover signature: msgHash cannot be 0");const o=1&r?"03":"02",a=_a.fromHex(o+ja(s)),{n:c}=xa,l=qa(s,c),u=Ka(-n*l,c),h=Ka(i*l,c),f=_a.BASE.multiplyAndAddUnsafe(a,u,h);if(!f)throw new Error("Cannot recover signature: point at infinify");return f.assertValidity(),f}toRawBytes(t=!1){return za(this.toHex(t))}toHex(t=!1){const e=ja(this.x);if(t){return`${this.y&Ta?"03":"02"}${e}`}return`04${e}${ja(this.y)}`}toHexX(){return this.toHex(!0).slice(2)}toRawX(){return this.toRawBytes(!0).slice(1)}assertValidity(){const t="Point is not on elliptic curve",{x:e,y:r}=this;if(!ec(e)||!ec(r))throw new Error(t);const n=Ka(r*r);if(Ka(n-Oa(e))!==Ea)throw new Error(t)}equals(t){return this.x===t.x&&this.y===t.y}negate(){return new _a(this.x,Ka(-this.y))}double(){return Sa.fromAffine(this).double().toAffine()}add(t){return Sa.fromAffine(this).add(Sa.fromAffine(t)).toAffine()}subtract(t){return this.add(t.negate())}multiply(t){return Sa.fromAffine(this).multiply(t,this).toAffine()}multiplyAndAddUnsafe(t,e,r){const n=Sa.fromAffine(this).multiply(e),s=Sa.fromAffine(t).multiplyUnsafe(r),i=n.add(s);return i.equals(Sa.ZERO)?void 0:i.toAffine()}}function Ca(t){return Number.parseInt(t[0],16)>=8?"00"+t:t}function Ba(t){if(t.length<2||2!==t[0])throw new Error(`Invalid signature integer tag: ${Ma(t)}`);const e=t[1],r=t.subarray(2,e+2);if(!e||r.length!==e)throw new Error("Invalid signature integer: wrong length");if(0===r[0]&&r[1]<=127)throw new Error("Invalid signature integer: trailing length");return{data:Wa(r),left:t.subarray(e+2)}}_a.BASE=new _a(xa.Gx,xa.Gy),_a.ZERO=new _a(Ea,Ea);class Fa{constructor(t,e){this.r=t,this.s=e,this.assertValidity()}static fromCompact(t){const e=La(t),r="Signature.fromCompact";if("string"!=typeof t&&!e)throw new TypeError(`${r}: Expected string or Uint8Array`);const n=e?Ma(t):t;if(128!==n.length)throw new Error(`${r}: Expected 64-byte hex`);return new Fa($a(n.slice(0,64)),$a(n.slice(64,128)))}static fromDER(t){const e=La(t);if("string"!=typeof t&&!e)throw new TypeError("Signature.fromDER: Expected string or Uint8Array");const{r:r,s:n}=function(t){if(t.length<2||48!=t[0])throw new Error(`Invalid signature tag: ${Ma(t)}`);if(t[1]!==t.length-2)throw new Error("Invalid signature: incorrect length");const{data:e,left:r}=Ba(t.subarray(2)),{data:n,left:s}=Ba(r);if(s.length)throw new Error(`Invalid signature: left bytes after parsing: ${Ma(s)}`);return{r:e,s:n}}(e?t:za(t));return new Fa(r,n)}static fromHex(t){return this.fromDER(t)}assertValidity(){const{r:t,s:e}=this;if(!tc(t))throw new Error("Invalid Signature: r must be 0 < r < n");if(!tc(e))throw new Error("Invalid Signature: s must be 0 < s < n")}hasHighS(){const t=xa.n>>Ta;return this.s>t}normalizeS(){return this.hasHighS()?new Fa(this.r,xa.n-this.s):this}toDERRawBytes(t=!1){return za(this.toDERHex(t))}toDERHex(t=!1){const e=Ca(Ga(this.s));if(t)return e;const r=Ca(Ga(this.r)),n=Ga(r.length/2),s=Ga(e.length/2);return`30${Ga(r.length/2+e.length/2+4)}02${n}${r}02${s}${e}`}toRawBytes(){return this.toDERRawBytes()}toHex(){return this.toDERHex()}toCompactRawBytes(){return za(this.toCompactHex())}toCompactHex(){return ja(this.r)+ja(this.s)}}function Ua(...t){if(!t.every(La))throw new Error("Uint8Array list expected");if(1===t.length)return t[0];const e=t.reduce(((t,e)=>t+e.length),0),r=new Uint8Array(e);for(let e=0,n=0;ee.toString(16).padStart(2,"0")));function Ma(t){if(!(t instanceof Uint8Array))throw new Error("Expected Uint8Array");let e="";for(let r=0;rPa)throw new Error("Expected number < 2^256");return t.toString(16).padStart(64,"0")}function Ga(t){const e=t.toString(16);return 1&e.length?`0${e}`:e}function $a(t){if("string"!=typeof t)throw new TypeError("hexToNumber: expected string, got "+typeof t);return BigInt(`0x${t}`)}function za(t){if("string"!=typeof t)throw new TypeError("hexToBytes: expected string, got "+typeof t);if(t.length%2)throw new Error("hexToBytes: received invalid unpadded hex"+t.length);const e=new Uint8Array(t.length/2);for(let r=0;r0)return BigInt(t);if("bigint"==typeof t&&tc(t))return t;throw new TypeError("Expected valid private scalar: 0 < scalar < curve.n")}function Ka(t,e=xa.P){const r=t%e;return r>=Ea?r:e+r}function Ja(t,e){const{P:r}=xa;let n=t;for(;e-- >Ea;)n*=n,n%=r;return n}function qa(t,e=xa.P){if(t===Ea||e<=Ea)throw new Error(`invert: expected positive integers, got n=${t} mod=${e}`);let r=Ka(t,e),n=e,s=Ea,i=Ta;for(;r!==Ea;){const t=n%r,e=s-i*(n/r);n=r,r=t,s=i,i=e}if(n!==Ta)throw new Error("invert: does not exist");return Ka(s,e)}const Xa=(t,e)=>(t+e/ka)/e,Ya=ka**BigInt(128);function Za(t){const{n:e}=xa,r=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-Ta*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),s=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),i=r,o=Xa(i*t,e),a=Xa(-n*t,e);let c=Ka(t-o*r-a*s,e),l=Ka(-o*n-a*i,e);const u=c>Ya,h=l>Ya;if(u&&(c=e-c),h&&(l=e-l),c>Ya||l>Ya)throw new Error("splitScalarEndo: Endomorphism failed, k="+t);return{k1neg:u,k1:c,k2neg:h,k2:l}}class Qa{constructor(){this.v=new Uint8Array(32).fill(1),this.k=new Uint8Array(32).fill(0),this.counter=0}hmac(...t){return hc.hmacSha256(this.k,...t)}hmacSync(...t){if("function"!=typeof hc.hmacSha256Sync)throw new Error("utils.hmacSha256Sync is undefined, you need to set it");const e=hc.hmacSha256Sync(this.k,...t);if(e instanceof Promise)throw new Error("To use sync sign(), ensure utils.hmacSha256 is sync");return e}incr(){if(this.counter>=1e3)throw new Error("Tried 1,000 k values for sign(), all were invalid");this.counter+=1}async reseed(t=new Uint8Array){this.k=await this.hmac(this.v,Uint8Array.from([0]),t),this.v=await this.hmac(this.v),0!==t.length&&(this.k=await this.hmac(this.v,Uint8Array.from([1]),t),this.v=await this.hmac(this.v))}reseedSync(t=new Uint8Array){this.k=this.hmacSync(this.v,Uint8Array.from([0]),t),this.v=this.hmacSync(this.v),0!==t.length&&(this.k=this.hmacSync(this.v,Uint8Array.from([1]),t),this.v=this.hmacSync(this.v))}async generate(){return this.incr(),this.v=await this.hmac(this.v),this.v}generateSync(){return this.incr(),this.v=this.hmacSync(this.v),this.v}}function tc(t){return Ea0)e=BigInt(t);else if("string"==typeof t){if(64!==t.length)throw new Error("Expected 32 bytes of private key");e=$a(t)}else{if(!La(t))throw new TypeError("Expected valid private key");if(32!==t.length)throw new Error("Expected 32 bytes of private key");e=Wa(t)}if(!tc(e))throw new Error("Expected private key: 0 < key < n");return e}function sc(t){const e=La(t),r="string"==typeof t,n=(e||r)&&t.length;return e?33===n||65===n:r?66===n||130===n:t instanceof _a}function ic(t,e,r=!1){if(sc(t))throw new TypeError("getSharedSecret: first arg must be private key");if(!sc(e))throw new TypeError("getSharedSecret: second arg must be public key");const n=(s=e)instanceof _a?(s.assertValidity(),s):_a.fromHex(s);var s;return n.assertValidity(),n.multiply(nc(t)).toRawBytes(r)}function oc(t){return Wa(t.length>32?t.slice(0,32):t)}function ac(t){const e=oc(t),r=Ka(e,xa.n);return cc(r{if((t=Ha(t)).length<40||t.length>1024)throw new Error("Expected 40-1024 bytes of private key as per FIPS 186");const e=Ka(Wa(t),xa.n);if(e===Ea||e===Ta)throw new Error("Invalid private key");return function(t){return za(ja(t))}(e)},randomBytes:(t=32)=>{if(uc.web)return uc.web.getRandomValues(new Uint8Array(t));throw new Error("The environment doesn't have randomBytes function")},randomPrivateKey:()=>hc.hashToPrivateKey(hc.randomBytes(40)),bytesToHex:Ma,mod:Ka,sha256:async t=>{if(uc.web){const e=await uc.web.subtle.digest("SHA-256",t.buffer);return new Uint8Array(e)}throw new Error("The environment doesn't have sha256 function")},hmacSha256:async(t,...e)=>{if(uc.web){const r=await uc.web.subtle.importKey("raw",t,{name:"HMAC",hash:{name:"SHA-256"}},!1,["sign"]),n=Ua(...e),s=await uc.web.subtle.sign("HMAC",r,n);return new Uint8Array(s)}throw new Error("The environment doesn't have hmac-sha256 function")},sha256Sync:void 0,hmacSha256Sync:void 0,precompute(t=8,e=_a.BASE){const r=e===_a.BASE?e:new _a(e.x,e.y);return r._setWindowSize(t),r.multiply(Aa),r}};var fc,dc=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},pc=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};hc.hmacSha256Sync=function(t,...e){return ie($r("sha256",t,fe(e)))};class wc{constructor(t){fc.set(this,void 0),oa.assertArgument(32===de(t),"invalid private key length","privateKey","[REDACTED]"),dc(this,fc,ue(t),"f")}get privateKey(){return pc(this,fc,"f")}get publicKey(){return wc.computePublicKey(pc(this,fc,"f"))}get compressedPublicKey(){return wc.computePublicKey(pc(this,fc,"f"),!0)}sign(t){oa.assertArgument(32===de(t),"invalid digest length","digest",t);const[e,r]=lc(ie(t),ie(pc(this,fc,"f")),{recovered:!0,canonical:!0}),n=Fa.fromHex(e);return va.from({r:At("0x"+n.r.toString(16),32),s:At("0x"+n.s.toString(16),32),v:r?28:27}).freeze()}computeShardSecret(t){const e=wc.computePublicKey(t);return ue(ic(ie(pc(this,fc,"f")),e))}static computePublicKey(t,e){let r=oa.getBytes(t,"key");if(32===r.length){return ue(function(t,e=!1){return _a.fromPrivateKey(t).toRawBytes(e)}(r,!!e))}if(64===r.length){const t=new Uint8Array(65);t[0]=4,t.set(r,1),r=t}return ue(_a.fromHex(r).toRawBytes(e))}static recoverPublicKey(t,e){const r=va.from(e),n=Fa.fromCompact(ie(fe([r.r,r.s]))).toDERRawBytes(),s=function(t,e,r,n=!1){return _a.fromSignature(t,e,r).toRawBytes(n)}(ie(t),n,r.yParity);return null!=s?ue(s):oa.throwArgumentError("invalid signautre for digest","signature",e)}static _addPoints(t,e,r){const n=_a.fromHex(wc.computePublicKey(t).substring(2)),s=_a.fromHex(wc.computePublicKey(e).substring(2));return"0x"+n.add(s).toHex(!!r)}}function gc(t,e){return{address:ds(t),storageKeys:(e||[]).map(((t,e)=>{if(32!==de(t))throw new Error("");return t.toLowerCase()}))}}function mc(t){if(Array.isArray(t))return t.map(((t,e)=>{if(Array.isArray(t)){if(t.length>2)throw new Error("");return gc(t[0],t[1])}return gc(t.address,t.storageKeys)}));const e=Object.keys(t).map((e=>{const r=t[e].reduce(((t,e)=>(t[e]=!0,t)),{});return gc(e,Object.keys(r).sort())}));return e.sort(((t,e)=>t.address.localeCompare(e.address))),e}fc=new WeakMap;const yc=new N("@ethersproject/transactions@6.0.0-beta.1");var bc,vc=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Ec=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const Tc=BigInt(0);function kc(t,e){const r=yc.getBigInt(t,"value"),n=Nt(r);return n.length>32&&yc.throwArgumentError("value too large",`tx.${e}`,r),n}function Ac(t){return mc(t).map((t=>[t.address,t.storageKeys]))}function Nc(t,e){const r=[kc(t.nonce||0,"nonce"),kc(t.gasPrice||0,"gasPrice"),kc(t.gasLimit||0,"gasLimit"),null!=t.to?ds(t.to):"0x",kc(t.value||0,"value"),t.data||"0x"];let n=Tc;if(null!=t.chainId)n=yc.getBigInt(t.chainId,"tx.chainId"),e&&null!=e.networkV&&e.legacyChainId!==n&&yc.throwArgumentError("tx.chainId/sig.v mismatch","sig",e);else if(e){const t=e.legacyChainId;null!=t&&(n=t)}if(!e)return n!==Tc&&(r.push(Nt(n)),r.push("0x"),r.push("0x")),bs(r);let s=BigInt(27+e.yParity);return n!==Tc?s=va.getChainIdV(n,e.v):BigInt(e.v)!==s&&yc.throwArgumentError("tx.chainId/sig.v mismatch","sig",e),r.push(Nt(s)),r.push(Nt(e.r)),r.push(Nt(e.s)),bs(r)}function Pc(t,e){const r=[kc(t.chainId||0,"chainId"),kc(t.nonce||0,"nonce"),kc(t.maxPriorityFeePerGas||0,"maxPriorityFeePerGas"),kc(t.maxFeePerGas||0,"maxFeePerGas"),kc(t.gasLimit||0,"gasLimit"),null!=t.to?ds(t.to):"0x",kc(t.value||0,"value"),t.data||"0x",Ac(t.accessList||[])];return e&&(r.push(kc(e.yParity,"yParity")),r.push(Nt(e.r)),r.push(Nt(e.s))),fe(["0x02",bs(r)])}function xc(t,e){const r=[kc(t.chainId||0,"chainId"),kc(t.nonce||0,"nonce"),kc(t.gasPrice||0,"gasPrice"),kc(t.gasLimit||0,"gasLimit"),null!=t.to?ds(t.to):"0x",kc(t.value||0,"value"),t.data||"0x",Ac(t.accessList||[])];return e&&(r.push(kc(e.yParity,"recoveryParam")),r.push(Nt(e.r)),r.push(Nt(e.s))),fe(["0x01",bs(r)])}class Oc{constructor(){bc.set(this,void 0),vc(this,bc,{type:null,to:null,nonce:0,gasLimit:BigInt(0),gasPrice:null,maxPriorityFeePerGas:null,maxFeePerGas:null,data:"0x",value:BigInt(0),chainId:BigInt(0),sig:null,accessList:null},"f")}get type(){return c(Ec(this,bc,"f"),"type")}get typeName(){switch(this.type){case 0:return"legacy";case 1:return"eip-2930";case 2:return"eip-1559"}return null}set type(t){switch(t){case null:l(Ec(this,bc,"f"),"type",null);break;case 0:case"legacy":l(Ec(this,bc,"f"),"type",0);break;case 1:case"berlin":case"eip-2930":l(Ec(this,bc,"f"),"type",1);break;case 2:case"london":case"eip-1559":l(Ec(this,bc,"f"),"type",2);break;default:throw new Error("unsupported transaction type")}}get to(){return c(Ec(this,bc,"f"),"to")}set to(t){l(Ec(this,bc,"f"),"to",null==t?null:ds(t))}get nonce(){return c(Ec(this,bc,"f"),"nonce")}set nonce(t){l(Ec(this,bc,"f"),"nonce",yc.getNumber(t,"value"))}get gasLimit(){return c(Ec(this,bc,"f"),"gasLimit")}set gasLimit(t){l(Ec(this,bc,"f"),"gasLimit",yc.getBigInt(t))}get gasPrice(){return c(Ec(this,bc,"f"),"gasPrice")}set gasPrice(t){l(Ec(this,bc,"f"),"gasPrice",null==t?null:yc.getBigInt(t))}get maxPriorityFeePerGas(){return c(Ec(this,bc,"f"),"maxPriorityFeePerGas")}set maxPriorityFeePerGas(t){l(Ec(this,bc,"f"),"maxPriorityFeePerGas",null==t?null:yc.getBigInt(t))}get maxFeePerGas(){return c(Ec(this,bc,"f"),"maxFeePerGas")}set maxFeePerGas(t){l(Ec(this,bc,"f"),"maxFeePerGas",null==t?null:yc.getBigInt(t))}get data(){return c(Ec(this,bc,"f"),"data")}set data(t){l(Ec(this,bc,"f"),"data",ue(t))}get value(){return c(Ec(this,bc,"f"),"value")}set value(t){l(Ec(this,bc,"f"),"value",yc.getBigInt(t))}get chainId(){return c(Ec(this,bc,"f"),"chainId")}set chainId(t){l(Ec(this,bc,"f"),"chainId",yc.getBigInt(t))}get signature(){return c(Ec(this,bc,"f"),"sig")||null}set signature(t){l(Ec(this,bc,"f"),"sig",null==t?null:va.from(t))}get accessList(){return c(Ec(this,bc,"f"),"accessList")||null}set accessList(t){l(Ec(this,bc,"f"),"accessList",null==t?null:mc(t))}get hash(){if(null==this.signature)throw new Error("cannot hash unsigned transaction; maybe you meant .unsignedHash");return un(this.serialized)}get unsignedHash(){return un(this.unsignedSerialized)}get from(){return null==this.signature?null:""}get fromPublicKey(){return null==this.signature?null:""}isSigned(){return null!=this.signature}get serialized(){if(null==this.signature)throw new Error("cannot serialize unsigned transaction; maybe you meant .unsignedSerialized");const t=this.inferTypes();if(1!==t.length)throw new Error("cannot determine transaction type; specify type manually");switch(t[0]){case 0:return Nc(this,this.signature);case 1:return xc(this,this.signature);case 2:return Pc(this,this.signature)}throw new Error("unsupported type")}get unsignedSerialized(){if(null!=this.signature)throw new Error("cannot serialize unsigned transaction; maybe you meant .unsignedSerialized");const t=this.inferTypes();if(1!==t.length)throw new Error("cannot determine transaction type; specify type manually");switch(t[0]){case 0:return Nc(this);case 1:return xc(this);case 2:return Pc(this)}throw new Error("unsupported type")}inferTypes(){const t=null!=this.gasPrice,e=null!=this.maxFeePerGas||null!=this.maxPriorityFeePerGas,r=null!=this.accessList;if(this.maxFeePerGas&&this.maxPriorityFeePerGas&&this.maxFeePerGas(Object.freeze(t.storageKeys),Object.freeze(t)))))),Object.freeze(Ec(this,bc,"f")),this}isFrozen(){return Object.isFrozen(Ec(this,bc,"f"))}static from(t){if("string"==typeof t){const e=ie(t);if(e[0]>=127)return Oc.from({});switch(e[0]){case 1:case 2:return Oc.from(function(t){throw new Error("@TODO")}(e.slice(1)))}throw new Error("unsupported transaction type")}const e=new Oc;return null!=t.type&&(e.type=t.type),null!=t.to&&(e.to=t.to),null!=t.nonce&&(e.nonce=t.nonce),null!=t.gasLimit&&(e.gasLimit=t.gasLimit),null!=t.gasPrice&&(e.gasPrice=t.gasPrice),null!=t.maxPriorityFeePerGas&&(e.maxPriorityFeePerGas=t.maxPriorityFeePerGas),null!=t.maxFeePerGas&&(e.maxFeePerGas=t.maxFeePerGas),null!=t.data&&(e.data=t.data),null!=t.value&&(e.value=t.value),null!=t.chainId&&(e.chainId=t.chainId),null!=t.signature&&(e.signature=va.from(t.signature)),null!=t.accessList&&(e.accessList=t.accessList),e}}bc=new WeakMap;var Ic,Sc,Rc=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},_c=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};function Cc(t){return null==t?null:t}function Bc(t){return null==t?null:t.toString()}class Fc{constructor(t,e,r){n(this,{gasPrice:Cc(t),maxFeePerGas:Cc(e),maxPriorityFeePerGas:Cc(r)})}toJSON(){const{gasPrice:t,maxFeePerGas:e,maxPriorityFeePerGas:r}=this;return{_type:"FeeData",gasPrice:Bc(t),maxFeePerGas:Bc(e),maxPriorityFeePerGas:Bc(r)}}}class Uc{constructor(t,e){Ic.set(this,void 0),null==e&&(e=zc),Rc(this,Ic,Object.freeze(t.transactions.map((t=>{if("string"!=typeof t&&t.provider!==e)throw new Error("provider mismatch");return t}))),"f"),n(this,{provider:e,hash:Cc(t.hash),number:t.number,timestamp:t.timestamp,parentHash:t.parentHash,nonce:t.nonce,difficulty:t.difficulty,gasLimit:t.gasLimit,gasUsed:t.gasUsed,miner:t.miner,extraData:t.extraData,baseFeePerGas:Cc(t.baseFeePerGas)})}get transactions(){return _c(this,Ic,"f")}toJSON(){const{baseFeePerGas:t,difficulty:e,extraData:r,gasLimit:n,gasUsed:s,hash:i,miner:o,nonce:a,number:c,parentHash:l,timestamp:u,transactions:h}=this;return{_type:"Block",baseFeePerGas:Bc(t),difficulty:Bc(e),extraData:r,gasLimit:Bc(n),gasUsed:Bc(s),hash:i,miner:o,nonce:a,number:c,parentHash:l,timestamp:u,transactions:h}}[(Ic=new WeakMap,Symbol.iterator)](){let t=0;return{next:()=>t{if(e!==t.provider)throw new Error("provider mismatch");return t}))),"f"),n(this,{provider:e,to:t.to,from:t.from,contractAddress:t.contractAddress,hash:t.hash,index:t.index,blockHash:t.blockHash,blockNumber:t.blockNumber,logsBloom:t.logsBloom,gasUsed:t.gasUsed,cumulativeGasUsed:t.cumulativeGasUsed,gasPrice:t.effectiveGasPrice||t.gasPrice,byzantium:t.byzantium,status:t.status,root:t.root})}get logs(){return _c(this,Sc,"f")}toJSON(){const{to:t,from:e,contractAddress:r,hash:n,index:s,blockHash:i,blockNumber:o,logsBloom:a,logs:c,byzantium:l,status:u,root:h}=this;return{_type:"TransactionReceipt",blockHash:i,blockNumber:o,byzantium:l,contractAddress:r,cumulativeGasUsed:Bc(this.cumulativeGasUsed),from:e,gasPrice:Bc(this.gasPrice),gasUsed:Bc(this.gasUsed),hash:n,index:s,logs:c,logsBloom:a,root:h,status:u,to:t}}get length(){return this.logs.length}[(Sc=new WeakMap,Symbol.iterator)](){let t=0;return{next:()=>tthis.hash(t))),new Uc(r,e)}blockWithTransactions(t,e){throw new Error}transactionRequest(t,e){return Kc(this,Wc,"f").transactionRequest(t)}transactionResponse(t,e){null==(t=Object.assign({},t)).data&&null!=t.input&&(t.data=t.input),null==t.gasLimit&&t.gas&&(t.gasLimit=t.gas),t=Kc(this,Wc,"f").transactionResponse(t);const r=va.fromTransaction(t.r,t.s,t.v);return t.signature=r,null==t.chainId&&(t.chainId=r.legacyChainId),new Mc(t,e)}log(t,e){const r=this.object({address:this.address,blockHash:this.hash,blockNumber:this.number,data:this.data,index:this.number,removed:this.boolean,topics:this.topics,transactionHash:this.hash,transactionIndex:this.number},{index:["logIndex"]})(t);return new Lc(r,e)}receipt(t,e){const r=this.object({blockHash:this.hash,blockNumber:this.number,contractAddress:this.allowNull(this.address),cumulativeGasUsed:this.bigNumber,from:this.address,gasUsed:this.bigNumber,logs:this.arrayOf((t=>this.log(t,e))),logsBloom:this.data,root:this.allowNull(this.data),status:this.allowNull(this.number),to:this.address,gasPrice:this.allowNull(this.bigNumber),hash:this.hash,index:this.number,type:this.allowNull(this.number,0)},{hash:["transactionHash"],gasPrice:["effectiveGasPrice"],index:["transactionIndex"]})(t);if(null!=r.root)if(r.root.length<=4){const t=parseInt(r.root);if(0!==t&&1!==t)return Go.throwError("invalid alt-root-status","BAD_DATA",{value:r.root});if(null!=r.status&&r.status!==t)return Go.throwError("alt-root-status/status mismatch","BAD_DATA",{value:{root:r.root,status:r.status}});r.status=t,delete r.root}else if(!te(r.root,32))return Go.throwError("invalid receipt root hash","BAD_DATA",{value:r.root});return new Dc(r,e)}topics(t){return Kc(this,Wc,"f").topics(t)}filter(t){return Kc(this,Wc,"f").filter(t)}filterLog(t){return console.log("ME",t),null}transaction(t){throw new Error}accessList(t){return mc(t)}allowFalsish(t,e){return r=>r?t.call(this,r):e}allowNull(t,e){return r=>null==r?e:t.call(this,r)}arrayOf(t){return e=>{if(!Array.isArray(e))throw new Error("not an array");return e.map((e=>t.call(this,e)))}}bigNumber(t){return Go.getBigInt(t,"value")}uint256(t){const e=this.bigNumber(t);return(e<0||e>Jc)&&Go.throwArgumentError("invalid uint256","value",t),e}boolean(t){switch(t){case!0:case"true":return!0;case!1:case"false":return!1}return Go.throwArgumentError(`invalid boolean; ${JSON.stringify(t)}`,"value",t)}_hexstring(t){return null==t&&(t=!1),function(e){if(te(e,t))return e.toLowerCase();throw new Error("bad hexstring")}}data(t){return null==de(t)&&Go.throwArgumentError("","value",t),t}hash(t){return 32!==de(t)&&Go.throwArgumentError("","value",t),Kc(this,Wc,"f").data(t)}number(t){return Go.getNumber(t)}object(t,e){return r=>{const n={};for(const s in t){let i=s;if(e&&s in e&&!(i in r))for(const t of e[s])if(t in r){i=t;break}try{const e=t[s].call(this,r[i]);void 0!==e&&(n[s]=e)}catch(t){const e=t instanceof Error?t.message:"not-an-error";Go.throwError(`invalid value for value.${s} (${e})`,"BAD_DATA",{value:r})}}return n}}storageSlot(t){return At(Go.getBigInt(t),32)}}Wc=new WeakMap,Hc=new WeakMap;class Yc{constructor(t){n(this,{name:t})}clone(){return new Yc(this.name)}validate(t){return this}}class Zc extends Yc{constructor(t=0,e){super(`org.ethers.plugins.gas-cost#${t||0}`);const r={effectiveBlock:t};function s(t,n){let s=(e||{})[t];null==s&&(s=n),"number"!=typeof s&&Go.throwArgumentError(`invalud value for ${t}`,"costs",e),r[t]=s}s("txBase",21e3),s("txCreate",32e3),s("txDataZero",4),s("txDataNonzero",16),s("txAccessListStorageKey",1900),s("txAccessListAddress",2400),n(this,r)}clone(){return new Zc(this.effectiveBlock,this)}}class Qc extends Yc{constructor(t,e){super("org.ethers.plugins.ens"),n(this,{address:t||"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",targetNetwork:null==e?1:e})}clone(){return new Qc(this.address,this.targetNetwork)}validate(t){return t.formatter.address(this.address),this}}class tl extends Yc{constructor(t){super("org.ethers.plugins.max-priority-fee"),n(this,{priorityFee:Go.getBigInt(t)})}async getPriorityFee(t){return this.priorityFee}clone(){return new tl(this.priorityFee)}}var el,rl=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},nl=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const sl=new Map,il=new Xc;class ol{constructor(t,e,r){el.set(this,void 0);const n=Go.getBigInt(e);null==r&&(r=il);const s=new Map;rl(this,el,{name:t,chainId:n,formatter:r,plugins:s},"f")}toJSON(){return{name:this.name,chainId:this.chainId}}get name(){return c(nl(this,el,"f"),"name")}set name(t){l(nl(this,el,"f"),"name",t)}get chainId(){return c(nl(this,el,"f"),"chainId")}set chainId(t){l(nl(this,el,"f"),"chainId",Go.getBigInt(t,"chainId"))}get formatter(){return c(nl(this,el,"f"),"formatter")}set formatter(t){l(nl(this,el,"f"),"formatter",t)}get plugins(){return Array.from(nl(this,el,"f").plugins.values())}attachPlugin(t){if(this.isFrozen())throw new Error("frozen");if(nl(this,el,"f").plugins.get(t.name))throw new Error(`cannot replace existing plugin: ${t.name} `);return nl(this,el,"f").plugins.set(t.name,t.validate(this)),this}getPlugin(t){return nl(this,el,"f").plugins.get(t)||null}getPlugins(t){return this.plugins.filter((e=>e.name.split("#")[0]===t))}clone(){const t=new ol(this.name,this.chainId,this.formatter);return this.plugins.forEach((e=>{t.attachPlugin(e.clone())})),t}freeze(){return Object.freeze(nl(this,el,"f")),this}isFrozen(){return Object.isFrozen(nl(this,el,"f"))}computeIntrinsicGas(t){const e=this.getPlugin("org.ethers.gas-cost")||new Zc;let r=e.txBase;if(null==t.to&&(r+=e.txCreate),t.data)for(let n=2;n{this._poll(t,Al(this,dl,"f"))}),"f")}async _poll(t,e){throw new Error("sub-classes must override this")}start(){Al(this,pl,"f").call(this,-2),Al(this,dl,"f").on("block",Al(this,pl,"f"))}stop(){Al(this,dl,"f").off("block",Al(this,pl,"f"))}pause(t){this.stop()}resume(){this.start()}}dl=new WeakMap,pl=new WeakMap;class Ol extends xl{constructor(t,e){super(t),wl.set(this,void 0),kl(this,wl,Nl(e),"f")}async _poll(t,e){throw console.log(Al(this,wl,"f")),new Error("@TODO")}}wl=new WeakMap;class Il extends xl{constructor(t,e){super(t),gl.set(this,void 0),kl(this,gl,e,"f")}async _poll(t,e){const r=await e.getTransactionReceipt(Al(this,gl,"f"));r&&e.emit(Al(this,gl,"f"),r)}}gl=new WeakMap;class Sl{constructor(t,e){ml.add(this),yl.set(this,void 0),bl.set(this,void 0),vl.set(this,void 0),El.set(this,void 0),kl(this,yl,t,"f"),kl(this,bl,Nl(e),"f"),kl(this,vl,Al(this,ml,"m",Tl).bind(this),"f"),kl(this,El,-2,"f")}start(){-2===Al(this,El,"f")&&Al(this,yl,"f").getBlockNumber().then((t=>{kl(this,El,t,"f")})),Al(this,yl,"f").on("block",Al(this,vl,"f"))}stop(){Al(this,yl,"f").off("block",Al(this,vl,"f"))}pause(t){this.stop(),t&&kl(this,El,-2,"f")}resume(){this.start()}}yl=new WeakMap,bl=new WeakMap,vl=new WeakMap,El=new WeakMap,ml=new WeakSet,Tl=async function(t){if(-2===Al(this,El,"f"))return;const e=Nl(Al(this,bl,"f"));e.fromBlock=Al(this,El,"f")+1,e.toBlock=t,kl(this,El,t,"f");const r=await Al(this,yl,"f").getLogs(e);for(const t of r)Al(this,yl,"f").emit(Al(this,bl,"f"),t)};var Rl,_l,Cl,Bl,Fl,Ul,Ll,Dl,Ml,jl,Gl,$l,zl,Wl,Hl,Vl=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Kl=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const Jl=BigInt(2);function ql(t,e){return t+":"+JSON.stringify(e,((t,e)=>{if("bigint"==typeof e)return`bigint:${e.toString()}`;if("string"==typeof e)return e.toLowerCase();if("object"==typeof e&&!Array.isArray(e)){const t=Object.keys(e);return t.sort(),t.reduce(((t,r)=>(t[r]=e[r],t)),{})}return e}))}class Xl{constructor(t){n(this,{name:t})}start(){}stop(){}pause(t){}resume(){}}function Yl(t){return(t=Array.from(new Set(t).values())).sort(),t}async function Zl(t,e){if(null==t)throw new Error("invalid event");if(Array.isArray(t)&&(t={topics:t}),"string"==typeof t)switch(t){case"block":case"pending":case"debug":case"network":return{type:t,tag:t}}if(te(t,32)){const e=t.toLowerCase();return{type:"transaction",tag:ql("tx",{hash:e}),hash:e}}if(t.orphan){const e=t;return{type:"orphan",tag:ql("orphan",e),filter:(r=e,JSON.parse(JSON.stringify(r)))}}var r;if(t.address||t.topics){const r=t,n={topics:(r.topics||[]).map((t=>null==t?null:Array.isArray(t)?Yl(t.map((t=>t.toLowerCase()))):t.toLowerCase()))};if(r.address){const t=[],s=[],i=r=>{te(r)?t.push(r):s.push((async()=>{t.push(await Is(r,e))})())};Array.isArray(r.address)?r.address.forEach(i):i(r.address),s.length&&await Promise.all(s),n.address=Yl(t.map((t=>t.toLowerCase())))}return{filter:n,tag:ql("event",n),type:"event"}}return Go.throwArgumentError("unknown ProviderEvent","event",t)}function Ql(){return(new Date).getTime()}class tu{constructor(t){if(Rl.add(this),_l.set(this,void 0),Cl.set(this,void 0),Bl.set(this,void 0),Fl.set(this,void 0),Ul.set(this,void 0),Ll.set(this,void 0),Dl.set(this,void 0),Ml.set(this,void 0),jl.set(this,void 0),"any"===t)Vl(this,Ul,!0,"f"),Vl(this,Fl,null,"f");else if(t){const e=ol.from(t);Vl(this,Ul,!1,"f"),Vl(this,Fl,Promise.resolve(e),"f"),setTimeout((()=>{this.emit("network",e,null)}),0)}else Vl(this,Ul,!1,"f"),Vl(this,Fl,null,"f");Vl(this,Ll,new Map,"f"),Vl(this,_l,new Map,"f"),Vl(this,Cl,new Map,"f"),Vl(this,Bl,null,"f"),Vl(this,Dl,0,"f"),Vl(this,Ml,new Map,"f"),Vl(this,jl,!1,"f")}get plugins(){return Array.from(Kl(this,Cl,"f").values())}attachPlugin(t){if(Kl(this,Cl,"f").get(t.name))throw new Error(`cannot replace existing plugin: ${t.name} `);return Kl(this,Cl,"f").set(t.name,t.validate(this)),this}getPlugin(t){return Kl(this,Cl,"f").get(t)||null}set disableCcipRead(t){Vl(this,jl,!!t,"f")}get disableCcipRead(){return Kl(this,jl,"f")}async ccipReadFetch(t,e,r){if(this.disableCcipRead||0===r.length||null==t.to)return null;const n=t.to.toLowerCase(),s=e.toLowerCase(),i=[];for(let e=0;e=400&&u.statusCode<500)return Go.throwError(`response not found during CCIP fetch: ${l}`,"OFFCHAIN_FAULT",{reason:"404_MISSING_RESOURCE",transaction:t,info:{url:o,errorMessage:l}});i.push(l)}return Go.throwError(`error encountered during CCIP fetch: ${i.map((t=>JSON.stringify(t))).join(", ")}`,"OFFCHAIN_FAULT",{reason:"500_SERVER_ERROR",transaction:t,info:{urls:r,errorMessages:i}})}_wrapTransaction(t,e,r){return t}_detectNetwork(){return Go.throwError("sub-classes must implement this","UNSUPPORTED_OPERATION",{operation:"_detectNetwork"})}async _perform(t){return Go.throwError(`unsupported method: ${t.method}`,"UNSUPPORTED_OPERATION",{operation:t.method,info:t})}async getBlockNumber(){return Go.getNumber(await Kl(this,Rl,"m",Gl).call(this,{method:"getBlockNumber"}),"%response")}async _getAddress(t){return"string"==typeof t?t:await t.getAddress()}async _getBlockTag(t){const e=await this.getNetwork();if("number"==typeof t&&Number.isSafeInteger(t)&&t<0){let r=await this.getBlockNumber();return r+=t,r<0&&(r=0),e.formatter.blockTag(r)}return e.formatter.blockTag(t)}async getNetwork(){if(null==Kl(this,Fl,"f")){const t=this._detectNetwork().then((t=>(this.emit("network",t,null),t)),(e=>{throw Kl(this,Fl,"f")===t&&Vl(this,Fl,null,"f"),e}));return Vl(this,Fl,t,"f"),await t}const t=Kl(this,Fl,"f"),[e,r]=await Promise.all([t,this._detectNetwork()]);return e.chainId!==r.chainId&&(Kl(this,Ul,"f")?(this.emit("network",r,e),Kl(this,Fl,"f")===t&&Vl(this,Fl,Promise.resolve(r),"f")):Go.throwError(`network changed: ${e.chainId} => ${r.chainId} `,"NETWORK_ERROR",{event:"changed"})),e.clone().freeze()}async getFeeData(){const{block:t,gasPrice:r}=await e({block:this.getBlock("latest"),gasPrice:(async()=>{try{const t=await Kl(this,Rl,"m",Gl).call(this,{method:"getGasPrice"});return Go.getBigInt(t,"%response")}catch(t){}return null})()});let n=null,s=null;if(t&&t.baseFeePerGas){s=BigInt("1500000000");const e=(await this.getNetwork()).getPlugin("org.ethers.plugins.max-priority-fee");e&&(s=await e.getPriorityFee(this)),n=t.baseFeePerGas*Jl+s}return new Fc(r,n,s)}async _getTransaction(t){const r=await this.getNetwork(),n=Object.assign({},t,await e({to:t.to?Is(t.to,this):void 0,from:t.from?Is(t.from,this):void 0}));return r.formatter.transactionRequest(n)}async estimateGas(t){const e=await this._getTransaction(t);return Go.getBigInt(await Kl(this,Rl,"m",Gl).call(this,{method:"estimateGas",transaction:e}),"%response")}async call(t){const{tx:r,blockTag:n}=await e({tx:this._getTransaction(t),blockTag:this._getBlockTag(t.blockTag)});return Kl(this,Rl,"m",$l).call(this,r,n,t.enableCcipRead?0:-1)}async getBalanceOf(t,r){const{address:n,blockTag:s}=await e({address:Is(t),blockTag:this._getBlockTag(r)});return Go.getBigInt(await Kl(this,Rl,"m",Gl).call(this,{method:"getBalance",address:n,blockTag:s}),"%response")}async getTransactionCountOf(t,r){const{address:n,blockTag:s}=await e({address:Is(t),blockTag:this._getBlockTag(r)});return Go.getNumber(await Kl(this,Rl,"m",Gl).call(this,{method:"getTransactionCount",address:n,blockTag:s}),"%response")}async getCode(t,r){const{address:n,blockTag:s}=await e({address:Is(t),blockTag:this._getBlockTag(r)});return ue(await Kl(this,Rl,"m",Gl).call(this,{method:"getCode",address:n,blockTag:s}))}async getStorageAt(t,r,n){const s=Go.getBigInt(r),{address:i,blockTag:o}=await e({address:Is(t),blockTag:this._getBlockTag(n)});return ue(await Kl(this,Rl,"m",Gl).call(this,{method:"getStorageAt",address:i,position:s,blockTag:o}))}async broadcastTransaction(t){throw new Error}async getBlock(t){const e=(await this.getNetwork()).formatter,r=await Kl(this,Rl,"m",zl).call(this,t,!1);return null==r?null:e.block(r,this)}async getBlockWithTransactions(t){const e=(await this.getNetwork()).formatter,r=Kl(this,Rl,"m",zl).call(this,t,!0);return null==r?null:e.blockWithTransactions(r,this)}async getTransaction(t){const e=(await this.getNetwork()).formatter,r=await Kl(this,Rl,"m",Gl).call(this,{method:"getTransaction",hash:t});return e.transactionResponse(r,this)}async getTransactionReceipt(t){const e=(await this.getNetwork()).formatter,r=await Kl(this,Rl,"m",Gl).call(this,{method:"getTransactionReceipt",hash:t});if(null==r)return null;if(null==r.gasPrice&&null==r.effectiveGasPrice){const e=await Kl(this,Rl,"m",Gl).call(this,{method:"getTransaction",hash:t});r.effectiveGasPrice=e.gasPrice}return e.receipt(r,this)}async _getFilter(t){const r={};t.address&&(Array.isArray(t.address)?r.address=Promise.all(t.address.map((t=>Is(t,this)))):r.address=Is(t.address,this));const n=e=>{null!=t[e]&&(r[e]=this._getBlockTag(t[e]))};n("fromBlock"),n("toBlock");const s=await e(r);if(Array.isArray(s.address)&&s.address.sort(),t.blockHash){if(t.fromBlock||t.toBlock)throw new Error("invalid filter");s.blockHash=t.blockHash}return s}async getLogs(t){const{network:r,filter:n}=await e({network:this.getNetwork(),filter:this._getFilter(t)});return(await Kl(this,Rl,"m",Gl).call(this,{method:"getLogs",filter:n})).map((t=>r.formatter.log(t,this)))}_getProvider(t){return Go.throwError("provider cannot connect to target network","UNSUPPORTED_OPERATION",{operation:"_getProvider()"})}async getResolver(t){return await ia.fromName(this,t)}async getAvatar(t){const e=await this.getResolver(t);return e?await e.getAvatar():null}async resolveName(t){if("string"!=typeof t){const e=await t.getAddress();return null==e?Go.throwArgumentError("Addressable returned no address","name",t):e}{const e=await this.getResolver(t);if(e)return await e.getAddress()}return null}async lookupAddress(t){throw new Error}async waitForTransaction(t,e=1,r){return 0===e?this.getTransactionReceipt(t):new Promise((async(n,s)=>{let i=null;const o=async r=>{try{const s=await this.getTransactionReceipt(t);if(null!=s&&r-s.blockNumber+1>=e)return n(s),this.off("block",o),void(i&&(clearTimeout(i),i=null))}catch(t){console.log("EEE",t)}this.once("block",o)};null!=r&&(i=setTimeout((()=>{null!=i&&(i=null,this.off("block",o),s(Go.makeError("timeout","TIMEOUT",{})))}),r)),o(await this.getBlockNumber())}))}async waitForBlock(t){throw new Error}_clearTimeout(t){const e=Kl(this,Ml,"f").get(t);e&&(e.timer&&clearTimeout(e.timer),Kl(this,Ml,"f").delete(t))}_setTimeout(t,e=0){var r,n;const s=(Vl(this,Dl,(n=Kl(this,Dl,"f"),r=n++,n),"f"),r),i=()=>{Kl(this,Ml,"f").delete(s),t()};if(this.paused)Kl(this,Ml,"f").set(s,{timer:null,func:i,time:e});else{const t=setTimeout(i,e);Kl(this,Ml,"f").set(s,{timer:t,func:i,time:Ql()})}return s}_forEachSubscriber(t){for(const e of Kl(this,_l,"f").values())t(e.subscriber)}_getSubscriber(t){switch(t.type){case"debug":case"network":return new Xl(t.type);case"block":return new Pl(this);case"event":return new Sl(this,t.filter);case"transaction":return new Il(this,t.hash);case"orphan":return new Ol(this,t.filter)}throw new Error(`unsupported event: ${t.type}`)}_recoverSubscriber(t,e){for(const r of Kl(this,_l,"f").values())if(r.subscriber===t){r.started&&r.subscriber.stop(),r.subscriber=e,r.started&&e.start(),null!=Kl(this,Bl,"f")&&e.pause(Kl(this,Bl,"f"));break}}async on(t,e){const r=await Kl(this,Rl,"m",Hl).call(this,t);return r.listeners.push({listener:e,once:!1}),r.started||(r.subscriber.start(),r.started=!0,null!=Kl(this,Bl,"f")&&r.subscriber.pause(Kl(this,Bl,"f"))),this}async once(t,e){const r=await Kl(this,Rl,"m",Hl).call(this,t);return r.listeners.push({listener:e,once:!0}),r.started||(r.subscriber.start(),r.started=!0,null!=Kl(this,Bl,"f")&&r.subscriber.pause(Kl(this,Bl,"f"))),this}async emit(t,...e){const r=await Kl(this,Rl,"m",Wl).call(this,t,e);if(!r)return!1;const n=r.listeners.length;return r.listeners=r.listeners.filter((({listener:r,once:n})=>{const s=new a(this,n?null:r,t);return setTimeout((()=>{r.call(this,...e,s)}),0),!n})),n>0}async listenerCount(t){if(t){const e=await Kl(this,Rl,"m",Wl).call(this,t);return e?e.listeners.length:0}let e=0;for(const{listeners:t}of Kl(this,_l,"f").values())e+=t.length;return e}async listeners(t){if(t){const e=await Kl(this,Rl,"m",Wl).call(this,t);return e?e.listeners.map((({listener:t})=>t)):[]}let e=[];for(const{listeners:t}of Kl(this,_l,"f").values())e=e.concat(t.map((({listener:t})=>t)));return e}async off(t,e){const r=await Kl(this,Rl,"m",Wl).call(this,t);if(!r)return this;if(e){const t=r.listeners.map((({listener:t})=>t)).indexOf(e);t>=0&&r.listeners.splice(t,1)}return e&&0!==r.listeners.length||(r.started&&r.subscriber.stop(),Kl(this,_l,"f").delete(r.tag)),this}async removeAllListeners(t){if(t){const{tag:e,started:r,subscriber:n}=await Kl(this,Rl,"m",Hl).call(this,t);r&&n.stop(),Kl(this,_l,"f").delete(e)}else for(const[t,{started:e,subscriber:r}]of Kl(this,_l,"f"))e&&r.stop(),Kl(this,_l,"f").delete(t);return this}async addListener(t,e){return await this.on(t,e)}async removeListener(t,e){return this.off(t,e)}async shutdown(){this.removeAllListeners();for(const t of Kl(this,Ml,"f").keys())this._clearTimeout(t)}get paused(){return null!=Kl(this,Bl,"f")}pause(t){if(null!=Kl(this,Bl,"f")){if(Kl(this,Bl,"f")==!!t)return;return Go.throwError("cannot change pause type; resume first","UNSUPPORTED_OPERATION",{operation:"pause"})}this._forEachSubscriber((e=>e.pause(t))),Vl(this,Bl,!!t,"f");for(const t of Kl(this,Ml,"f").values())t.timer&&clearTimeout(t.timer),t.time=Ql()-t.time}resume(){if(null!=Kl(this,Bl,"f")){this._forEachSubscriber((t=>t.resume())),Vl(this,Bl,null,"f");for(const t of Kl(this,Ml,"f").values()){let e=t.time;e<0&&(e=0),t.time=Ql(),setTimeout(t.func,e)}}}}function eu(t,e){try{const r=ru(t,e);if(r)return li(r)}catch(t){}return null}function ru(t,e){if("0x"===t)return null;try{const r=Go.getNumber(pe(t,e,e+32)),n=Go.getNumber(pe(t,r,r+32));return pe(t,r+32,r+32+n)}catch(t){}return null}function nu(t){const e=Nt(t);if(e.length>32)throw new Error("internal; should not happen");const r=new Uint8Array(32);return r.set(e,32-e.length),r}function su(t){if(t.length%32==0)return t;const e=new Uint8Array(32*Math.ceil(t.length/32));return e.set(t),e}_l=new WeakMap,Cl=new WeakMap,Bl=new WeakMap,Fl=new WeakMap,Ul=new WeakMap,Ll=new WeakMap,Dl=new WeakMap,Ml=new WeakMap,jl=new WeakMap,Rl=new WeakSet,Gl=async function(t){const e=ql(t.method,t);let r=Kl(this,Ll,"f").get(e);return r||(r=this._perform(t),Kl(this,Ll,"f").set(e,r),setTimeout((()=>{Kl(this,Ll,"f").get(e)===r&&Kl(this,Ll,"f").delete(e)}),250)),await r},$l=async function t(e,r,n){n>=10&&Go.throwError("CCIP read exceeded maximum redirections","OFFCHAIN_FAULT",{reason:"TOO_MANY_REDIRECTS",transaction:Object.assign({},e,{blockTag:r,enableCcipRead:!0})});const s=e;try{return ue(await this._perform({method:"call",transaction:s,blockTag:r}))}catch(e){if(!this.disableCcipRead&&h(e)&&n>=0&&"latest"===r&&null!=s.to&&"0x556f1830"===pe(e.data,0,4)){const i=e.data,o=await Is(s.to,this);let a;try{a=function(t){const e={sender:"",urls:[],calldata:"",selector:"",extraData:"",errorArgs:[]};if(de(t)<160)throw new Error("insufficient OffchainLookup data");const r=pe(t,0,32);if(pe(r,0,12)!==pe(au,0,12))throw new Error("corrupt OffchainLookup sender");e.sender=pe(r,12);try{const r=[],n=Go.getNumber(pe(t,32,64)),s=Go.getNumber(pe(t,n,n+32)),i=pe(t,n+32);for(let t=0;te[t])),e}(pe(e.data,4))}catch(t){return Go.throwError(t.message,"OFFCHAIN_FAULT",{reason:"BAD_DATA",transaction:s,info:{data:i}})}if(a.sender.toLowerCase()!==o.toLowerCase())return Go.throwError("CCIP Read sender mismatch","CALL_EXCEPTION",{data:i,transaction:s,errorSignature:"OffchainLookup(address,string[],bytes,bytes4,bytes)",errorName:"OffchainLookup",errorArgs:a.errorArgs});const c=await this.ccipReadFetch(s,a.calldata,a.urls);return null==c?Go.throwError("CCIP Read failed to fetch data","OFFCHAIN_FAULT",{reason:"FETCH_FAILED",transaction:s,info:{data:e.data,errorArgs:a.errorArgs}}):Kl(this,Rl,"m",t).call(this,{to:o,data:fe([a.selector,ou([c,a.extraData])])},r,n+1)}throw e}},zl=async function(t,e){const r=(await this.getNetwork()).formatter;return te(t,32)?await Kl(this,Rl,"m",Gl).call(this,{method:"getBlock",blockHash:t,includeTransactions:e}):await Kl(this,Rl,"m",Gl).call(this,{method:"getBlock",blockTag:r.blockTag(t),includeTransactions:e})},Wl=async function(t,e){let r=await Zl(t,this);return"event"===r.type&&e&&e.length>0&&!0===e[0].removed&&(r=await Zl({orphan:"drop-log",log:e[0]},this)),Kl(this,_l,"f").get(r.tag)||null},Hl=async function(t){const e=await Zl(t,this),r=e.tag;let n=Kl(this,_l,"f").get(r);if(!n){n={subscriber:this._getSubscriber(e),tag:r,addressableMap:new WeakMap,nameMap:new Map,started:!1,listeners:[]},Kl(this,_l,"f").set(r,n)}return n};const iu=new Uint8Array([]);function ou(t){const e=[];let r=0;for(let n=0;nnull==t?Go.throwArgumentError("transaction to ENS name not configured","tx.to",n.to):t))),null!=n.from){const t=n.from;n.from=Promise.all([this.getAddress(),this.resolveName(t)]).then((([t,e])=>e&&t.toLowerCase()===e.toLowerCase()?t:Go.throwArgumentError("transaction from mismatch","tx.from",e)))}return null==n.nonce&&(n.nonce=this.getTransactionCount()),n=e(n),null==n.gasLimit&&(n.gasLimit=r.estimateGas(n)),n=e(n),await e(n)}async resolveName(t){const e=pu(this,cu,"m",lu).call(this,"resolveName");return await e.resolveName(t)}async sendTransaction(t){const e=pu(this,cu,"m",lu).call(this,"sendTransaction"),r=Oc.from(await this.populateTransaction(t));return await e.broadcastTransaction(await this.signTransaction(r))}}cu=new WeakSet,lu=function(t){return this.provider?this.provider:Go.throwError("missing provider","UNSUPPORTED_OPERATION",{operation:t})},uu=async function(t){const e=[];if(null!=(t=Object.assign({},t)).from){const r=t.from;e.push(Promise.all([this.getAddress(),this.resolveName(r)]).then((([e,r])=>{r&&e.toLowerCase()===r.toLowerCase()||Go.throwArgumentError("transaction from mismatch","tx.from",r),t.from=e})))}return await Promise.all(e),t};class mu extends gu{constructor(t,e){super(e),hu.add(this),n(this,{address:t})}async getAddress(){return this.address}connect(t){return new mu(this.address,t)}async signTransaction(t){pu(this,hu,"m",fu).call(this,"transactions","signTransaction")}async signMessage(t){pu(this,hu,"m",fu).call(this,"messages","signMessage")}async signTypedData(t,e,r){pu(this,hu,"m",fu).call(this,"typed-data","signTypedData")}}hu=new WeakSet,fu=function(t,e){return Go.throwError(`VoidSigner cannot sign ${t}`,"UNSUPPORTED_OPERATION",{operation:e})};class yu extends gu{constructor(t){super(t.provider),du.set(this,void 0),wu(this,du,t,"f")}async getAddress(){return await pu(this,du,"f").getAddress()}connect(t){return new yu(pu(this,du,"f").connect(t))}async signTransaction(t){return await pu(this,du,"f").signTransaction(t)}async sendTransaction(t){return await pu(this,du,"f").sendTransaction(t)}async signMessage(t){return await pu(this,du,"f").signMessage(t)}async signTypedData(t,e,r){return await pu(this,du,"f").signTypedData(t,e,r)}}du=new WeakMap;const bu=new Set;function vu(t){bu.has(t)||(bu.add(t),console.log("========= NOTICE ========="),console.log(`Request-Rate Exceeded for ${t} (this message will not be repeated)`),console.log(""),console.log("The default API keys for each service are provided as a highly-throttled,"),console.log("community resource for low-traffic projects and early prototyping."),console.log(""),console.log("While your application will continue to function, we highly recommended"),console.log("signing up for your own API keys to improve performance, increase your"),console.log("request rate/limit and enable other perks, such as metrics and advanced APIs."),console.log(""),console.log("For more details: https://docs.ethers.io/api-keys/"),console.log("=========================="))}var Eu,Tu,ku,Au,Nu,Pu,xu,Ou,Iu=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Su=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class Ru{constructor(t){Eu.add(this),Tu.set(this,void 0),ku.set(this,void 0),Au.set(this,void 0),Nu.set(this,void 0),Iu(this,Tu,t,"f"),Iu(this,ku,null,"f"),Iu(this,Au,Su(this,Eu,"m",Pu).bind(this),"f"),Iu(this,Nu,null,"f")}_subscribe(t){throw new Error("subclasses must override this")}_emitResults(t,e){throw new Error("subclasses must override this")}_recover(t){throw new Error("subclasses must override this")}start(){Su(this,Eu,"m",Pu).call(this,-2)}stop(){Su(this,Eu,"m",xu).call(this),Su(this,Tu,"f").off("block",Su(this,Au,"f"))}pause(t){t&&Su(this,Eu,"m",xu).call(this),Su(this,Tu,"f").off("block",Su(this,Au,"f"))}resume(){this.start()}}Tu=new WeakMap,ku=new WeakMap,Au=new WeakMap,Nu=new WeakMap,Eu=new WeakSet,Pu=async function(t){try{null==Su(this,ku,"f")&&Iu(this,ku,this._subscribe(Su(this,Tu,"f")),"f");const t=await Su(this,ku,"f");if(null==t)return void Su(this,Tu,"f")._recoverSubscriber(this,this._recover(Su(this,Tu,"f")));const e=await Su(this,Tu,"f").getNetwork();if(Su(this,Nu,"f")||Iu(this,Nu,e,"f"),Su(this,Nu,"f").chainId!==e.chainId)throw new Error("chaid changed");const r=await Su(this,Tu,"f").send("eth_getFilterChanges",[t]);await this._emitResults(Su(this,Tu,"f"),r)}catch(t){console.log("@TODO",t)}Su(this,Tu,"f").once("block",Su(this,Au,"f"))},xu=function(){const t=Su(this,ku,"f");t&&(Iu(this,ku,null,"f"),t.then((t=>{Su(this,Tu,"f").send("eth_uninstallFilter",[t])})))};class _u extends Ru{constructor(t,e){var r;super(t),Ou.set(this,void 0),Iu(this,Ou,(r=e,JSON.parse(JSON.stringify(r))),"f")}_recover(t){return new Sl(t,Su(this,Ou,"f"))}async _subscribe(t){const e=await t.send("eth_newFilter",[Su(this,Ou,"f")]);return console.log("____SUB",e),e}async _emitResults(t,e){const r=await t.getNetwork();for(const n of e){const e=r.formatter.log(n,t);t.emit(Su(this,Ou,"f"),e)}}}Ou=new WeakMap;class Cu extends Ru{async _subscribe(t){return await t.send("eth_newPendingTransactionFilter",[])}async _emitResults(t,e){const r=await t.getNetwork();for(const n of e)t.emit("pending",r.formatter.hash(n))}}var Bu,Fu,Uu,Lu,Du=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Mu=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const ju="bigint,boolean,function,number,string,symbol".split(/,/g);function Gu(t){if(null==t||ju.indexOf(typeof t)>=0)return t;if("function"==typeof t.getAddress)return t;if(Array.isArray(t))return t.map(Gu);if("object"==typeof t)return Object.keys(t).reduce(((e,r)=>(e[r]=t[r],e)),{});throw new Error(`should not happen: ${t} (${typeof t})`)}function $u(t){return t?t.toLowerCase():t}const zu={polling:!1,batchMaxSize:1<<20,batchStallTime:250};class Wu{constructor(t,e){n(this,{provider:t,address:e})}connect(t){return Go.throwError("cannot reconnect JsonRpcSigner","UNSUPPORTED_OPERATION",{operation:"signer.connect"})}async getAddress(){return this.address}async getNetwork(){return await this.provider.getNetwork()}async getFeeData(){return await this.provider.getFeeData()}async estimateGas(t){return await this.provider.estimateGas(t)}async call(t){return await this.provider.call(t)}async resolveName(t){return await this.provider.resolveName(t)}async getBalance(t){return await this.provider.getBalanceOf(this.address)}async getTransactionCount(t){return await this.provider.getTransactionCountOf(this.address)}async sendUncheckedTransaction(t){const e=Gu(t),r=[];if(e.from){const n=e.from;r.push((async()=>{const r=await Is(n,this.provider);null!=r&&r.toLowerCase()===this.address.toLowerCase()||Go.throwArgumentError("from address mismatch","transaction",t),e.from=r})())}else e.from=this.address;if(null==e.gasLimit&&r.push((async()=>{e.gasLimit=await this.provider.estimateGas(Object.assign(Object.assign({},e),{from:this.address}))})()),null!=e.to){const t=e.to;r.push((async()=>{e.to=await Is(t,this.provider)})())}r.length&&await Promise.all(r);const n=this.provider.getRpcTransaction(e);return this.provider.send("eth_sendTransaction",[n])}async sendTransaction(t){const e=await this.provider.getBlockNumber(),r=await this.sendUncheckedTransaction(t);return await new Promise(((t,n)=>{const s=async n=>{const i=await this.provider.getTransaction(r);null==i?this.provider._setTimeout((()=>{s(4e3)}),n):t(this.provider._wrapTransaction(i,r,e))};s(1e3)}))}async signTransaction(t){const e=Gu(t);if(e.from){const r=await Is(e.from,this.provider);if(null==r||r.toLowerCase()!==this.address.toLowerCase())return Go.throwArgumentError("from address mismatch","transaction",t);e.from=r}else e.from=this.address;const r=this.provider.getRpcTransaction(e);return await this.provider.send("eth_sign_Transaction",[r])}async signMessage(t){const e="string"==typeof t?ii(t):t;return await this.provider.send("personal_sign",[ue(e),this.address.toLowerCase()])}async signTypedData(t,e,r){const n=Gu(r),s=await ao.resolveNames(t,e,n,(async t=>{const e=await Is(t);return null==e?Go.throwArgumentError("TypedData does not support null address","value",t):e}));return await this.provider.send("eth_signTypedData_v4",[this.address.toLowerCase(),JSON.stringify(ao.getPayload(s.domain,e,s.value))])}async unlock(t){return this.provider.send("personal_unlockAccount",[this.address.toLowerCase(),t,null])}async _legacySignMessage(t){const e="string"==typeof t?ii(t):t;return await this.provider.send("eth_sign",[this.address.toLowerCase(),ue(e)])}}class Hu extends tu{constructor(t){super(t),Bu.set(this,void 0),Fu.set(this,void 0),Du(this,Bu,1,"f"),Du(this,Fu,Object.assign({},zu),"f")}_getOptions(t){return Mu(this,Fu,"f")[t]}_setOptions(t){for(const e in t){const r=e,n=t[r];if(typeof n!=typeof Mu(this,Fu,"f")[r])return Go.throwArgumentError("invalid option value",`options.${r}`,n)}for(const e in t){const r=e;Mu(this,Fu,"f")[r]=t[r]}}prepareRequest(t,e){var r,n;return{method:t,params:e,id:(Du(this,Bu,(n=Mu(this,Bu,"f"),r=n++,n),"f"),r),jsonrpc:"2.0"}}async send(t,e){throw new Error("sub-class must implement this")}async getSigner(t=0){const e=await this.getNetwork(),r=await this.send("eth_accounts",[]);if("number"==typeof t){if(t>r.length)throw new Error("no such account");return new Wu(this,r[t])}t=e.formatter.address(t);for(const t of r)if(e.formatter.address(t)===t)return new Wu(this,t);throw new Error("invalid account")}async _detectNetwork(){return ol.from(Go.getBigInt(await this._perform({method:"chainId"})))}_getSubscriber(t){return"pending"===t.type?new Cu(this):"event"===t.type?new _u(this,t.filter):"orphan"===t.type&&"drop-log"===t.filter.orphan?new Xl("orphan"):super._getSubscriber(t)}getRpcTransaction(t){const e={};return["chainId","gasLimit","gasPrice","type","maxFeePerGas","maxPriorityFeePerGas","nonce","value"].forEach((r=>{if(null==t[r])return;let n=r;"gasLimit"===r&&(n="gas"),e[n]=he(t[r])})),["from","to","data"].forEach((r=>{null!=t[r]&&(e[r]=ue(t[r]))})),t.accessList&&(e.accessList=mc(t.accessList)),e}getRpcRequest(t){switch(t.method){case"chainId":return{method:"eth_chainId",args:[]};case"getBlockNumber":return{method:"eth_blockNumber",args:[]};case"getGasPrice":return{method:"eth_gasPrice",args:[]};case"getBalance":return{method:"eth_getBalance",args:[$u(t.address),t.blockTag]};case"getTransactionCount":return{method:"eth_getTransactionCount",args:[$u(t.address),t.blockTag]};case"getCode":return{method:"eth_getCode",args:[$u(t.address),t.blockTag]};case"getStorageAt":return{method:"eth_getStorageAt",args:[$u(t.address),"0x"+t.position.toString(16),t.blockTag]};case"sendTransaction":return{method:"eth_sendRawTransaction",args:[t.signedTransaction]};case"getBlock":if("blockTag"in t)return{method:"eth_getBlockByNumber",args:[t.blockTag,!!t.includeTransactions]};if("blockHash"in t)return{method:"eth_getBlockByHash",args:[t.blockHash,!!t.includeTransactions]};break;case"getTransaction":return{method:"eth_getTransactionByHash",args:[t.hash]};case"getTransactionReceipt":return{method:"eth_getTransactionReceipt",args:[t.hash]};case"call":return{method:"eth_call",args:[this.getRpcTransaction(t.transaction),t.blockTag]};case"estimateGas":return{method:"eth_estimateGas",args:[this.getRpcTransaction(t.transaction)]};case"getLogs":return t.filter&&null!=t.filter.address&&(Array.isArray(t.filter.address)?t.filter.address=t.filter.address.map($u):t.filter.address=$u(t.filter.address)),{method:"eth_getLogs",args:[t.filter]}}return null}getRpcError(t,e,r){if("eth_call"===t){const t=Ju(r);return t?Go.makeError("execution reverted during JSON-RPC call","CALL_EXCEPTION",{data:t.data,transaction:e[0]}):Go.makeError("missing revert data during JSON-RPC call","CALL_EXCEPTION",{data:"0x",transaction:e[0],info:{error:r}})}const n=JSON.stringify(function(t){const e=[];return qu(t,e),e}(r));return n.match(/insufficient funds|base fee exceeds gas limit/)?Go.makeError("insufficient funds for intrinsic transaction cost","INSUFFICIENT_FUNDS",{transaction:e[0]}):n.match(/nonce/)&&n.match(/too low/)?Go.makeError("nonce has already been used","NONCE_EXPIRED",{transaction:e[0]}):n.match(/replacement transaction/)&&n.match(/underpriced/)?Go.makeError("replacement fee too low","REPLACEMENT_UNDERPRICED",{transaction:e[0]}):n.match(/only replay-protected/)?Go.makeError("legacy pre-eip-155 transactions not supported","UNSUPPORTED_OPERATION",{operation:t,info:{transaction:e[0]}}):"estimateGas"===t&&n.match(/gas required exceeds allowance|always failing transaction|execution reverted/)?Go.makeError("cannot estimate gas; transaction may fail or may require manual gas limit","UNPREDICTABLE_GAS_LIMIT",{transaction:e[0]}):r}async _perform(t){if("call"===t.method||"estimateGas"===t.method){let e=t.transaction;if(e&&null!=e.type&&Go.getBigInt(e.type)&&null==e.maxFeePerGas&&null==e.maxPriorityFeePerGas){const r=await this.getFeeData();null==r.maxFeePerGas&&null==r.maxPriorityFeePerGas&&(t=Object.assign({},t,{transaction:Object.assign({},e,{type:void 0})}))}}const e=this.getRpcRequest(t);if(null!=e){this.emit("debug",{type:"sendRequest",request:e});try{const t=await this.send(e.method,e.args);return this.emit("debug",{type:"getResponse",result:t}),t}catch(t){throw this.emit("debug",{type:"getError",error:t}),this.getRpcError(e.method,e.args,t)}}return super._perform(t)}}Bu=new WeakMap,Fu=new WeakMap;class Vu extends Hu{constructor(t,e){null==t&&(t="http://localhost:8545"),super(e),Uu.set(this,void 0),Lu.set(this,void 0),"string"==typeof t?Du(this,Uu,{request:new Uo(t)},"f"):(Du(this,Uu,Object.assign({},t),"f"),Mu(this,Uu,"f").request=Mu(this,Uu,"f").request.clone()),Du(this,Lu,4e3,"f")}async send(t,e){var r;r=e,e=JSON.parse(JSON.stringify(r));const n=Object.assign({},Mu(this,Uu,"f"));n.request=n.request.clone(),n.request.body=this.prepareRequest(t,e);const s=(await jo(n)).bodyJson;return"error"in s?Go.throwError("error from JSON-RPC","UNKNOWN_ERROR",{result:s}):s.result}get pollingInterval(){return Mu(this,Lu,"f")}set pollingInterval(t){if(!Number.isInteger(t)||t<0)throw new Error("invalid interval");Du(this,Lu,t,"f"),this._forEachSubscriber((t=>{(function(t){return t&&"number"==typeof t.pollingInterval})(t)&&(t.pollingInterval=Mu(this,Lu,"f"))}))}}Uu=new WeakMap,Lu=new WeakMap;class Ku extends Vu{constructor(t,e){super(t,e),n(this,{network:e})}async _detectNetwork(){return this.network}}function Ju(t){if(null==t)return null;if("string"==typeof t.message&&t.message.match("reverted")&&te(t.data))return{message:t.message,data:t.data};if("object"==typeof t){for(const e in t){const r=Ju(t[e]);if(r)return r}return null}if("string"==typeof t)try{return Ju(JSON.parse(t))}catch(t){}return null}function qu(t,e){if(null!=t){if("string"==typeof t.message&&e.push(t.message),"object"==typeof t)for(const r in t)qu(t[r],e);if("string"==typeof t)try{return qu(JSON.parse(t),e)}catch(t){}}}const Xu="9f7d929b018cdffb338517efa06f58359e86ff1ffd350bc889738523659e7972";class Yu extends Ku{constructor(t="homestead",e){const r=ol.from(t);null==e&&(e=Xu);super(Yu.getConnection(r,e),r),n(this,{apiKey:e}),super._setOptions({polling:!0})}_getProvider(t){try{return new Yu(t,this.apiKey)}catch(t){}return super._getProvider(t)}static getConnection(t,e){null==e&&(e=Xu);const r=new Uo(`https://${function(t){switch(t){case"homestead":return"rpc.ankr.com/eth";case"matic":return"rpc.ankr.com/polygon";case"arbitrum":return"rpc.ankr.com/arbitrum"}return Go.throwArgumentError("unsupported network","network",t)}(t.name)}/${e}`);r.allowGzip=!0;return{request:r,throttleRetry:async(t,r,n)=>(e===Xu&&vu("AnkrProvider"),!0)}}isCommunityResource(){return this.apiKey===Xu}}const Zu="_gg7wSSi0KMBsdKnGVfHDueq6xMB9EkC";class Qu extends Ku{constructor(t="homestead",e){const r=ol.from(t);null==e&&(e=Zu),super(Qu.getConnection(r,e),r),n(this,{apiKey:e})}_getProvider(t){try{return new Qu(t,this.apiKey)}catch(t){}return super._getProvider(t)}isCommunityResource(){return this.apiKey===Zu}static getConnection(t,e){null==e&&(e=Zu);const r=new Uo(`https://${function(t){switch(t){case"homestead":return"eth-mainnet.alchemyapi.io";case"ropsten":return"eth-ropsten.alchemyapi.io";case"rinkeby":return"eth-rinkeby.alchemyapi.io";case"goerli":return"eth-goerli.alchemyapi.io";case"kovan":return"eth-kovan.alchemyapi.io";case"matic":return"polygon-mainnet.g.alchemy.com";case"maticmum":return"polygon-mumbai.g.alchemy.com";case"arbitrum":return"arb-mainnet.g.alchemy.com";case"arbitrum-rinkeby":return"arb-rinkeby.g.alchemy.com";case"optimism":return"opt-mainnet.g.alchemy.com";case"optimism-kovan":return"opt-kovan.g.alchemy.com"}return Go.throwArgumentError("unsupported network","network",t)}(t.name)}/v2/${e}`);r.allowGzip=!0;return{request:r,throttleRetry:async(t,r,n)=>(e===Zu&&vu("alchemy"),!0)}}}class th extends Ku{constructor(t="homestead"){const e=ol.from(t);if("homestead"!==e.name)return Go.throwArgumentError("unsupported network","network",t);super("https://cloudflare-eth.com/",e)}}const eh="9D13ZE7XSBTJ94N9BNJ2MA33VMAY2YPIRB",rh="org.ethers.plugins.etherscan";class nh extends Yc{constructor(t,e){super(rh),n(this,{baseUrl:t,communityApiKey:e})}clone(){return new nh(this.baseUrl,this.communityApiKey)}}class sh extends tu{constructor(t,e){super();const r=ol.from(t);if(null==e){const t=r.getPlugin(rh);e=t?t.communityApiKey:eh}n(this,{apiKey:e,network:r}),this.getBaseUrl()}getBaseUrl(){const t=this.network.getPlugin(rh);if(t)return t.baseUrl;switch(this.network.name){case"homestead":return"https://api.etherscan.io";case"ropsten":return"https://api-ropsten.etherscan.io";case"rinkeby":return"https://api-rinkeby.etherscan.io";case"kovan":return"https://api-kovan.etherscan.io";case"goerli":return"https://api-goerli.etherscan.io"}return Go.throwArgumentError("unsupported network","network",this.network)}getUrl(t,e){const r=Object.keys(e).reduce(((t,r)=>{const n=e[r];return null!=n&&(t+=`&${r}=${n}`),t}),""),n=this.apiKey?`&apikey=${this.apiKey}`:"";return`${this.getBaseUrl()}/api?module=${t}${r}${n}`}getPostUrl(){return`${this.getBaseUrl()}/api`}getPostData(t,e){return e.module=t,e.apikey=this.apiKey,e}async detectNetwork(){return this.network}async fetch(t,e,r){const n=r?this.getPostUrl():this.getUrl(t,e),s=r?this.getPostData(t,e):null,i=new Uo(n),o={request:i,throttleSlotInterval:1e3,processResponse:async(e,r)=>{const n=r.hasBody()?JSON.parse(li(r.body)):{},s=("string"==typeof n.result?n.result:"").toLowerCase().indexOf("rate limit")>=0;return"proxy"===t?n&&0==n.status&&"NOTOK"==n.message&&s&&r.throwThrottleError(n.result):s&&r.throwThrottleError(n.result),r}};s&&(i.setHeader("content-type","application/x-www-form-urlencoded; charset=UTF-8"),i.body=Object.keys(s).map((t=>`${t}=${s[t]}`)).join("&"));const a=await jo(o);if(!a.hasBody())throw new Error;const c=JSON.parse(li(a.body));if("proxy"===t){if("2.0"!=c.jsonrpc){const t=new Error("invalid response");throw t.result=JSON.stringify(c),t}if(c.error){const t=new Error(c.error.message||"unknown error");throw c.error.code&&(t.code=c.error.code),c.error.data&&(t.data=c.error.data),t}return c.result}if(0==c.status&&("No records found"===c.message||"No transactions found"===c.message))return c.result;if(1!=c.status||"OK"!=c.message){const t=new Error("invalid response");throw t.result=JSON.stringify(c),t}return c.result}_getTransactionPostData(t){const e={};for(let r in t){if(null==t[r])continue;let n=t[r];"type"===r&&0===n||(n={type:!0,gasLimit:!0,gasPrice:!0,maxFeePerGs:!0,maxPriorityFeePerGas:!0,nonce:!0,value:!0}[r]?he(ue(n)):"accessList"===r?"["+this.network.formatter.accessList(n).map((t=>`{address:"${t.address}",storageKeys:["${t.storageKeys.join('","')}"]}`)).join(",")+"]":ue(n),e[r]=n)}return e}_checkError(t,e,r){throw e}async _detectNetwork(){return this.network}async _perform(t){switch(t.method){case"chainId":return this.network.chainId;case"getBlockNumber":return this.fetch("proxy",{action:"eth_blockNumber"});case"getGasPrice":return this.fetch("proxy",{action:"eth_gasPrice"});case"getBalance":return this.fetch("account",{action:"balance",address:t.address,tag:t.blockTag});case"getTransactionCount":return this.fetch("proxy",{action:"eth_getTransactionCount",address:t.address,tag:t.blockTag});case"getCode":return this.fetch("proxy",{action:"eth_getCode",address:t.address,tag:t.blockTag});case"getStorageAt":return this.fetch("proxy",{action:"eth_getStorageAt",address:t.address,position:t.position,tag:t.blockTag});case"sendTransaction":return this.fetch("proxy",{action:"eth_sendRawTransaction",hex:t.signedTransaction},!0).catch((e=>this._checkError(t,e,t.signedTransaction)));case"getBlock":return"blockTag"in t?this.fetch("proxy",{action:"eth_getBlockByNumber",tag:t.blockTag,boolean:t.includeTransactions?"true":"false"}):Go.throwError("getBlock by blockHash not supported by Etherscan","UNSUPPORTED_OPERATION",{operation:"getBlock(blockHash)"});case"getTransaction":return this.fetch("proxy",{action:"eth_getTransactionByHash",txhash:t.hash});case"getTransactionReceipt":return this.fetch("proxy",{action:"eth_getTransactionReceipt",txhash:t.hash});case"call":{if("latest"!==t.blockTag)throw new Error("EtherscanProvider does not support blockTag for call");const e=this._getTransactionPostData(t.transaction);e.module="proxy",e.action="eth_call";try{return await this.fetch("proxy",e,!0)}catch(e){return this._checkError(t,e,t.transaction)}}case"estimateGas":{const e=this._getTransactionPostData(t.transaction);e.module="proxy",e.action="eth_estimateGas";try{return await this.fetch("proxy",e,!0)}catch(e){return this._checkError(t,e,t.transaction)}}}return super._perform(t)}async getNetwork(){return this.network}async getEtherPrice(){return"homestead"!==this.network.name?0:parseFloat((await this.fetch("stats",{action:"ethprice"})).ethusd)}isCommunityResource(){const t=this.network.getPlugin(rh);return t?t.communityApiKey===this.apiKey:eh===this.apiKey}}const ih="84842078b09946638c03157f83405213";class oh extends Ku{constructor(t="homestead",e,r){const s=ol.from(t);null==e&&(e=ih),null==r&&(r=null);super(oh.getConnection(s,e,r),s),n(this,{projectId:e,projectSecret:r})}_getProvider(t){try{return new oh(t,this.projectId,this.projectSecret)}catch(t){}return super._getProvider(t)}static getConnection(t,e,r){null==e&&(e=ih),null==r&&(r=null);const n=new Uo(`https://${function(t){switch(t){case"homestead":return"mainnet.infura.io";case"ropsten":return"ropsten.infura.io";case"rinkeby":return"rinkeby.infura.io";case"kovan":return"kovan.infura.io";case"goerli":return"goerli.infura.io";case"matic":return"polygon-mainnet.infura.io";case"maticmum":return"polygon-mumbai.infura.io";case"optimism":return"optimism-mainnet.infura.io";case"optimism-kovan":return"optimism-kovan.infura.io";case"arbitrum":return"arbitrum-mainnet.infura.io";case"arbitrum-rinkeby":return"arbitrum-rinkeby.infura.io"}return Go.throwArgumentError("unsupported network","network",t)}(t.name)}/v3/${e}`);n.allowGzip=!0,r&&n.setCredentials("",r);return{request:n,throttleRetry:async(t,r,n)=>(e===ih&&vu("InfuraProvider"),!0)}}isCommunityResource(){return this.projectId===ih}}const ah={homestead:"6004bcd10040261633ade990",ropsten:"6004bd4d0040261633ade991",rinkeby:"6004bda20040261633ade994",goerli:"6004bd860040261633ade992"};function ch(t,e,r,n){n=!!n;let s=!1,i=e;return null==i?(i=ah[t.name],null==i&&Go.throwArgumentError("network does not support default applicationId","applicationId",e),n=!0,s=!0):i===ah[t.name]&&(n=!0,s=!0),null==r&&(r=null),{applicationId:i,applicationSecretKey:r,community:s,loadBalancer:n}}class lh extends Ku{constructor(t="homestead",e,r,s){const i=ol.from(t),{applicationId:o,applicationSecretKey:a,loadBalancer:c}=ch(i,e,r,s);super(lh.getConnection(i,o,a,c),i),n(this,{applicationId:o,applicationSecretKey:a,loadBalancer:c})}static getConnection(t,e,r,n){const{applicationId:s,applicationSecretKey:i,community:o,loadBalancer:a}=ch(t,e,r,n);let c=`https://${function(t){switch(t){case"homestead":return"eth-mainnet.gateway.pokt.network";case"ropsten":return"eth-ropsten.gateway.pokt.network";case"rinkeby":return"eth-rinkeby.gateway.pokt.network";case"goerli":return"eth-goerli.gateway.pokt.network"}return Go.throwArgumentError("unsupported network","network",t)}(t.name)}/v1/`;a&&(c+="lb/"),c+=s;const l=new Uo(c);l.allowGzip=!0,i&&l.setCredentials("",i);return{request:l,throttleRetry:async(t,e,r)=>(o&&vu("PocketProvider"),!0)}}isCommunityResource(){return this.applicationId===ah[this.network.name]}}var uh,hh,fh,dh,ph,wh,gh,mh,yh=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},bh=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const vh=BigInt("1"),Eh=BigInt("2");function Th(){return(new Date).getTime()}const kh={stallTimeout:400,priority:1,weight:1},Ah={blockNumber:-2,requests:0,lateResponses:0,errorResponses:0,outOfSync:-1,unsupportedEvents:0,rollingDuration:0,score:0,_network:null,_updateNumber:null,_totalTime:0};function Nh(t,e,r){switch(r.method){case"chainId":case"getGasPrice":case"getBalance":case"estimateGas":return Go.getBigInt(e).toString();case"getBlockNumber":case"getTransactionCount":return Go.getNumber(e).toString();case"getCode":case"getStorageAt":case"call":return ue(e);case"getBlock":return r.includeTransactions?JSON.stringify(t.formatter.blockWithTransactions(e)):JSON.stringify(t.formatter.block(e));case"getTransaction":return JSON.stringify(t.formatter.transactionResponse(e));case"getTransactionReceipt":return JSON.stringify(t.formatter.receipt(e));case"getLogs":return JSON.stringify(e.map((e=>t.formatter.log(e))))}return Go.throwError("unsupported method","UNSUPPORTED_OPERATION",{operation:`_perform(${JSON.stringify(r.method)})`})}function Ph(t,e){const r=new Map;for(const{result:t,normal:n,weight:s}of e){const e=r.get(n)||{result:t,weight:0};e.weight+=s,r.set(n,e)}let n,s=0;for(const{weight:e,result:i}of r.values())e>=t&&e>s&&(s=e,n=i);return n}class xh extends tu{constructor(t,e){super(e),uh.add(this),hh.set(this,void 0),fh.set(this,void 0),yh(this,hh,t.map((t=>t instanceof tu?Object.assign({provider:t},kh,Ah):Object.assign({},kh,t,Ah))),"f"),yh(this,fh,null,"f"),this.quorum=2,this.eventQuorum=1,this.eventWorkers=1,this.quorum>bh(this,hh,"f").reduce(((t,e)=>t+e.weight),0)&&Go.throwArgumentError("quorum exceed provider wieght","quorum",this.quorum)}async _detectNetwork(){return ol.from(Go.getBigInt(await this._perform({method:"chainId"}))).freeze()}_getSubscriber(t){throw new Error("@TODO")}async _perform(t){await bh(this,uh,"m",wh).call(this);const e=new Set;for(let r=0;r0;e--){const r=Math.floor(Math.random()*(e+1)),n=t[e];t[e]=t[r],t[r]=n}}(e),e.sort(((t,e)=>e.priority-t.priority));for(const r of e)if(-1===t.indexOf(r))return r;return null},ph=function(t,e){const r=bh(this,uh,"m",dh).call(this,Array.from(t).map((t=>t.config)));if(null==r)return null;const n={},s={config:r,result:n,didBump:!1,done:!1,perform:null,staller:null},i=Th();return s.perform=(async()=>{try{r.requests++,n.result=await r.provider._perform(e)}catch(t){r.errorResponses++,n.error=t}s.done&&r.lateResponses++;const t=Th()-i;r._totalTime+=t,r.rollingDuration=.95*r.rollingDuration+.05*t,s.perform=null})(),s.staller=(async()=>{var t;await(t=r.stallTimeout,new Promise((e=>{setTimeout(e,t)}))),s.staller=null})(),t.add(s),s},wh=async function(){let t=bh(this,fh,"f");if(!t){const e=[];bh(this,hh,"f").forEach((t=>{e.push(async function(t,e){for(;t.blockNumber<0||t.blockNumber{const e=await t.provider.getBlockNumber();e>t.blockNumber&&(t.blockNumber=e),t._updateNumber=null})()),await t._updateNumber,t.outOfSync++}(t,0)),e.push((async()=>{t._network=await t.provider.getNetwork()})())})),yh(this,fh,t=(async()=>{await Promise.all(e);let t=null;for(const e of bh(this,hh,"f")){const r=e._network;null==t?t=r.chainId:r.chainId!==t&&Go.throwError("cannot mix providers on different networks","UNSUPPORTED_OPERATION",{operation:"new FallbackProvider"})}})(),"f")}await t},gh=async function(t,e){const r=[];for(const n of t)if("result"in n.result){const t=n.result.result;r.push({result:t,normal:Nh(n.config._network,t,e),weight:n.config.weight})}if(!(r.reduce(((t,e)=>t+e.weight),0)BigInt(t.result)));e.sort(((t,e)=>tt?1:0));const r=e.length/2;return e.length%2?e[r]:(e[r-1]+e[r]+vh)/Eh}(r);case"getBlock":return"blockTag"in e&&"pending"===e.blockTag?r[0].result:Ph(this.quorum,r);case"chainId":case"getBalance":case"getTransactionCount":case"getCode":case"getStorageAt":case"getTransaction":case"getTransactionReceipt":case"getLogs":case"call":return Ph(this.quorum,r)}return Go.throwError("unsupported method","UNSUPPORTED_OPERATION",{operation:`_perform(${JSON.stringify(e.method)})`})}},mh=async function t(e,r){if(0===e.size)throw new Error("no runners?!");const n=[];let s=0;for(const t of e)t.perform&&n.push(t.perform),t.staller?n.push(t.staller):t.didBump||(t.didBump=!0,s++);const i=await bh(this,uh,"m",gh).call(this,e,r);if(void 0!==i){if(i instanceof Error)throw i;return i}for(let t=0;t(Gh(this,Ih,"f")._register(t,this),t))),"f")}stop(){Gh(this,Rh,"f").then((t=>{Gh(this,Ih,"f").send("eth_unsubscribe",[t])})),jh(this,Rh,null,"f")}pause(t){t||Go.throwError("preserve logs while paused not supported by SocketSubscriber yet","UNSUPPORTED_OPERATION",{operation:"pause(false)"}),jh(this,_h,!!t,"f")}resume(){jh(this,_h,null,"f")}_handleMessage(t){if(null!=Gh(this,Rh,"f")&&null===Gh(this,_h,"f")){let e=Gh(this,Ch,"f");e=null==e?this._emit(Gh(this,Ih,"f"),t):e.then((async()=>{await this._emit(Gh(this,Ih,"f"),t)})),jh(this,Ch,e.then((()=>{Gh(this,Ch,"f")===e&&jh(this,Ch,null,"f")})),"f")}}async _emit(t,e){throw new Error("sub-classes must implemente this; _emit")}}Ih=new WeakMap,Sh=new WeakMap,Rh=new WeakMap,_h=new WeakMap,Ch=new WeakMap;class zh extends $h{constructor(t){super(t,["newHeads"])}async _emit(t,e){t.emit("block",parseInt(e.number))}}class Wh extends $h{constructor(t){super(t,["newPendingTransactions"])}async _emit(t,e){t.emit("pending",e)}}class Hh extends $h{constructor(t,e){super(t,["logs",e]),Bh.set(this,void 0),Fh.set(this,void 0),jh(this,Bh,JSON.stringify(e),"f"),jh(this,Fh,t.getNetwork().then((t=>t.formatter)),"f")}get logFilter(){return JSON.parse(Gh(this,Bh,"f"))}async _emit(t,e){const r=await Gh(this,Fh,"f");t.emit(Gh(this,Bh,"f"),r.log(e,t))}}Bh=new WeakMap,Fh=new WeakMap;class Vh extends Hu{constructor(t){super(t),Uh.set(this,void 0),Lh.set(this,void 0),Dh.set(this,void 0),Mh.set(this,void 0),jh(this,Uh,new Map,"f"),jh(this,Lh,!1,"f"),jh(this,Dh,new Map,"f"),jh(this,Mh,new Map,"f")}_getSubscriber(t){switch(t.type){case"close":return new Xl("close");case"block":return new zh(this);case"pending":return new Wh(this);case"event":return new Hh(this,t.filter);case"orphan":if("drop-log"===t.filter.orphan)return new Xl("drop-log")}return super._getSubscriber(t)}_register(t,e){Gh(this,Dh,"f").set(t,e);const r=Gh(this,Mh,"f").get(t);if(r){for(const t of r)e._handleMessage(t);Gh(this,Mh,"f").delete(t)}}async send(t,e){const r=this.prepareRequest(t,e),n=new Promise(((t,e)=>{Gh(this,Uh,"f").set(r.id,{payload:r,resolve:t,reject:e})}));return Gh(this,Lh,"f")&&await this._write(JSON.stringify(r)),await n}async _start(){if(!Gh(this,Lh,"f")){jh(this,Lh,!0,"f");for(const{payload:t}of Gh(this,Uh,"f").values())await this._write(JSON.stringify(t))}}async _processMessage(t){const e=JSON.parse(t);if("id"in e){const t=Gh(this,Uh,"f").get(e.id);if(!t)return void console.log("Weird... Response for not a thing we sent");if(Gh(this,Uh,"f").delete(e.id),"error"in e){const{message:r,code:n,data:s}=e.error,i=Go.makeError(r||"unkonwn error","SERVER_ERROR",{request:`ws:${JSON.stringify(t.payload)}`,info:{code:n,data:s}});t.reject(i)}else t.resolve(e.result)}else if("eth_subscription"===e.method){const t=e.params.subscription,r=Gh(this,Dh,"f").get(t);if(r)r._handleMessage(e.params.result);else{let r=Gh(this,Mh,"f").get(t);null==r&&(r=[],Gh(this,Mh,"f").set(t,r)),r.push(e.params.result)}}}async _write(t){throw new Error("sub-classes must override this")}}Uh=new WeakMap,Lh=new WeakMap,Dh=new WeakMap,Mh=new WeakMap;var Kh,Jh=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},qh=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class Xh extends Vh{constructor(t,e){super(e),Kh.set(this,void 0),Jh(this,Kh,"string"==typeof t?new Oh(t):t,"f"),this.websocket.onopen=()=>{this._start()},this.websocket.onmessage=t=>{this._processMessage(t.data)}}get websocket(){return qh(this,Kh,"f")}async _write(t){this.websocket.send(t)}}Kh=new WeakMap;const Yh=function(t){function e(e,r,n){const s=function(){const s=new t(e,r);if(null!=n.ensNetwork&&s.attachPlugin(new Qc(null,n.ensNetwork)),n.priorityFee&&s.attachPlugin(new tl(n.priorityFee)),n.etherscan){const{url:t,apiKey:e}=n.etherscan;s.attachPlugin(new nh(t,e))}return s.attachPlugin(new Zc),s};t.register(e,s),t.register(r,s),n.altNames&&n.altNames.forEach((e=>{t.register(e,s)}))}return e("homestead",1,{ensNetwork:1,altNames:["mainnet"]}),e("ropsten",3,{ensNetwork:3}),e("rinkeby",4,{ensNetwork:4}),e("goerli",5,{ensNetwork:5}),e("kovan",42,{ensNetwork:42}),e("classic",61,{}),e("classicKotti",6,{}),e("xdai",100,{ensNetwork:1}),e("matic",137,{ensNetwork:1,priorityFee:35e9,etherscan:{apiKey:"W6T8DJW654GNTQ34EFEYYP3EZD9DD27CT7",url:"https://api.polygonscan.com/"}}),e("maticMumbai",80001,{priorityFee:35e9,etherscan:{apiKey:"W6T8DJW654GNTQ34EFEYYP3EZD9DD27CT7",url:"https://api-testnet.polygonscan.com/"}}),e("bnb",56,{ensNetwork:1,etherscan:{apiKey:"EVTS3CU31AATZV72YQ55TPGXGMVIFUQ9M9",url:"http://api.bscscan.com"}}),e("bnbt",97,{etherscan:{apiKey:"EVTS3CU31AATZV72YQ55TPGXGMVIFUQ9M9",url:"http://api-testnet.bscscan.com"}}),t}(ol),Zh=void 0;var Qh,tf,ef=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},rf=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class nf extends Lc{constructor(t,e,r){super(t,t.provider);n(this,{args:e.decodeEventLog(r,t.data,t.topics),fragment:r,interface:e})}get eventName(){return this.fragment.name}get eventSignature(){return this.fragment.format()}}class sf extends Dc{constructor(t,e,r){super(r,e),Qh.set(this,void 0),ef(this,Qh,t,"f")}get logs(){return super.logs.map((t=>{const e=t.topics.length?rf(this,Qh,"f").getEvent(t.topics[0]):null;return e?new nf(t,rf(this,Qh,"f"),e):t}))}}Qh=new WeakMap;class of extends Mc{constructor(t,e,r){super(r,e),tf.set(this,void 0),ef(this,tf,t,"f")}async wait(t){const e=await super.wait();return null==e?null:new sf(rf(this,tf,"f"),this.provider,e)}}tf=new WeakMap;class af extends a{constructor(t,e,r,s,i){super(t,e,r);const o=new nf(i,t.interface,s);n(this,{args:t.interface.decodeEventLog(s,o.data,o.topics),fragment:s,log:o})}get eventName(){return this.fragment.name}get eventSignature(){return this.fragment.format()}async getBlock(){return await this.log.getBlock()}async getTransaction(){return await this.log.getTransaction()}async getTransactionReceipt(){return await this.log.getTransactionReceipt()}}const cf=new N("@ethersproject/contract@6.0.0-beta.1");var lf,uf=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},hf=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};function ff(t){return t&&"function"==typeof t.resolveName}class df{constructor(t,e,r){if(lf.set(this,void 0),n(this,{fragment:e}),e.inputs.lengtht.walkAsync(r[e],((t,e)=>"address"===t?Is(e,i):e)))));return t.interface.encodeFilterTopics(e,n)}(),"f")}getTopicFilter(){return hf(this,lf,"f")}}function pf(t,e){return null==t?null:"function"==typeof t[e]?t:t.provider&&"function"==typeof t.provider[e]?t.provider:null}async function wf(t){const e=function(t){const e={};t.to&&(e.to=t.to),t.from&&(e.from=t.from),t.data&&(e.data=ue(t.data));const r="chainId,gasLimit,gasPrice,maxFeePerGas, maxPriorityFeePerGas,value".split(/,/);for(const n in r)n in t&&null!=t[n]&&(e[n]=Go.getBigInt(t[n],`request.${n}`));const n="type,nonce".split(/,/);for(const r in n)r in t&&null!=t[r]&&(e[r]=Go.getNumber(t[r],`request.${r}`));return t.accessList&&(e.accessList=mc(t.accessList)),"blockTag"in t&&(e.blockTag=t.blockTag),"enableCcipRead"in t&&(e.enableCcipReadEnabled=!!t.enableCcipRead),"customData"in t&&(e.customData=t.customData),e}(Ls.dereference(t,"overrides"));return e.to?cf.throwArgumentError("cannot override to","overrides.to",e.to):e.data&&cf.throwArgumentError("cannot override data","overrides.data",e.data),e.from&&(e.from=await Is(e.from)),e}lf=new WeakMap;class gf extends(function(){return Function}()){constructor(t,e){super(),n(this,{name:t.interface.getFunctionName(e),_contract:t,_key:e});return new Proxy(this,{apply:async(t,e,r)=>t.getFragment(...r).constant?await t.staticCall(...r):await t.send(...r)})}get fragment(){return this._contract.interface.getFunction(this._key)}getFragment(...t){return this._contract.interface.getFunction(this._key,t)}async populateTransaction(...t){const r=this.getFragment(...t);let n={};if(r.inputs.length+1===t.length&&(n=await wf(t.pop())),r.inputs.length!==t.length)throw new Error("internal error: fragment inputs doesn't match arguments; should not happen");const s=await async function(t,e,r){const n=pf(t,"resolveName"),s=ff(n)?n:null;return await Promise.all(e.map(((t,e)=>t.walkAsync(r[e],((t,e)=>"address"===t?Is(e,s):e)))))}(this._contract.runner,r.inputs,t);return Object.assign({},n,await e({to:this._contract.getAddress(),data:this._contract.interface.encodeFunctionData(r,s)}))}async staticCall(...t){const e=await this.staticCallResult(...t);return 1===e.length?e[0]:e}async send(...t){const e=pf(this._contract.runner,"sendTransaction");if(!(r=e)||"function"!=typeof r.sendTransaction)return cf.throwError("contract runner does not support sending transactions","UNSUPPORTED_OPERATION",{operation:"sendTransaction"});var r;const n=await e.sendTransaction(await this.populateTransaction(...t)),s=pf(this._contract.runner,"getLogs");return new of(this._contract.interface,s,n)}async estimateGas(...t){const e=pf(this._contract.runner,"estimateGas");return(r=e)&&"function"==typeof r.estimateGas?await e.estimateGas(await this.populateTransaction(...t)):cf.throwError("contract runner does not support gas estimation","UNSUPPORTED_OPERATION",{operation:"estimateGas"});var r}async staticCallResult(...t){const e=pf(this._contract.runner,"call");if(!(r=e)||"function"!=typeof r.call)return cf.throwError("contract runner does not support calling","UNSUPPORTED_OPERATION",{operation:"call"});var r;const n=this.getFragment(...t),s=await this.populateTransaction(...t);let i="0x";try{i=await e.call(s)}catch(t){if(h(t))throw this._contract.interface.makeError(n,t.data,s);throw t}return this._contract.interface.decodeFunctionResult(n,i)}}class mf extends(function(){return Function}()){constructor(t,e){return super(),n(this,{name:t.interface.getEventName(e),_contract:t,_key:e}),new Proxy(this,{apply:async(e,r,n)=>new df(t,e.getFragment(...n),n)})}get fragment(){return this._contract.interface.getEvent(this._key)}getFragment(...t){return this._contract.interface.getEvent(this._key,t)}}const yf=Symbol.for("_ethersInternal_contract"),bf=new WeakMap;function vf(t){return bf.get(t[yf])}async function Ef(t,e){let r,n;if(Array.isArray(e))r=t.interface.getEvent(e[0]),n=e;else if("string"==typeof e)r=t.interface.getEvent(e),n=[t.interface.getEventTopic(r)];else if((s=e)&&"object"==typeof s&&"getTopicFilter"in s&&"function"==typeof s.getTopicFilter&&s.fragment)r=e.fragment,n=await e.getTopicFilter();else{if(!("fragment"in e))throw console.log(e),new Error("TODO");r=e.fragment,n=[t.interface.getEventTopic(r)]}var s;n=n.map((t=>{return null==t?null:Array.isArray(t)?(e=t.map((t=>t.toLowerCase())),(e=Array.from(new Set(e).values())).sort(),e):t.toLowerCase();var e}));return{fragment:r,tag:n.map((t=>null==t?"null":Array.isArray(t)?t.join("|"):t)).join("&"),topics:n}}async function Tf(t,e){const{subs:r}=vf(t);return r.get((await Ef(t,e)).tag)||null}async function kf(t,e){const r=pf(t.runner,"on"),n=pf(t.runner,"off");if(!r||r!==n||(!(s=r)||"function"!=typeof s.on||"function"!=typeof s.off))return cf.throwError("contract runner does not support subscribing","UNSUPPORTED_OPERATION",{operation:"on"});var s;const{fragment:i,tag:o,topics:a}=await Ef(t,e),{addr:c,subs:l}=vf(t);let u=l.get(o);if(!u){const n={address:c||t,topics:a},s=r=>{const n=new af(t,null,e,i,r);Nf(t,e,n.args,n)};let h=!1;u={tag:o,listeners:[],start:()=>{h||(r.on(n,s),h=!0)},stop:()=>{h&&(r.off(n,s),h=!1)}},l.set(o,u)}return u}let Af=Promise.resolve();async function Nf(t,e,r,n){try{await Af}catch(t){}const s=async function(t,e,r,n){await Af;const s=await Tf(t,e);if(!s)return!1;const i=s.listeners.length;return s.listeners=s.listeners.filter((({listener:s,once:i})=>{const o=r.slice();return n&&o.push(new af(t,i?null:s,e,n.fragment,n.log)),setTimeout((()=>{s.call(t,...o)}),0),!i})),i>0}(t,e,r,n);return Af=s,await s}const Pf=["then"];class xf{constructor(t,e,r=null,s){let i;n(this,{target:t,runner:r,interface:Ao.from(e)}),Object.defineProperty(this,yf,{value:{}});let o=null,a=null;if(s){const t=pf(r,"getLogs");a=new of(this.interface,t,s)}let c=new Map;if("string"==typeof t)if(te(t))o=t,i=Promise.resolve(t);else{const e=pf(r,"resolveName");if(!ff(e))throw cf.makeError("contract runner does not support name resolution","UNSUPPORTED_OPERATION",{operation:"resolveName"});i=e.resolveName(t).then((t=>{if(null==t)throw new Error("TODO");return vf(this).addr=t,t}))}else i=t.getAddress().then((t=>{if(null==t)throw new Error("TODO");return vf(this).addr=t,t}));var l,u;l=this,u={addrPromise:i,addr:o,deployTx:a,subs:c},bf.set(l[yf],u);const h=new Proxy({},{get:(t,e,r)=>{if(Pf.indexOf(e)>=0)return Reflect.get(t,e,r);const n=String(e),s=this.getEvent(n);if(s)return s;throw new Error(`unknown contract event: ${n}`)}});return n(this,{filters:h}),new Proxy(this,{get:(t,e,r)=>{if(e in t||Pf.indexOf(e)>=0)return Reflect.get(t,e,r);const n=String(e),s=t.getFunction(n);if(s)return s;throw new Error(`unknown contract method: ${n}`)}})}async getAddress(){return await vf(this).addrPromise}deploymentTransaction(){return vf(this).deployTx}getFunction(t){return"string"!=typeof t&&(t=t.format()),new gf(this,t)}getEvent(t){return"string"!=typeof t&&(t=t.format()),new mf(this,t)}async queryFilter(t,e=0,r="latest"){const{addr:n,addrPromise:s}=vf(this),i=n||await s,{fragment:o,topics:a}=await Ef(this,t),c={address:i,topics:a,fromBlock:e,toBlock:r},l=pf(this.runner,"getLogs");return(u=l)&&"function"==typeof u.getLogs?(await l.getLogs(c)).map((t=>new nf(t,this.interface,o))):cf.throwError("contract runner does not support querying","UNSUPPORTED_OPERATION",{operation:"getLogs"});var u}async on(t,e){const r=await kf(this,t);return r.listeners.push({listener:e,once:!1}),r.start(),this}async once(t,e){const r=await kf(this,t);return r.listeners.push({listener:e,once:!0}),r.start(),this}async emit(t,...e){return await Nf(this,t,e,null)}async listenerCount(t){if(t){const e=await Tf(this,t);return e?e.listeners.length:0}const{subs:e}=vf(this);let r=0;for(const{listeners:t}of e.values())r+=t.length;return r}async listeners(t){if(t){const e=await Tf(this,t);return e?e.listeners.map((({listener:t})=>t)):[]}const{subs:e}=vf(this);let r=[];for(const{listeners:t}of e.values())r=r.concat(t.map((({listener:t})=>t)));return r}async off(t,e){const r=await Tf(this,t);if(!r)return this;if(e){const t=r.listeners.map((({listener:t})=>t)).indexOf(e);t>=0&&r.listeners.splice(t,1)}return null!=e&&0!==r.listeners.length||(r.stop(),vf(this).subs.delete(r.tag)),this}async removeAllListeners(t){if(t){const e=await Tf(this,t);if(!e)return this;e.stop(),vf(this).subs.delete(e.tag)}else{const{subs:t}=vf(this);for(const{tag:e,stop:r}of t.values())r(),t.delete(e)}return this}async addListener(t,e){return await this.on(t,e)}async removeListener(t,e){return await this.off(t,e)}static buildClass(t){return class extends xf{constructor(e,r=null){super(e,t,r)}}}static from(t,e,r=null){return new this(t,e,r)}}class Of extends(function(){return xf}()){}function If(t){return ds(un("0x"+wc.computePublicKey(t,!1).substring(4)).substring(26))}const Sf=" !#$%&'()*+,-./<=>?@[]^_`{|}~",Rf=/^[a-z]*$/i;function _f(t,e){let r=97;return t.reduce(((t,n)=>(n===e?r++:n.match(Rf)?t.push(String.fromCharCode(r)+n):(r=97,t.push(n)),t)),[])}function Cf(t){if("0"!==t[0])throw TypeError("unsupported auwl data");return function(t,e){for(let r=Sf.length-1;r>=0;r--)t=t.split(Sf[r]).join(e.substring(2*r,2*r+2));const r=[],n=t.replace(/(:|([0-9])|([A-Z][a-z]*))/g,((t,e,n,s)=>{if(n)for(let t=parseInt(n);t>=0;t--)r.push(";");else r.push(e.toLowerCase());return""}));if(n)throw new Error(`leftovers: ${JSON.stringify(n)}`);return _f(_f(r,";"),":")}(t.substring(1+2*Sf.length),t.substring(1,1+2*Sf.length))}const Bf=new N("@ethersproject/wordlists@6.0.0-beta.1");class Ff{constructor(t){n(this,{locale:t})}split(t){return t.toLowerCase().split(/ +/g)}join(t){return t.join(" ")}}var Uf,Lf,Df,Mf,jf,Gf=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},$f=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class zf extends Ff{constructor(t,e,r){super(t),Uf.add(this),Lf.set(this,void 0),Df.set(this,void 0),Mf.set(this,void 0),Gf(this,Lf,e,"f"),Gf(this,Df,r,"f"),Gf(this,Mf,null,"f")}get _data(){return $f(this,Lf,"f")}_decodeWords(){return Cf($f(this,Lf,"f"))}getWord(t){const e=$f(this,Uf,"m",jf).call(this);return(t<0||t>=e.length)&&Bf.throwArgumentError(`invalid word index: ${t}`,"index",t),e[t]}getWordIndex(t){return $f(this,Uf,"m",jf).call(this).indexOf(t)}}Lf=new WeakMap,Df=new WeakMap,Mf=new WeakMap,Uf=new WeakSet,jf=function(){if(null==$f(this,Mf,"f")){const t=this._decodeWords();if(_i(t.join("\n")+"\n")!==$f(this,Df,"f"))throw new Error(`BIP39 Wordlist for ${this.locale} FAILED`);Gf(this,Mf,t,"f")}return $f(this,Mf,"f")};const Wf=new class extends zf{constructor(){super("en","0erleonalorenseinceregesticitStanvetearctssi#ch2Athck&tneLl0And#Il.yLeOutO=S|S%b/ra@SurdU'0Ce[Cid|CountCu'Hie=IdOu,-Qui*Ro[TT]T%T*[Tu$0AptDD-tD*[Ju,M.UltV<)Vi)0Rob-0FairF%dRaid0A(EEntRee0Ead0MRRp%tS!_rmBumCoholErtI&LLeyLowMo,O}PhaReadySoT Ways0A>urAz(gOngOuntU'd0Aly,Ch%Ci|G G!GryIm$K!Noun)Nu$O` Sw T&naTiqueXietyY1ArtOlogyPe?P!Pro=Ril1ChCt-EaEnaGueMMedM%MyOundR<+Re,Ri=RowTTefa@Ti,Tw%k0KPe@SaultSetSi,SumeThma0H!>OmTa{T&dT.udeTra@0Ct]D.Gu,NtTh%ToTumn0Era+OcadoOid0AkeA*AyEsomeFulKw?d0Is:ByChel%C#D+GL<)Lc#y~MbooN_{Ad!AftAmA}AshAt AwlAzyEamEd.EekEwI{etImeIspIt-OpO[Ou^OwdUci$UelUi'Umb!Un^UshYY,$2BeLtu*PPbo?dRiousRr|Rta(R=Sh]/omTe3C!:DMa+MpN)Ng R(gShUght WnY3AlBa>BrisCadeCemb CideCl(eC%a>C*a'ErF&'F(eFyG*eLayLiv M3AgramAlAm#dAryCeE'lEtFf G.$Gn.yLemmaNn NosaurRe@RtSag*eScov Sea'ShSmi[S%d Splay/<)V tVideV%)Zzy5Ct%Cum|G~Lph(Ma(Na>NkeyN%OrSeUb!Ve_ftAg#AmaA,-AwEamE[IftIllInkIpI=OpUmY2CkMbNeR(g/T^Ty1Arf1Nam-:G G!RlyRnR`Sily/Sy1HoOlogyOnomy0GeItUca>1F%t0G1GhtTh 2BowD E@r-EgSe0B?kBodyBra)Er+Ot]PloyPow Pty0Ab!A@DD![D%'EmyErgyF%)Ga+G(eH<)JoyLi,OughR-hRollSu*T Ti*TryVelope1Isode0U$Uip0AA'OdeOs]R%Upt0CapeSayS&)Ta>0Ern$H-s1Id&)IlOkeOl=1A@Amp!Ce[Ch<+C.eCludeCu'Ecu>Erci'Hau,Hib.I!I,ItOt-PM&'Mu}Pa@Po'Pro=Pul'0ChCludeComeC*a'DexD-a>Do%Du,ryFN Noc|PutQuirySSue0Em1Ory:CketGu?RZz3AlousAns~yWel9BInKeUr}yY5D+I)MpNg!Ni%Nk/:Ng?oo3EnEpT^upY3CkDD}yNdNgdomSsTT^&TeTt&Wi4EeIfeO{Ow:BBelB%Dd DyKeMpNgua+PtopR+T T(UghUndryVaWWnWsu.Y Zy3Ad AfArnA=Ctu*FtGG$G&dIsu*M#NdNg`NsOp?dSs#Tt Vel3ArB tyBr?yC&'FeFtGhtKeMbM.NkOnQuid/Tt!VeZ?d5AdAnB, C$CkG-NelyNgOpTt yUdUn+VeY$5CkyGga+Mb N?N^Xury3R-s:Ch(eDG-G}tIdIlInJ%KeMm$NNa+Nda>NgoNs]Nu$P!Rb!R^Rg(R(eRketRria+SkSs/ T^T i$ThTrixTt XimumZe3AdowAnAsu*AtCh<-D$DiaLodyLtMb M%yNt]NuRcyR+R.RryShSsa+T$Thod3Dd!DnightLk~]M-NdNimumN%Nu>Rac!Rr%S ySs/akeXXedXtu*5Bi!DelDifyMM|N.%NkeyN, N`OnR$ReRn(gSqu.oTh T]T%Unta(U'VeVie5ChFf(LeLtiplySc!SeumShroomS-/Tu$3Self/ yTh:I=MePk(Rrow/yT]Tu*3ArCkEdGati=G!@I` PhewR=/TTw%kUtr$V WsXt3CeGht5B!I'M(eeOd!Rm$R`SeTab!TeTh(gTi)VelW5C!?Mb R'T:K0EyJe@Li+Scu*S =Ta(Vious0CurEAyEa'Ed+U{UgUn+2EmEtIntL?LeLi)NdNyOlPul?Rt]S.]Ssib!/TatoTt yV tyWd W _@i)Ai'Ed-tEf Epa*Es|EttyEv|I)IdeIm?yIntI%.yIs#Iva>IzeOb!mO)[Odu)Of.OgramOje@Omo>OofOp tyOsp O>@OudOvide2Bl-Dd(g~LpL'Mpk(N^PilPpyR^a'R.yRpo'R'ShTZz!3Ramid:99Al.yAntumArt E,]I{ItIzO>:Bb.Cco#CeCkD?DioIlInI'~yMpN^NdomN+PidReTeTh V&WZ%3AdyAlAs#BelBuildC$lCei=CipeC%dCyc!Du)F!@F%mFu'G]G*tGul?Je@LaxLea'LiefLyMa(Memb M(dMo=Nd NewNtOp&PairPeatPla)P%tQui*ScueSemb!Si,Sour)Sp#'SultTi*T*atTurnUn]Ve$ViewW?d2Y`m0BBb#CeChDeD+F!GhtGidNgOtPp!SkTu$V$V 5AdA,BotBu,CketM<)OfOkieOmSeTa>UghUndU>Y$5Bb DeGLeNNwayR$:DDd!D}[FeIlLadLm#L#LtLu>MeMp!NdTisfyToshiU)Usa+VeY1A!AnA*Att E}HemeHoolI&)I[%sOrp]OutRapRe&RiptRub1AAr^As#AtC#dC*tCt]Cur.yEdEkGm|Le@~M(?Ni%N'Nt&)RiesRvi)Ss]Tt!TupV&_dowAftAllowA*EdEllEriffIeldIftI}IpIv O{OeOotOpOrtOuld O=RimpRugUff!Y0Bl(gCkDeE+GhtGnL|Lk~yLv Mil?Mp!N)NgR&/ Tua>XZe1A>Et^IIllInIrtUll0AbAmEepEnd I)IdeIghtImOgAyEakEelEmEpE*oI{IllIngO{Oma^O}OolOryO=Ra>gyReetRikeR#gRugg!Ud|UffUmb!Y!0Bje@Bm.BwayC)[ChDd&Ff G?G+,ItMm NNnyN'tP PplyP*meReRfa)R+Rpri'RroundR=ySpe@/a(1AllowAmpApArmE?EetIftImIngIt^Ord1MbolMptomRup/em:B!Ck!GIlL|LkNkPeR+tSk/eTtooXi3A^Am~NNGradeHoldOnP Set1BOng::Rd3Ar~ow9UUngU`:3BraRo9NeO","0x3c8acc1e7b08d8e76f9fda015ef48dc8c710a73cb7e0f77b2c18a9b5a7adde60")}},Hf=new N("@ethersproject/wallet@6.0.0-beta.1"),Vf=Object.freeze({en:Wf});var Kf,Jf=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},qf=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class Xf extends zf{constructor(t,e,r,n){super(t,e,n),Kf.set(this,void 0),Jf(this,Kf,r,"f")}get _accent(){return qf(this,Kf,"f")}_decodeWords(){return function(t,e){let r=Cf(t).join(",");return e.split(/,/g).forEach((t=>{const e=t.match(/^([a-z]*)([0-9]+)([0-9])(.*)$/);if(!e)throw new Error("internal error parsing accents");let n=0;const s=function(t,e){const r=(1<=t;){const e=s>>i-t;s&=(1<(0==--s[n]&&(e=String.fromCharCode(e.charCodeAt(0),i),n++),e)))})),r.split(",")}(this._data,this._accent)}}function Yf(t){return(1<24)&&Hf.throwArgumentError("invalid mnemonic length","mnemonic","[ REDACTED ]");const n=ie(new Uint8Array(Math.ceil(11*r.length/8)));let s=0;for(let t=0;t>3]|=1<<7-s%8),s++}const i=32*r.length/3,o=Yf(r.length/3);return(ie(ns(n.slice(0,i/8)))[0]&o)!==(n[n.length-1]&o)&&Hf.throwArgumentError("invalid mnemonic checksum","mnemonic","[ REDACTED ]"),ue(n.slice(0,i/8))}function Qf(t,e=Wf){(t.length%4||t.length<16||t.length>32)&&Hf.throwArgumentError("invalid entropy size","entropy","[ REDACTED ]"),null==e&&(e=Wf);const r=[0];let n=11;for(let e=0;e8?(r[r.length-1]<<=8,r[r.length-1]|=t[e],n-=8):(r[r.length-1]<<=n,r[r.length-1]|=t[e]>>8-n,r.push(t[e]&((1<<8-n)-1&255)),n+=3);const s=t.length/4,i=parseInt(ns(t).substring(2,4),16)&Yf(s);return r[r.length-1]<<=s,r[r.length-1]|=i>>8-s,e.join(r.map((t=>e.getWord(t))))}Kf=new WeakMap;const td={};class ed{constructor(t,e,r,s,i){null==s&&(s=""),null==i&&(i=Wf),Hf.assertPrivate(t,td,"Mnemonic"),n(this,{phrase:r,password:s,wordlist:i,entropy:e})}computeSeed(){const e=ii("mnemonic"+this.password,t.UnicodeNormalizationForm.NFKD);return Cn(ii(this.phrase,t.UnicodeNormalizationForm.NFKD),e,2048,64,"sha512")}static fromPhrase(t,e,r){const n=Zf(t,r);return t=Qf(Hf.getBytes(n),r),new ed(td,n,t,e,r)}static fromEntropy(t,e,r){const n=Hf.getBytes(t,"entropy"),s=Qf(n,r);return new ed(td,ue(n),s,e,r)}static entropyToPhrase(t,e){return Qf(Hf.getBytes(t,"entropy"),e)}static phraseToEntropy(t,e){return Zf(t,e)}static isValidMnemonic(t,e){try{return Zf(t,e),!0}catch(t){}return!1}}var rd,nd=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},sd=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class id extends gu{constructor(t,e){super(e),rd.set(this,void 0),nd(this,rd,t,"f");n(this,{address:If(this.signingKey.publicKey)})}get signingKey(){return sd(this,rd,"f")}get privateKey(){return this.signingKey.privateKey}async getAddress(){return this.address}connect(t){return new id(sd(this,rd,"f"),t)}async signTransaction(t){const r=Object.assign({},t,await e({to:t.to?Is(t.to,this.provider):void 0,from:t.from?Is(t.from,this.provider):void 0}));null!=r.from&&(ds(r.from)!==this.address&&Hf.throwArgumentError("transaction from address mismatch","tx.from",t.from),delete r.from);const n=Oc.from(r);return n.signature=this.signingKey.sign(n.unsignedHash),n.serialized}async signMessage(t){return this.signingKey.sign(ji(t)).serialized}async signTypedData(t,e,r){const n=await ao.resolveNames(t,e,r,(async t=>{if(null==this.provider)return Hf.throwError("cannot resolve ENS names without a provider","UNSUPPORTED_OPERATION",{operation:"resolveName",info:{name:t}});const e=await this.provider.resolveName(t);return null==e?Hf.throwError("unconfigured ENS name","UNCONFIGURED_NAME",{value:t}):e}));return this.signingKey.sign(ao.hash(n.domain,e,n.value)).serialized}}rd=new WeakMap;var od,ad,cd,ld=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)},ud=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r};const hd="m/44'/60'/0'/0/0",fd=new Uint8Array([66,105,116,99,111,105,110,32,115,101,101,100]),dd=2147483648,pd=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141");function wd(t,e){let r="";for(;t;)r="0123456789abcdef"[t%16]+r,t=Math.trunc(t/16);for(;r.length<2*e;)r="0"+r;return"0x"+r}function gd(t){const e=Hf.getBytes(t);return Zt(fe([e,pe(ns(ns(e)),0,4)]))}const md={};function yd(t,e,r,n){const s=new Uint8Array(37);if(t&dd){if(null==n)return Hf.throwError("cannot derive child of neutered node","UNSUPPORTED_OPERATION",{operation:"deriveChild"});s.set(ie(n),1)}else s.set(ie(r));for(let e=24;e>=0;e-=8)s[33+(e>>3)]=t>>24-e&255;const i=ie($r("sha512",e,s));return{IL:i.slice(0,32),IR:i.slice(32)}}function bd(t,e){const r=e.split("/");if(0===r.length||"m"===r[0]&&0!==t.depth)throw new Error("invalid path - "+e);"m"===r[0]&&r.shift();let n=t;for(let t=0;t=dd)throw new Error("invalid path index - "+e);n=n.deriveChild(dd+t)}else{if(!e.match(/^[0-9]+$/))throw new Error("invalid path component - "+e);{const t=parseInt(e);if(t>=dd)throw new Error("invalid path index - "+e);n=n.deriveChild(t)}}}return n}class vd extends id{constructor(t,e,r,s,i,o,a,c,l){super(e,l),Hf.assertPrivate(t,md,"HDNodeWallet"),n(this,{publicKey:e.compressedPublicKey});n(this,{parentFingerprint:r,fingerprint:pe(In(ns(this.publicKey)),0,4),chainCode:s,path:i,index:o,depth:a}),n(this,{mnemonic:c})}connect(t){return new vd(md,this.signingKey,this.parentFingerprint,this.chainCode,this.path,this.index,this.depth,this.mnemonic,t)}get extendedKey(){if(this.depth>=256)throw new Error("Depth too large!");return gd(fe(["0x0488ADE4",wd(this.depth,1),this.parentFingerprint,wd(this.index,4),this.chainCode,fe(["0x00",this.privateKey])]))}hasPath(){return null!=this.path}neuter(){return new Ed(md,this.address,this.publicKey,this.parentFingerprint,this.chainCode,this.path,this.index,this.depth,this.provider)}deriveChild(t){const e=Hf.getNumber(t,"index");if(e>4294967295)throw new Error("invalid index - "+String(e));let r=this.path;r&&(r+="/"+(2147483647&e),e&dd&&(r+="'"));const{IR:n,IL:s}=yd(e,this.chainCode,this.publicKey,this.privateKey),i=new wc(At((Tt(s)+BigInt(this.privateKey))%pd,32));return new vd(md,i,this.fingerprint,ue(n),r,e,this.depth+1,this.mnemonic,this.provider)}derivePath(t){return bd(this,t)}static fromSeed(t){return ld(vd,od,"m",ad).call(vd,t,null)}static fromPhrase(t,e="",r=hd,n=Wf){r||(r=hd);const s=ed.fromPhrase(t,e,n);return ld(vd,od,"m",ad).call(vd,s.computeSeed(),s).derivePath(r)}static fromMnemonic(t,e=hd){return e||(e=hd),ld(vd,od,"m",ad).call(vd,t.computeSeed(),t).derivePath(e)}static fromExtendedKey(t){const e=ie(Qt(t));82===e.length&&gd(e.slice(0,78))===t||Hf.throwArgumentError("invalid extended key","extendedKey","[ REDACTED ]");const r=e[4],n=ue(e.slice(5,9)),s=parseInt(ue(e.slice(9,13)).substring(2),16),i=ue(e.slice(13,45)),o=e.slice(45,78);switch(ue(e.slice(0,4))){case"0x0488b21e":case"0x043587cf":{const t=ue(o);return new Ed(md,If(t),t,n,i,null,s,r,null)}case"0x0488ade4":case"0x04358394 ":if(0!==o[0])break;return new vd(md,new wc(o.slice(1)),n,i,null,s,r,null,null)}return Hf.throwArgumentError("invalid extended key prefix","extendedKey","[ REDACTED ]")}static createRandom(t="",e=hd,r=Wf){e||(e=hd);const n=ed.fromEntropy(Ln(16),t,r);return ld(vd,od,"m",ad).call(vd,n.computeSeed(),n).derivePath(e)}}od=vd,ad=function(t,e){const r=Hf.getBytes(t,"seed");if(r.length<16||r.length>64)throw new Error("invalid seed");const n=ie($r("sha512",fd,r)),s=new wc(ue(n.slice(0,32)));return new vd(md,s,"0x00000000",ue(n.slice(32)),"m",0,0,e,null)};class Ed extends mu{constructor(t,e,r,s,i,o,a,c,l){super(e,l),Hf.assertPrivate(t,md,"HDNodeVoidWallet"),n(this,{publicKey:r});n(this,{publicKey:r,fingerprint:pe(In(ns(r)),0,4),parentFingerprint:s,chainCode:i,path:o,index:a,depth:c})}connect(t){return new Ed(md,this.address,this.publicKey,this.parentFingerprint,this.chainCode,this.path,this.index,this.depth,t)}get extendedKey(){if(this.depth>=256)throw new Error("Depth too large!");return gd(fe(["0x0488B21E",wd(this.depth,1),this.parentFingerprint,wd(this.index,4),this.chainCode,this.publicKey]))}hasPath(){return null!=this.path}deriveChild(t){const e=Hf.getNumber(t,"index");if(e>4294967295)throw new Error("invalid index - "+String(e));let r=this.path;r&&(r+="/"+(2147483647&e),e&dd&&(r+="'"));const{IR:n,IL:s}=yd(e,this.chainCode,this.publicKey,null),i=wc._addPoints(s,this.publicKey,!0),o=If(i);return new Ed(md,o,i,this.fingerprint,ue(n),r,e,this.depth+1,this.provider)}derivePath(t){return bd(this,t)}}class Td{constructor(t,e="",r="m/44'/60'/0'/0",n=Wf){cd.set(this,void 0),ud(this,cd,vd.fromPhrase(t,e,r,n),"f")}getSigner(t=0){return ld(this,cd,"f").deriveChild(t)}}function kd(t){const e=Hf.getNumber(t,"index");return(e<0||e>=dd)&&Hf.throwArgumentError("invalid account index","index",e),`m/44'/60'/${e}'/0/0`} +/*! MIT License. Copyright 2015-2022 Richard Moore . See LICENSE.txt. */cd=new WeakMap;var Ad,Nd,Pd,xd=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Od=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};const Id={16:10,24:12,32:14},Sd=[1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145],Rd=[99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22],_d=[82,9,106,213,48,54,165,56,191,64,163,158,129,243,215,251,124,227,57,130,155,47,255,135,52,142,67,68,196,222,233,203,84,123,148,50,166,194,35,61,238,76,149,11,66,250,195,78,8,46,161,102,40,217,36,178,118,91,162,73,109,139,209,37,114,248,246,100,134,104,152,22,212,164,92,204,93,101,182,146,108,112,72,80,253,237,185,218,94,21,70,87,167,141,157,132,144,216,171,0,140,188,211,10,247,228,88,5,184,179,69,6,208,44,30,143,202,63,15,2,193,175,189,3,1,19,138,107,58,145,17,65,79,103,220,234,151,242,207,206,240,180,230,115,150,172,116,34,231,173,53,133,226,249,55,232,28,117,223,110,71,241,26,113,29,41,197,137,111,183,98,14,170,24,190,27,252,86,62,75,198,210,121,32,154,219,192,254,120,205,90,244,31,221,168,51,136,7,199,49,177,18,16,89,39,128,236,95,96,81,127,169,25,181,74,13,45,229,122,159,147,201,156,239,160,224,59,77,174,42,245,176,200,235,187,60,131,83,153,97,23,43,4,126,186,119,214,38,225,105,20,99,85,33,12,125],Cd=[3328402341,4168907908,4000806809,4135287693,4294111757,3597364157,3731845041,2445657428,1613770832,33620227,3462883241,1445669757,3892248089,3050821474,1303096294,3967186586,2412431941,528646813,2311702848,4202528135,4026202645,2992200171,2387036105,4226871307,1101901292,3017069671,1604494077,1169141738,597466303,1403299063,3832705686,2613100635,1974974402,3791519004,1033081774,1277568618,1815492186,2118074177,4126668546,2211236943,1748251740,1369810420,3521504564,4193382664,3799085459,2883115123,1647391059,706024767,134480908,2512897874,1176707941,2646852446,806885416,932615841,168101135,798661301,235341577,605164086,461406363,3756188221,3454790438,1311188841,2142417613,3933566367,302582043,495158174,1479289972,874125870,907746093,3698224818,3025820398,1537253627,2756858614,1983593293,3084310113,2108928974,1378429307,3722699582,1580150641,327451799,2790478837,3117535592,0,3253595436,1075847264,3825007647,2041688520,3059440621,3563743934,2378943302,1740553945,1916352843,2487896798,2555137236,2958579944,2244988746,3151024235,3320835882,1336584933,3992714006,2252555205,2588757463,1714631509,293963156,2319795663,3925473552,67240454,4269768577,2689618160,2017213508,631218106,1269344483,2723238387,1571005438,2151694528,93294474,1066570413,563977660,1882732616,4059428100,1673313503,2008463041,2950355573,1109467491,537923632,3858759450,4260623118,3218264685,2177748300,403442708,638784309,3287084079,3193921505,899127202,2286175436,773265209,2479146071,1437050866,4236148354,2050833735,3362022572,3126681063,840505643,3866325909,3227541664,427917720,2655997905,2749160575,1143087718,1412049534,999329963,193497219,2353415882,3354324521,1807268051,672404540,2816401017,3160301282,369822493,2916866934,3688947771,1681011286,1949973070,336202270,2454276571,201721354,1210328172,3093060836,2680341085,3184776046,1135389935,3294782118,965841320,831886756,3554993207,4068047243,3588745010,2345191491,1849112409,3664604599,26054028,2983581028,2622377682,1235855840,3630984372,2891339514,4092916743,3488279077,3395642799,4101667470,1202630377,268961816,1874508501,4034427016,1243948399,1546530418,941366308,1470539505,1941222599,2546386513,3421038627,2715671932,3899946140,1042226977,2521517021,1639824860,227249030,260737669,3765465232,2084453954,1907733956,3429263018,2420656344,100860677,4160157185,470683154,3261161891,1781871967,2924959737,1773779408,394692241,2579611992,974986535,664706745,3655459128,3958962195,731420851,571543859,3530123707,2849626480,126783113,865375399,765172662,1008606754,361203602,3387549984,2278477385,2857719295,1344809080,2782912378,59542671,1503764984,160008576,437062935,1707065306,3622233649,2218934982,3496503480,2185314755,697932208,1512910199,504303377,2075177163,2824099068,1841019862,739644986],Bd=[2781242211,2230877308,2582542199,2381740923,234877682,3184946027,2984144751,1418839493,1348481072,50462977,2848876391,2102799147,434634494,1656084439,3863849899,2599188086,1167051466,2636087938,1082771913,2281340285,368048890,3954334041,3381544775,201060592,3963727277,1739838676,4250903202,3930435503,3206782108,4149453988,2531553906,1536934080,3262494647,484572669,2923271059,1783375398,1517041206,1098792767,49674231,1334037708,1550332980,4098991525,886171109,150598129,2481090929,1940642008,1398944049,1059722517,201851908,1385547719,1699095331,1587397571,674240536,2704774806,252314885,3039795866,151914247,908333586,2602270848,1038082786,651029483,1766729511,3447698098,2682942837,454166793,2652734339,1951935532,775166490,758520603,3000790638,4004797018,4217086112,4137964114,1299594043,1639438038,3464344499,2068982057,1054729187,1901997871,2534638724,4121318227,1757008337,0,750906861,1614815264,535035132,3363418545,3988151131,3201591914,1183697867,3647454910,1265776953,3734260298,3566750796,3903871064,1250283471,1807470800,717615087,3847203498,384695291,3313910595,3617213773,1432761139,2484176261,3481945413,283769337,100925954,2180939647,4037038160,1148730428,3123027871,3813386408,4087501137,4267549603,3229630528,2315620239,2906624658,3156319645,1215313976,82966005,3747855548,3245848246,1974459098,1665278241,807407632,451280895,251524083,1841287890,1283575245,337120268,891687699,801369324,3787349855,2721421207,3431482436,959321879,1469301956,4065699751,2197585534,1199193405,2898814052,3887750493,724703513,2514908019,2696962144,2551808385,3516813135,2141445340,1715741218,2119445034,2872807568,2198571144,3398190662,700968686,3547052216,1009259540,2041044702,3803995742,487983883,1991105499,1004265696,1449407026,1316239930,504629770,3683797321,168560134,1816667172,3837287516,1570751170,1857934291,4014189740,2797888098,2822345105,2754712981,936633572,2347923833,852879335,1133234376,1500395319,3084545389,2348912013,1689376213,3533459022,3762923945,3034082412,4205598294,133428468,634383082,2949277029,2398386810,3913789102,403703816,3580869306,2297460856,1867130149,1918643758,607656988,4049053350,3346248884,1368901318,600565992,2090982877,2632479860,557719327,3717614411,3697393085,2249034635,2232388234,2430627952,1115438654,3295786421,2865522278,3633334344,84280067,33027830,303828494,2747425121,1600795957,4188952407,3496589753,2434238086,1486471617,658119965,3106381470,953803233,334231800,3005978776,857870609,3151128937,1890179545,2298973838,2805175444,3056442267,574365214,2450884487,550103529,1233637070,4289353045,2018519080,2057691103,2399374476,4166623649,2148108681,387583245,3664101311,836232934,3330556482,3100665960,3280093505,2955516313,2002398509,287182607,3413881008,4238890068,3597515707,975967766],Fd=[1671808611,2089089148,2006576759,2072901243,4061003762,1807603307,1873927791,3310653893,810573872,16974337,1739181671,729634347,4263110654,3613570519,2883997099,1989864566,3393556426,2191335298,3376449993,2106063485,4195741690,1508618841,1204391495,4027317232,2917941677,3563566036,2734514082,2951366063,2629772188,2767672228,1922491506,3227229120,3082974647,4246528509,2477669779,644500518,911895606,1061256767,4144166391,3427763148,878471220,2784252325,3845444069,4043897329,1905517169,3631459288,827548209,356461077,67897348,3344078279,593839651,3277757891,405286936,2527147926,84871685,2595565466,118033927,305538066,2157648768,3795705826,3945188843,661212711,2999812018,1973414517,152769033,2208177539,745822252,439235610,455947803,1857215598,1525593178,2700827552,1391895634,994932283,3596728278,3016654259,695947817,3812548067,795958831,2224493444,1408607827,3513301457,0,3979133421,543178784,4229948412,2982705585,1542305371,1790891114,3410398667,3201918910,961245753,1256100938,1289001036,1491644504,3477767631,3496721360,4012557807,2867154858,4212583931,1137018435,1305975373,861234739,2241073541,1171229253,4178635257,33948674,2139225727,1357946960,1011120188,2679776671,2833468328,1374921297,2751356323,1086357568,2408187279,2460827538,2646352285,944271416,4110742005,3168756668,3066132406,3665145818,560153121,271589392,4279952895,4077846003,3530407890,3444343245,202643468,322250259,3962553324,1608629855,2543990167,1154254916,389623319,3294073796,2817676711,2122513534,1028094525,1689045092,1575467613,422261273,1939203699,1621147744,2174228865,1339137615,3699352540,577127458,712922154,2427141008,2290289544,1187679302,3995715566,3100863416,339486740,3732514782,1591917662,186455563,3681988059,3762019296,844522546,978220090,169743370,1239126601,101321734,611076132,1558493276,3260915650,3547250131,2901361580,1655096418,2443721105,2510565781,3828863972,2039214713,3878868455,3359869896,928607799,1840765549,2374762893,3580146133,1322425422,2850048425,1823791212,1459268694,4094161908,3928346602,1706019429,2056189050,2934523822,135794696,3134549946,2022240376,628050469,779246638,472135708,2800834470,3032970164,3327236038,3894660072,3715932637,1956440180,522272287,1272813131,3185336765,2340818315,2323976074,1888542832,1044544574,3049550261,1722469478,1222152264,50660867,4127324150,236067854,1638122081,895445557,1475980887,3117443513,2257655686,3243809217,489110045,2662934430,3778599393,4162055160,2561878936,288563729,1773916777,3648039385,2391345038,2493985684,2612407707,505560094,2274497927,3911240169,3460925390,1442818645,678973480,3749357023,2358182796,2717407649,2306869641,219617805,3218761151,3862026214,1120306242,1756942440,1103331905,2578459033,762796589,252780047,2966125488,1425844308,3151392187,372911126],Ud=[1667474886,2088535288,2004326894,2071694838,4075949567,1802223062,1869591006,3318043793,808472672,16843522,1734846926,724270422,4278065639,3621216949,2880169549,1987484396,3402253711,2189597983,3385409673,2105378810,4210693615,1499065266,1195886990,4042263547,2913856577,3570689971,2728590687,2947541573,2627518243,2762274643,1920112356,3233831835,3082273397,4261223649,2475929149,640051788,909531756,1061110142,4160160501,3435941763,875846760,2779116625,3857003729,4059105529,1903268834,3638064043,825316194,353713962,67374088,3351728789,589522246,3284360861,404236336,2526454071,84217610,2593830191,117901582,303183396,2155911963,3806477791,3958056653,656894286,2998062463,1970642922,151591698,2206440989,741110872,437923380,454765878,1852748508,1515908788,2694904667,1381168804,993742198,3604373943,3014905469,690584402,3823320797,791638366,2223281939,1398011302,3520161977,0,3991743681,538992704,4244381667,2981218425,1532751286,1785380564,3419096717,3200178535,960056178,1246420628,1280103576,1482221744,3486468741,3503319995,4025428677,2863326543,4227536621,1128514950,1296947098,859002214,2240123921,1162203018,4193849577,33687044,2139062782,1347481760,1010582648,2678045221,2829640523,1364325282,2745433693,1077985408,2408548869,2459086143,2644360225,943212656,4126475505,3166494563,3065430391,3671750063,555836226,269496352,4294908645,4092792573,3537006015,3452783745,202118168,320025894,3974901699,1600119230,2543297077,1145359496,387397934,3301201811,2812801621,2122220284,1027426170,1684319432,1566435258,421079858,1936954854,1616945344,2172753945,1330631070,3705438115,572679748,707427924,2425400123,2290647819,1179044492,4008585671,3099120491,336870440,3739122087,1583276732,185277718,3688593069,3772791771,842159716,976899700,168435220,1229577106,101059084,606366792,1549591736,3267517855,3553849021,2897014595,1650632388,2442242105,2509612081,3840161747,2038008818,3890688725,3368567691,926374254,1835907034,2374863873,3587531953,1313788572,2846482505,1819063512,1448540844,4109633523,3941213647,1701162954,2054852340,2930698567,134748176,3132806511,2021165296,623210314,774795868,471606328,2795958615,3031746419,3334885783,3907527627,3722280097,1953799400,522133822,1263263126,3183336545,2341176845,2324333839,1886425312,1044267644,3048588401,1718004428,1212733584,50529542,4143317495,235803164,1633788866,892690282,1465383342,3115962473,2256965911,3250673817,488449850,2661202215,3789633753,4177007595,2560144171,286339874,1768537042,3654906025,2391705863,2492770099,2610673197,505291324,2273808917,3924369609,3469625735,1431699370,673740880,3755965093,2358021891,2711746649,2307489801,218961690,3217021541,3873845719,1111672452,1751693520,1094828930,2576986153,757954394,252645662,2964376443,1414855848,3149649517,370555436],Ld=[1374988112,2118214995,437757123,975658646,1001089995,530400753,2902087851,1273168787,540080725,2910219766,2295101073,4110568485,1340463100,3307916247,641025152,3043140495,3736164937,632953703,1172967064,1576976609,3274667266,2169303058,2370213795,1809054150,59727847,361929877,3211623147,2505202138,3569255213,1484005843,1239443753,2395588676,1975683434,4102977912,2572697195,666464733,3202437046,4035489047,3374361702,2110667444,1675577880,3843699074,2538681184,1649639237,2976151520,3144396420,4269907996,4178062228,1883793496,2403728665,2497604743,1383856311,2876494627,1917518562,3810496343,1716890410,3001755655,800440835,2261089178,3543599269,807962610,599762354,33778362,3977675356,2328828971,2809771154,4077384432,1315562145,1708848333,101039829,3509871135,3299278474,875451293,2733856160,92987698,2767645557,193195065,1080094634,1584504582,3178106961,1042385657,2531067453,3711829422,1306967366,2438237621,1908694277,67556463,1615861247,429456164,3602770327,2302690252,1742315127,2968011453,126454664,3877198648,2043211483,2709260871,2084704233,4169408201,0,159417987,841739592,504459436,1817866830,4245618683,260388950,1034867998,908933415,168810852,1750902305,2606453969,607530554,202008497,2472011535,3035535058,463180190,2160117071,1641816226,1517767529,470948374,3801332234,3231722213,1008918595,303765277,235474187,4069246893,766945465,337553864,1475418501,2943682380,4003061179,2743034109,4144047775,1551037884,1147550661,1543208500,2336434550,3408119516,3069049960,3102011747,3610369226,1113818384,328671808,2227573024,2236228733,3535486456,2935566865,3341394285,496906059,3702665459,226906860,2009195472,733156972,2842737049,294930682,1206477858,2835123396,2700099354,1451044056,573804783,2269728455,3644379585,2362090238,2564033334,2801107407,2776292904,3669462566,1068351396,742039012,1350078989,1784663195,1417561698,4136440770,2430122216,775550814,2193862645,2673705150,1775276924,1876241833,3475313331,3366754619,270040487,3902563182,3678124923,3441850377,1851332852,3969562369,2203032232,3868552805,2868897406,566021896,4011190502,3135740889,1248802510,3936291284,699432150,832877231,708780849,3332740144,899835584,1951317047,4236429990,3767586992,866637845,4043610186,1106041591,2144161806,395441711,1984812685,1139781709,3433712980,3835036895,2664543715,1282050075,3240894392,1181045119,2640243204,25965917,4203181171,4211818798,3009879386,2463879762,3910161971,1842759443,2597806476,933301370,1509430414,3943906441,3467192302,3076639029,3776767469,2051518780,2631065433,1441952575,404016761,1942435775,1408749034,1610459739,3745345300,2017778566,3400528769,3110650942,941896748,3265478751,371049330,3168937228,675039627,4279080257,967311729,135050206,3635733660,1683407248,2076935265,3576870512,1215061108,3501741890],Dd=[1347548327,1400783205,3273267108,2520393566,3409685355,4045380933,2880240216,2471224067,1428173050,4138563181,2441661558,636813900,4233094615,3620022987,2149987652,2411029155,1239331162,1730525723,2554718734,3781033664,46346101,310463728,2743944855,3328955385,3875770207,2501218972,3955191162,3667219033,768917123,3545789473,692707433,1150208456,1786102409,2029293177,1805211710,3710368113,3065962831,401639597,1724457132,3028143674,409198410,2196052529,1620529459,1164071807,3769721975,2226875310,486441376,2499348523,1483753576,428819965,2274680428,3075636216,598438867,3799141122,1474502543,711349675,129166120,53458370,2592523643,2782082824,4063242375,2988687269,3120694122,1559041666,730517276,2460449204,4042459122,2706270690,3446004468,3573941694,533804130,2328143614,2637442643,2695033685,839224033,1973745387,957055980,2856345839,106852767,1371368976,4181598602,1033297158,2933734917,1179510461,3046200461,91341917,1862534868,4284502037,605657339,2547432937,3431546947,2003294622,3182487618,2282195339,954669403,3682191598,1201765386,3917234703,3388507166,0,2198438022,1211247597,2887651696,1315723890,4227665663,1443857720,507358933,657861945,1678381017,560487590,3516619604,975451694,2970356327,261314535,3535072918,2652609425,1333838021,2724322336,1767536459,370938394,182621114,3854606378,1128014560,487725847,185469197,2918353863,3106780840,3356761769,2237133081,1286567175,3152976349,4255350624,2683765030,3160175349,3309594171,878443390,1988838185,3704300486,1756818940,1673061617,3403100636,272786309,1075025698,545572369,2105887268,4174560061,296679730,1841768865,1260232239,4091327024,3960309330,3497509347,1814803222,2578018489,4195456072,575138148,3299409036,446754879,3629546796,4011996048,3347532110,3252238545,4270639778,915985419,3483825537,681933534,651868046,2755636671,3828103837,223377554,2607439820,1649704518,3270937875,3901806776,1580087799,4118987695,3198115200,2087309459,2842678573,3016697106,1003007129,2802849917,1860738147,2077965243,164439672,4100872472,32283319,2827177882,1709610350,2125135846,136428751,3874428392,3652904859,3460984630,3572145929,3593056380,2939266226,824852259,818324884,3224740454,930369212,2801566410,2967507152,355706840,1257309336,4148292826,243256656,790073846,2373340630,1296297904,1422699085,3756299780,3818836405,457992840,3099667487,2135319889,77422314,1560382517,1945798516,788204353,1521706781,1385356242,870912086,325965383,2358957921,2050466060,2388260884,2313884476,4006521127,901210569,3990953189,1014646705,1503449823,1062597235,2031621326,3212035895,3931371469,1533017514,350174575,2256028891,2177544179,1052338372,741876788,1606591296,1914052035,213705253,2334669897,1107234197,1899603969,3725069491,2631447780,2422494913,1635502980,1893020342,1950903388,1120974935],Md=[2807058932,1699970625,2764249623,1586903591,1808481195,1173430173,1487645946,59984867,4199882800,1844882806,1989249228,1277555970,3623636965,3419915562,1149249077,2744104290,1514790577,459744698,244860394,3235995134,1963115311,4027744588,2544078150,4190530515,1608975247,2627016082,2062270317,1507497298,2200818878,567498868,1764313568,3359936201,2305455554,2037970062,1047239e3,1910319033,1337376481,2904027272,2892417312,984907214,1243112415,830661914,861968209,2135253587,2011214180,2927934315,2686254721,731183368,1750626376,4246310725,1820824798,4172763771,3542330227,48394827,2404901663,2871682645,671593195,3254988725,2073724613,145085239,2280796200,2779915199,1790575107,2187128086,472615631,3029510009,4075877127,3802222185,4107101658,3201631749,1646252340,4270507174,1402811438,1436590835,3778151818,3950355702,3963161475,4020912224,2667994737,273792366,2331590177,104699613,95345982,3175501286,2377486676,1560637892,3564045318,369057872,4213447064,3919042237,1137477952,2658625497,1119727848,2340947849,1530455833,4007360968,172466556,266959938,516552836,0,2256734592,3980931627,1890328081,1917742170,4294704398,945164165,3575528878,958871085,3647212047,2787207260,1423022939,775562294,1739656202,3876557655,2530391278,2443058075,3310321856,547512796,1265195639,437656594,3121275539,719700128,3762502690,387781147,218828297,3350065803,2830708150,2848461854,428169201,122466165,3720081049,1627235199,648017665,4122762354,1002783846,2117360635,695634755,3336358691,4234721005,4049844452,3704280881,2232435299,574624663,287343814,612205898,1039717051,840019705,2708326185,793451934,821288114,1391201670,3822090177,376187827,3113855344,1224348052,1679968233,2361698556,1058709744,752375421,2431590963,1321699145,3519142200,2734591178,188127444,2177869557,3727205754,2384911031,3215212461,2648976442,2450346104,3432737375,1180849278,331544205,3102249176,4150144569,2952102595,2159976285,2474404304,766078933,313773861,2570832044,2108100632,1668212892,3145456443,2013908262,418672217,3070356634,2594734927,1852171925,3867060991,3473416636,3907448597,2614737639,919489135,164948639,2094410160,2997825956,590424639,2486224549,1723872674,3157750862,3399941250,3501252752,3625268135,2555048196,3673637356,1343127501,4130281361,3599595085,2957853679,1297403050,81781910,3051593425,2283490410,532201772,1367295589,3926170974,895287692,1953757831,1093597963,492483431,3528626907,1446242576,1192455638,1636604631,209336225,344873464,1015671571,669961897,3375740769,3857572124,2973530695,3747192018,1933530610,3464042516,935293895,3454686199,2858115069,1863638845,3683022916,4085369519,3292445032,875313188,1080017571,3279033885,621591778,1233856572,2504130317,24197544,3017672716,3835484340,3247465558,2220981195,3060847922,1551124588,1463996600],jd=[4104605777,1097159550,396673818,660510266,2875968315,2638606623,4200115116,3808662347,821712160,1986918061,3430322568,38544885,3856137295,718002117,893681702,1654886325,2975484382,3122358053,3926825029,4274053469,796197571,1290801793,1184342925,3556361835,2405426947,2459735317,1836772287,1381620373,3196267988,1948373848,3764988233,3385345166,3263785589,2390325492,1480485785,3111247143,3780097726,2293045232,548169417,3459953789,3746175075,439452389,1362321559,1400849762,1685577905,1806599355,2174754046,137073913,1214797936,1174215055,3731654548,2079897426,1943217067,1258480242,529487843,1437280870,3945269170,3049390895,3313212038,923313619,679998e3,3215307299,57326082,377642221,3474729866,2041877159,133361907,1776460110,3673476453,96392454,878845905,2801699524,777231668,4082475170,2330014213,4142626212,2213296395,1626319424,1906247262,1846563261,562755902,3708173718,1040559837,3871163981,1418573201,3294430577,114585348,1343618912,2566595609,3186202582,1078185097,3651041127,3896688048,2307622919,425408743,3371096953,2081048481,1108339068,2216610296,0,2156299017,736970802,292596766,1517440620,251657213,2235061775,2933202493,758720310,265905162,1554391400,1532285339,908999204,174567692,1474760595,4002861748,2610011675,3234156416,3693126241,2001430874,303699484,2478443234,2687165888,585122620,454499602,151849742,2345119218,3064510765,514443284,4044981591,1963412655,2581445614,2137062819,19308535,1928707164,1715193156,4219352155,1126790795,600235211,3992742070,3841024952,836553431,1669664834,2535604243,3323011204,1243905413,3141400786,4180808110,698445255,2653899549,2989552604,2253581325,3252932727,3004591147,1891211689,2487810577,3915653703,4237083816,4030667424,2100090966,865136418,1229899655,953270745,3399679628,3557504664,4118925222,2061379749,3079546586,2915017791,983426092,2022837584,1607244650,2118541908,2366882550,3635996816,972512814,3283088770,1568718495,3499326569,3576539503,621982671,2895723464,410887952,2623762152,1002142683,645401037,1494807662,2595684844,1335535747,2507040230,4293295786,3167684641,367585007,3885750714,1865862730,2668221674,2960971305,2763173681,1059270954,2777952454,2724642869,1320957812,2194319100,2429595872,2815956275,77089521,3973773121,3444575871,2448830231,1305906550,4021308739,2857194700,2516901860,3518358430,1787304780,740276417,1699839814,1592394909,2352307457,2272556026,188821243,1729977011,3687994002,274084841,3594982253,3613494426,2701949495,4162096729,322734571,2837966542,1640576439,484830689,1202797690,3537852828,4067639125,349075736,3342319475,4157467219,4255800159,1030690015,1155237496,2951971274,1757691577,607398968,2738905026,499347990,3794078908,1011452712,227885567,2818666809,213114376,3034881240,1455525988,3414450555,850817237,1817998408,3092726480],Gd=[0,235474187,470948374,303765277,941896748,908933415,607530554,708780849,1883793496,2118214995,1817866830,1649639237,1215061108,1181045119,1417561698,1517767529,3767586992,4003061179,4236429990,4069246893,3635733660,3602770327,3299278474,3400528769,2430122216,2664543715,2362090238,2193862645,2835123396,2801107407,3035535058,3135740889,3678124923,3576870512,3341394285,3374361702,3810496343,3977675356,4279080257,4043610186,2876494627,2776292904,3076639029,3110650942,2472011535,2640243204,2403728665,2169303058,1001089995,899835584,666464733,699432150,59727847,226906860,530400753,294930682,1273168787,1172967064,1475418501,1509430414,1942435775,2110667444,1876241833,1641816226,2910219766,2743034109,2976151520,3211623147,2505202138,2606453969,2302690252,2269728455,3711829422,3543599269,3240894392,3475313331,3843699074,3943906441,4178062228,4144047775,1306967366,1139781709,1374988112,1610459739,1975683434,2076935265,1775276924,1742315127,1034867998,866637845,566021896,800440835,92987698,193195065,429456164,395441711,1984812685,2017778566,1784663195,1683407248,1315562145,1080094634,1383856311,1551037884,101039829,135050206,437757123,337553864,1042385657,807962610,573804783,742039012,2531067453,2564033334,2328828971,2227573024,2935566865,2700099354,3001755655,3168937228,3868552805,3902563182,4203181171,4102977912,3736164937,3501741890,3265478751,3433712980,1106041591,1340463100,1576976609,1408749034,2043211483,2009195472,1708848333,1809054150,832877231,1068351396,766945465,599762354,159417987,126454664,361929877,463180190,2709260871,2943682380,3178106961,3009879386,2572697195,2538681184,2236228733,2336434550,3509871135,3745345300,3441850377,3274667266,3910161971,3877198648,4110568485,4211818798,2597806476,2497604743,2261089178,2295101073,2733856160,2902087851,3202437046,2968011453,3936291284,3835036895,4136440770,4169408201,3535486456,3702665459,3467192302,3231722213,2051518780,1951317047,1716890410,1750902305,1113818384,1282050075,1584504582,1350078989,168810852,67556463,371049330,404016761,841739592,1008918595,775550814,540080725,3969562369,3801332234,4035489047,4269907996,3569255213,3669462566,3366754619,3332740144,2631065433,2463879762,2160117071,2395588676,2767645557,2868897406,3102011747,3069049960,202008497,33778362,270040487,504459436,875451293,975658646,675039627,641025152,2084704233,1917518562,1615861247,1851332852,1147550661,1248802510,1484005843,1451044056,933301370,967311729,733156972,632953703,260388950,25965917,328671808,496906059,1206477858,1239443753,1543208500,1441952575,2144161806,1908694277,1675577880,1842759443,3610369226,3644379585,3408119516,3307916247,4011190502,3776767469,4077384432,4245618683,2809771154,2842737049,3144396420,3043140495,2673705150,2438237621,2203032232,2370213795],$d=[0,185469197,370938394,487725847,741876788,657861945,975451694,824852259,1483753576,1400783205,1315723890,1164071807,1950903388,2135319889,1649704518,1767536459,2967507152,3152976349,2801566410,2918353863,2631447780,2547432937,2328143614,2177544179,3901806776,3818836405,4270639778,4118987695,3299409036,3483825537,3535072918,3652904859,2077965243,1893020342,1841768865,1724457132,1474502543,1559041666,1107234197,1257309336,598438867,681933534,901210569,1052338372,261314535,77422314,428819965,310463728,3409685355,3224740454,3710368113,3593056380,3875770207,3960309330,4045380933,4195456072,2471224067,2554718734,2237133081,2388260884,3212035895,3028143674,2842678573,2724322336,4138563181,4255350624,3769721975,3955191162,3667219033,3516619604,3431546947,3347532110,2933734917,2782082824,3099667487,3016697106,2196052529,2313884476,2499348523,2683765030,1179510461,1296297904,1347548327,1533017514,1786102409,1635502980,2087309459,2003294622,507358933,355706840,136428751,53458370,839224033,957055980,605657339,790073846,2373340630,2256028891,2607439820,2422494913,2706270690,2856345839,3075636216,3160175349,3573941694,3725069491,3273267108,3356761769,4181598602,4063242375,4011996048,3828103837,1033297158,915985419,730517276,545572369,296679730,446754879,129166120,213705253,1709610350,1860738147,1945798516,2029293177,1239331162,1120974935,1606591296,1422699085,4148292826,4233094615,3781033664,3931371469,3682191598,3497509347,3446004468,3328955385,2939266226,2755636671,3106780840,2988687269,2198438022,2282195339,2501218972,2652609425,1201765386,1286567175,1371368976,1521706781,1805211710,1620529459,2105887268,1988838185,533804130,350174575,164439672,46346101,870912086,954669403,636813900,788204353,2358957921,2274680428,2592523643,2441661558,2695033685,2880240216,3065962831,3182487618,3572145929,3756299780,3270937875,3388507166,4174560061,4091327024,4006521127,3854606378,1014646705,930369212,711349675,560487590,272786309,457992840,106852767,223377554,1678381017,1862534868,1914052035,2031621326,1211247597,1128014560,1580087799,1428173050,32283319,182621114,401639597,486441376,768917123,651868046,1003007129,818324884,1503449823,1385356242,1333838021,1150208456,1973745387,2125135846,1673061617,1756818940,2970356327,3120694122,2802849917,2887651696,2637442643,2520393566,2334669897,2149987652,3917234703,3799141122,4284502037,4100872472,3309594171,3460984630,3545789473,3629546796,2050466060,1899603969,1814803222,1730525723,1443857720,1560382517,1075025698,1260232239,575138148,692707433,878443390,1062597235,243256656,91341917,409198410,325965383,3403100636,3252238545,3704300486,3620022987,3874428392,3990953189,4042459122,4227665663,2460449204,2578018489,2226875310,2411029155,3198115200,3046200461,2827177882,2743944855],zd=[0,218828297,437656594,387781147,875313188,958871085,775562294,590424639,1750626376,1699970625,1917742170,2135253587,1551124588,1367295589,1180849278,1265195639,3501252752,3720081049,3399941250,3350065803,3835484340,3919042237,4270507174,4085369519,3102249176,3051593425,2734591178,2952102595,2361698556,2177869557,2530391278,2614737639,3145456443,3060847922,2708326185,2892417312,2404901663,2187128086,2504130317,2555048196,3542330227,3727205754,3375740769,3292445032,3876557655,3926170974,4246310725,4027744588,1808481195,1723872674,1910319033,2094410160,1608975247,1391201670,1173430173,1224348052,59984867,244860394,428169201,344873464,935293895,984907214,766078933,547512796,1844882806,1627235199,2011214180,2062270317,1507497298,1423022939,1137477952,1321699145,95345982,145085239,532201772,313773861,830661914,1015671571,731183368,648017665,3175501286,2957853679,2807058932,2858115069,2305455554,2220981195,2474404304,2658625497,3575528878,3625268135,3473416636,3254988725,3778151818,3963161475,4213447064,4130281361,3599595085,3683022916,3432737375,3247465558,3802222185,4020912224,4172763771,4122762354,3201631749,3017672716,2764249623,2848461854,2331590177,2280796200,2431590963,2648976442,104699613,188127444,472615631,287343814,840019705,1058709744,671593195,621591778,1852171925,1668212892,1953757831,2037970062,1514790577,1463996600,1080017571,1297403050,3673637356,3623636965,3235995134,3454686199,4007360968,3822090177,4107101658,4190530515,2997825956,3215212461,2830708150,2779915199,2256734592,2340947849,2627016082,2443058075,172466556,122466165,273792366,492483431,1047239e3,861968209,612205898,695634755,1646252340,1863638845,2013908262,1963115311,1446242576,1530455833,1277555970,1093597963,1636604631,1820824798,2073724613,1989249228,1436590835,1487645946,1337376481,1119727848,164948639,81781910,331544205,516552836,1039717051,821288114,669961897,719700128,2973530695,3157750862,2871682645,2787207260,2232435299,2283490410,2667994737,2450346104,3647212047,3564045318,3279033885,3464042516,3980931627,3762502690,4150144569,4199882800,3070356634,3121275539,2904027272,2686254721,2200818878,2384911031,2570832044,2486224549,3747192018,3528626907,3310321856,3359936201,3950355702,3867060991,4049844452,4234721005,1739656202,1790575107,2108100632,1890328081,1402811438,1586903591,1233856572,1149249077,266959938,48394827,369057872,418672217,1002783846,919489135,567498868,752375421,209336225,24197544,376187827,459744698,945164165,895287692,574624663,793451934,1679968233,1764313568,2117360635,1933530610,1343127501,1560637892,1243112415,1192455638,3704280881,3519142200,3336358691,3419915562,3907448597,3857572124,4075877127,4294704398,3029510009,3113855344,2927934315,2744104290,2159976285,2377486676,2594734927,2544078150],Wd=[0,151849742,303699484,454499602,607398968,758720310,908999204,1059270954,1214797936,1097159550,1517440620,1400849762,1817998408,1699839814,2118541908,2001430874,2429595872,2581445614,2194319100,2345119218,3034881240,3186202582,2801699524,2951971274,3635996816,3518358430,3399679628,3283088770,4237083816,4118925222,4002861748,3885750714,1002142683,850817237,698445255,548169417,529487843,377642221,227885567,77089521,1943217067,2061379749,1640576439,1757691577,1474760595,1592394909,1174215055,1290801793,2875968315,2724642869,3111247143,2960971305,2405426947,2253581325,2638606623,2487810577,3808662347,3926825029,4044981591,4162096729,3342319475,3459953789,3576539503,3693126241,1986918061,2137062819,1685577905,1836772287,1381620373,1532285339,1078185097,1229899655,1040559837,923313619,740276417,621982671,439452389,322734571,137073913,19308535,3871163981,4021308739,4104605777,4255800159,3263785589,3414450555,3499326569,3651041127,2933202493,2815956275,3167684641,3049390895,2330014213,2213296395,2566595609,2448830231,1305906550,1155237496,1607244650,1455525988,1776460110,1626319424,2079897426,1928707164,96392454,213114376,396673818,514443284,562755902,679998e3,865136418,983426092,3708173718,3557504664,3474729866,3323011204,4180808110,4030667424,3945269170,3794078908,2507040230,2623762152,2272556026,2390325492,2975484382,3092726480,2738905026,2857194700,3973773121,3856137295,4274053469,4157467219,3371096953,3252932727,3673476453,3556361835,2763173681,2915017791,3064510765,3215307299,2156299017,2307622919,2459735317,2610011675,2081048481,1963412655,1846563261,1729977011,1480485785,1362321559,1243905413,1126790795,878845905,1030690015,645401037,796197571,274084841,425408743,38544885,188821243,3613494426,3731654548,3313212038,3430322568,4082475170,4200115116,3780097726,3896688048,2668221674,2516901860,2366882550,2216610296,3141400786,2989552604,2837966542,2687165888,1202797690,1320957812,1437280870,1554391400,1669664834,1787304780,1906247262,2022837584,265905162,114585348,499347990,349075736,736970802,585122620,972512814,821712160,2595684844,2478443234,2293045232,2174754046,3196267988,3079546586,2895723464,2777952454,3537852828,3687994002,3234156416,3385345166,4142626212,4293295786,3841024952,3992742070,174567692,57326082,410887952,292596766,777231668,660510266,1011452712,893681702,1108339068,1258480242,1343618912,1494807662,1715193156,1865862730,1948373848,2100090966,2701949495,2818666809,3004591147,3122358053,2235061775,2352307457,2535604243,2653899549,3915653703,3764988233,4219352155,4067639125,3444575871,3294430577,3746175075,3594982253,836553431,953270745,600235211,718002117,367585007,484830689,133361907,251657213,2041877159,1891211689,1806599355,1654886325,1568718495,1418573201,1335535747,1184342925];function Hd(t){const e=[];for(let r=0;r>2,Od(this,Pd,"f")[i][t%4]=s[t],Od(this,Nd,"f")[e-i][t%4]=s[t];let o,a=0,c=n;for(;c>16&255]<<24^Rd[o>>8&255]<<16^Rd[255&o]<<8^Rd[o>>24&255]^Sd[a]<<24,a+=1,8!=n)for(let t=1;t>8&255]<<8^Rd[o>>16&255]<<16^Rd[o>>24&255]<<24;for(let t=n/2+1;t>2,i=c%4,Od(this,Pd,"f")[t][i]=s[l],Od(this,Nd,"f")[e-t][i]=s[l++],c++}for(let t=1;t>24&255]^$d[o>>16&255]^zd[o>>8&255]^Wd[255&o]}get key(){return Od(this,Ad,"f").slice()}encrypt(t){if(16!=t.length)throw new TypeError("invalid plaintext size (must be 16 bytes)");const e=Od(this,Pd,"f").length-1,r=[0,0,0,0];let n=Hd(t);for(let t=0;t<4;t++)n[t]^=Od(this,Pd,"f")[0][t];for(let t=1;t>24&255]^Bd[n[(e+1)%4]>>16&255]^Fd[n[(e+2)%4]>>8&255]^Ud[255&n[(e+3)%4]]^Od(this,Pd,"f")[t][e];n=r.slice()}const s=new Uint8Array(16);let i=0;for(let t=0;t<4;t++)i=Od(this,Pd,"f")[e][t],s[4*t]=255&(Rd[n[t]>>24&255]^i>>24),s[4*t+1]=255&(Rd[n[(t+1)%4]>>16&255]^i>>16),s[4*t+2]=255&(Rd[n[(t+2)%4]>>8&255]^i>>8),s[4*t+3]=255&(Rd[255&n[(t+3)%4]]^i);return s}decrypt(t){if(16!=t.length)throw new TypeError("invalid ciphertext size (must be 16 bytes)");const e=Od(this,Nd,"f").length-1,r=[0,0,0,0];let n=Hd(t);for(let t=0;t<4;t++)n[t]^=Od(this,Nd,"f")[0][t];for(let t=1;t>24&255]^Dd[n[(e+3)%4]>>16&255]^Md[n[(e+2)%4]>>8&255]^jd[255&n[(e+1)%4]]^Od(this,Nd,"f")[t][e];n=r.slice()}const s=new Uint8Array(16);let i=0;for(let t=0;t<4;t++)i=Od(this,Nd,"f")[e][t],s[4*t]=255&(_d[n[t]>>24&255]^i>>24),s[4*t+1]=255&(_d[n[(t+3)%4]>>16&255]^i>>16),s[4*t+2]=255&(_d[n[(t+2)%4]>>8&255]^i>>8),s[4*t+3]=255&(_d[255&n[(t+1)%4]]^i);return s}}Ad=new WeakMap,Nd=new WeakMap,Pd=new WeakMap;class Kd{constructor(t,e,r){if(r&&!(this instanceof r))throw new Error(`${t} must be instantiated with "new"`);Object.defineProperties(this,{aes:{enumerable:!0,value:new Vd(e)},name:{enumerable:!0,value:t}})}}var Jd,qd,Xd=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},Yd=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};class Zd extends Kd{constructor(t,e){if(super("ECC",t,Zd),Jd.set(this,void 0),qd.set(this,void 0),e){if(e.length%16)throw new TypeError("invalid iv size (must be 16 bytes)");Xd(this,Jd,new Uint8Array(e),"f")}else Xd(this,Jd,new Uint8Array(16),"f");Xd(this,qd,this.iv,"f")}get iv(){return new Uint8Array(Yd(this,Jd,"f"))}encrypt(t){if(t.length%16)throw new TypeError("invalid plaintext size (must be multiple of 16 bytes)");const e=new Uint8Array(t.length);for(let r=0;rNumber.MAX_SAFE_INTEGER)throw new TypeError("invalid counter initial integer value");for(let e=15;e>=0;--e)np(this,ep,"f")[e]=t%256,t=Math.floor(t/256)}setCounterBytes(t){if(16!==t.length)throw new TypeError("invalid counter initial Uint8Array value length");np(this,ep,"f").set(t)}increment(){for(let t=15;t>=0;t--){if(255!==np(this,ep,"f")[t]){np(this,ep,"f")[t]++;break}np(this,ep,"f")[t]=0}}encrypt(t){var e,r;const n=new Uint8Array(t);for(let t=0;t16)throw new TypeError("PKCS#7 padding byte out of range");const r=t.length-e;for(let n=0;n{setTimeout((()=>{e()}),t)}))}var pp,wp=window&&window.__classPrivateFieldSet||function(t,e,r,n,s){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r},gp=window&&window.__classPrivateFieldGet||function(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)};function mp(t){try{if(!t||!te(t.privateKey,32))return null;const e=t.privateKey;return wc.computePublicKey(e)!==t.publicKey?null:new wc(e)}catch(t){console.log(t)}return null}function yp(t){return new Promise((e=>{setTimeout((()=>{e()}),t)}))}class bp extends id{constructor(t,e){let r=null,n=null;if("string"==typeof t&&(r=new wc(t)),null==r){const e=function(t){try{if(!t||!t.signingKey)return null;const e=mp(t.signingKey);return null==e||If(e.publicKey)!==t.address||t.mnemonic&&vd.fromMnemonic(t.mnemonic).privateKey!==e.privateKey?null:t}catch(t){console.log(t)}return null}(t);e&&(r=e.signingKey,n=e.mnemonic||null)}if(null==r){const e=function(t){try{return null==t||"string"!=typeof t.phrase||"string"!=typeof t.password||null==t.wordlist?null:vd.fromPhrase(t.phrase,t.password,null,t.wordlist)}catch(t){console.log(t)}return null}(t);e&&(r=e.signingKey,n=e.mnemonic||null)}null==r&&(r=mp(t)),null==r&&Hf.throwArgumentError("invalid key","key","[ REDACTED ]"),super(r,e),pp.set(this,void 0),wp(this,pp,n,"f")}get mnemonic(){return gp(this,pp,"f")}connect(t){return new bp(this,t)}async encrypt(t,e,r){throw new Error("TODO")}encryptSync(t,e){throw new Error("TODO")}static async fromEncryptedJson(t,e,r){let n=null;if(up(t))n=await async function(t,e,r){const n=JSON.parse(t),s=op(e),i=fp(n);if("pbkdf2"===i.name){r&&(r(0),await dp(0));const{salt:t,count:e,dkLen:o,algorithm:a}=i,c=Cn(s,t,e,o,a);return r&&(r(1),await dp(0)),hp(n,c)}if("scrypt"===i.name){const{salt:t,N:e,r:o,p:a,dkLen:c}=i;return hp(n,await qn(s,t,e,o,a,c,r))}throw new Error("unreachable")}(t,e,r);else{if(!cp(t))return Hf.throwArgumentError("invalid JSON wallet","json","[ REDACTED ]");r&&(r(0),await yp(0)),n=lp(t,e),r&&(r(1),await yp(0))}const s=new bp(n.privateKey);return s.address!==n.address&&Hf.throwArgumentError("address/privateKey mismatch","json","[ REDACTED ]"),s}static fromEncryptedJsonSync(t,e){let r=null;if(up(t))r=function(t,e){const r=JSON.parse(t),n=op(e),s=fp(r);if("pbkdf2"===s.name){const{salt:t,count:e,dkLen:i,algorithm:o}=s;return hp(r,Cn(n,t,e,i,o))}if("scrypt"===s.name){const{salt:t,N:e,r:i,p:o,dkLen:a}=s;return hp(r,Xn(n,t,e,i,o,a))}throw new Error("unreachable")}(t,e);else{if(!cp(t))return Hf.throwArgumentError("invalid JSON wallet","json","[ REDACTED ]");r=lp(t,e)}const n=new bp(r.privateKey);return n.address!==r.address&&Hf.throwArgumentError("address/privateKey mismatch","json","[ REDACTED ]"),n}static createRandom(t,e,r){return new bp(ed.fromEntropy(Ln(16),e,r),t)}static fromMnemonic(t,e){return new bp(t,e)}static fromPhrase(t,e,r="",n){return new bp(ed.fromPhrase(t,r,n),e)}}pp=new WeakMap;const vp="ethers@6.0.0-beta.1";var Ep=Object.freeze({__proto__:null,Interface:Ao,getAddress:ds,getIcapAddress:ps,getCreateAddress:Ns,getCreate2Address:Ps,isAddressable:xs,isAddress:Os,resolveAddress:Is,arrayify:ie,decodeBase64:ae,encodeBase64:ce,isHexString:te,isBytesLike:ee,concat:fe,dataLength:de,dataSlice:pe,stripZerosLeft:we,hexlify:ue,quantity:he,zeroPadLeft:me,zeroPadRight:ye,BaseContract:xf,Contract:Of,ContractEventPayload:af,ContractTransactionReceipt:sf,ContractTransactionResponse:of,EventLog:nf,computeHmac:$r,keccak256:un,ripemd160:In,sha256:ns,sha512:ss,pbkdf2:Cn,scrypt:qn,scryptSync:Xn,randomBytes:Ln,lock:is,id:_i,isValidName:Ui,namehash:Li,dnsEncode:Di,messagePrefix:Mi,hashMessage:ji,TypedDataEncoder:ao,FixedFormat:zt,FixedNumber:Wt,formatFixed:Gt,parseFixed:$t,fromTwos:Ot,toTwos:It,mask:St,toArray:Nt,toBigInt:Tt,toHex:At,toNumber:kt,decodeBase58:Qt,encodeBase58:Zt,defineProperties:n,resolveProperties:e,getStore:c,setStore:l,AbstractProvider:tu,UnmanagedSubscriber:Xl,AbstractSigner:gu,VoidSigner:mu,WrappedSigner:yu,showThrottleMessage:vu,EnsResolver:ia,Formatter:Xc,NetworkPlugin:Yc,GasCostPlugin:Zc,EnsPlugin:Qc,MaxPriorityFeePlugin:tl,Network:Yh,Block:Uc,FeeData:Fc,Log:Lc,TransactionReceipt:Dc,TransactionResponse:Mc,dummyProvider:zc,FallbackProvider:xh,JsonRpcProvider:Vu,JsonRpcSigner:Wu,StaticJsonRpcProvider:Ku,AlchemyProvider:Qu,AnkrProvider:Yu,CloudflareProvider:th,EtherscanProvider:sh,InfuraProvider:oh,PocketProvider:lh,IpcSocketProvider:Zh,SocketProvider:Vh,WebSocketProvider:Xh,encodeRlp:bs,decodeRlp:As,Signature:va,SigningKey:wc,formatBytes32String:hi,parseBytes32String:fi,nameprep:ki,_toEscapedUtf8String:ai,toUtf8Bytes:ii,toUtf8CodePoints:ui,toUtf8String:li,get UnicodeNormalizationForm(){return t.UnicodeNormalizationForm},Utf8ErrorFuncs:ni,get Utf8ErrorReason(){return t.Utf8ErrorReason},Transaction:Oc,computeAddress:If,defaultPath:hd,getAccountPath:kd,HDNodeWallet:vd,HDNodeVoidWallet:Ed,HDNodeWalletManager:Td,Mnemonic:ed,Wallet:bp,fetchData:jo,FetchRequest:Uo,FetchResponse:So,Wordlist:Ff,WordlistOwl:zf,WordlistOwlA:Xf,wordlists:Vf,version:vp});t.AbstractProvider=tu,t.AbstractSigner=gu,t.AlchemyProvider=Qu,t.AnkrProvider=Yu,t.BaseContract=xf,t.Block=Uc,t.CloudflareProvider=th,t.Contract=Of,t.ContractEventPayload=af,t.ContractTransactionReceipt=sf,t.ContractTransactionResponse=of,t.EnsPlugin=Qc,t.EnsResolver=ia,t.EtherscanProvider=sh,t.EventLog=nf,t.FallbackProvider=xh,t.FeeData=Fc,t.FetchRequest=Uo,t.FetchResponse=So,t.FixedFormat=zt,t.FixedNumber=Wt,t.Formatter=Xc,t.GasCostPlugin=Zc,t.HDNodeVoidWallet=Ed,t.HDNodeWallet=vd,t.HDNodeWalletManager=Td,t.InfuraProvider=oh,t.Interface=Ao,t.IpcSocketProvider=Zh,t.JsonRpcProvider=Vu,t.JsonRpcSigner=Wu,t.Log=Lc,t.MaxPriorityFeePlugin=tl,t.Mnemonic=ed,t.Network=Yh,t.NetworkPlugin=Yc,t.PocketProvider=lh,t.Signature=va,t.SigningKey=wc,t.SocketProvider=Vh,t.StaticJsonRpcProvider=Ku,t.Transaction=Oc,t.TransactionReceipt=Dc,t.TransactionResponse=Mc,t.TypedDataEncoder=ao,t.UnmanagedSubscriber=Xl,t.Utf8ErrorFuncs=ni,t.VoidSigner=mu,t.Wallet=bp,t.WebSocketProvider=Xh,t.Wordlist=Ff,t.WordlistOwl=zf,t.WordlistOwlA=Xf,t.WrappedSigner=yu,t._toEscapedUtf8String=ai,t.arrayify=ie,t.computeAddress=If,t.computeHmac=$r,t.concat=fe,t.dataLength=de,t.dataSlice=pe,t.decodeBase58=Qt,t.decodeBase64=ae,t.decodeRlp=As,t.defaultPath=hd,t.defineProperties=n,t.dnsEncode=Di,t.dummyProvider=zc,t.encodeBase58=Zt,t.encodeBase64=ce,t.encodeRlp=bs,t.ethers=Ep,t.fetchData=jo,t.formatBytes32String=hi,t.formatFixed=Gt,t.fromTwos=Ot,t.getAccountPath=kd,t.getAddress=ds,t.getCreate2Address=Ps,t.getCreateAddress=Ns,t.getIcapAddress=ps,t.getStore=c,t.hashMessage=ji,t.hexlify=ue,t.id=_i,t.isAddress=Os,t.isAddressable=xs,t.isBytesLike=ee,t.isHexString=te,t.isValidName=Ui,t.keccak256=un,t.lock=is,t.mask=St,t.messagePrefix=Mi,t.namehash=Li,t.nameprep=ki,t.parseBytes32String=fi,t.parseFixed=$t,t.pbkdf2=Cn,t.quantity=he,t.randomBytes=Ln,t.resolveAddress=Is,t.resolveProperties=e,t.ripemd160=In,t.scrypt=qn,t.scryptSync=Xn,t.setStore=l,t.sha256=ns,t.sha512=ss,t.showThrottleMessage=vu,t.stripZerosLeft=we,t.toArray=Nt,t.toBigInt=Tt,t.toHex=At,t.toNumber=kt,t.toTwos=It,t.toUtf8Bytes=ii,t.toUtf8CodePoints=ui,t.toUtf8String=li,t.version=vp,t.wordlists=Vf,t.zeroPadLeft=me,t.zeroPadRight=ye,Object.defineProperty(t,"__esModule",{value:!0})})); +//# sourceMappingURL=ethers.umd.min.js.map diff --git a/packages/ethers/dist/ethers.umd.min.js.map b/packages/ethers/dist/ethers.umd.min.js.map new file mode 100644 index 000000000..a4ecc71b5 --- /dev/null +++ b/packages/ethers/dist/ethers.umd.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ethers.umd.min.js","sources":["../../properties/lib/properties.js","../../properties/lib/events.js","../../properties/lib/storage.js","../../logger/lib/errors.js","../../logger/lib/logger.js","../../logger/lib/_version.js","../../abi/lib/_version.js","../../abi/lib/logger.js","../../abi/lib/fragments.js","../../math/lib/_version.js","../../math/lib/logger.js","../../math/lib/convert.js","../../math/lib/maths.js","../../math/lib/fixednumber.js","../../math/lib/base58.js","../../bytes/lib/check.js","../../bytes/lib/_version.js","../../bytes/lib/logger.js","../../bytes/lib/array.js","../../bytes/lib/base64.js","../../bytes/lib/hex.js","../../bytes/lib/data.js","../../bytes/lib/pad.js","../../abi/lib/coders/abstract-coder.js","../../../node_modules/@noble/hashes/esm/utils.js","../../../node_modules/@noble/hashes/esm/hmac.js","../../../node_modules/@noble/hashes/esm/pbkdf2.js","../../../node_modules/@noble/hashes/esm/_sha2.js","../../../node_modules/@noble/hashes/esm/sha256.js","../../../node_modules/@noble/hashes/esm/_u64.js","../../../node_modules/@noble/hashes/esm/sha512.js","../../crypto/lib/_version.js","../../crypto/lib/logger.js","../../crypto/lib/crypto-browser.js","../../crypto/lib/hmac.js","../../../node_modules/@noble/hashes/esm/sha3.js","../../crypto/lib/keccak.js","../../../node_modules/@noble/hashes/esm/ripemd160.js","../../crypto/lib/ripemd160.js","../../crypto/lib/pbkdf2.js","../../crypto/lib/random.js","../../../node_modules/@noble/hashes/esm/scrypt.js","../../crypto/lib/scrypt.js","../../crypto/lib/sha2.js","../../crypto/lib/index.js","../../address/lib/_version.js","../../address/lib/logger.js","../../address/lib/address.js","../../rlp/lib/_version.js","../../rlp/lib/logger.js","../../rlp/lib/encode.js","../../rlp/lib/decode.js","../../address/lib/contract-address.js","../../address/lib/checks.js","../../abi/lib/typed.js","../../abi/lib/coders/address.js","../../abi/lib/coders/anonymous.js","../../abi/lib/coders/array.js","../../abi/lib/coders/boolean.js","../../abi/lib/coders/bytes.js","../../abi/lib/coders/fixed-bytes.js","../../abi/lib/coders/null.js","../../abi/lib/coders/number.js","../../strings/lib/_version.js","../../strings/lib/logger.js","../../strings/lib/utf8.js","../../strings/lib/bytes32.js","../../strings/lib/idna.js","../../abi/lib/coders/string.js","../../abi/lib/coders/tuple.js","../../abi/lib/abi-coder.js","../../hash/lib/id.js","../../hash/lib/_version.js","../../hash/lib/logger.js","../../hash/lib/namehash.js","../../hash/lib/message.js","../../hash/lib/typed-data.js","../../abi/lib/interface.js","../../web/lib/_version.js","../../web/lib/logger.js","../../web/lib/response.js","../../web/lib/get-url-browser.js","../../web/lib/request.js","../../web/lib/fetch-data.js","../../providers/lib/_version.js","../../providers/lib/logger.js","../../providers/lib/ens-resolver.js","../../signing-key/lib/_version.js","../../signing-key/lib/logger.js","../../signing-key/lib/signature.js","../../../node_modules/@noble/secp256k1/lib/esm/index.js","../../signing-key/lib/signing-key.js","../../transactions/lib/accesslist.js","../../transactions/lib/_version.js","../../transactions/lib/logger.js","../../transactions/lib/transaction.js","../../providers/lib/provider.js","../../providers/lib/formatter.js","../../providers/lib/plugins-network.js","../../providers/lib/network.js","../../providers/lib/subscriber-polling.js","../../providers/lib/abstract-provider.js","../../providers/lib/abstract-signer.js","../../providers/lib/community.js","../../providers/lib/subscriber-filterid.js","../../providers/lib/provider-jsonrpc.js","../../providers/lib/provider-ankr.js","../../providers/lib/provider-alchemy.js","../../providers/lib/provider-cloudflare.js","../../providers/lib/provider-etherscan.js","../../providers/lib/provider-infura.js","../../providers/lib/provider-pocket.js","../../providers/lib/provider-fallback.js","../../providers/lib/shuffle.js","../../providers/lib/ws-browser.js","../../providers/lib/provider-socket.js","../../providers/lib/provider-websocket.js","../../providers/lib/common-networks.js","../../providers/lib/provider-ipcsocket-browser.js","../../contract/lib/wrappers.js","../../contract/lib/_version.js","../../contract/lib/logger.js","../../contract/lib/contract.js","../../wallet/lib/address.js","../../wordlists/lib/decode-owl.js","../../wordlists/lib/_version.js","../../wordlists/lib/logger.js","../../wordlists/lib/wordlist.js","../../wordlists/lib/wordlist-owl.js","../../wordlists/lib/lang-en.js","../../wallet/lib/logger.js","../../wallet/lib/_version.js","../../wordlists/lib/wordlists-en.js","../../wordlists/lib/wordlist-owla.js","../../wordlists/lib/decode-owla.js","../../wordlists/lib/bit-reader.js","../../wallet/lib/mnemonic.js","../../wallet/lib/base-wallet.js","../../wallet/lib/hdwallet.js","../../../node_modules/aes-js/lib/aes.js","../../../node_modules/aes-js/lib/mode.js","../../../node_modules/aes-js/lib/mode-cbc.js","../../../node_modules/aes-js/lib/mode-cfb.js","../../../node_modules/aes-js/lib/mode-ctr.js","../../wallet/lib/utils.js","../../wallet/lib/json-crowdsale.js","../../../node_modules/aes-js/lib/padding.js","../../../node_modules/aes-js/lib/mode-ofb.js","../../wallet/lib/json-keystore.js","../../wallet/lib/wallet.js","../lib/_version.js"],"sourcesContent":["//import type { BigNumber, BigNumberish } from \"./big-number\";\n//import type { Bytes, BytesLike } from \"./bytes\";\n//import type { Signature, SignatureLike } from \"./signature\";\n/*\nexport type Loose = T extends BigNumber ? BigNumberish:\n T extends number ? BigNumberish:\n T extends Bytes ? BytesLike:\n T extends Signature ? SignatureLike:\n T;\nexport type LooseObject = { [P in keyof T]?: Loose; };\n*/\n//export type Deferrable = T | Promise;\n/*\nexport type DeferrableObject = {\n [ P in keyof T ]: Deferrable\n};\n*/\n/*\nexport type Frozen = Readonly<{\n [ P in keyof T ]: T[P] extends Freezable ? Frozen: T[P];\n}>;\n\nexport interface Freezable {\n clone(): T;\n freeze(): Frozen;\n isFrozen(): boolean;\n}\n*/\n/*\nconst _data: WeakMap = new WeakMap();\n\nexport class Data implements Freezable {\n #props: {\n data: Uint8Array\n };\n\n [ index: number ]: number;\n\n constructor(lengthOrData: number | Uint8Array) {\n if (typeof(lengthOrData) === \"number\") {\n _data[this] = new Uint8Array(lengthOrData);\n } else {\n _data[this] = lengthOrData;\n }\n\n return new Proxy(this, {\n get: (target, prop, receiver) => {\n const index = parseInt(String(prop));\n if (String(index) !== prop) { return Reflect.get(target, prop, receiver); }\n\n const data = _data[this];\n if (index < 0 || index > data.length || index % 1) {\n throw new Error(\"\");\n }\n return data[index];\n },\n\n set: (target, prop, value, receiver) => {\n const index = parseInt(String(prop));\n if (String(index) !== prop) { return false; }\n\n if (value < 0 || value > 255 || value % 1) { return false; }\n\n const data = _data[this];\n if (index < 0 || index > data.length || index % 1) {\n return false;\n }\n\n data[index] = value;\n\n return true;\n },\n });\n }\n\n toString(): string {\n return this.slice().toString();\n }\n\n slice(): Uint8Array {\n return _data.get(this).slice();\n }\n\n clone(): Data {\n return new Data(this.slice());\n }\n\n freeze(): Frozen {\n //Object.freeze(this.#props);\n return this;\n }\n\n isFrozen(): boolean {\n return Object.isFrozen(this.#props);\n }\n}\nconst d = new Data(4);\nconsole.log(d.toString());\nd[0] = 45;\nconsole.log(d.toString());\n*/\n/*\nexport type DeferrableObject = {\n [ P in keyof T ]: Deferrable\n};\n*/\nexport async function resolveProperties(value) {\n const keys = Object.keys(value);\n const results = await Promise.all(keys.map((k) => Promise.resolve(value[k])));\n return results.reduce((accum, v, index) => {\n accum[keys[index]] = v;\n return accum;\n }, {});\n}\nexport function defineReadOnly(object, name, value) {\n Object.defineProperty(object, name, {\n enumerable: true,\n value: value,\n writable: false,\n });\n}\n/*\nexport type IsCancelled = () => Promise;\n\nexport function createPromise(resolve: (isCancelled: IsCancelled, (result: T) => void) => void, reject: (error: Error) => void, isCancelled: IsCancelled): CancellablePromise {\n let cancelled = false;\n\n const promise = new Promise((resolve, reject) => {\n \n });\n\n (>promise).cancel = function() {\n cancelled = true;\n };\n\n return (>promise);\n}\n*/\n/*\nexport class A implements Freezable {\n foo: number;\n constructor(foo: number) {\n this.foo = foo;\n }\n freeze(): Frozen {\n Object.freeze(this);\n return this;\n }\n clone(): A {\n return new A(this.foo);\n }\n}\n\nexport class B implements Freezable {\n a: A;\n constructor(a: A) {\n this.a = a;\n }\n freeze(): Frozen {\n this.a.freeze();\n Object.freeze(this);\n return this;\n }\n clone(): B {\n return new B(this.a);\n }\n}\n\nexport function test() {\n const a = new A(123);\n const b = new B(a);\n b.a = new A(234);\n const b2 = b.freeze();\n b2.a.foo = 123; // = a;\n}\n*/\nfunction checkType(value, type) {\n const types = type.split(\"|\").map(t => t.trim());\n for (let i = 0; i < types.length; i++) {\n switch (type) {\n case \"any\":\n return;\n case \"boolean\":\n case \"number\":\n case \"string\":\n if (typeof (value) === type) {\n return;\n }\n }\n }\n throw new Error(\"invalid value for type\");\n}\nexport function defineProperties(target, values, types, defaults) {\n for (let key in values) {\n let value = values[key];\n const fallback = (defaults ? defaults[key] : undefined);\n if (fallback !== undefined) {\n value = fallback;\n }\n else {\n const type = (types ? types[key] : null);\n if (type) {\n checkType(value, type);\n }\n }\n Object.defineProperty(target, key, { enumerable: true, value, writable: false });\n }\n}\n//# sourceMappingURL=properties.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _EventPayload_listener;\nimport { defineProperties } from \"./properties.js\";\nexport class EventPayload {\n constructor(emitter, listener, filter) {\n _EventPayload_listener.set(this, void 0);\n __classPrivateFieldSet(this, _EventPayload_listener, listener, \"f\");\n defineProperties(this, { emitter, filter });\n }\n async removeListener() {\n if (__classPrivateFieldGet(this, _EventPayload_listener, \"f\") == null) {\n return;\n }\n await this.emitter.off(this.filter, __classPrivateFieldGet(this, _EventPayload_listener, \"f\"));\n }\n}\n_EventPayload_listener = new WeakMap();\n//# sourceMappingURL=events.js.map","export function getStore(store, key) {\n return store[key];\n}\nexport function setStore(store, key, value) {\n if (Object.isFrozen(store)) {\n throw new Error(\"frozen object is immuatable; cannot set \" + key);\n }\n store[key] = value;\n}\n//# sourceMappingURL=storage.js.map","//export type TransactionReceipt {\n//}\n/**\n * try {\n * // code....\n * } catch (e) {\n * if (isError(e, errors.CALL_EXCEPTION)) {\n * console.log(e.data);\n * }\n * }\n */\nexport function isError(error, code) {\n return (error && error.code === code);\n}\nexport function isCallException(error) {\n return isError(error, \"CALL_EXCEPTION\");\n}\n/*\nexport function isContractCallException(error: any): error is ContractCallExceptionError {\n return isError(error, \"CALL_EXCEPTION\") && (error).method;\n}\n*/\n//# sourceMappingURL=errors.js.map","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Logger_instances, _Logger_assertIntRange, _Logger_getBytes, _Logger_log;\nimport { version } from \"./_version.js\";\nexport var LogLevel;\n(function (LogLevel) {\n LogLevel[\"DEBUG\"] = \"DEBUG\";\n LogLevel[\"INFO\"] = \"INFO\";\n LogLevel[\"WARNING\"] = \"WARNING\";\n LogLevel[\"ERROR\"] = \"ERROR\";\n LogLevel[\"OFF\"] = \"OFF\";\n})(LogLevel || (LogLevel = {}));\n;\nconst LogLevels = { debug: 1, \"default\": 2, info: 2, warning: 3, error: 4, off: 5 };\nlet _logLevel = LogLevels[\"default\"];\nlet _globalLogger = null;\nconst _normalizeForms = [\"NFD\", \"NFC\", \"NFKD\", \"NFKC\"].reduce((accum, form) => {\n try {\n // General test for normalize\n /* c8 ignore start */\n if (\"test\".normalize(form) !== \"test\") {\n throw new Error(\"bad\");\n }\n ;\n /* c8 ignore stop */\n if (form === \"NFD\") {\n const check = String.fromCharCode(0xe9).normalize(\"NFD\");\n const expected = String.fromCharCode(0x65, 0x0301);\n /* c8 ignore start */\n if (check !== expected) {\n throw new Error(\"broken\");\n }\n /* c8 ignore stop */\n }\n accum.push(form);\n }\n catch (error) { }\n return accum;\n}, []);\nfunction defineReadOnly(object, name, value) {\n Object.defineProperty(object, name, {\n enumerable: true, writable: false, value,\n });\n}\n/*\nenum Censor {\n OFF = 0,\n ON = 1,\n PERMANENT = 2\n};\nlet _censor = Censor.OFF;\n*/\n// IEEE 754 support 53-bits of mantissa\nconst maxValue = 0x1fffffffffffff;\n// The type of error to use for various error codes\nconst ErrorConstructors = {};\nErrorConstructors.INVALID_ARGUMENT = TypeError;\nErrorConstructors.NUMERIC_FAULT = RangeError;\nErrorConstructors.BUFFER_OVERRUN = RangeError;\nexport class Logger {\n constructor(version) {\n _Logger_instances.add(this);\n defineReadOnly(this, \"version\", version || \"_\");\n }\n makeError(message, code, info) {\n // Errors are being censored\n //if (_censor === Censor.ON || _censor === Censor.PERMANENT) {\n // return this.makeError(\"censored error\", code, { });\n //}\n {\n const details = [];\n if (info) {\n for (const key in info) {\n const value = (info[key]);\n try {\n details.push(key + \"=\" + JSON.stringify(value));\n }\n catch (error) {\n details.push(key + \"=[could not serialize object]\");\n }\n }\n }\n details.push(`code=${code}`);\n details.push(`version=${this.version}`);\n if (details.length) {\n message += \" (\" + details.join(\", \") + \")\";\n }\n }\n const create = ErrorConstructors[code] || Error;\n const error = (new create(message));\n defineReadOnly(error, \"code\", code);\n if (info) {\n for (const key in info) {\n defineReadOnly(error, key, (info[key]));\n }\n }\n return error;\n }\n throwError(message, code, info) {\n throw this.makeError(message, code, info);\n }\n throwArgumentError(message, name, value) {\n return this.throwError(message, \"INVALID_ARGUMENT\", {\n argument: name,\n value: value\n });\n }\n assert(condition, message, code, info) {\n if (!!condition) {\n return;\n }\n this.throwError(message, code || \"UNKNOWN_ERROR\", info);\n }\n assertArgument(condition, message, name, value) {\n return this.assert(condition, message, \"INVALID_ARGUMENT\", {\n argument: name,\n value\n });\n }\n assertIntegerArgument(name, value, lower, upper) {\n let message = null;\n if (typeof (value) !== \"number\") {\n message = \"expected a number\";\n }\n else if (!Number.isInteger(value)) {\n message = \"invalid integer\";\n }\n else if ((lower != null && value < lower) || (upper != null && value > upper)) {\n message = \"value is out of range\";\n }\n if (message) {\n this.throwArgumentError(message, name, value);\n }\n }\n assertSafeUint53(value, message) {\n this.assertArgument((typeof (value) === \"number\"), \"invalid number\", \"value\", value);\n if (message == null) {\n message = \"value not safe\";\n }\n const operation = \"assertSafeInteger\";\n this.assert((value >= 0 && value < 0x1fffffffffffff), message, \"NUMERIC_FAULT\", {\n operation, fault: \"out-of-safe-range\", value\n });\n this.assert((value % 1) === 0, message, \"NUMERIC_FAULT\", {\n operation, fault: \"non-integer\", value\n });\n }\n assertNormalize(form) {\n if (_normalizeForms.indexOf(form) === -1) {\n this.throwError(\"platform missing String.prototype.normalize\", \"UNSUPPORTED_OPERATION\", {\n operation: \"String.prototype.normalize\", info: { form }\n });\n }\n }\n assertPrivate(givenGuard, guard, className = \"\") {\n if (givenGuard !== guard) {\n let method = className, operation = \"new\";\n if (className) {\n method += \".\";\n operation += \" \" + className;\n }\n this.throwError(`private constructor; use ${method}from* methods`, \"UNSUPPORTED_OPERATION\", {\n operation\n });\n }\n }\n assertArgumentCount(count, expectedCount, message = \"\") {\n if (message) {\n message = \": \" + message;\n }\n this.assert((count >= expectedCount), \"missing arguemnt\" + message, \"MISSING_ARGUMENT\", {\n count: count,\n expectedCount: expectedCount\n });\n this.assert((count >= expectedCount), \"too many arguemnts\" + message, \"UNEXPECTED_ARGUMENT\", {\n count: count,\n expectedCount: expectedCount\n });\n }\n assertInt53(value, operation) {\n __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_assertIntRange).call(this, \"Int53\", value, operation || \"unknown\", -maxValue);\n }\n assertUint53(value, operation) {\n __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_assertIntRange).call(this, \"Int53\", value, operation || \"unknown\", 0);\n }\n assertInteger(value, operation = \"unknown\", min = 0, max = maxValue) {\n //this.#assertIntRange(\"Int53\", value, operation || \"unknown\", 0);\n }\n getBytes(value, name) {\n return __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_getBytes).call(this, value, name, false);\n }\n getBytesCopy(value, name) {\n return __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_getBytes).call(this, value, name, true);\n }\n getNumber(value, name) {\n switch (typeof (value)) {\n case \"bigint\":\n if (value < -maxValue || value > maxValue) {\n this.throwArgumentError(\"overflow\", name || \"value\", value);\n }\n return Number(value);\n case \"number\":\n if (!Number.isInteger(value)) {\n this.throwArgumentError(\"underflow\", name || \"value\", value);\n }\n else if (value < -maxValue || value > maxValue) {\n this.throwArgumentError(\"overflow\", name || \"value\", value);\n }\n return value;\n case \"string\":\n try {\n return this.getNumber(BigInt(value), name);\n }\n catch (e) {\n this.throwArgumentError(`invalid numeric string: ${e.message}`, name || \"value\", value);\n }\n }\n return this.throwArgumentError(\"invalid numeric value\", name || \"value\", value);\n }\n getBigInt(value, name) {\n switch (typeof (value)) {\n case \"bigint\": return value;\n case \"number\":\n if (!Number.isInteger(value)) {\n this.throwArgumentError(\"underflow\", name || \"value\", value);\n }\n else if (value < -maxValue || value > maxValue) {\n this.throwArgumentError(\"overflow\", name || \"value\", value);\n }\n return BigInt(value);\n case \"string\":\n try {\n return BigInt(value);\n }\n catch (e) {\n this.throwArgumentError(`invalid BigNumberish string: ${e.message}`, name || \"value\", value);\n }\n }\n return this.throwArgumentError(\"invalid BigNumberish value\", name || \"value\", value);\n }\n debug(...args) {\n __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_log).call(this, LogLevel.DEBUG, args);\n }\n info(...args) {\n __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_log).call(this, LogLevel.INFO, args);\n }\n warn(...args) {\n __classPrivateFieldGet(this, _Logger_instances, \"m\", _Logger_log).call(this, LogLevel.WARNING, args);\n }\n static globalLogger() {\n if (!_globalLogger) {\n _globalLogger = new Logger(version);\n }\n return _globalLogger;\n }\n static setLogLevel(logLevel) {\n const level = LogLevels[logLevel.toLowerCase()];\n if (level == null) {\n Logger.globalLogger().warn(\"invalid log level - \" + logLevel);\n return;\n }\n _logLevel = level;\n }\n}\n_Logger_instances = new WeakSet(), _Logger_assertIntRange = function _Logger_assertIntRange(name, value, operation, minValue) {\n if (typeof (value) !== \"number\" || isNaN(value)) {\n this.throwArgumentError(`invalid ${name}`, \"INVALID_ARGUMENT\", {\n name: \"value\", value\n });\n }\n let message = `invalid ${name} value`;\n let fault = null;\n if (isNaN(value)) {\n fault = \"not-a-number\";\n }\n else if (value < minValue || value > maxValue) {\n message = `unsafe ${name} value`;\n fault = \"overflow\";\n }\n else if (Math.floor(value) !== value) {\n fault = \"underflow\";\n }\n if (fault) {\n this.throwError(message, \"NUMERIC_FAULT\", {\n operation, fault, value\n });\n }\n}, _Logger_getBytes = function _Logger_getBytes(value, name, copy) {\n if (value instanceof Uint8Array) {\n if (copy) {\n return new Uint8Array(value);\n }\n return value;\n }\n if (typeof (value) === \"string\" && value.match(/^0x([0-9a-f][0-9a-f])*$/i)) {\n const result = new Uint8Array((value.length - 2) / 2);\n let offset = 2;\n for (let i = 0; i < result.length; i++) {\n result[i] = parseInt(value.substring(offset, offset + 2), 16);\n offset += 2;\n }\n return result;\n }\n return this.throwArgumentError(\"invalid BytesLike value\", name || \"value\", value);\n}, _Logger_log = function _Logger_log(logLevel, args) {\n const level = logLevel.toLowerCase();\n if (LogLevels[level] == null) {\n this.throwArgumentError(\"invalid log level name\", \"logLevel\", logLevel);\n }\n if (_logLevel > LogLevels[level]) {\n return;\n }\n console.log.apply(console, args);\n};\n//static readonly Errors = ErrorCode;\nLogger.LogLevels = LogLevel;\n//const l = new Logger();\n//l.makeError(\"foo\", Logger.Errors.NUMERIC_FAULT, { fault: \"foo\", operation: \"bar\", value: 3 });\n//l.makeError(\"foo\", Logger.Errors.UNPREDICTABLE_GAS_LIMIT, { transaction: null });\n//l.makeError(\"foo\", ErrorCode.NUMERIC_FAULT, { fault: \"foo\", operation: \"bar\" });\n//l.makeError(\"foo\", ErrorCode.NUMERIC_FAULT, { fault: \"foo\", operation: \"bar\", gii: \"5\" });\n//console.log(LogLevel);\n//# sourceMappingURL=logger.js.map","export const version = \"@ethersproject/logger@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","export const version = \"@ethersproject/abi@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _TokenString_instances, _TokenString_offset, _TokenString_tokens, _TokenString_subTokenString, _ParamType_instances, _ParamType_walkAsync;\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { logger } from \"./logger.js\";\n;\nexport var FormatType;\n(function (FormatType) {\n // Bare formatting, as is needed for computing a sighash of an event or function\n FormatType[\"sighash\"] = \"sighash\";\n // Human-Readable with Minimal spacing and without names (compact human-readable)\n FormatType[\"minimal\"] = \"minimal\";\n // Human-Readable with nice spacing, including all names\n FormatType[\"full\"] = \"full\";\n // JSON-format a la Solidity\n FormatType[\"json\"] = \"json\";\n})(FormatType || (FormatType = {}));\n;\n// [ \"a\", \"b\" ] => { \"a\": 1, \"b\": 1 }\nfunction setify(items) {\n const result = new Set();\n items.forEach((k) => result.add(k));\n return Object.freeze(result);\n}\n// Visibility Keywords\nconst _kwVisib = \"constant external internal payable private public pure view\";\nconst KwVisib = setify(_kwVisib.split(\" \"));\nconst _kwTypes = \"constructor error event function struct\";\nconst KwTypes = setify(_kwTypes.split(\" \"));\nconst _kwModifiers = \"calldata memory storage payable indexed\";\nconst KwModifiers = setify(_kwModifiers.split(\" \"));\nconst _kwOther = \"tuple returns\";\n// All Keywords\nconst _keywords = [_kwTypes, _kwModifiers, _kwOther, _kwVisib].join(\" \");\nconst Keywords = setify(_keywords.split(\" \"));\n// Single character tokens\nconst SimpleTokens = {\n \"(\": \"OPEN_PAREN\", \")\": \"CLOSE_PAREN\",\n \"[\": \"OPEN_BRACKET\", \"]\": \"CLOSE_BRACKET\",\n \",\": \"COMMA\", \"@\": \"AT\"\n};\n// Parser regexes to consume the next token\nconst regexWhitespace = new RegExp(\"^(\\\\s*)\");\nconst regexNumber = new RegExp(\"^([0-9]+)\");\nconst regexIdentifier = new RegExp(\"^([a-zA-Z$_][a-zA-Z0-9$_]*)\");\nconst regexType = new RegExp(\"^(address|bool|bytes(0-9*)|string|u?int([0-9]*))\");\nexport class TokenString {\n constructor(tokens) {\n _TokenString_instances.add(this);\n _TokenString_offset.set(this, void 0);\n _TokenString_tokens.set(this, void 0);\n __classPrivateFieldSet(this, _TokenString_offset, 0, \"f\");\n __classPrivateFieldSet(this, _TokenString_tokens, tokens.slice(), \"f\");\n }\n get offset() { return __classPrivateFieldGet(this, _TokenString_offset, \"f\"); }\n get length() { return __classPrivateFieldGet(this, _TokenString_tokens, \"f\").length - __classPrivateFieldGet(this, _TokenString_offset, \"f\"); }\n clone() { return new TokenString(__classPrivateFieldGet(this, _TokenString_tokens, \"f\")); }\n reset() { __classPrivateFieldSet(this, _TokenString_offset, 0, \"f\"); }\n // Pops and returns the value of the next token, if it is a keyword in allowed; throws if out of tokens\n popKeyword(allowed) {\n const top = this.peek();\n if (top.type !== \"KEYWORD\" || !allowed.has(top.text)) {\n throw new Error(`expected keyword ${top.text}`);\n }\n return this.pop().text;\n }\n // Pops and returns the value of the next token if it is `type`; throws if out of tokens\n popType(type) {\n if (this.peek().type !== type) {\n throw new Error(`expected ${type}; got ${JSON.stringify(this.peek())}`);\n }\n return this.pop().text;\n }\n // Pops and returns a \"(\" TOKENS \")\"\n popParen() {\n const top = this.peek();\n if (top.type !== \"OPEN_PAREN\") {\n throw new Error(\"bad start\");\n }\n const result = __classPrivateFieldGet(this, _TokenString_instances, \"m\", _TokenString_subTokenString).call(this, __classPrivateFieldGet(this, _TokenString_offset, \"f\") + 1, top.match + 1);\n __classPrivateFieldSet(this, _TokenString_offset, top.match + 1, \"f\");\n return result;\n }\n // Pops and returns the items within \"(\" ITEM1 \",\" ITEM2 \",\" ... \")\"\n popParams() {\n const top = this.peek();\n if (top.type !== \"OPEN_PAREN\") {\n throw new Error(\"bad start\");\n }\n const result = [];\n while (__classPrivateFieldGet(this, _TokenString_offset, \"f\") < top.match - 1) {\n const link = this.peek().linkNext;\n result.push(__classPrivateFieldGet(this, _TokenString_instances, \"m\", _TokenString_subTokenString).call(this, __classPrivateFieldGet(this, _TokenString_offset, \"f\") + 1, link));\n __classPrivateFieldSet(this, _TokenString_offset, link, \"f\");\n }\n __classPrivateFieldSet(this, _TokenString_offset, top.match + 1, \"f\");\n return result;\n }\n // Returns the top Token, throwing if out of tokens\n peek() {\n if (__classPrivateFieldGet(this, _TokenString_offset, \"f\") >= __classPrivateFieldGet(this, _TokenString_tokens, \"f\").length) {\n throw new Error(\"out-of-bounds\");\n }\n return __classPrivateFieldGet(this, _TokenString_tokens, \"f\")[__classPrivateFieldGet(this, _TokenString_offset, \"f\")];\n }\n // Returns the next value, if it is a keyword in `allowed`\n peekKeyword(allowed) {\n const top = this.peekType(\"KEYWORD\");\n return (top != null && allowed.has(top)) ? top : null;\n }\n // Returns the value of the next token if it is `type`\n peekType(type) {\n if (this.length === 0) {\n return null;\n }\n const top = this.peek();\n return (top.type === type) ? top.text : null;\n }\n // Returns the next token; throws if out of tokens\n pop() {\n var _a;\n const result = this.peek();\n __classPrivateFieldSet(this, _TokenString_offset, (_a = __classPrivateFieldGet(this, _TokenString_offset, \"f\"), _a++, _a), \"f\");\n return result;\n }\n toString() {\n const tokens = [];\n for (let i = __classPrivateFieldGet(this, _TokenString_offset, \"f\"); i < __classPrivateFieldGet(this, _TokenString_tokens, \"f\").length; i++) {\n const token = __classPrivateFieldGet(this, _TokenString_tokens, \"f\")[i];\n tokens.push(`${token.type}:${token.text}`);\n }\n return ``;\n }\n}\n_TokenString_offset = new WeakMap(), _TokenString_tokens = new WeakMap(), _TokenString_instances = new WeakSet(), _TokenString_subTokenString = function _TokenString_subTokenString(from = 0, to = 0) {\n return new TokenString(__classPrivateFieldGet(this, _TokenString_tokens, \"f\").slice(from, to).map((t) => {\n return Object.freeze(Object.assign({}, t, {\n match: (t.match - from),\n linkBack: (t.linkBack - from),\n linkNext: (t.linkNext - from),\n }));\n return t;\n }));\n};\nexport function lex(text) {\n const tokens = [];\n const throwError = (message) => {\n const token = (offset < text.length) ? JSON.stringify(text[offset]) : \"$EOI\";\n throw new Error(`invalid token ${token} at ${offset}: ${message}`);\n };\n let brackets = [];\n let commas = [];\n let offset = 0;\n while (offset < text.length) {\n // Strip off any leading whitespace\n let cur = text.substring(offset);\n let match = cur.match(regexWhitespace);\n if (match) {\n offset += match[1].length;\n cur = text.substring(offset);\n }\n const token = { depth: brackets.length, linkBack: -1, linkNext: -1, match: -1, type: \"\", text: \"\", offset, value: -1 };\n tokens.push(token);\n let type = (SimpleTokens[cur[0]] || \"\");\n if (type) {\n token.type = type;\n token.text = cur[0];\n offset++;\n if (type === \"OPEN_PAREN\") {\n brackets.push(tokens.length - 1);\n commas.push(tokens.length - 1);\n }\n else if (type == \"CLOSE_PAREN\") {\n if (brackets.length === 0) {\n throwError(\"no matching open bracket\");\n }\n token.match = brackets.pop();\n (tokens[token.match]).match = tokens.length - 1;\n token.depth--;\n token.linkBack = commas.pop();\n (tokens[token.linkBack]).linkNext = tokens.length - 1;\n }\n else if (type === \"COMMA\") {\n token.linkBack = commas.pop();\n (tokens[token.linkBack]).linkNext = tokens.length - 1;\n commas.push(tokens.length - 1);\n }\n else if (type === \"OPEN_BRACKET\") {\n token.type = \"BRACKET\";\n }\n else if (type === \"CLOSE_BRACKET\") {\n // Remove the CLOSE_BRACKET\n let suffix = tokens.pop().text;\n if (tokens.length > 0 && tokens[tokens.length - 1].type === \"NUMBER\") {\n const value = tokens.pop().text;\n suffix = value + suffix;\n (tokens[tokens.length - 1]).value = logger.getNumber(value);\n }\n if (tokens.length === 0 || tokens[tokens.length - 1].type !== \"BRACKET\") {\n throw new Error(\"missing opening bracket\");\n }\n (tokens[tokens.length - 1]).text += suffix;\n }\n continue;\n }\n match = cur.match(regexIdentifier);\n if (match) {\n token.text = match[1];\n offset += token.text.length;\n if (Keywords.has(token.text)) {\n token.type = \"KEYWORD\";\n continue;\n }\n if (token.text.match(regexType)) {\n token.type = \"TYPE\";\n continue;\n }\n token.type = \"ID\";\n continue;\n }\n match = cur.match(regexNumber);\n if (match) {\n token.text = match[1];\n token.type = \"NUMBER\";\n offset += token.text.length;\n continue;\n }\n throw new Error(`unexpected token ${JSON.stringify(cur[0])} at position ${offset}`);\n }\n return new TokenString(tokens.map((t) => Object.freeze(t)));\n}\n// Check only one of `allowed` is in `set`\nfunction allowSingle(set, allowed) {\n let included = [];\n for (const key in allowed.keys()) {\n if (set.has(key)) {\n included.push(key);\n }\n }\n if (included.length > 1) {\n throw new Error(`conflicting types: ${included.join(\", \")}`);\n }\n}\n// Functions to process a Solidity Signature TokenString from left-to-right for...\n// ...the name with an optional type, returning the name\nfunction consumeName(type, tokens) {\n if (tokens.peekKeyword(KwTypes)) {\n const keyword = tokens.pop().text;\n if (keyword !== type) {\n throw new Error(`expected ${type}, got ${keyword}`);\n }\n }\n return tokens.popType(\"ID\");\n}\n// ...all keywords matching allowed, returning the keywords\nfunction consumeKeywords(tokens, allowed) {\n const keywords = new Set();\n while (true) {\n const keyword = tokens.peekType(\"KEYWORD\");\n if (keyword == null || (allowed && !allowed.has(keyword))) {\n break;\n }\n tokens.pop();\n if (keywords.has(keyword)) {\n throw new Error(`duplicate keywords: ${JSON.stringify(keyword)}`);\n }\n keywords.add(keyword);\n }\n return Object.freeze(keywords);\n}\n// ...all visibility keywords, returning the coalesced mutability\nfunction consumeMutability(tokens) {\n let modifiers = consumeKeywords(tokens, KwVisib);\n // Detect conflicting modifiers\n allowSingle(modifiers, setify(\"constant payable nonpayable\".split(\" \")));\n allowSingle(modifiers, setify(\"pure view payable nonpayable\".split(\" \")));\n // Process mutability states\n if (modifiers.has(\"view\")) {\n return \"view\";\n }\n if (modifiers.has(\"pure\")) {\n return \"pure\";\n }\n if (modifiers.has(\"payable\")) {\n return \"payable\";\n }\n if (modifiers.has(\"nonpayable\")) {\n return \"nonpayable\";\n }\n // Process legacy `constant` last\n if (modifiers.has(\"constant\")) {\n return \"view\";\n }\n return \"nonpayable\";\n}\n// ...a parameter list, returning the ParamType list\nfunction consumeParams(tokens, allowIndexed) {\n return tokens.popParams().map((t) => ParamType.fromTokens(t, allowIndexed));\n}\n// ...a gas limit, returning a BigNumber or null if none\nfunction consumeGas(tokens) {\n if (tokens.peekType(\"AT\")) {\n tokens.pop();\n if (tokens.peekType(\"NUMBER\")) {\n return logger.getBigInt(tokens.pop().text);\n }\n throw new Error(\"invalid gas\");\n }\n return null;\n}\nfunction consumeEoi(tokens) {\n if (tokens.length) {\n throw new Error(`unexpected tokens: ${tokens.toString()}`);\n }\n}\nconst regexArrayType = new RegExp(/^(.*)\\[([0-9]*)\\]$/);\nfunction verifyBasicType(type) {\n const match = type.match(regexType);\n if (!match) {\n return logger.throwArgumentError(\"invalid type\", \"type\", type);\n }\n if (type === \"uint\") {\n return \"uint256\";\n }\n if (type === \"int\") {\n return \"int256\";\n }\n if (match[2]) {\n // bytesXX\n const length = parseInt(match[2]);\n if (length === 0 || length > 32) {\n logger.throwArgumentError(\"invalid bytes length\", \"type\", type);\n }\n }\n else if (match[3]) {\n // intXX or uintXX\n const size = parseInt(match[3]);\n if (size === 0 || size > 256 || size % 8) {\n logger.throwArgumentError(\"invalid numeric width\", \"type\", type);\n }\n }\n return type;\n}\n// Make the Fragment constructors effectively private\nconst _guard = {};\nconst internal = Symbol.for(\"_ethers_internal\");\nconst ParamTypeInternal = \"_ParamTypeInternal\";\nexport class ParamType {\n constructor(guard, name, type, baseType, indexed, components, arrayLength, arrayChildren) {\n _ParamType_instances.add(this);\n logger.assertPrivate(guard, _guard, \"ParamType\");\n Object.defineProperty(this, internal, { value: ParamTypeInternal });\n if (components) {\n components = Object.freeze(components.slice());\n }\n if (baseType === \"array\") {\n if (arrayLength == null || arrayChildren == null) {\n throw new Error(\"\");\n }\n }\n else if (arrayLength != null || arrayChildren != null) {\n throw new Error(\"\");\n }\n if (baseType === \"tuple\") {\n if (components == null) {\n throw new Error(\"\");\n }\n }\n else if (components != null) {\n throw new Error(\"\");\n }\n defineProperties(this, {\n name, type, baseType, indexed, components, arrayLength, arrayChildren\n });\n }\n // Format the parameter fragment\n // - sighash: \"(uint256,address)\"\n // - minimal: \"tuple(uint256,address) indexed\"\n // - full: \"tuple(uint256 foo, address bar) indexed baz\"\n format(format = FormatType.sighash) {\n if (!FormatType[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatType.json) {\n let result = {\n type: ((this.baseType === \"tuple\") ? \"tuple\" : this.type),\n name: (this.name || undefined)\n };\n if (typeof (this.indexed) === \"boolean\") {\n result.indexed = this.indexed;\n }\n if (this.isTuple()) {\n result.components = this.components.map((c) => JSON.parse(c.format(format)));\n }\n return JSON.stringify(result);\n }\n let result = \"\";\n // Array\n if (this.isArray()) {\n result += this.arrayChildren.format(format);\n result += `[${(this.arrayLength < 0 ? \"\" : String(this.arrayLength))}]`;\n }\n else {\n if (this.isTuple()) {\n if (format !== FormatType.sighash) {\n result += this.type;\n }\n result += \"(\" + this.components.map((comp) => comp.format(format)).join((format === FormatType.full) ? \", \" : \",\") + \")\";\n }\n else {\n result += this.type;\n }\n }\n if (format !== FormatType.sighash) {\n if (this.indexed === true) {\n result += \" indexed\";\n }\n if (format === FormatType.full && this.name) {\n result += \" \" + this.name;\n }\n }\n return result;\n }\n static isArray(value) {\n return value && (value.baseType === \"array\");\n }\n isArray() {\n return (this.baseType === \"array\");\n }\n isTuple() {\n return (this.baseType === \"tuple\");\n }\n isIndexable() {\n return (this.indexed != null);\n }\n walk(value, process) {\n if (this.isArray()) {\n if (!Array.isArray(value)) {\n throw new Error(\"invlaid array value\");\n }\n if (this.arrayLength !== -1 && value.length !== this.arrayLength) {\n throw new Error(\"array is wrong length\");\n }\n return value.map((v) => (this.arrayChildren.walk(v, process)));\n }\n if (this.isTuple()) {\n if (!Array.isArray(value)) {\n throw new Error(\"invlaid tuple value\");\n }\n if (value.length !== this.components.length) {\n throw new Error(\"array is wrong length\");\n }\n return value.map((v, i) => (this.components[i].walk(v, process)));\n }\n return process(this.type, value);\n }\n async walkAsync(value, process) {\n const promises = [];\n const result = [value];\n __classPrivateFieldGet(this, _ParamType_instances, \"m\", _ParamType_walkAsync).call(this, promises, value, process, (value) => {\n result[0] = value;\n });\n if (promises.length) {\n await Promise.all(promises);\n }\n return result[0];\n }\n static from(obj, allowIndexed) {\n if (ParamType.isParamType(obj)) {\n return obj;\n }\n if (typeof (obj) === \"string\") {\n return ParamType.fromTokens(lex(obj), allowIndexed);\n }\n if (obj instanceof TokenString) {\n return ParamType.fromTokens(obj, allowIndexed);\n }\n const name = obj.name;\n if (name && (typeof (name) !== \"string\" || !name.match(regexIdentifier))) {\n logger.throwArgumentError(\"invalid name\", \"obj.name\", name);\n }\n let indexed = obj.indexed;\n if (indexed != null) {\n if (!allowIndexed) {\n logger.throwArgumentError(\"parameter cannot be indexed\", \"obj.indexed\", obj.indexed);\n }\n indexed = !!indexed;\n }\n let type = obj.type;\n let arrayMatch = type.match(regexArrayType);\n if (arrayMatch) {\n const arrayLength = arrayMatch[2];\n const arrayChildren = ParamType.from({\n type: arrayMatch[1],\n components: obj.components\n });\n return new ParamType(_guard, name, type, \"array\", indexed, null, arrayLength, arrayChildren);\n }\n if (type.substring(0, 5) === \"tuple(\" || type[0] === \"(\") {\n const comps = (obj.components != null) ? obj.components.map((c) => ParamType.from(c)) : null;\n const tuple = new ParamType(_guard, name, type, \"tuple\", indexed, comps, null, null);\n // @TODO: use lexer to validate and normalize type\n return tuple;\n }\n type = verifyBasicType(obj.type);\n return new ParamType(_guard, name, type, type, indexed, null, null, null);\n }\n static fromObject(obj, allowIndexed) {\n throw new Error(\"@TODO\");\n }\n static fromTokens(tokens, allowIndexed) {\n let type = \"\", baseType = \"\";\n let comps = null;\n if (consumeKeywords(tokens, setify([\"tuple\"])).has(\"tuple\") || tokens.peekType(\"OPEN_PAREN\")) {\n // Tuple\n baseType = \"tuple\";\n comps = tokens.popParams().map((t) => ParamType.from(t));\n type = `tuple(${comps.map((c) => c.format()).join(\",\")})`;\n }\n else {\n // Normal\n type = verifyBasicType(tokens.popType(\"TYPE\"));\n baseType = type;\n }\n // Check for Array\n let arrayChildren = null;\n let arrayLength = null;\n while (tokens.length && tokens.peekType(\"BRACKET\")) {\n const bracket = tokens.pop(); //arrays[i];\n arrayChildren = new ParamType(_guard, \"\", type, baseType, null, comps, arrayLength, arrayChildren);\n arrayLength = bracket.value;\n type += bracket.text;\n baseType = \"array\";\n comps = null;\n }\n let indexed = null;\n const keywords = consumeKeywords(tokens, KwModifiers);\n if (keywords.has(\"indexed\")) {\n if (!allowIndexed) {\n throw new Error(\"\");\n }\n indexed = true;\n }\n const name = (tokens.peekType(\"ID\") ? tokens.pop().text : \"\");\n if (tokens.length) {\n throw new Error(\"leftover tokens\");\n }\n return new ParamType(_guard, name, type, baseType, indexed, comps, arrayLength, arrayChildren);\n }\n static isParamType(value) {\n return (value && value[internal] === ParamTypeInternal);\n }\n}\n_ParamType_instances = new WeakSet(), _ParamType_walkAsync = function _ParamType_walkAsync(promises, value, process, setValue) {\n if (this.isArray()) {\n if (!Array.isArray(value)) {\n throw new Error(\"invlaid array value\");\n }\n if (this.arrayLength !== -1 && value.length !== this.arrayLength) {\n throw new Error(\"array is wrong length\");\n }\n const childType = this.arrayChildren;\n const result = value.slice();\n result.forEach((value, index) => {\n __classPrivateFieldGet(childType, _ParamType_instances, \"m\", _ParamType_walkAsync).call(childType, promises, value, process, (value) => {\n result[index] = value;\n });\n });\n setValue(result);\n return;\n }\n if (this.isTuple()) {\n const components = this.components;\n // Convert the object into an array\n let result;\n if (Array.isArray(value)) {\n result = value.slice();\n }\n else {\n if (value == null || typeof (value) !== \"object\") {\n throw new Error(\"invlaid tuple value\");\n }\n result = components.map((param) => {\n if (!param.name) {\n throw new Error(\"cannot use object value with unnamed components\");\n }\n if (!(param.name in value)) {\n throw new Error(`missing value for component ${param.name}`);\n }\n return value[param.name];\n });\n }\n if (value.length !== this.components.length) {\n throw new Error(\"array is wrong length\");\n }\n result.forEach((value, index) => {\n var _a;\n __classPrivateFieldGet((_a = components[index]), _ParamType_instances, \"m\", _ParamType_walkAsync).call(_a, promises, value, process, (value) => {\n result[index] = value;\n });\n });\n setValue(result);\n return;\n }\n const result = process(this.type, value);\n if (result.then) {\n promises.push((async function () { setValue(await result); })());\n }\n else {\n setValue(result);\n }\n};\nexport var FragmentType;\n(function (FragmentType) {\n FragmentType[\"constructor\"] = \"constructor\";\n FragmentType[\"error\"] = \"error\";\n FragmentType[\"event\"] = \"event\";\n FragmentType[\"function\"] = \"function\";\n FragmentType[\"struct\"] = \"struct\";\n})(FragmentType || (FragmentType = {}));\n;\nexport class Fragment {\n constructor(guard, type, inputs) {\n logger.assertPrivate(guard, _guard, \"Fragment\");\n inputs = Object.freeze(inputs.slice());\n defineProperties(this, { type, inputs });\n }\n static from(obj) {\n if (typeof (obj) === \"string\") {\n return this.fromString(obj);\n }\n if (obj instanceof TokenString) {\n return this.fromTokens(obj);\n }\n if (typeof (obj) === \"object\") {\n return this.fromObject(obj);\n }\n throw new Error(`unsupported type: ${obj}`);\n }\n static fromObject(obj) {\n switch (obj.type) {\n case \"constructor\": return ConstructorFragment.fromObject(obj);\n case \"error\": return ErrorFragment.fromObject(obj);\n case \"event\": return EventFragment.fromObject(obj);\n case \"function\": return FunctionFragment.fromObject(obj);\n case \"struct\": return StructFragment.fromObject(obj);\n }\n throw new Error(\"not implemented yet\");\n }\n static fromString(text) {\n try {\n Fragment.from(JSON.parse(text));\n }\n catch (e) { }\n return Fragment.fromTokens(lex(text));\n }\n static fromTokens(tokens) {\n const type = tokens.popKeyword(KwTypes);\n switch (type) {\n case \"constructor\": return ConstructorFragment.fromTokens(tokens);\n case \"error\": return ErrorFragment.fromTokens(tokens);\n case \"event\": return EventFragment.fromTokens(tokens);\n case \"function\": return FunctionFragment.fromTokens(tokens);\n case \"struct\": return StructFragment.fromTokens(tokens);\n }\n throw new Error(`unsupported type: ${type}`);\n }\n /*\n static fromTokens(tokens: TokenString): Fragment {\n const assertDone = () => {\n if (tokens.length) { throw new Error(`unexpected tokens: ${ tokens.toString() }`); }\n });\n\n const type = (tokens.length && tokens.peek().type === \"KEYWORD\") ? tokens.peek().text: \"unknown\";\n\n const name = consumeName(\"error\", tokens);\n const inputs = consumeParams(tokens, type === \"event\");\n\n switch (type) {\n case \"event\": case \"struct\":\n assertDone();\n }\n\n }\n */\n static isConstructor(value) {\n return (value && value.type === \"constructor\");\n }\n static isError(value) {\n return (value && value.type === \"error\");\n }\n static isEvent(value) {\n return (value && value.type === \"event\");\n }\n static isFunction(value) {\n return (value && value.type === \"function\");\n }\n static isStruct(value) {\n return (value && value.type === \"struct\");\n }\n}\nexport class NamedFragment extends Fragment {\n constructor(guard, type, name, inputs) {\n super(guard, type, inputs);\n inputs = Object.freeze(inputs.slice());\n defineProperties(this, { name });\n }\n}\nfunction joinParams(format, params) {\n return \"(\" + params.map((p) => p.format(format)).join((format === FormatType.full) ? \", \" : \",\") + \")\";\n}\nexport class ErrorFragment extends NamedFragment {\n constructor(guard, name, inputs) {\n super(guard, FragmentType.error, name, inputs);\n }\n format(format = FormatType.sighash) {\n if (!FormatType[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatType.json) {\n return JSON.stringify({\n type: \"error\",\n name: this.name,\n inputs: this.inputs.map((input) => JSON.parse(input.format(format))),\n });\n }\n const result = [];\n if (format !== FormatType.sighash) {\n result.push(\"error\");\n }\n result.push(this.name + joinParams(format, this.inputs));\n return result.join(\" \");\n }\n static fromString(text) {\n return ErrorFragment.fromTokens(lex(text));\n }\n static fromTokens(tokens) {\n const name = consumeName(\"error\", tokens);\n const inputs = consumeParams(tokens);\n consumeEoi(tokens);\n return new ErrorFragment(_guard, name, inputs);\n }\n}\nexport class EventFragment extends NamedFragment {\n constructor(guard, name, inputs, anonymous) {\n super(guard, FragmentType.event, name, inputs);\n defineProperties(this, { anonymous });\n }\n format(format = FormatType.sighash) {\n if (!FormatType[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatType.json) {\n return JSON.stringify({\n type: \"event\",\n anonymous: this.anonymous,\n name: this.name,\n inputs: this.inputs.map((i) => JSON.parse(i.format(format)))\n });\n }\n const result = [];\n if (format !== FormatType.sighash) {\n result.push(\"event\");\n }\n result.push(this.name + joinParams(format, this.inputs));\n if (format !== FormatType.sighash && this.anonymous) {\n result.push(\"anonymous\");\n }\n return result.join(\" \");\n }\n static fromString(text) {\n return EventFragment.fromTokens(lex(text));\n }\n static fromTokens(tokens) {\n const name = consumeName(\"event\", tokens);\n const inputs = consumeParams(tokens, true);\n const anonymous = !!consumeKeywords(tokens, setify([\"anonymous\"])).has(\"anonymous\");\n consumeEoi(tokens);\n return new EventFragment(_guard, name, inputs, anonymous);\n }\n}\nexport class ConstructorFragment extends Fragment {\n constructor(guard, type, inputs, payable, gas) {\n super(guard, type, inputs);\n defineProperties(this, { payable, gas });\n }\n format(format = FormatType.sighash) {\n if (!FormatType[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatType.sighash) {\n logger.throwError(\"cannot format a constructor for sighash\", \"UNSUPPORTED_OPERATION\", {\n operation: \"format(sighash)\"\n });\n }\n if (format === FormatType.json) {\n return JSON.stringify({\n type: \"constructor\",\n stateMutability: (this.payable ? \"payable\" : \"undefined\"),\n payable: this.payable,\n gas: ((this.gas != null) ? this.gas : undefined),\n inputs: this.inputs.map((i) => JSON.parse(i.format(format)))\n });\n }\n const result = [`constructor${joinParams(format, this.inputs)}`];\n result.push((this.payable) ? \"payable\" : \"nonpayable\");\n if (this.gas != null) {\n result.push(`@${this.gas.toString()}`);\n }\n return result.join(\" \");\n }\n static fromString(text) {\n return ConstructorFragment.fromTokens(lex(text));\n }\n static fromObject(obj) {\n throw new Error(\"TODO\");\n }\n static fromTokens(tokens) {\n consumeKeywords(tokens, setify([\"constructor\"]));\n const inputs = consumeParams(tokens);\n const payable = !!consumeKeywords(tokens, setify([\"payable\"])).has(\"payable\");\n const gas = consumeGas(tokens);\n consumeEoi(tokens);\n return new ConstructorFragment(_guard, FragmentType.constructor, inputs, payable, gas);\n }\n}\nexport class FunctionFragment extends NamedFragment {\n constructor(guard, name, stateMutability, inputs, outputs, gas) {\n super(guard, FragmentType.function, name, inputs);\n outputs = Object.freeze(outputs.slice());\n const constant = (stateMutability === \"view\" || stateMutability === \"pure\");\n const payable = (stateMutability === \"payable\");\n defineProperties(this, { constant, gas, outputs, payable, stateMutability });\n }\n format(format = FormatType.sighash) {\n if (!FormatType[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatType.json) {\n return JSON.stringify({\n type: \"function\",\n name: this.name,\n constant: this.constant,\n stateMutability: ((this.stateMutability !== \"nonpayable\") ? this.stateMutability : undefined),\n payable: this.payable,\n gas: ((this.gas != null) ? this.gas : undefined),\n inputs: this.inputs.map((i) => JSON.parse(i.format(format))),\n outputs: this.outputs.map((o) => JSON.parse(o.format(format))),\n });\n }\n const result = [];\n if (format !== FormatType.sighash) {\n result.push(\"function\");\n }\n result.push(this.name + joinParams(format, this.inputs));\n if (format !== FormatType.sighash) {\n if (this.stateMutability !== \"nonpayable\") {\n result.push(this.stateMutability);\n }\n if (this.outputs && this.outputs.length) {\n result.push(\"returns\");\n result.push(joinParams(format, this.outputs));\n }\n if (this.gas != null) {\n result.push(`@${this.gas.toString()}`);\n }\n }\n return result.join(\" \");\n }\n static fromString(text) {\n return FunctionFragment.fromTokens(lex(text));\n }\n static fromTokens(tokens) {\n const name = consumeName(\"function\", tokens);\n const inputs = consumeParams(tokens);\n const mutability = consumeMutability(tokens);\n let outputs = [];\n if (consumeKeywords(tokens, setify([\"returns\"])).has(\"returns\")) {\n outputs = consumeParams(tokens);\n }\n const gas = consumeGas(tokens);\n consumeEoi(tokens);\n return new FunctionFragment(_guard, name, mutability, inputs, outputs, gas);\n }\n}\nexport class StructFragment extends NamedFragment {\n format() {\n throw new Error(\"@TODO\");\n }\n static fromString(text) {\n return StructFragment.fromTokens(lex(text));\n }\n static fromTokens(tokens) {\n const name = consumeName(\"struct\", tokens);\n const inputs = consumeParams(tokens);\n consumeEoi(tokens);\n return new StructFragment(_guard, FragmentType.struct, name, inputs);\n }\n}\n//# sourceMappingURL=fragments.js.map","export const version = \"@ethersproject/math@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { logger } from \"./logger.js\";\n// IEEE 754 support 53-bits of mantissa\nconst maxValue = 0x1fffffffffffff;\nconst nibbles = \"0123456789abcdef\";\nconst BN_0 = BigInt(0);\n// Converts a value to a BigInt, including big endian data\nexport function toBigInt(_value) {\n if (_value instanceof Uint8Array) {\n let result = \"0x0\";\n for (const v of _value) {\n result += nibbles[v >> 4];\n result += nibbles[v & 0x0f];\n }\n return BigInt(result);\n }\n return logger.getBigInt(_value, \"value\");\n}\nexport function toNumber(_value) {\n const value = toBigInt(_value);\n if (value < -maxValue || value > maxValue) {\n logger.throwArgumentError(\"overflow\", \"value\", _value);\n }\n return Number(value);\n}\n// Converts value to hex, optionally padding on the left to width bytes\nexport function toHex(_value, _width) {\n const value = logger.getBigInt(_value, \"value\");\n if (value < 0) {\n throw new Error(\"cannot convert negative value to hex\");\n }\n let result = value.toString(16);\n if (_width == null) {\n // Ensure the value is of even length\n if (result.length % 2) {\n result = \"0\" + result;\n }\n }\n else {\n const width = logger.getNumber(_width, \"width\");\n if (width * 2 < result.length) {\n throw new Error(`value ${value} exceeds width ${width}`);\n }\n // Pad the value to the required width\n while (result.length < (width * 2)) {\n result = \"0\" + result;\n }\n }\n return \"0x\" + result;\n}\nexport function toArray(_value) {\n const value = logger.getBigInt(_value, \"value\");\n if (value < 0) {\n throw new Error(\"cannot convert negative value to hex\");\n }\n if (value === BN_0) {\n return new Uint8Array([]);\n }\n let hex = value.toString(16);\n if (hex.length % 2) {\n hex = \"0\" + hex;\n }\n const result = new Uint8Array(hex.length / 2);\n for (let i = 0; i < result.length; i++) {\n const offset = i * 2;\n result[i] = parseInt(hex.substring(offset, offset + 2), 16);\n }\n return result;\n}\n//# sourceMappingURL=convert.js.map","import { logger } from \"./logger.js\";\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\n// Convert a value from a twos-compliment value\nexport function fromTwos(_value, _width) {\n const value = logger.getBigInt(_value, \"value\");\n const width = BigInt(logger.getNumber(_width, \"width\"));\n // Top bit set; treat as a negative value\n if (value >> (width - BN_1)) {\n const mask = (BN_1 << width) - BN_1;\n return -(((~value) & mask) + BN_1);\n }\n return value;\n}\n// Convert value to a twos-compliment value\nexport function toTwos(_value, _width) {\n const value = logger.getBigInt(_value, \"value\");\n const width = BigInt(logger.getNumber(_width, \"width\"));\n if (value < BN_0) {\n const mask = (BN_1 << width) - BN_1;\n return ((~(-value)) & mask) + BN_1;\n }\n return value;\n}\nexport function mask(_value, _bits) {\n const value = logger.getBigInt(_value, \"value\");\n const bits = logger.getBigInt(_bits, \"bits\");\n return value & ((BN_1 << bits) - BN_1);\n}\n//# sourceMappingURL=maths.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _FixedNumber_instances, _FixedNumber_value, _FixedNumber_checkFormat;\nimport { toBigInt, toHex } from \"./convert.js\";\nimport { logger } from \"./logger.js\";\nimport { fromTwos, toTwos } from \"./maths.js\";\nconst _constructorGuard = {};\n//const Zero = BigInt(0);\nconst NegativeOne = BigInt(-1);\nfunction throwFault(message, fault, operation, value) {\n const params = { fault: fault, operation: operation };\n if (value !== undefined) {\n params.value = value;\n }\n return logger.throwError(message, \"NUMERIC_FAULT\", params);\n}\n// Constant to pull zeros from for multipliers\nlet zeros = \"0\";\nwhile (zeros.length < 256) {\n zeros += zeros;\n}\n// Returns a string \"1\" followed by decimal \"0\"s\nfunction getMultiplier(decimals) {\n if (typeof (decimals) !== \"number\" || decimals < 0 || decimals > 256 || decimals % 1) {\n logger.throwArgumentError(\"invalid decimal length\", \"decimals\", decimals);\n }\n return BigInt(\"1\" + zeros.substring(0, decimals));\n}\nexport function formatFixed(_value, _decimals = 0) {\n let value = logger.getBigInt(_value, \"value\");\n const decimals = logger.getNumber(_decimals, \"decimals\");\n const multiplier = getMultiplier(decimals);\n const multiplierStr = String(multiplier);\n const negative = (value < 0);\n if (negative) {\n value *= NegativeOne;\n }\n let fraction = String(value % multiplier);\n // Make sure there are enough place-holders\n while (fraction.length < multiplierStr.length - 1) {\n fraction = \"0\" + fraction;\n }\n // Strip training 0\n while (fraction.length > 1 && fraction.substring(fraction.length - 1) === \"0\") {\n fraction = fraction.substring(0, fraction.length - 1);\n }\n let result = String(value / multiplier);\n if (multiplierStr.length !== 1) {\n result += \".\" + fraction;\n }\n if (negative) {\n result = \"-\" + result;\n }\n return result;\n}\nexport function parseFixed(value, _decimals = 0) {\n const decimals = logger.getNumber(_decimals, \"decimals\");\n const multiplier = getMultiplier(decimals);\n if (typeof (value) !== \"string\" || !value.match(/^-?[0-9.]+$/)) {\n logger.throwArgumentError(\"invalid decimal value\", \"value\", value);\n }\n // Is it negative?\n const negative = (value.substring(0, 1) === \"-\");\n if (negative) {\n value = value.substring(1);\n }\n if (value === \".\") {\n logger.throwArgumentError(\"missing value\", \"value\", value);\n }\n // Split it into a whole and fractional part\n const comps = value.split(\".\");\n if (comps.length > 2) {\n logger.throwArgumentError(\"too many decimal points\", \"value\", value);\n }\n let whole = (comps[0] || \"0\"), fraction = (comps[1] || \"0\");\n // Trim trialing zeros\n while (fraction[fraction.length - 1] === \"0\") {\n fraction = fraction.substring(0, fraction.length - 1);\n }\n // Check the fraction doesn't exceed our decimals size\n if (fraction.length > String(multiplier).length - 1) {\n throwFault(\"fractional component exceeds decimals\", \"underflow\", \"parseFixed\");\n }\n // If decimals is 0, we have an empty string for fraction\n if (fraction === \"\") {\n fraction = \"0\";\n }\n // Fully pad the string with zeros to get to wei\n while (fraction.length < String(multiplier).length - 1) {\n fraction += \"0\";\n }\n const wholeValue = BigInt(whole);\n const fractionValue = BigInt(fraction);\n let wei = (wholeValue * multiplier) + fractionValue;\n if (negative) {\n wei *= NegativeOne;\n }\n return wei;\n}\nexport class FixedFormat {\n constructor(constructorGuard, signed, width, decimals) {\n if (constructorGuard !== _constructorGuard) {\n logger.throwError(\"cannot use FixedFormat constructor; use FixedFormat.from\", \"UNSUPPORTED_OPERATION\", {\n operation: \"new FixedFormat\"\n });\n }\n this.signed = signed;\n this.width = width;\n this.decimals = decimals;\n this.name = (signed ? \"\" : \"u\") + \"fixed\" + String(width) + \"x\" + String(decimals);\n this._multiplier = getMultiplier(decimals);\n Object.freeze(this);\n }\n static from(value) {\n if (value instanceof FixedFormat) {\n return value;\n }\n if (typeof (value) === \"number\") {\n value = `fixed128x${value}`;\n }\n let signed = true;\n let width = 128;\n let decimals = 18;\n if (typeof (value) === \"string\") {\n if (value === \"fixed\") {\n // defaults...\n }\n else if (value === \"ufixed\") {\n signed = false;\n }\n else {\n const match = value.match(/^(u?)fixed([0-9]+)x([0-9]+)$/);\n if (!match) {\n return logger.throwArgumentError(\"invalid fixed format\", \"format\", value);\n }\n signed = (match[1] !== \"u\");\n width = parseInt(match[2]);\n decimals = parseInt(match[3]);\n }\n }\n else if (value) {\n const check = (key, type, defaultValue) => {\n if (value[key] == null) {\n return defaultValue;\n }\n if (typeof (value[key]) !== type) {\n logger.throwArgumentError(\"invalid fixed format (\" + key + \" not \" + type + \")\", \"format.\" + key, value[key]);\n }\n return value[key];\n };\n signed = check(\"signed\", \"boolean\", signed);\n width = check(\"width\", \"number\", width);\n decimals = check(\"decimals\", \"number\", decimals);\n }\n if (width % 8) {\n logger.throwArgumentError(\"invalid fixed format width (not byte aligned)\", \"format.width\", width);\n }\n if (decimals > 80) {\n logger.throwArgumentError(\"invalid fixed format (decimals too large)\", \"format.decimals\", decimals);\n }\n return new FixedFormat(_constructorGuard, signed, width, decimals);\n }\n}\nexport class FixedNumber {\n constructor(constructorGuard, hex, value, format) {\n _FixedNumber_instances.add(this);\n //#hex: string;\n _FixedNumber_value.set(this, void 0);\n if (constructorGuard !== _constructorGuard) {\n logger.throwError(\"cannot use FixedNumber constructor; use FixedNumber.from\", \"UNSUPPORTED_OPERATION\", {\n operation: \"new FixedFormat\"\n });\n }\n this.format = FixedFormat.from(format);\n //this.#hex = hex;\n __classPrivateFieldSet(this, _FixedNumber_value, value, \"f\");\n this._isFixedNumber = true;\n Object.freeze(this);\n }\n addUnsafe(other) {\n __classPrivateFieldGet(this, _FixedNumber_instances, \"m\", _FixedNumber_checkFormat).call(this, other);\n const a = parseFixed(__classPrivateFieldGet(this, _FixedNumber_value, \"f\"), this.format.decimals);\n const b = parseFixed(__classPrivateFieldGet(other, _FixedNumber_value, \"f\"), other.format.decimals);\n return FixedNumber.fromValue(a + b, this.format.decimals, this.format);\n }\n subUnsafe(other) {\n __classPrivateFieldGet(this, _FixedNumber_instances, \"m\", _FixedNumber_checkFormat).call(this, other);\n const a = parseFixed(__classPrivateFieldGet(this, _FixedNumber_value, \"f\"), this.format.decimals);\n const b = parseFixed(__classPrivateFieldGet(other, _FixedNumber_value, \"f\"), other.format.decimals);\n return FixedNumber.fromValue(a - b, this.format.decimals, this.format);\n }\n mulUnsafe(other) {\n __classPrivateFieldGet(this, _FixedNumber_instances, \"m\", _FixedNumber_checkFormat).call(this, other);\n const a = parseFixed(__classPrivateFieldGet(this, _FixedNumber_value, \"f\"), this.format.decimals);\n const b = parseFixed(__classPrivateFieldGet(other, _FixedNumber_value, \"f\"), other.format.decimals);\n return FixedNumber.fromValue((a * b) / this.format._multiplier, this.format.decimals, this.format);\n }\n divUnsafe(other) {\n __classPrivateFieldGet(this, _FixedNumber_instances, \"m\", _FixedNumber_checkFormat).call(this, other);\n const a = parseFixed(__classPrivateFieldGet(this, _FixedNumber_value, \"f\"), this.format.decimals);\n const b = parseFixed(__classPrivateFieldGet(other, _FixedNumber_value, \"f\"), other.format.decimals);\n return FixedNumber.fromValue((a * this.format._multiplier) / b, this.format.decimals, this.format);\n }\n floor() {\n const comps = this.toString().split(\".\");\n if (comps.length === 1) {\n comps.push(\"0\");\n }\n let result = FixedNumber.from(comps[0], this.format);\n const hasFraction = !comps[1].match(/^(0*)$/);\n if (this.isNegative() && hasFraction) {\n result = result.subUnsafe(ONE.toFormat(result.format));\n }\n return result;\n }\n ceiling() {\n const comps = this.toString().split(\".\");\n if (comps.length === 1) {\n comps.push(\"0\");\n }\n let result = FixedNumber.from(comps[0], this.format);\n const hasFraction = !comps[1].match(/^(0*)$/);\n if (!this.isNegative() && hasFraction) {\n result = result.addUnsafe(ONE.toFormat(result.format));\n }\n return result;\n }\n // @TODO: Support other rounding algorithms\n round(decimals) {\n if (decimals == null) {\n decimals = 0;\n }\n // If we are already in range, we're done\n const comps = this.toString().split(\".\");\n if (comps.length === 1) {\n comps.push(\"0\");\n }\n if (decimals < 0 || decimals > 80 || (decimals % 1)) {\n logger.throwArgumentError(\"invalid decimal count\", \"decimals\", decimals);\n }\n if (comps[1].length <= decimals) {\n return this;\n }\n const factor = FixedNumber.from(\"1\" + zeros.substring(0, decimals), this.format);\n const bump = BUMP.toFormat(this.format);\n return this.mulUnsafe(factor).addUnsafe(bump).floor().divUnsafe(factor);\n }\n isZero() {\n return (__classPrivateFieldGet(this, _FixedNumber_value, \"f\") === \"0.0\" || __classPrivateFieldGet(this, _FixedNumber_value, \"f\") === \"0\");\n }\n isNegative() {\n return (__classPrivateFieldGet(this, _FixedNumber_value, \"f\")[0] === \"-\");\n }\n toString() { return __classPrivateFieldGet(this, _FixedNumber_value, \"f\"); }\n toHexString(_width) {\n throw new Error(\"TODO\");\n /*\n return toHex();\n if (width == null) { return this.#hex; }\n\n const width = logger.getNumeric(_width);\n if (width % 8) { logger.throwArgumentError(\"invalid byte width\", \"width\", width); }\n\n const hex = BigNumber.from(this.#hex).fromTwos(this.format.width).toTwos(width).toHexString();\n return zeroPadLeft(hex, width / 8);\n */\n }\n toUnsafeFloat() { return parseFloat(this.toString()); }\n toFormat(format) {\n return FixedNumber.fromString(__classPrivateFieldGet(this, _FixedNumber_value, \"f\"), format);\n }\n static fromValue(value, decimals = 0, format = \"fixed\") {\n return FixedNumber.fromString(formatFixed(value, decimals), FixedFormat.from(format));\n }\n static fromString(value, format = \"fixed\") {\n const fixedFormat = FixedFormat.from(format);\n const numeric = parseFixed(value, fixedFormat.decimals);\n if (!fixedFormat.signed && numeric < 0) {\n throwFault(\"unsigned value cannot be negative\", \"overflow\", \"value\", value);\n }\n const hex = (function () {\n if (fixedFormat.signed) {\n return toHex(toTwos(numeric, fixedFormat.width));\n }\n return toHex(numeric, fixedFormat.width / 8);\n })();\n const decimal = formatFixed(numeric, fixedFormat.decimals);\n return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat);\n }\n static fromBytes(_value, format = \"fixed\") {\n const value = logger.getBytes(_value, \"value\");\n const fixedFormat = FixedFormat.from(format);\n if (value.length > fixedFormat.width / 8) {\n throw new Error(\"overflow\");\n }\n let numeric = toBigInt(value);\n if (fixedFormat.signed) {\n numeric = fromTwos(numeric, fixedFormat.width);\n }\n const hex = toHex(toTwos(numeric, (fixedFormat.signed ? 0 : 1) + fixedFormat.width));\n const decimal = formatFixed(numeric, fixedFormat.decimals);\n return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat);\n }\n static from(value, format) {\n if (typeof (value) === \"string\") {\n return FixedNumber.fromString(value, format);\n }\n if (value instanceof Uint8Array) {\n return FixedNumber.fromBytes(value, format);\n }\n try {\n return FixedNumber.fromValue(value, 0, format);\n }\n catch (error) {\n // Allow NUMERIC_FAULT to bubble up\n if (error.code !== \"INVALID_ARGUMENT\") {\n throw error;\n }\n }\n return logger.throwArgumentError(\"invalid FixedNumber value\", \"value\", value);\n }\n static isFixedNumber(value) {\n return !!(value && value._isFixedNumber);\n }\n}\n_FixedNumber_value = new WeakMap(), _FixedNumber_instances = new WeakSet(), _FixedNumber_checkFormat = function _FixedNumber_checkFormat(other) {\n if (this.format.name !== other.format.name) {\n logger.throwArgumentError(\"incompatible format; use fixedNumber.toFormat\", \"other\", other);\n }\n};\nconst ONE = FixedNumber.from(1);\nconst BUMP = FixedNumber.from(\"0.5\");\n//# sourceMappingURL=fixednumber.js.map","import { toBigInt, toHex } from \"./convert.js\";\nimport { logger } from \"./logger.js\";\nconst Alphabet = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\";\nlet Lookup = null;\nfunction getAlpha(letter) {\n if (Lookup == null) {\n Lookup = {};\n for (let i = 0; i < Alphabet.length; i++) {\n Lookup[Alphabet[i]] = BigInt(i);\n }\n }\n const result = Lookup[letter];\n if (result == null) {\n logger.throwArgumentError(`invalid base58 value`, \"letter\", letter);\n }\n return result;\n}\nconst BN_0 = BigInt(0);\nconst BN_58 = BigInt(58);\nexport function encodeBase58(_value) {\n let value = toBigInt(logger.getBytes(_value));\n let result = \"\";\n while (value) {\n result = Alphabet[Number(value % BN_58)] + result;\n value /= BN_58;\n }\n return result;\n}\nexport function decodeBase58(value) {\n let result = BN_0;\n for (let i = 0; i < value.length; i++) {\n result *= BN_58;\n result += getAlpha(value[i]);\n }\n return toHex(result);\n}\n//# sourceMappingURL=base58.js.map","export function isHexString(value, length) {\n if (typeof (value) !== \"string\" || !value.match(/^0x[0-9A-Fa-f]*$/)) {\n return false;\n }\n if (typeof (length) === \"number\" && value.length !== 2 + 2 * length) {\n return false;\n }\n if (length === true && (value.length % 2) !== 0) {\n return false;\n }\n return true;\n}\n/*\nfunction _isByte(value: number): boolean {\n return (typeof(value) === \"number\" && value >= 0 && value < 256 && Math.floor(value) === value);\n}\nexport function isBytes(value: any): value is Bytes {\n if (value == null) { return false; }\n\n if (value instanceof Uint8Array) { return true; }\n if (typeof(value) === \"string\") { return false; }\n\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n if (!_isByte(value[i])) { return false; }\n }\n return true;\n }\n\n return false;\n}\n*/\nexport function isBytesLike(value) {\n return (isHexString(value, true) || (value instanceof Uint8Array));\n}\n//# sourceMappingURL=check.js.map","export const version = \"@ethersproject/bytes@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { version } from \"./_version.js\";\nimport { Logger } from \"@ethersproject/logger\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { isBytesLike } from \"./check.js\";\nimport { logger } from \"./logger.js\";\nlet BN_8 = null;\nlet BN_255 = null;\ntry {\n BN_8 = BigInt(\"8\");\n BN_255 = BigInt(\"255\");\n}\ncatch (error) {\n console.log(\"Unsupported bigint\", error);\n}\nfunction isHexable(value) {\n return (value && typeof (value.toHexString) === \"function\");\n}\nexport function arrayify(data) {\n if (data == null) {\n logger.throwArgumentError(\"cannot arrayify nullish\", \"data\", data);\n }\n if (typeof (data) === \"number\") {\n logger.assertUint53(data);\n const result = [];\n while (data) {\n result.unshift(data & 0xff);\n data = parseInt(String(data / 256));\n }\n if (result.length === 0) {\n result.push(0);\n }\n return new Uint8Array(result);\n }\n if (BN_8 && typeof (data) === \"bigint\") {\n const result = [];\n while (data) {\n result.unshift(Number(data & BN_255));\n data >>= BN_8;\n }\n if (result.length === 0) {\n result.push(0);\n }\n return new Uint8Array(result);\n }\n if (isHexable(data)) {\n return arrayify(data.toHexString());\n }\n if (typeof (data) === \"string\") {\n let hex = data;\n //if (options.allowMissingPrefix && hex.substring(0, 2) !== \"0x\") {\n // hex = \"0x\" + hex;\n //}\n if (!hex.match(/^0x[0-9a-f]*$/i)) {\n throw new RangeError(`invalid hex data string (${JSON.stringify(data)})`);\n }\n const result = [];\n for (let i = 2; i < hex.length; i += 2) {\n result.push(parseInt(hex.substring(i, i + 2), 16));\n }\n return new Uint8Array(result);\n }\n if (data instanceof Uint8Array) {\n return new Uint8Array(data);\n }\n throw new TypeError(`cannot arrayify ${JSON.stringify(data)}`);\n}\nexport function _noCopyArrayify(data) {\n if (!isBytesLike(data)) {\n logger.throwArgumentError(\"invalid BytesLike value\", \"data\", data);\n } // @TODO: ArgumentE>\n if (data instanceof Uint8Array) {\n return data;\n }\n return arrayify(data);\n}\n//# sourceMappingURL=array.js.map","import { logger } from \"./logger.js\";\nexport function decodeBase64(textData) {\n return new Uint8Array(Buffer.from(textData, \"base64\"));\n}\n;\nexport function encodeBase64(data) {\n return Buffer.from(logger.getBytes(data, \"data\")).toString(\"base64\");\n}\n//# sourceMappingURL=base64.js.map","import { arrayify, _noCopyArrayify } from \"./array.js\";\nconst HexCharacters = \"0123456789abcdef\";\nexport function hexlify(data) {\n const bytes = _noCopyArrayify(data);\n let result = \"0x\";\n for (let i = 0; i < bytes.length; i++) {\n const v = bytes[i];\n result += HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f];\n }\n return result;\n}\nexport function quantity(value) {\n let result = hexlify(arrayify(value)).substring(2);\n while (result.substring(0, 1) === \"0\") {\n result = result.substring(1);\n }\n if (result === \"\") {\n result = \"0\";\n }\n return \"0x\" + result;\n}\n//# sourceMappingURL=hex.js.map","import { _noCopyArrayify } from \"./array.js\";\nimport { isHexString } from \"./check.js\";\nimport { hexlify } from \"./hex.js\";\nimport { logger } from \"./logger.js\";\nexport function concat(datas) {\n return \"0x\" + datas.map((d) => hexlify(d).substring(2)).join(\"\");\n}\nexport function dataLength(data) {\n if (isHexString(data, true)) {\n return (data.length - 2) / 2;\n }\n return _noCopyArrayify(data).length;\n}\nexport function dataSlice(data, start, end) {\n const bytes = _noCopyArrayify(data);\n if (end != null && end > bytes.length) {\n logger.throwError(\"cannot slice beyond data bounds\", \"BUFFER_OVERRUN\", {\n buffer: bytes, length: bytes.length, offset: end\n });\n }\n return hexlify(bytes.slice((start == null) ? 0 : start, (end == null) ? bytes.length : end));\n}\nexport function stripZerosLeft(data) {\n let bytes = hexlify(data).substring(2);\n while (bytes.substring(0, 2) == \"00\") {\n bytes = bytes.substring(2);\n }\n return \"0x\" + bytes;\n}\n//# sourceMappingURL=data.js.map","import { _noCopyArrayify } from \"./array.js\";\nimport { hexlify } from \"./hex.js\";\nimport { logger } from \"./logger.js\";\nfunction zeroPad(data, length, left) {\n const bytes = _noCopyArrayify(data);\n if (length < bytes.length) {\n logger.throwError(\"padding exceeds data length\", \"BUFFER_OVERRUN\", {\n buffer: new Uint8Array(bytes),\n length: length,\n offset: length + 1\n });\n }\n const result = new Uint8Array(length);\n result.fill(0);\n if (left) {\n result.set(bytes, length - bytes.length);\n }\n else {\n result.set(bytes, 0);\n }\n return hexlify(result);\n}\nexport function zeroPadLeft(data, length) {\n return zeroPad(data, length, true);\n}\nexport function zeroPadRight(data, length) {\n return zeroPad(data, length, false);\n}\n//# sourceMappingURL=pad.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Result_instances, _Result_indices, _Result_throwError, _Writer_instances, _Writer_data, _Writer_dataLength, _Writer_writeData, _Reader_instances, _Reader_data, _Reader_offset, _Reader_coerceFunc, _Reader_peekBytes;\nimport { toArray, toBigInt, toNumber } from \"@ethersproject/math\";\nimport { arrayify, concat, hexlify } from \"@ethersproject/bytes\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { logger } from \"../logger.js\";\nexport const WordSize = 32;\nconst Padding = new Uint8Array(WordSize);\n// Properties used to immediate pass through to the underlying object\n// - `then` is used to detect if an object is a Promise for await\nconst passProperties = [\"then\"];\nconst _guard = {};\nexport class Result extends Array {\n constructor(guard, items, keys) {\n logger.assertPrivate(guard, _guard, \"Result\");\n super(...items);\n _Result_instances.add(this);\n _Result_indices.set(this, void 0);\n // Name lookup table\n __classPrivateFieldSet(this, _Result_indices, new Map(), \"f\");\n if (keys) {\n keys.forEach((key, index) => {\n if (key == null) {\n return;\n }\n if (__classPrivateFieldGet(this, _Result_indices, \"f\").has(key)) {\n (__classPrivateFieldGet(this, _Result_indices, \"f\").get(key)).push(index);\n }\n else {\n __classPrivateFieldGet(this, _Result_indices, \"f\").set(key, [index]);\n }\n });\n }\n Object.freeze(this);\n return new Proxy(this, {\n get: (target, prop, receiver) => {\n if (typeof (prop) === \"string\") {\n if (prop.match(/^[0-9]+$/)) {\n const index = logger.getNumber(prop, \"%index\");\n if (index < 0 || index >= this.length) {\n throw new RangeError(\"out of result range\");\n }\n const item = target[index];\n if (item instanceof Error) {\n __classPrivateFieldGet(this, _Result_instances, \"m\", _Result_throwError).call(this, `index ${index}`, item);\n }\n return item;\n }\n // Pass important checks (like `then` for Promise) through\n if (prop in target || passProperties.indexOf(prop) >= 0) {\n return Reflect.get(target, prop, receiver);\n }\n // Something that could be a result keyword value\n if (!(prop in target)) {\n return target.getValue(prop);\n }\n }\n return Reflect.get(target, prop, receiver);\n }\n });\n }\n slice(start, end) {\n if (start == null) {\n start = 0;\n }\n if (end == null) {\n end = this.length;\n }\n const result = [];\n for (let i = start; i < end; i++) {\n let value;\n try {\n value = this[i];\n }\n catch (error) {\n value = error.error;\n }\n result.push(value);\n }\n return result;\n }\n getValue(name) {\n const index = __classPrivateFieldGet(this, _Result_indices, \"f\").get(name);\n if (index != null && index.length === 1) {\n const item = this[index[0]];\n if (item instanceof Error) {\n __classPrivateFieldGet(this, _Result_instances, \"m\", _Result_throwError).call(this, `property ${JSON.stringify(name)}`, item);\n }\n return item;\n }\n throw new Error(`no named parameter: ${JSON.stringify(name)}`);\n }\n static fromItems(items, keys) {\n return new Result(_guard, items, keys);\n }\n}\n_Result_indices = new WeakMap(), _Result_instances = new WeakSet(), _Result_throwError = function _Result_throwError(name, error) {\n const wrapped = new Error(`deferred error during ABI decoding triggered accessing ${name}`);\n wrapped.error = error;\n throw wrapped;\n};\nexport function checkResultErrors(result) {\n // Find the first error (if any)\n const errors = [];\n const checkErrors = function (path, object) {\n if (!Array.isArray(object)) {\n return;\n }\n for (let key in object) {\n const childPath = path.slice();\n childPath.push(key);\n try {\n checkErrors(childPath, object[key]);\n }\n catch (error) {\n errors.push({ path: childPath, error: error });\n }\n }\n };\n checkErrors([], result);\n return errors;\n}\nfunction getValue(value) {\n let bytes = toArray(value);\n if (bytes.length > WordSize) {\n logger.throwError(\"value out-of-bounds\", \"BUFFER_OVERRUN\", {\n buffer: bytes,\n length: WordSize,\n offset: bytes.length\n });\n }\n if (bytes.length % WordSize) {\n bytes = arrayify(concat([Padding.slice(bytes.length % WordSize), bytes]));\n }\n return bytes;\n}\nexport class Coder {\n constructor(name, type, localName, dynamic) {\n defineProperties(this, { name, type, localName, dynamic }, {\n name: \"string\", type: \"string\", localName: \"string\", dynamic: \"boolean\"\n });\n }\n _throwError(message, value) {\n return logger.throwArgumentError(message, this.localName, value);\n }\n}\nexport class Writer {\n constructor() {\n _Writer_instances.add(this);\n // An array of WordSize lengthed objects to concatenation\n _Writer_data.set(this, void 0);\n _Writer_dataLength.set(this, void 0);\n __classPrivateFieldSet(this, _Writer_data, [], \"f\");\n __classPrivateFieldSet(this, _Writer_dataLength, 0, \"f\");\n }\n get data() {\n return concat(__classPrivateFieldGet(this, _Writer_data, \"f\"));\n }\n get length() { return __classPrivateFieldGet(this, _Writer_dataLength, \"f\"); }\n appendWriter(writer) {\n return __classPrivateFieldGet(this, _Writer_instances, \"m\", _Writer_writeData).call(this, arrayify(writer.data));\n }\n // Arrayish item; pad on the right to *nearest* WordSize\n writeBytes(value) {\n let bytes = arrayify(value);\n const paddingOffset = bytes.length % WordSize;\n if (paddingOffset) {\n bytes = arrayify(concat([bytes, Padding.slice(paddingOffset)]));\n }\n return __classPrivateFieldGet(this, _Writer_instances, \"m\", _Writer_writeData).call(this, bytes);\n }\n // Numeric item; pad on the left *to* WordSize\n writeValue(value) {\n return __classPrivateFieldGet(this, _Writer_instances, \"m\", _Writer_writeData).call(this, getValue(value));\n }\n // Inserts a numeric place-holder, returning a callback that can\n // be used to asjust the value later\n writeUpdatableValue() {\n const offset = __classPrivateFieldGet(this, _Writer_data, \"f\").length;\n __classPrivateFieldGet(this, _Writer_data, \"f\").push(Padding);\n __classPrivateFieldSet(this, _Writer_dataLength, __classPrivateFieldGet(this, _Writer_dataLength, \"f\") + WordSize, \"f\");\n return (value) => {\n __classPrivateFieldGet(this, _Writer_data, \"f\")[offset] = getValue(value);\n };\n }\n}\n_Writer_data = new WeakMap(), _Writer_dataLength = new WeakMap(), _Writer_instances = new WeakSet(), _Writer_writeData = function _Writer_writeData(data) {\n __classPrivateFieldGet(this, _Writer_data, \"f\").push(data);\n __classPrivateFieldSet(this, _Writer_dataLength, __classPrivateFieldGet(this, _Writer_dataLength, \"f\") + data.length, \"f\");\n return data.length;\n};\nexport class Reader {\n constructor(data, coerceFunc, allowLoose) {\n _Reader_instances.add(this);\n _Reader_data.set(this, void 0);\n _Reader_offset.set(this, void 0);\n _Reader_coerceFunc.set(this, void 0);\n defineProperties(this, { allowLoose: !!allowLoose });\n __classPrivateFieldSet(this, _Reader_data, arrayify(data), \"f\");\n __classPrivateFieldSet(this, _Reader_coerceFunc, coerceFunc || Reader.coerce, \"f\");\n __classPrivateFieldSet(this, _Reader_offset, 0, \"f\");\n }\n get data() { return hexlify(__classPrivateFieldGet(this, _Reader_data, \"f\")); }\n get dataLength() { return __classPrivateFieldGet(this, _Reader_data, \"f\").length; }\n get consumed() { return __classPrivateFieldGet(this, _Reader_offset, \"f\"); }\n get bytes() { return new Uint8Array(__classPrivateFieldGet(this, _Reader_data, \"f\")); }\n // The default Coerce function\n static coerce(type, value) {\n let match = type.match(\"^u?int([0-9]+)$\");\n if (match && parseInt(match[1]) <= 48) {\n value = value.toNumber();\n }\n return value;\n }\n coerce(type, value) {\n return __classPrivateFieldGet(this, _Reader_coerceFunc, \"f\").call(this, type, value);\n }\n // Create a sub-reader with the same underlying data, but offset\n subReader(offset) {\n return new Reader(__classPrivateFieldGet(this, _Reader_data, \"f\").slice(__classPrivateFieldGet(this, _Reader_offset, \"f\") + offset), __classPrivateFieldGet(this, _Reader_coerceFunc, \"f\"), this.allowLoose);\n }\n // Read bytes\n readBytes(length, loose) {\n let bytes = __classPrivateFieldGet(this, _Reader_instances, \"m\", _Reader_peekBytes).call(this, 0, length, !!loose);\n __classPrivateFieldSet(this, _Reader_offset, __classPrivateFieldGet(this, _Reader_offset, \"f\") + bytes.length, \"f\");\n // @TODO: Make sure the length..end bytes are all 0?\n return bytes.slice(0, length);\n }\n // Read a numeric values\n readValue() {\n return toBigInt(this.readBytes(WordSize));\n }\n readIndex() {\n return toNumber(this.readBytes(WordSize));\n }\n}\n_Reader_data = new WeakMap(), _Reader_offset = new WeakMap(), _Reader_coerceFunc = new WeakMap(), _Reader_instances = new WeakSet(), _Reader_peekBytes = function _Reader_peekBytes(offset, length, loose) {\n let alignedLength = Math.ceil(length / WordSize) * WordSize;\n if (__classPrivateFieldGet(this, _Reader_offset, \"f\") + alignedLength > __classPrivateFieldGet(this, _Reader_data, \"f\").length) {\n if (this.allowLoose && loose && __classPrivateFieldGet(this, _Reader_offset, \"f\") + length <= __classPrivateFieldGet(this, _Reader_data, \"f\").length) {\n alignedLength = length;\n }\n else {\n logger.throwError(\"data out-of-bounds\", \"BUFFER_OVERRUN\", {\n buffer: arrayify(__classPrivateFieldGet(this, _Reader_data, \"f\")),\n length: __classPrivateFieldGet(this, _Reader_data, \"f\").length,\n offset: __classPrivateFieldGet(this, _Reader_offset, \"f\") + alignedLength\n });\n }\n }\n return __classPrivateFieldGet(this, _Reader_data, \"f\").slice(__classPrivateFieldGet(this, _Reader_offset, \"f\"), __classPrivateFieldGet(this, _Reader_offset, \"f\") + alignedLength);\n};\n//# sourceMappingURL=abstract-coder.js.map","/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// The import here is via the package name. This is to ensure\n// that exports mapping/resolution does fall into place.\nimport { crypto } from '@noble/hashes/crypto';\n// Cast array to different type\nexport const u8 = (arr) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr) => new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n// Cast array to view\nexport const createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word, shift) => (word << (32 - shift)) | (word >>> shift);\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\n// There is almost no big endian hardware, but js typed arrays uses platform specific endianess.\n// So, just to be sure not to corrupt anything.\nif (!isLE)\n throw new Error('Non little-endian hardware is not supported');\nconst hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xde, 0xad, 0xbe, 0xef]))\n */\nexport function bytesToHex(uint8a) {\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < uint8a.length; i++) {\n hex += hexes[uint8a[i]];\n }\n return hex;\n}\n/**\n * @example hexToBytes('deadbeef')\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string') {\n throw new TypeError('hexToBytes: expected string, got ' + typeof hex);\n }\n if (hex.length % 2)\n throw new Error('hexToBytes: received invalid unpadded hex');\n const array = new Uint8Array(hex.length / 2);\n for (let i = 0; i < array.length; i++) {\n const j = i * 2;\n const hexByte = hex.slice(j, j + 2);\n const byte = Number.parseInt(hexByte, 16);\n if (Number.isNaN(byte))\n throw new Error('Invalid byte sequence');\n array[i] = byte;\n }\n return array;\n}\n// Currently avoid insertion of polyfills with packers (browserify/webpack/etc)\n// But setTimeout is pretty slow, maybe worth to investigate howto do minimal polyfill here\nexport const nextTick = (() => {\n const nodeRequire = typeof module !== 'undefined' &&\n typeof module.require === 'function' &&\n module.require.bind(module);\n try {\n if (nodeRequire) {\n const { setImmediate } = nodeRequire('timers');\n return () => new Promise((resolve) => setImmediate(resolve));\n }\n }\n catch (e) { }\n return () => new Promise((resolve) => setTimeout(resolve, 0));\n})();\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await nextTick();\n ts += diff;\n }\n}\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string') {\n throw new TypeError(`utf8ToBytes expected string, got ${typeof str}`);\n }\n return new TextEncoder().encode(str);\n}\nexport function toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n if (!(data instanceof Uint8Array))\n throw new TypeError(`Expected input type is Uint8Array (got ${typeof data})`);\n return data;\n}\n/**\n * Concats Uint8Array-s into one; like `Buffer.concat([buf1, buf2])`\n * @example concatBytes(buf1, buf2)\n */\nexport function concatBytes(...arrays) {\n if (!arrays.every((a) => a instanceof Uint8Array))\n throw new Error('Uint8Array list expected');\n if (arrays.length === 1)\n return arrays[0];\n const length = arrays.reduce((a, arr) => a + arr.length, 0);\n const result = new Uint8Array(length);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const arr = arrays[i];\n result.set(arr, pad);\n pad += arr.length;\n }\n return result;\n}\nexport function assertNumber(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error(`Wrong positive integer: ${n}`);\n}\nexport function assertBool(b) {\n if (typeof b !== 'boolean') {\n throw new Error(`Expected boolean, not ${b}`);\n }\n}\nexport function assertBytes(bytes, ...lengths) {\n if (bytes instanceof Uint8Array && (!lengths.length || lengths.includes(bytes.length))) {\n return;\n }\n throw new TypeError(`Expected ${lengths} bytes, not ${typeof bytes} with length=${bytes.length}`);\n}\nexport function assertHash(hash) {\n if (typeof hash !== 'function' || typeof hash.create !== 'function')\n throw new Error('Hash should be wrapped by utils.wrapConstructor');\n assertNumber(hash.outputLen);\n assertNumber(hash.blockLen);\n}\n// For runtime check if class implements interface\nexport class Hash {\n // Safe version that clones internal state\n clone() {\n return this._cloneInto();\n }\n}\n// Check if object doens't have custom constructor (like Uint8Array/Array)\nconst isPlainObject = (obj) => Object.prototype.toString.call(obj) === '[object Object]' && obj.constructor === Object;\nexport function checkOpts(def, _opts) {\n if (_opts !== undefined && (typeof _opts !== 'object' || !isPlainObject(_opts)))\n throw new TypeError('Options should be object or undefined');\n const opts = Object.assign(def, _opts);\n return opts;\n}\nexport function wrapConstructor(hashConstructor) {\n const hashC = (message) => hashConstructor().update(toBytes(message)).digest();\n const tmp = hashConstructor();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashConstructor();\n return hashC;\n}\nexport function wrapConstructorWithOpts(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\n/**\n * Secure PRNG\n */\nexport function randomBytes(bytesLength = 32) {\n if (crypto.web) {\n return crypto.web.getRandomValues(new Uint8Array(bytesLength));\n }\n else if (crypto.node) {\n return new Uint8Array(crypto.node.randomBytes(bytesLength).buffer);\n }\n else {\n throw new Error(\"The environment doesn't have randomBytes function\");\n }\n}\n","import { assertHash, Hash, toBytes } from './utils.js';\n// HMAC (RFC 2104)\nclass HMAC extends Hash {\n constructor(hash, _key) {\n super();\n this.finished = false;\n this.destroyed = false;\n assertHash(hash);\n const key = toBytes(_key);\n this.iHash = hash.create();\n if (!(this.iHash instanceof Hash))\n throw new TypeError('Expected instance of class which extends utils.Hash');\n const blockLen = (this.blockLen = this.iHash.blockLen);\n this.outputLen = this.iHash.outputLen;\n const pad = new Uint8Array(blockLen);\n // blockLen can be bigger than outputLen\n pad.set(key.length > this.iHash.blockLen ? hash.create().update(key).digest() : key);\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 0x36;\n this.iHash.update(pad);\n // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n this.oHash = hash.create();\n // Undo internal XOR && apply outer XOR\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 0x36 ^ 0x5c;\n this.oHash.update(pad);\n pad.fill(0);\n }\n update(buf) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n this.iHash.update(buf);\n return this;\n }\n digestInto(out) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n if (!(out instanceof Uint8Array) || out.length !== this.outputLen)\n throw new Error('HMAC: Invalid output buffer');\n if (this.finished)\n throw new Error('digest() was already called');\n this.finished = true;\n this.iHash.digestInto(out);\n this.oHash.update(out);\n this.oHash.digestInto(out);\n this.destroy();\n }\n digest() {\n const out = new Uint8Array(this.oHash.outputLen);\n this.digestInto(out);\n return out;\n }\n _cloneInto(to) {\n // Create new instance without calling constructor since key already in state and we don't know it.\n to || (to = Object.create(Object.getPrototypeOf(this), {}));\n const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n to = to;\n to.finished = finished;\n to.destroyed = destroyed;\n to.blockLen = blockLen;\n to.outputLen = outputLen;\n to.oHash = oHash._cloneInto(to.oHash);\n to.iHash = iHash._cloneInto(to.iHash);\n return to;\n }\n destroy() {\n this.destroyed = true;\n this.oHash.destroy();\n this.iHash.destroy();\n }\n}\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n */\nexport const hmac = (hash, key, message) => new HMAC(hash, key).update(message).digest();\nhmac.create = (hash, key) => new HMAC(hash, key);\n","import { hmac } from './hmac.js';\n// prettier-ignore\nimport { createView, toBytes, assertNumber, assertHash, checkOpts, asyncLoop } from './utils.js';\n// Common prologue and epilogue for sync/async functions\nfunction pbkdf2Init(hash, _password, _salt, _opts) {\n assertHash(hash);\n const opts = checkOpts({ dkLen: 32, asyncTick: 10 }, _opts);\n const { c, dkLen, asyncTick } = opts;\n assertNumber(c);\n assertNumber(dkLen);\n assertNumber(asyncTick);\n if (c < 1)\n throw new Error('PBKDF2: iterations (c) should be >= 1');\n const password = toBytes(_password);\n const salt = toBytes(_salt);\n // DK = PBKDF2(PRF, Password, Salt, c, dkLen);\n const DK = new Uint8Array(dkLen);\n // U1 = PRF(Password, Salt + INT_32_BE(i))\n const PRF = hmac.create(hash, password);\n const PRFSalt = PRF._cloneInto().update(salt);\n return { c, dkLen, asyncTick, DK, PRF, PRFSalt };\n}\nfunction pbkdf2Output(PRF, PRFSalt, DK, prfW, u) {\n PRF.destroy();\n PRFSalt.destroy();\n if (prfW)\n prfW.destroy();\n u.fill(0);\n return DK;\n}\n/**\n * PBKDF2-HMAC: RFC 2898 key derivation function\n * @param hash - hash function that would be used e.g. sha256\n * @param password - password from which a derived key is generated\n * @param salt - cryptographic salt\n * @param opts - {c, dkLen} where c is work factor and dkLen is output message size\n */\nexport function pbkdf2(hash, password, salt, opts) {\n const { c, dkLen, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts);\n let prfW; // Working copy\n const arr = new Uint8Array(4);\n const view = createView(arr);\n const u = new Uint8Array(PRF.outputLen);\n // DK = T1 + T2 + ⋯ + Tdklen/hlen\n for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) {\n // Ti = F(Password, Salt, c, i)\n const Ti = DK.subarray(pos, pos + PRF.outputLen);\n view.setInt32(0, ti, false);\n // F(Password, Salt, c, i) = U1 ^ U2 ^ ⋯ ^ Uc\n // U1 = PRF(Password, Salt + INT_32_BE(i))\n (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u);\n Ti.set(u.subarray(0, Ti.length));\n for (let ui = 1; ui < c; ui++) {\n // Uc = PRF(Password, Uc−1)\n PRF._cloneInto(prfW).update(u).digestInto(u);\n for (let i = 0; i < Ti.length; i++)\n Ti[i] ^= u[i];\n }\n }\n return pbkdf2Output(PRF, PRFSalt, DK, prfW, u);\n}\nexport async function pbkdf2Async(hash, password, salt, opts) {\n const { c, dkLen, asyncTick, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts);\n let prfW; // Working copy\n const arr = new Uint8Array(4);\n const view = createView(arr);\n const u = new Uint8Array(PRF.outputLen);\n // DK = T1 + T2 + ⋯ + Tdklen/hlen\n for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) {\n // Ti = F(Password, Salt, c, i)\n const Ti = DK.subarray(pos, pos + PRF.outputLen);\n view.setInt32(0, ti, false);\n // F(Password, Salt, c, i) = U1 ^ U2 ^ ⋯ ^ Uc\n // U1 = PRF(Password, Salt + INT_32_BE(i))\n (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u);\n Ti.set(u.subarray(0, Ti.length));\n await asyncLoop(c - 1, asyncTick, (i) => {\n // Uc = PRF(Password, Uc−1)\n PRF._cloneInto(prfW).update(u).digestInto(u);\n for (let i = 0; i < Ti.length; i++)\n Ti[i] ^= u[i];\n });\n }\n return pbkdf2Output(PRF, PRFSalt, DK, prfW, u);\n}\n","import { Hash, createView, toBytes } from './utils.js';\n// Polyfill for Safari 14\nfunction setBigUint64(view, byteOffset, value, isLE) {\n if (typeof view.setBigUint64 === 'function')\n return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number((value >> _32n) & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n// Base SHA2 class (RFC 6234)\nexport class SHA2 extends Hash {\n constructor(blockLen, outputLen, padOffset, isLE) {\n super();\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.finished = false;\n this.length = 0;\n this.pos = 0;\n this.destroyed = false;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n const { view, buffer, blockLen, finished } = this;\n if (finished)\n throw new Error('digest() was already called');\n data = toBytes(data);\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen)\n this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n if (!(out instanceof Uint8Array) || out.length < this.outputLen)\n throw new Error('_Sha2: Invalid output buffer');\n if (this.finished)\n throw new Error('digest() was already called');\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n this.buffer.subarray(pos).fill(0);\n // we have less than padOffset left in buffer, so we cannot put length in current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++)\n buffer[i] = 0;\n // NOTE: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64bit of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n this.get().forEach((v, i) => oview.setUint32(4 * i, v, isLE));\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to) {\n to || (to = new this.constructor());\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.length = length;\n to.pos = pos;\n to.finished = finished;\n to.destroyed = destroyed;\n if (length % blockLen)\n to.buffer.set(buffer);\n return to;\n }\n}\n","import { SHA2 } from './_sha2.js';\nimport { rotr, wrapConstructor } from './utils.js';\n// Choice: a ? b : c\nconst Chi = (a, b, c) => (a & b) ^ (~a & c);\n// Majority function, true if any two inpust is true\nconst Maj = (a, b, c) => (a & b) ^ (a & c) ^ (b & c);\n// Round constants:\n// first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311)\n// prettier-ignore\nconst SHA256_K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n// Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):\n// prettier-ignore\nconst IV = new Uint32Array([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n]);\n// Temporary buffer, not used to store anything between runs\n// Named this way because it matches specification.\nconst SHA256_W = new Uint32Array(64);\nclass SHA256 extends SHA2 {\n constructor() {\n super(64, 32, 8, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n this.A = IV[0] | 0;\n this.B = IV[1] | 0;\n this.C = IV[2] | 0;\n this.D = IV[3] | 0;\n this.E = IV[4] | 0;\n this.F = IV[5] | 0;\n this.G = IV[6] | 0;\n this.H = IV[7] | 0;\n }\n get() {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n set(A, B, C, D, E, F, G, H) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4)\n SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = (sigma0 + Maj(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n roundClean() {\n SHA256_W.fill(0);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n this.buffer.fill(0);\n }\n}\n/**\n * SHA2-256 hash function\n * @param message - data that would be hashed\n */\nexport const sha256 = wrapConstructor(() => new SHA256());\n","const U32_MASK64 = BigInt(2 ** 32 - 1);\nconst _32n = BigInt(32);\nexport function fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\nexport function split(lst, le = false) {\n let Ah = new Uint32Array(lst.length);\n let Al = new Uint32Array(lst.length);\n for (let i = 0; i < lst.length; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nexport const toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nexport const shrSH = (h, l, s) => h >>> s;\nexport const shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nexport const rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\nexport const rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nexport const rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\nexport const rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nexport const rotr32H = (h, l) => l;\nexport const rotr32L = (h, l) => h;\n// Left rotate for Shift in [1, 32)\nexport const rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\nexport const rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nexport const rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\nexport const rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nexport function add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nexport const add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nexport const add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nexport const add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nexport const add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nexport const add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nexport const add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n","import { SHA2 } from './_sha2.js';\nimport * as u64 from './_u64.js';\nimport { wrapConstructor } from './utils.js';\n// Round contants (first 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409):\n// prettier-ignore\nconst [SHA512_Kh, SHA512_Kl] = u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n)));\n// Temporary buffer, not used to store anything between runs\nconst SHA512_W_H = new Uint32Array(80);\nconst SHA512_W_L = new Uint32Array(80);\nexport class SHA512 extends SHA2 {\n constructor() {\n super(128, 64, 16, false);\n // We cannot use array here since array allows indexing by variable which means optimizer/compiler cannot use registers.\n // Also looks cleaner and easier to verify with spec.\n // Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = 0x6a09e667 | 0;\n this.Al = 0xf3bcc908 | 0;\n this.Bh = 0xbb67ae85 | 0;\n this.Bl = 0x84caa73b | 0;\n this.Ch = 0x3c6ef372 | 0;\n this.Cl = 0xfe94f82b | 0;\n this.Dh = 0xa54ff53a | 0;\n this.Dl = 0x5f1d36f1 | 0;\n this.Eh = 0x510e527f | 0;\n this.El = 0xade682d1 | 0;\n this.Fh = 0x9b05688c | 0;\n this.Fl = 0x2b3e6c1f | 0;\n this.Gh = 0x1f83d9ab | 0;\n this.Gl = 0xfb41bd6b | 0;\n this.Hh = 0x5be0cd19 | 0;\n this.Hl = 0x137e2179 | 0;\n }\n // prettier-ignore\n get() {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl) {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n roundClean() {\n SHA512_W_H.fill(0);\n SHA512_W_L.fill(0);\n }\n destroy() {\n this.buffer.fill(0);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\nclass SHA512_256 extends SHA512 {\n constructor() {\n super();\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = 0x22312194 | 0;\n this.Al = 0xfc2bf72c | 0;\n this.Bh = 0x9f555fa3 | 0;\n this.Bl = 0xc84c64c2 | 0;\n this.Ch = 0x2393b86b | 0;\n this.Cl = 0x6f53b151 | 0;\n this.Dh = 0x96387719 | 0;\n this.Dl = 0x5940eabd | 0;\n this.Eh = 0x96283ee2 | 0;\n this.El = 0xa88effe3 | 0;\n this.Fh = 0xbe5e1e25 | 0;\n this.Fl = 0x53863992 | 0;\n this.Gh = 0x2b0199fc | 0;\n this.Gl = 0x2c85b8aa | 0;\n this.Hh = 0x0eb72ddc | 0;\n this.Hl = 0x81c52ca2 | 0;\n this.outputLen = 32;\n }\n}\nclass SHA384 extends SHA512 {\n constructor() {\n super();\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = 0xcbbb9d5d | 0;\n this.Al = 0xc1059ed8 | 0;\n this.Bh = 0x629a292a | 0;\n this.Bl = 0x367cd507 | 0;\n this.Ch = 0x9159015a | 0;\n this.Cl = 0x3070dd17 | 0;\n this.Dh = 0x152fecd8 | 0;\n this.Dl = 0xf70e5939 | 0;\n this.Eh = 0x67332667 | 0;\n this.El = 0xffc00b31 | 0;\n this.Fh = 0x8eb44a87 | 0;\n this.Fl = 0x68581511 | 0;\n this.Gh = 0xdb0c2e0d | 0;\n this.Gl = 0x64f98fa7 | 0;\n this.Hh = 0x47b5481d | 0;\n this.Hl = 0xbefa4fa4 | 0;\n this.outputLen = 48;\n }\n}\nexport const sha512 = wrapConstructor(() => new SHA512());\nexport const sha512_256 = wrapConstructor(() => new SHA512_256());\nexport const sha384 = wrapConstructor(() => new SHA384());\n","export const version = \"@ethersproject/crypto@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","/* Browser Crypto Shims */\nimport { hmac } from \"@noble/hashes/hmac\";\nimport { pbkdf2 } from \"@noble/hashes/pbkdf2\";\nimport { sha256 } from \"@noble/hashes/sha256\";\nimport { sha512 } from \"@noble/hashes/sha512\";\nimport { logger } from \"./logger.js\";\nfunction getGlobal() {\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n throw new Error('unable to locate global object');\n}\n;\nconst anyGlobal = getGlobal();\nlet crypto = anyGlobal.crypto || anyGlobal.msCrypto;\nexport function createHash(algo) {\n switch (algo) {\n case \"sha256\": return sha256.create();\n case \"sha512\": return sha512.create();\n }\n return logger.throwArgumentError(\"invalid hashing algorithm name\", \"algorithm\", algo);\n}\nexport function createHmac(_algo, key) {\n const algo = ({ sha256, sha512 }[_algo]);\n if (algo == null) {\n return logger.throwArgumentError(\"invalid hmac algorithm\", \"algorithm\", _algo);\n }\n return hmac.create(algo, key);\n}\nexport function pbkdf2Sync(password, salt, iterations, keylen, _algo) {\n const algo = ({ sha256, sha512 }[_algo]);\n if (algo == null) {\n return logger.throwArgumentError(\"invalid pbkdf2 algorithm\", \"algorithm\", _algo);\n }\n return pbkdf2(algo, password, salt, { c: iterations, dkLen: keylen });\n}\nexport function randomBytes(length) {\n if (crypto == null) {\n return logger.throwError(\"platform does not support secure random numbers\", \"UNSUPPORTED_OPERATION\", {\n operation: \"randomBytes\"\n });\n }\n if (length <= 0 || length > 1024 || (length % 1) || length != length) {\n logger.throwArgumentError(\"invalid length\", \"length\", length);\n }\n const result = new Uint8Array(length);\n crypto.getRandomValues(result);\n return result;\n}\n//# sourceMappingURL=crypto-browser.js.map","import { createHmac } from \"crypto\"; /*-browser*/\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nlet locked = false;\nconst _computeHmac = function (algorithm, key, data) {\n return \"0x\" + createHmac(algorithm, key).update(data).digest(\"hex\");\n};\nlet __computeHmac = _computeHmac;\nexport function computeHmac(algorithm, _key, _data) {\n const key = logger.getBytes(_key, \"key\");\n const data = logger.getBytes(_data, \"data\");\n return hexlify(__computeHmac(algorithm, key, data));\n}\ncomputeHmac._ = _computeHmac;\ncomputeHmac.lock = function () { locked = true; };\ncomputeHmac.register = function (func) {\n if (locked) {\n throw new Error(\"computeHmac is locked\");\n }\n __computeHmac = func;\n};\nObject.freeze(computeHmac);\n//# sourceMappingURL=hmac.js.map","import * as u64 from './_u64.js';\nimport { Hash, u32, toBytes, wrapConstructor, wrapConstructorWithOpts, assertNumber, } from './utils.js';\n// Various per round constants calculations\nconst [SHA3_PI, SHA3_ROTL, _SHA3_IOTA] = [[], [], []];\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _7n = BigInt(7);\nconst _256n = BigInt(256);\nconst _0x71n = BigInt(0x71);\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n // Pi\n [x, y] = [y, (2 * x + 3 * y) % 5];\n SHA3_PI.push(2 * (5 * y + x));\n // Rotational\n SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n // Iota\n let t = _0n;\n for (let j = 0; j < 7; j++) {\n R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n if (R & _2n)\n t ^= _1n << ((_1n << BigInt(j)) - _1n);\n }\n _SHA3_IOTA.push(t);\n}\nconst [SHA3_IOTA_H, SHA3_IOTA_L] = u64.split(_SHA3_IOTA, true);\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h, l, s) => s > 32 ? u64.rotlBH(h, l, s) : u64.rotlSH(h, l, s);\nconst rotlL = (h, l, s) => s > 32 ? u64.rotlBL(h, l, s) : u64.rotlSL(h, l, s);\n// Same as keccakf1600, but allows to skip some rounds\nexport function keccakP(s, rounds = 24) {\n const B = new Uint32Array(5 * 2);\n // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n for (let round = 24 - rounds; round < 24; round++) {\n // Theta θ\n for (let x = 0; x < 10; x++)\n B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n for (let x = 0; x < 10; x += 2) {\n const idx1 = (x + 8) % 10;\n const idx0 = (x + 2) % 10;\n const B0 = B[idx0];\n const B1 = B[idx0 + 1];\n const Th = rotlH(B0, B1, 1) ^ B[idx1];\n const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n for (let y = 0; y < 50; y += 10) {\n s[x + y] ^= Th;\n s[x + y + 1] ^= Tl;\n }\n }\n // Rho (ρ) and Pi (π)\n let curH = s[2];\n let curL = s[3];\n for (let t = 0; t < 24; t++) {\n const shift = SHA3_ROTL[t];\n const Th = rotlH(curH, curL, shift);\n const Tl = rotlL(curH, curL, shift);\n const PI = SHA3_PI[t];\n curH = s[PI];\n curL = s[PI + 1];\n s[PI] = Th;\n s[PI + 1] = Tl;\n }\n // Chi (χ)\n for (let y = 0; y < 50; y += 10) {\n for (let x = 0; x < 10; x++)\n B[x] = s[y + x];\n for (let x = 0; x < 10; x++)\n s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n }\n // Iota (ι)\n s[0] ^= SHA3_IOTA_H[round];\n s[1] ^= SHA3_IOTA_L[round];\n }\n B.fill(0);\n}\nexport class Keccak extends Hash {\n // NOTE: we accept arguments in bytes instead of bits here.\n constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24) {\n super();\n this.blockLen = blockLen;\n this.suffix = suffix;\n this.outputLen = outputLen;\n this.enableXOF = enableXOF;\n this.rounds = rounds;\n this.pos = 0;\n this.posOut = 0;\n this.finished = false;\n this.destroyed = false;\n // Can be passed from user as dkLen\n assertNumber(outputLen);\n // 1600 = 5x5 matrix of 64bit. 1600 bits === 200 bytes\n if (0 >= this.blockLen || this.blockLen >= 200)\n throw new Error('Sha3 supports only keccak-f1600 function');\n this.state = new Uint8Array(200);\n this.state32 = u32(this.state);\n }\n keccak() {\n keccakP(this.state32, this.rounds);\n this.posOut = 0;\n this.pos = 0;\n }\n update(data) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n if (this.finished)\n throw new Error('digest() was already called');\n const { blockLen, state } = this;\n data = toBytes(data);\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n for (let i = 0; i < take; i++)\n state[this.pos++] ^= data[pos++];\n if (this.pos === blockLen)\n this.keccak();\n }\n return this;\n }\n finish() {\n if (this.finished)\n return;\n this.finished = true;\n const { state, suffix, pos, blockLen } = this;\n // Do the padding\n state[pos] ^= suffix;\n if ((suffix & 0x80) !== 0 && pos === blockLen - 1)\n this.keccak();\n state[blockLen - 1] ^= 0x80;\n this.keccak();\n }\n writeInto(out) {\n if (this.destroyed)\n throw new Error('instance is destroyed');\n if (!(out instanceof Uint8Array))\n throw new Error('Keccak: invalid output buffer');\n this.finish();\n for (let pos = 0, len = out.length; pos < len;) {\n if (this.posOut >= this.blockLen)\n this.keccak();\n const take = Math.min(this.blockLen - this.posOut, len - pos);\n out.set(this.state.subarray(this.posOut, this.posOut + take), pos);\n this.posOut += take;\n pos += take;\n }\n return out;\n }\n xofInto(out) {\n // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n if (!this.enableXOF)\n throw new Error('XOF is not possible for this instance');\n return this.writeInto(out);\n }\n xof(bytes) {\n assertNumber(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out) {\n if (out.length < this.outputLen)\n throw new Error('Keccak: invalid output buffer');\n if (this.finished)\n throw new Error('digest() was already called');\n this.finish();\n this.writeInto(out);\n this.destroy();\n return out;\n }\n digest() {\n return this.digestInto(new Uint8Array(this.outputLen));\n }\n destroy() {\n this.destroyed = true;\n this.state.fill(0);\n }\n _cloneInto(to) {\n const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n to || (to = new Keccak(blockLen, suffix, outputLen, enableXOF, rounds));\n to.state32.set(this.state32);\n to.pos = this.pos;\n to.posOut = this.posOut;\n to.finished = this.finished;\n to.rounds = rounds;\n // Suffix can change in cSHAKE\n to.suffix = suffix;\n to.outputLen = outputLen;\n to.enableXOF = enableXOF;\n to.destroyed = this.destroyed;\n return to;\n }\n}\nconst gen = (suffix, blockLen, outputLen) => wrapConstructor(() => new Keccak(blockLen, suffix, outputLen));\nexport const sha3_224 = gen(0x06, 144, 224 / 8);\n/**\n * SHA3-256 hash function\n * @param message - that would be hashed\n */\nexport const sha3_256 = gen(0x06, 136, 256 / 8);\nexport const sha3_384 = gen(0x06, 104, 384 / 8);\nexport const sha3_512 = gen(0x06, 72, 512 / 8);\nexport const keccak_224 = gen(0x01, 144, 224 / 8);\n/**\n * keccak-256 hash function. Different from SHA3-256.\n * @param message - that would be hashed\n */\nexport const keccak_256 = gen(0x01, 136, 256 / 8);\nexport const keccak_384 = gen(0x01, 104, 384 / 8);\nexport const keccak_512 = gen(0x01, 72, 512 / 8);\nconst genShake = (suffix, blockLen, outputLen) => wrapConstructorWithOpts((opts = {}) => new Keccak(blockLen, suffix, opts.dkLen !== undefined ? opts.dkLen : outputLen, true));\nexport const shake128 = genShake(0x1f, 168, 128 / 8);\nexport const shake256 = genShake(0x1f, 136, 256 / 8);\n","import { keccak_256 } from \"@noble/hashes/sha3\";\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nlet locked = false;\nconst _keccak256 = function (data) {\n return keccak_256(data);\n};\nlet __keccak256 = _keccak256;\nexport function keccak256(_data) {\n const data = logger.getBytes(_data, \"data\");\n return hexlify(__keccak256(data));\n}\nkeccak256._ = _keccak256;\nkeccak256.lock = function () { locked = true; };\nkeccak256.register = function (func) {\n if (locked) {\n throw new TypeError(\"keccak256 is locked\");\n }\n __keccak256 = func;\n};\nObject.freeze(keccak256);\n//# sourceMappingURL=keccak.js.map","import { SHA2 } from './_sha2.js';\nimport { wrapConstructor } from './utils.js';\n// https://homes.esat.kuleuven.be/~bosselae/ripemd160.html\n// https://homes.esat.kuleuven.be/~bosselae/ripemd160/pdf/AB-9601/AB-9601.pdf\nconst Rho = new Uint8Array([7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8]);\nconst Id = Uint8Array.from({ length: 16 }, (_, i) => i);\nconst Pi = Id.map((i) => (9 * i + 5) % 16);\nlet idxL = [Id];\nlet idxR = [Pi];\nfor (let i = 0; i < 4; i++)\n for (let j of [idxL, idxR])\n j.push(j[i].map((k) => Rho[k]));\nconst shifts = [\n [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8],\n [12, 13, 11, 15, 6, 9, 9, 7, 12, 15, 11, 13, 7, 8, 7, 7],\n [13, 15, 14, 11, 7, 7, 6, 8, 13, 14, 13, 12, 5, 5, 6, 9],\n [14, 11, 12, 14, 8, 6, 5, 5, 15, 12, 15, 14, 9, 9, 8, 6],\n [15, 12, 13, 13, 9, 5, 8, 6, 14, 11, 12, 11, 8, 6, 5, 5],\n].map((i) => new Uint8Array(i));\nconst shiftsL = idxL.map((idx, i) => idx.map((j) => shifts[i][j]));\nconst shiftsR = idxR.map((idx, i) => idx.map((j) => shifts[i][j]));\nconst Kl = new Uint32Array([0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]);\nconst Kr = new Uint32Array([0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]);\n// The rotate left (circular left shift) operation for uint32\nconst rotl = (word, shift) => (word << shift) | (word >>> (32 - shift));\n// It's called f() in spec.\nfunction f(group, x, y, z) {\n if (group === 0)\n return x ^ y ^ z;\n else if (group === 1)\n return (x & y) | (~x & z);\n else if (group === 2)\n return (x | ~y) ^ z;\n else if (group === 3)\n return (x & z) | (y & ~z);\n else\n return x ^ (y | ~z);\n}\n// Temporary buffer, not used to store anything between runs\nconst BUF = new Uint32Array(16);\nexport class RIPEMD160 extends SHA2 {\n constructor() {\n super(64, 20, 8, true);\n this.h0 = 0x67452301 | 0;\n this.h1 = 0xefcdab89 | 0;\n this.h2 = 0x98badcfe | 0;\n this.h3 = 0x10325476 | 0;\n this.h4 = 0xc3d2e1f0 | 0;\n }\n get() {\n const { h0, h1, h2, h3, h4 } = this;\n return [h0, h1, h2, h3, h4];\n }\n set(h0, h1, h2, h3, h4) {\n this.h0 = h0 | 0;\n this.h1 = h1 | 0;\n this.h2 = h2 | 0;\n this.h3 = h3 | 0;\n this.h4 = h4 | 0;\n }\n process(view, offset) {\n for (let i = 0; i < 16; i++, offset += 4)\n BUF[i] = view.getUint32(offset, true);\n // prettier-ignore\n let al = this.h0 | 0, ar = al, bl = this.h1 | 0, br = bl, cl = this.h2 | 0, cr = cl, dl = this.h3 | 0, dr = dl, el = this.h4 | 0, er = el;\n // Instead of iterating 0 to 80, we split it into 5 groups\n // And use the groups in constants, functions, etc. Much simpler\n for (let group = 0; group < 5; group++) {\n const rGroup = 4 - group;\n const hbl = Kl[group], hbr = Kr[group]; // prettier-ignore\n const rl = idxL[group], rr = idxR[group]; // prettier-ignore\n const sl = shiftsL[group], sr = shiftsR[group]; // prettier-ignore\n for (let i = 0; i < 16; i++) {\n const tl = (rotl(al + f(group, bl, cl, dl) + BUF[rl[i]] + hbl, sl[i]) + el) | 0;\n al = el, el = dl, dl = rotl(cl, 10) | 0, cl = bl, bl = tl; // prettier-ignore\n }\n // 2 loops are 10% faster\n for (let i = 0; i < 16; i++) {\n const tr = (rotl(ar + f(rGroup, br, cr, dr) + BUF[rr[i]] + hbr, sr[i]) + er) | 0;\n ar = er, er = dr, dr = rotl(cr, 10) | 0, cr = br, br = tr; // prettier-ignore\n }\n }\n // Add the compressed chunk to the current hash value\n this.set((this.h1 + cl + dr) | 0, (this.h2 + dl + er) | 0, (this.h3 + el + ar) | 0, (this.h4 + al + br) | 0, (this.h0 + bl + cr) | 0);\n }\n roundClean() {\n BUF.fill(0);\n }\n destroy() {\n this.destroyed = true;\n this.buffer.fill(0);\n this.set(0, 0, 0, 0, 0);\n }\n}\n/**\n * RIPEMD-160 - a hash function from 1990s.\n * @param message - msg that would be hashed\n */\nexport const ripemd160 = wrapConstructor(() => new RIPEMD160());\n","import { ripemd160 as noble_ripemd160 } from \"@noble/hashes/ripemd160\";\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nlet locked = false;\nconst _ripemd160 = function (data) {\n return noble_ripemd160(data);\n};\nlet __ripemd160 = _ripemd160;\nexport function ripemd160(_data) {\n const data = logger.getBytes(_data, \"data\");\n return hexlify(__ripemd160(data));\n}\nripemd160._ = _ripemd160;\nripemd160.lock = function () { locked = true; };\nripemd160.register = function (func) {\n if (locked) {\n throw new TypeError(\"ripemd160 is locked\");\n }\n __ripemd160 = func;\n};\nObject.freeze(ripemd160);\n//# sourceMappingURL=ripemd160.js.map","import { pbkdf2Sync } from \"crypto\"; /*-browser*/\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nlet locked = false;\nconst _pbkdf2 = function (password, salt, iterations, keylen, algo) {\n return pbkdf2Sync(password, salt, iterations, keylen, algo);\n};\nlet __pbkdf2 = _pbkdf2;\nexport function pbkdf2(_password, _salt, iterations, keylen, algo) {\n const password = logger.getBytes(_password, \"password\");\n const salt = logger.getBytes(_salt, \"salt\");\n return hexlify(__pbkdf2(password, salt, iterations, keylen, algo));\n}\npbkdf2._ = _pbkdf2;\npbkdf2.lock = function () { locked = true; };\npbkdf2.register = function (func) {\n if (locked) {\n throw new Error(\"pbkdf2 is locked\");\n }\n __pbkdf2 = func;\n};\nObject.freeze(pbkdf2);\n//# sourceMappingURL=pbkdf2.js.map","import { randomBytes as crypto_random } from \"crypto\"; /*-browser*/\nlet locked = false;\nconst _randomBytes = function (length) {\n return new Uint8Array(crypto_random(length));\n};\nlet __randomBytes = _randomBytes;\nexport function randomBytes(length) {\n return __randomBytes(length);\n}\nrandomBytes._ = _randomBytes;\nrandomBytes.lock = function () { locked = true; };\nrandomBytes.register = function (func) {\n if (locked) {\n throw new Error(\"random is locked\");\n }\n __randomBytes = func;\n};\nObject.freeze(randomBytes);\n//# sourceMappingURL=random.js.map","import { sha256 } from './sha256.js';\nimport { pbkdf2 } from './pbkdf2.js';\nimport { assertNumber, asyncLoop, checkOpts, u32 } from './utils.js';\n// RFC 7914 Scrypt KDF\n// Left rotate for uint32\nconst rotl = (a, b) => (a << b) | (a >>> (32 - b));\n// The main Scrypt loop: uses Salsa extensively.\n// Six versions of the function were tried, this is the fastest one.\n// prettier-ignore\nfunction XorAndSalsa(prev, pi, input, ii, out, oi) {\n // Based on https://cr.yp.to/salsa20.html\n // Xor blocks\n let y00 = prev[pi++] ^ input[ii++], y01 = prev[pi++] ^ input[ii++];\n let y02 = prev[pi++] ^ input[ii++], y03 = prev[pi++] ^ input[ii++];\n let y04 = prev[pi++] ^ input[ii++], y05 = prev[pi++] ^ input[ii++];\n let y06 = prev[pi++] ^ input[ii++], y07 = prev[pi++] ^ input[ii++];\n let y08 = prev[pi++] ^ input[ii++], y09 = prev[pi++] ^ input[ii++];\n let y10 = prev[pi++] ^ input[ii++], y11 = prev[pi++] ^ input[ii++];\n let y12 = prev[pi++] ^ input[ii++], y13 = prev[pi++] ^ input[ii++];\n let y14 = prev[pi++] ^ input[ii++], y15 = prev[pi++] ^ input[ii++];\n // Save state to temporary variables (salsa)\n let x00 = y00, x01 = y01, x02 = y02, x03 = y03, x04 = y04, x05 = y05, x06 = y06, x07 = y07, x08 = y08, x09 = y09, x10 = y10, x11 = y11, x12 = y12, x13 = y13, x14 = y14, x15 = y15;\n // Main loop (salsa)\n for (let i = 0; i < 8; i += 2) {\n x04 ^= rotl(x00 + x12 | 0, 7);\n x08 ^= rotl(x04 + x00 | 0, 9);\n x12 ^= rotl(x08 + x04 | 0, 13);\n x00 ^= rotl(x12 + x08 | 0, 18);\n x09 ^= rotl(x05 + x01 | 0, 7);\n x13 ^= rotl(x09 + x05 | 0, 9);\n x01 ^= rotl(x13 + x09 | 0, 13);\n x05 ^= rotl(x01 + x13 | 0, 18);\n x14 ^= rotl(x10 + x06 | 0, 7);\n x02 ^= rotl(x14 + x10 | 0, 9);\n x06 ^= rotl(x02 + x14 | 0, 13);\n x10 ^= rotl(x06 + x02 | 0, 18);\n x03 ^= rotl(x15 + x11 | 0, 7);\n x07 ^= rotl(x03 + x15 | 0, 9);\n x11 ^= rotl(x07 + x03 | 0, 13);\n x15 ^= rotl(x11 + x07 | 0, 18);\n x01 ^= rotl(x00 + x03 | 0, 7);\n x02 ^= rotl(x01 + x00 | 0, 9);\n x03 ^= rotl(x02 + x01 | 0, 13);\n x00 ^= rotl(x03 + x02 | 0, 18);\n x06 ^= rotl(x05 + x04 | 0, 7);\n x07 ^= rotl(x06 + x05 | 0, 9);\n x04 ^= rotl(x07 + x06 | 0, 13);\n x05 ^= rotl(x04 + x07 | 0, 18);\n x11 ^= rotl(x10 + x09 | 0, 7);\n x08 ^= rotl(x11 + x10 | 0, 9);\n x09 ^= rotl(x08 + x11 | 0, 13);\n x10 ^= rotl(x09 + x08 | 0, 18);\n x12 ^= rotl(x15 + x14 | 0, 7);\n x13 ^= rotl(x12 + x15 | 0, 9);\n x14 ^= rotl(x13 + x12 | 0, 13);\n x15 ^= rotl(x14 + x13 | 0, 18);\n }\n // Write output (salsa)\n out[oi++] = (y00 + x00) | 0;\n out[oi++] = (y01 + x01) | 0;\n out[oi++] = (y02 + x02) | 0;\n out[oi++] = (y03 + x03) | 0;\n out[oi++] = (y04 + x04) | 0;\n out[oi++] = (y05 + x05) | 0;\n out[oi++] = (y06 + x06) | 0;\n out[oi++] = (y07 + x07) | 0;\n out[oi++] = (y08 + x08) | 0;\n out[oi++] = (y09 + x09) | 0;\n out[oi++] = (y10 + x10) | 0;\n out[oi++] = (y11 + x11) | 0;\n out[oi++] = (y12 + x12) | 0;\n out[oi++] = (y13 + x13) | 0;\n out[oi++] = (y14 + x14) | 0;\n out[oi++] = (y15 + x15) | 0;\n}\nfunction BlockMix(input, ii, out, oi, r) {\n // The block B is r 128-byte chunks (which is equivalent of 2r 64-byte chunks)\n let head = oi + 0;\n let tail = oi + 16 * r;\n for (let i = 0; i < 16; i++)\n out[tail + i] = input[ii + (2 * r - 1) * 16 + i]; // X ← B[2r−1]\n for (let i = 0; i < r; i++, head += 16, ii += 16) {\n // We write odd & even Yi at same time. Even: 0bXXXXX0 Odd: 0bXXXXX1\n XorAndSalsa(out, tail, input, ii, out, head); // head[i] = Salsa(blockIn[2*i] ^ tail[i-1])\n if (i > 0)\n tail += 16; // First iteration overwrites tmp value in tail\n XorAndSalsa(out, head, input, (ii += 16), out, tail); // tail[i] = Salsa(blockIn[2*i+1] ^ head[i])\n }\n}\n// Common prologue and epilogue for sync/async functions\nfunction scryptInit(password, salt, _opts) {\n // Maxmem - 1GB+1KB by default\n const opts = checkOpts({\n dkLen: 32,\n asyncTick: 10,\n maxmem: 1024 ** 3 + 1024,\n }, _opts);\n const { N, r, p, dkLen, asyncTick, maxmem, onProgress } = opts;\n assertNumber(N);\n assertNumber(r);\n assertNumber(p);\n assertNumber(dkLen);\n assertNumber(asyncTick);\n assertNumber(maxmem);\n if (onProgress !== undefined && typeof onProgress !== 'function')\n throw new Error('progressCb should be function');\n const blockSize = 128 * r;\n const blockSize32 = blockSize / 4;\n if (N <= 1 || (N & (N - 1)) !== 0 || N >= 2 ** (blockSize / 8) || N > 2 ** 32) {\n // NOTE: we limit N to be less than 2**32 because of 32 bit variant of Integrify function\n // There is no JS engines that allows alocate more than 4GB per single Uint8Array for now, but can change in future.\n throw new Error('Scrypt: N must be larger than 1, a power of 2, less than 2^(128 * r / 8) and less than 2^32');\n }\n if (p < 0 || p > ((2 ** 32 - 1) * 32) / blockSize) {\n throw new Error('Scrypt: p must be a positive integer less than or equal to ((2^32 - 1) * 32) / (128 * r)');\n }\n if (dkLen < 0 || dkLen > (2 ** 32 - 1) * 32) {\n throw new Error('Scrypt: dkLen should be positive integer less than or equal to (2^32 - 1) * 32');\n }\n const memUsed = blockSize * (N + p);\n if (memUsed > maxmem) {\n throw new Error(`Scrypt: parameters too large, ${memUsed} (128 * r * (N + p)) > ${maxmem} (maxmem)`);\n }\n // [B0...Bp−1] ← PBKDF2HMAC-SHA256(Passphrase, Salt, 1, blockSize*ParallelizationFactor)\n // Since it has only one iteration there is no reason to use async variant\n const B = pbkdf2(sha256, password, salt, { c: 1, dkLen: blockSize * p });\n const B32 = u32(B);\n // Re-used between parallel iterations. Array(iterations) of B\n const V = u32(new Uint8Array(blockSize * N));\n const tmp = u32(new Uint8Array(blockSize));\n let blockMixCb = () => { };\n if (onProgress) {\n const totalBlockMix = 2 * N * p;\n // Invoke callback if progress changes from 10.01 to 10.02\n // Allows to draw smooth progress bar on up to 8K screen\n const callbackPer = Math.max(Math.floor(totalBlockMix / 10000), 1);\n let blockMixCnt = 0;\n blockMixCb = () => {\n blockMixCnt++;\n if (onProgress && (!(blockMixCnt % callbackPer) || blockMixCnt === totalBlockMix))\n onProgress(blockMixCnt / totalBlockMix);\n };\n }\n return { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb, asyncTick };\n}\nfunction scryptOutput(password, dkLen, B, V, tmp) {\n const res = pbkdf2(sha256, password, B, { c: 1, dkLen });\n B.fill(0);\n V.fill(0);\n tmp.fill(0);\n return res;\n}\n/**\n * Scrypt KDF from RFC 7914.\n * @param password - pass\n * @param salt - salt\n * @param opts - parameters\n * - `N` is cpu/mem work factor (power of 2 e.g. 2**18)\n * - `r` is block size (8 is common), fine-tunes sequential memory read size and performance\n * - `p` is parallelization factor (1 is common)\n * - `dkLen` is output key length in bytes e.g. 32.\n * - `asyncTick` - (default: 10) max time in ms for which async function can block execution\n * - `maxmem` - (default: `1024 ** 3 + 1024` aka 1GB+1KB). A limit that the app could use for scrypt\n * - `onProgress` - callback function that would be executed for progress report\n * @returns Derived key\n */\nexport function scrypt(password, salt, opts) {\n const { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb } = scryptInit(password, salt, opts);\n for (let pi = 0; pi < p; pi++) {\n const Pi = blockSize32 * pi;\n for (let i = 0; i < blockSize32; i++)\n V[i] = B32[Pi + i]; // V[0] = B[i]\n for (let i = 0, pos = 0; i < N - 1; i++) {\n BlockMix(V, pos, V, (pos += blockSize32), r); // V[i] = BlockMix(V[i-1]);\n blockMixCb();\n }\n BlockMix(V, (N - 1) * blockSize32, B32, Pi, r); // Process last element\n blockMixCb();\n for (let i = 0; i < N; i++) {\n // First u32 of the last 64-byte block (u32 is LE)\n const j = B32[Pi + blockSize32 - 16] % N; // j = Integrify(X) % iterations\n for (let k = 0; k < blockSize32; k++)\n tmp[k] = B32[Pi + k] ^ V[j * blockSize32 + k]; // tmp = B ^ V[j]\n BlockMix(tmp, 0, B32, Pi, r); // B = BlockMix(B ^ V[j])\n blockMixCb();\n }\n }\n return scryptOutput(password, dkLen, B, V, tmp);\n}\n/**\n * Scrypt KDF from RFC 7914.\n */\nexport async function scryptAsync(password, salt, opts) {\n const { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb, asyncTick } = scryptInit(password, salt, opts);\n for (let pi = 0; pi < p; pi++) {\n const Pi = blockSize32 * pi;\n for (let i = 0; i < blockSize32; i++)\n V[i] = B32[Pi + i]; // V[0] = B[i]\n let pos = 0;\n await asyncLoop(N - 1, asyncTick, (i) => {\n BlockMix(V, pos, V, (pos += blockSize32), r); // V[i] = BlockMix(V[i-1]);\n blockMixCb();\n });\n BlockMix(V, (N - 1) * blockSize32, B32, Pi, r); // Process last element\n blockMixCb();\n await asyncLoop(N, asyncTick, (i) => {\n // First u32 of the last 64-byte block (u32 is LE)\n const j = B32[Pi + blockSize32 - 16] % N; // j = Integrify(X) % iterations\n for (let k = 0; k < blockSize32; k++)\n tmp[k] = B32[Pi + k] ^ V[j * blockSize32 + k]; // tmp = B ^ V[j]\n BlockMix(tmp, 0, B32, Pi, r); // B = BlockMix(B ^ V[j])\n blockMixCb();\n });\n }\n return scryptOutput(password, dkLen, B, V, tmp);\n}\n","import { scrypt as _nobleSync, scryptAsync as _nobleAsync } from \"@noble/hashes/scrypt\";\nimport { hexlify as H } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nlet lockedSync = false, lockedAsync = false;\nconst _scryptAsync = async function (passwd, salt, N, r, p, dkLen, onProgress) {\n return await _nobleAsync(passwd, salt, { N, r, p, dkLen, onProgress });\n};\nconst _scryptSync = function (passwd, salt, N, r, p, dkLen) {\n return _nobleSync(passwd, salt, { N, r, p, dkLen });\n};\nlet __scryptAsync = _scryptAsync;\nlet __scryptSync = _scryptSync;\nexport async function scrypt(_passwd, _salt, N, r, p, dkLen, progress) {\n const passwd = logger.getBytes(_passwd, \"passwd\");\n const salt = logger.getBytes(_salt, \"salt\");\n return H(await __scryptAsync(passwd, salt, N, r, p, dkLen, progress));\n}\nscrypt._ = _scryptAsync;\nscrypt.lock = function () { lockedAsync = true; };\nscrypt.register = function (func) {\n if (lockedAsync) {\n throw new Error(\"scrypt is locked\");\n }\n __scryptAsync = func;\n};\nObject.freeze(scrypt);\nexport function scryptSync(_passwd, _salt, N, r, p, dkLen) {\n const passwd = logger.getBytes(_passwd, \"passwd\");\n const salt = logger.getBytes(_salt, \"salt\");\n return H(__scryptSync(passwd, salt, N, r, p, dkLen));\n}\nscryptSync._ = _scryptSync;\nscryptSync.lock = function () { lockedSync = true; };\nscryptSync.register = function (func) {\n if (lockedSync) {\n throw new Error(\"scryptSync is locked\");\n }\n __scryptSync = func;\n};\nObject.freeze(scryptSync);\n//# sourceMappingURL=scrypt.js.map","import { createHash } from \"crypto\"; /*-browser*/\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nconst _sha256 = function (data) {\n return createHash(\"sha256\").update(data).digest();\n};\nconst _sha512 = function (data) {\n return createHash(\"sha512\").update(data).digest();\n};\nlet __sha256 = _sha256;\nlet __sha512 = _sha512;\nlet locked256 = false, locked512 = false;\nexport function sha256(_data) {\n const data = logger.getBytes(_data, \"data\");\n return hexlify(__sha256(data));\n}\nsha256._ = _sha256;\nsha256.lock = function () { locked256 = true; };\nsha256.register = function (func) {\n if (locked256) {\n throw new Error(\"sha256 is locked\");\n }\n __sha256 = func;\n};\nObject.freeze(sha256);\nexport function sha512(_data) {\n const data = logger.getBytes(_data, \"data\");\n return hexlify(__sha512(data));\n}\nsha512._ = _sha512;\nsha512.lock = function () { locked512 = true; };\nsha512.register = function (func) {\n if (locked512) {\n throw new Error(\"sha512 is locked\");\n }\n __sha512 = func;\n};\nObject.freeze(sha256);\n//# sourceMappingURL=sha2.js.map","// We import all these so we can export lock()\nimport { computeHmac } from \"./hmac.js\";\nimport { keccak256 } from \"./keccak.js\";\nimport { ripemd160 } from \"./ripemd160.js\";\nimport { pbkdf2 } from \"./pbkdf2.js\";\nimport { randomBytes } from \"./random.js\";\nimport { scrypt, scryptSync } from \"./scrypt.js\";\nimport { sha256, sha512 } from \"./sha2.js\";\nexport { computeHmac, randomBytes, keccak256, ripemd160, sha256, sha512, pbkdf2, scrypt, scryptSync };\nexport function lock() {\n computeHmac.lock();\n keccak256.lock();\n pbkdf2.lock();\n randomBytes.lock();\n ripemd160.lock();\n scrypt.lock();\n scryptSync.lock();\n sha256.lock();\n sha512.lock();\n}\n//# sourceMappingURL=index.js.map","export const version = \"@ethersproject/address@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { arrayify } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { logger } from \"./logger.js\";\nconst BN_0 = BigInt(0);\nconst BN_36 = BigInt(36);\nfunction getChecksumAddress(address) {\n // if (!isHexString(address, 20)) {\n // logger.throwArgumentError(\"invalid address\", \"address\", address);\n // }\n address = address.toLowerCase();\n const chars = address.substring(2).split(\"\");\n const expanded = new Uint8Array(40);\n for (let i = 0; i < 40; i++) {\n expanded[i] = chars[i].charCodeAt(0);\n }\n const hashed = arrayify(keccak256(expanded));\n for (let i = 0; i < 40; i += 2) {\n if ((hashed[i >> 1] >> 4) >= 8) {\n chars[i] = chars[i].toUpperCase();\n }\n if ((hashed[i >> 1] & 0x0f) >= 8) {\n chars[i + 1] = chars[i + 1].toUpperCase();\n }\n }\n return \"0x\" + chars.join(\"\");\n}\n// See: https://en.wikipedia.org/wiki/International_Bank_Account_Number\n// Create lookup table\nconst ibanLookup = {};\nfor (let i = 0; i < 10; i++) {\n ibanLookup[String(i)] = String(i);\n}\nfor (let i = 0; i < 26; i++) {\n ibanLookup[String.fromCharCode(65 + i)] = String(10 + i);\n}\n// How many decimal digits can we process? (for 64-bit float, this is 15)\n// i.e. Math.floor(Math.log10(Number.MAX_SAFE_INTEGER));\nconst safeDigits = 15;\nfunction ibanChecksum(address) {\n address = address.toUpperCase();\n address = address.substring(4) + address.substring(0, 2) + \"00\";\n let expanded = address.split(\"\").map((c) => { return ibanLookup[c]; }).join(\"\");\n // Javascript can handle integers safely up to 15 (decimal) digits\n while (expanded.length >= safeDigits) {\n let block = expanded.substring(0, safeDigits);\n expanded = parseInt(block, 10) % 97 + expanded.substring(block.length);\n }\n let checksum = String(98 - (parseInt(expanded, 10) % 97));\n while (checksum.length < 2) {\n checksum = \"0\" + checksum;\n }\n return checksum;\n}\n;\nconst Base36 = (function () {\n ;\n const result = {};\n for (let i = 0; i < 36; i++) {\n const key = \"0123456789abcdefghijklmnopqrstuvwxyz\"[i];\n result[key] = BigInt(i);\n }\n return result;\n})();\nfunction fromBase36(value) {\n value = value.toLowerCase();\n let result = BN_0;\n for (let i = 0; i < value.length; i++) {\n result = result * BN_36 + Base36[value[i]];\n }\n return result;\n}\nexport function getAddress(address) {\n if (typeof (address) !== \"string\") {\n logger.throwArgumentError(\"invalid address\", \"address\", address);\n }\n if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) {\n // Missing the 0x prefix\n if (address.substring(0, 2) !== \"0x\") {\n address = \"0x\" + address;\n }\n const result = getChecksumAddress(address);\n // It is a checksummed address with a bad checksum\n if (address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) && result !== address) {\n logger.throwArgumentError(\"bad address checksum\", \"address\", address);\n }\n return result;\n }\n // Maybe ICAP? (we only support direct mode)\n if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) {\n // It is an ICAP address with a bad checksum\n if (address.substring(2, 4) !== ibanChecksum(address)) {\n logger.throwArgumentError(\"bad icap checksum\", \"address\", address);\n }\n let result = fromBase36(address.substring(4)).toString(16);\n while (result.length < 40) {\n result = \"0\" + result;\n }\n return getChecksumAddress(\"0x\" + result);\n }\n return logger.throwArgumentError(\"invalid address\", \"address\", address);\n}\nexport function getIcapAddress(address) {\n //let base36 = _base16To36(getAddress(address).substring(2)).toUpperCase();\n let base36 = BigInt(getAddress(address)).toString(36).toUpperCase();\n while (base36.length < 30) {\n base36 = \"0\" + base36;\n }\n return \"XE\" + ibanChecksum(\"XE00\" + base36) + base36;\n}\n//# sourceMappingURL=address.js.map","export const version = \"@ethersproject/rlp@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","//See: https://github.com/ethereum/wiki/wiki/RLP\nimport { logger } from \"./logger.js\";\nfunction arrayifyInteger(value) {\n const result = [];\n while (value) {\n result.unshift(value & 0xff);\n value >>= 8;\n }\n return result;\n}\nfunction _encode(object) {\n if (Array.isArray(object)) {\n let payload = [];\n object.forEach(function (child) {\n payload = payload.concat(_encode(child));\n });\n if (payload.length <= 55) {\n payload.unshift(0xc0 + payload.length);\n return payload;\n }\n const length = arrayifyInteger(payload.length);\n length.unshift(0xf7 + length.length);\n return length.concat(payload);\n }\n const data = Array.prototype.slice.call(logger.getBytes(object, \"object\"));\n if (data.length === 1 && data[0] <= 0x7f) {\n return data;\n }\n else if (data.length <= 55) {\n data.unshift(0x80 + data.length);\n return data;\n }\n const length = arrayifyInteger(data.length);\n length.unshift(0xb7 + length.length);\n return length.concat(data);\n}\nconst nibbles = \"0123456789abcdef\";\nexport function encodeRlp(object) {\n let result = \"0x\";\n for (const v of _encode(object)) {\n result += nibbles[v >> 4];\n result += nibbles[v & 0xf];\n }\n return result;\n}\n//# sourceMappingURL=encode.js.map","//See: https://github.com/ethereum/wiki/wiki/RLP\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nfunction hexlifyByte(value) {\n let result = value.toString(16);\n while (result.length < 2) {\n result = \"0\" + result;\n }\n return \"0x\" + result;\n}\nfunction unarrayifyInteger(data, offset, length) {\n let result = 0;\n for (let i = 0; i < length; i++) {\n result = (result * 256) + data[offset + i];\n }\n return result;\n}\nfunction _decodeChildren(data, offset, childOffset, length) {\n const result = [];\n while (childOffset < offset + 1 + length) {\n const decoded = _decode(data, childOffset);\n result.push(decoded.result);\n childOffset += decoded.consumed;\n if (childOffset > offset + 1 + length) {\n logger.throwError(\"child data too short\", \"BUFFER_OVERRUN\", {\n buffer: data, length, offset\n });\n }\n }\n return { consumed: (1 + length), result: result };\n}\n// returns { consumed: number, result: Object }\nfunction _decode(data, offset) {\n if (data.length === 0) {\n logger.throwError(\"data too short\", \"BUFFER_OVERRUN\", {\n buffer: data, length: 0, offset: 1\n });\n }\n const checkOffset = (offset) => {\n if (offset > data.length) {\n logger.throwError(\"data short segment too short\", \"BUFFER_OVERRUN\", {\n buffer: data, length: data.length, offset\n });\n }\n };\n // Array with extra length prefix\n if (data[offset] >= 0xf8) {\n const lengthLength = data[offset] - 0xf7;\n checkOffset(offset + 1 + lengthLength);\n const length = unarrayifyInteger(data, offset + 1, lengthLength);\n checkOffset(offset + 1 + lengthLength + length);\n return _decodeChildren(data, offset, offset + 1 + lengthLength, lengthLength + length);\n }\n else if (data[offset] >= 0xc0) {\n const length = data[offset] - 0xc0;\n checkOffset(offset + 1 + length);\n return _decodeChildren(data, offset, offset + 1, length);\n }\n else if (data[offset] >= 0xb8) {\n const lengthLength = data[offset] - 0xb7;\n checkOffset(offset + 1 + lengthLength);\n const length = unarrayifyInteger(data, offset + 1, lengthLength);\n checkOffset(offset + 1 + lengthLength + length);\n const result = hexlify(data.slice(offset + 1 + lengthLength, offset + 1 + lengthLength + length));\n return { consumed: (1 + lengthLength + length), result: result };\n }\n else if (data[offset] >= 0x80) {\n const length = data[offset] - 0x80;\n checkOffset(offset + 1 + length);\n const result = hexlify(data.slice(offset + 1, offset + 1 + length));\n return { consumed: (1 + length), result: result };\n }\n return { consumed: 1, result: hexlifyByte(data[offset]) };\n}\nexport function decodeRlp(_data) {\n const data = logger.getBytes(_data, \"data\");\n const decoded = _decode(data, 0);\n if (decoded.consumed !== data.length) {\n logger.throwArgumentError(\"unexpected junk after rlp payload\", \"data\", _data);\n }\n return decoded.result;\n}\n//# sourceMappingURL=decode.js.map","import { concat, dataSlice } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { encodeRlp } from \"@ethersproject/rlp\";\nimport { getAddress } from \"./address.js\";\nimport { logger } from \"./logger.js\";\n// http://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed\nexport function getCreateAddress(tx) {\n const from = getAddress(tx.from);\n const nonce = logger.getBigInt(tx.nonce, \"tx.nonce\");\n let nonceHex = nonce.toString(16);\n if (nonceHex === \"0\") {\n nonceHex = \"0x\";\n }\n else if (nonceHex.length % 2) {\n nonceHex = \"0x0\" + nonceHex;\n }\n else {\n nonceHex = \"0x\" + nonceHex;\n }\n return getAddress(dataSlice(keccak256(encodeRlp([from, nonceHex])), 12));\n}\nexport function getCreate2Address(_from, _salt, _initCodeHash) {\n const from = getAddress(_from);\n const salt = logger.getBytes(_salt, \"salt\");\n const initCodeHash = logger.getBytes(_initCodeHash, \"initCodeHash\");\n if (salt.length !== 32) {\n logger.throwArgumentError(\"salt must be 32 bytes\", \"salt\", _salt);\n }\n if (initCodeHash.length !== 32) {\n logger.throwArgumentError(\"initCodeHash must be 32 bytes\", \"initCodeHash\", _initCodeHash);\n }\n return getAddress(dataSlice(keccak256(concat([\"0xff\", from, salt, initCodeHash])), 12));\n}\n//# sourceMappingURL=contract-address.js.map","import { getAddress } from \"./address.js\";\nimport { logger } from \"./logger.js\";\nexport function isAddressable(value) {\n return (value && typeof (value.getAddress) === \"function\");\n}\nexport function isAddress(value) {\n try {\n getAddress(value);\n return true;\n }\n catch (error) { }\n return false;\n}\n// Resolves an Ethereum address, ENS name or Addressable object,\n// throwing if the result is null; an explicit null returns null\n//export async function resolveAddress(target?: null, resolver?: null | NameResolver): Promise;\n//export async function resolveAddress(target: string | Addressable, resolver?: null | NameResolver): Promise;\n//export async function resolveAddress(target: null | undefined | string | Addressable, resolver?: null | NameResolver) {\nexport async function resolveAddress(target, resolver) {\n //if (target == null) { return null; }\n if (typeof (target) === \"string\") {\n if (target.match(/^0x[0-9a-f]{40}$/i)) {\n return getAddress(target);\n }\n if (resolver == null) {\n return logger.throwError(\"ENS resolution requires a provider\", \"UNSUPPORTED_OPERATION\", {\n operation: \"resolveName\",\n });\n }\n const result = await resolver.resolveName(target);\n if (result == null || result === \"0x0000000000000000000000000000000000000000\") {\n return logger.throwError(\"unconfigured name\", \"UNCONFIGURED_NAME\", { value: target });\n }\n return getAddress(result);\n }\n else if (isAddressable(target)) {\n const result = await target.getAddress();\n if (result == null) {\n logger.throwArgumentError(\"addressable resolved to null\", \"target\", target);\n }\n return getAddress(result);\n }\n return logger.throwArgumentError(\"unsupported addressable value\", \"target\", target);\n}\n//# sourceMappingURL=checks.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Typed_options;\nimport { defineProperties } from \"@ethersproject/properties\";\nconst _gaurd = {};\nfunction n(value, width) {\n let signed = false;\n if (width < 0) {\n signed = true;\n width *= -1;\n }\n // @TODO: Check range is valid for value\n return new Typed(_gaurd, `${signed ? \"\" : \"u\"}int${width}`, value, { signed, width });\n}\nfunction b(value, size) {\n // @TODO: Check range is valid for value\n return new Typed(_gaurd, `bytes${(size) ? size : \"\"}`, value, { size });\n}\nconst _typedSymbol = Symbol.for(\"_ethers_typed\");\nexport class Typed {\n constructor(gaurd, type, value, options = null) {\n _Typed_options.set(this, void 0);\n if (gaurd !== _gaurd) {\n throw new Error(\"private constructor\");\n }\n defineProperties(this, { _typedSymbol, type, value });\n __classPrivateFieldSet(this, _Typed_options, options, \"f\");\n // Check the value is valid\n this.format();\n }\n format() {\n if (this.type === \"array\") {\n throw new Error(\"\");\n }\n else if (this.type === \"dynamicArray\") {\n throw new Error(\"\");\n }\n else if (this.type === \"tuple\") {\n return `tuple(${this.value.map((v) => v.format()).join(\",\")})`;\n }\n return this.type;\n }\n defaultValue() {\n return 0;\n }\n minValue() {\n return 0;\n }\n maxValue() {\n return 0;\n }\n isBigInt() {\n return !!(this.type.match(/^u?int[0-9]+$/));\n }\n isData() {\n return (this.type.substring(0, 5) === \"bytes\");\n }\n isString() {\n return (this.type === \"string\");\n }\n get tupleName() {\n if (this.type !== \"tuple\") {\n throw TypeError(\"not a tuple\");\n }\n return __classPrivateFieldGet(this, _Typed_options, \"f\");\n }\n // Returns the length of this type as an array\n // - `null` indicates the length is unforced, it could be dynamic\n // - `-1` indicates the length is dynamic\n // - any other value indicates it is a static array and is its length\n get arrayLength() {\n if (this.type !== \"array\") {\n throw TypeError(\"not an array\");\n }\n if (__classPrivateFieldGet(this, _Typed_options, \"f\") === true) {\n return -1;\n }\n if (__classPrivateFieldGet(this, _Typed_options, \"f\") === false) {\n return (this.value).length;\n }\n return null;\n }\n static from(type, value) {\n return new Typed(_gaurd, type, value);\n }\n static uint8(v) { return n(v, 8); }\n static uint16(v) { return n(v, 16); }\n static uint24(v) { return n(v, 24); }\n static uint32(v) { return n(v, 32); }\n static uint40(v) { return n(v, 40); }\n static uint48(v) { return n(v, 46); }\n static uint56(v) { return n(v, 56); }\n static uint64(v) { return n(v, 64); }\n static uint72(v) { return n(v, 72); }\n static uint80(v) { return n(v, 80); }\n static uint88(v) { return n(v, 88); }\n static uint96(v) { return n(v, 96); }\n static uint104(v) { return n(v, 104); }\n static uint112(v) { return n(v, 112); }\n static uint120(v) { return n(v, 120); }\n static uint128(v) { return n(v, 128); }\n static uint136(v) { return n(v, 136); }\n static uint144(v) { return n(v, 144); }\n static uint152(v) { return n(v, 152); }\n static uint160(v) { return n(v, 160); }\n static uint168(v) { return n(v, 168); }\n static uint176(v) { return n(v, 176); }\n static uint184(v) { return n(v, 184); }\n static uint192(v) { return n(v, 192); }\n static uint200(v) { return n(v, 200); }\n static uint208(v) { return n(v, 208); }\n static uint216(v) { return n(v, 216); }\n static uint224(v) { return n(v, 224); }\n static uint232(v) { return n(v, 232); }\n static uint240(v) { return n(v, 240); }\n static uint248(v) { return n(v, 248); }\n static uint256(v) { return n(v, 256); }\n static uint(v) { return n(v, 256); }\n static int8(v) { return n(v, -8); }\n static int16(v) { return n(v, -16); }\n static int24(v) { return n(v, -24); }\n static int32(v) { return n(v, -32); }\n static int40(v) { return n(v, -40); }\n static int48(v) { return n(v, -46); }\n static int56(v) { return n(v, -56); }\n static int64(v) { return n(v, -64); }\n static int72(v) { return n(v, -72); }\n static int80(v) { return n(v, -80); }\n static int88(v) { return n(v, -88); }\n static int96(v) { return n(v, -96); }\n static int104(v) { return n(v, -104); }\n static int112(v) { return n(v, -112); }\n static int120(v) { return n(v, -120); }\n static int128(v) { return n(v, -128); }\n static int136(v) { return n(v, -136); }\n static int144(v) { return n(v, -144); }\n static int152(v) { return n(v, -152); }\n static int160(v) { return n(v, -160); }\n static int168(v) { return n(v, -168); }\n static int176(v) { return n(v, -176); }\n static int184(v) { return n(v, -184); }\n static int192(v) { return n(v, -192); }\n static int200(v) { return n(v, -200); }\n static int208(v) { return n(v, -208); }\n static int216(v) { return n(v, -216); }\n static int224(v) { return n(v, -224); }\n static int232(v) { return n(v, -232); }\n static int240(v) { return n(v, -240); }\n static int248(v) { return n(v, -248); }\n static int256(v) { return n(v, -256); }\n static int(v) { return n(v, -256); }\n static bytes(v) { return b(v); }\n static bytes1(v) { return b(v, 1); }\n static bytes2(v) { return b(v, 2); }\n static bytes3(v) { return b(v, 3); }\n static bytes4(v) { return b(v, 4); }\n static bytes5(v) { return b(v, 5); }\n static bytes6(v) { return b(v, 6); }\n static bytes7(v) { return b(v, 7); }\n static bytes8(v) { return b(v, 8); }\n static bytes9(v) { return b(v, 9); }\n static bytes10(v) { return b(v, 10); }\n static bytes11(v) { return b(v, 11); }\n static bytes12(v) { return b(v, 12); }\n static bytes13(v) { return b(v, 13); }\n static bytes14(v) { return b(v, 14); }\n static bytes15(v) { return b(v, 15); }\n static bytes16(v) { return b(v, 16); }\n static bytes17(v) { return b(v, 17); }\n static bytes18(v) { return b(v, 18); }\n static bytes19(v) { return b(v, 19); }\n static bytes20(v) { return b(v, 20); }\n static bytes21(v) { return b(v, 21); }\n static bytes22(v) { return b(v, 22); }\n static bytes23(v) { return b(v, 23); }\n static bytes24(v) { return b(v, 24); }\n static bytes25(v) { return b(v, 25); }\n static bytes26(v) { return b(v, 26); }\n static bytes27(v) { return b(v, 27); }\n static bytes28(v) { return b(v, 28); }\n static bytes29(v) { return b(v, 29); }\n static bytes30(v) { return b(v, 30); }\n static bytes31(v) { return b(v, 31); }\n static bytes32(v) { return b(v, 32); }\n static address(v) { return new Typed(_gaurd, \"address\", v); }\n static bool(v) { return new Typed(_gaurd, \"bool\", !!v); }\n static string(v) { return new Typed(_gaurd, \"string\", v); }\n static array(v, dynamic) {\n throw new Error(\"not implemented yet\");\n return new Typed(_gaurd, \"array\", v, dynamic);\n }\n static tuple(v, name) {\n throw new Error(\"not implemented yet\");\n return new Typed(_gaurd, \"tuple\", v, name);\n }\n static overrides(v) {\n return new Typed(_gaurd, \"overrides\", Object.assign({}, v));\n }\n static isTyped(value) {\n return (value && value._typedSymbol === _typedSymbol);\n }\n static dereference(value, type) {\n if (Typed.isTyped(value)) {\n if (value.type !== type) {\n throw new Error(`invalid type: expecetd ${type}, got ${value.type}`);\n }\n return value.value;\n }\n return value;\n }\n}\n_Typed_options = new WeakMap();\n//# sourceMappingURL=typed.js.map","import { getAddress } from \"@ethersproject/address\";\nimport { toHex } from \"@ethersproject/math\";\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\nexport class AddressCoder extends Coder {\n constructor(localName) {\n super(\"address\", \"address\", localName, false);\n }\n defaultValue() {\n return \"0x0000000000000000000000000000000000000000\";\n }\n encode(writer, _value) {\n let value = Typed.dereference(_value, \"string\");\n try {\n value = getAddress(value);\n }\n catch (error) {\n return this._throwError(error.message, _value);\n }\n return writer.writeValue(value);\n }\n decode(reader) {\n return getAddress(toHex(reader.readValue(), 20));\n }\n}\n//# sourceMappingURL=address.js.map","import { Coder } from \"./abstract-coder.js\";\n// Clones the functionality of an existing Coder, but without a localName\nexport class AnonymousCoder extends Coder {\n constructor(coder) {\n super(coder.name, coder.type, \"_\", coder.dynamic);\n this.coder = coder;\n }\n defaultValue() {\n return this.coder.defaultValue();\n }\n encode(writer, value) {\n return this.coder.encode(writer, value);\n }\n decode(reader) {\n return this.coder.decode(reader);\n }\n}\n//# sourceMappingURL=anonymous.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { isError } from \"@ethersproject/logger\";\nimport { logger } from \"../logger.js\";\nimport { Typed } from \"../typed.js\";\nimport { Coder, Result, WordSize, Writer } from \"./abstract-coder.js\";\nimport { AnonymousCoder } from \"./anonymous.js\";\nexport function pack(writer, coders, values) {\n let arrayValues = [];\n if (Array.isArray(values)) {\n arrayValues = values;\n }\n else if (values && typeof (values) === \"object\") {\n let unique = {};\n arrayValues = coders.map((coder) => {\n const name = coder.localName;\n if (!name) {\n logger.throwError(\"cannot encode object for signature with missing names\", \"INVALID_ARGUMENT\", {\n argument: \"values\",\n info: { coder },\n value: values\n });\n }\n if (unique[name]) {\n logger.throwError(\"cannot encode object for signature with duplicate names\", \"INVALID_ARGUMENT\", {\n argument: \"values\",\n info: { coder },\n value: values\n });\n }\n unique[name] = true;\n return values[name];\n });\n }\n else {\n logger.throwArgumentError(\"invalid tuple value\", \"tuple\", values);\n }\n if (coders.length !== arrayValues.length) {\n logger.throwArgumentError(\"types/value length mismatch\", \"tuple\", values);\n }\n let staticWriter = new Writer();\n let dynamicWriter = new Writer();\n let updateFuncs = [];\n coders.forEach((coder, index) => {\n let value = arrayValues[index];\n if (coder.dynamic) {\n // Get current dynamic offset (for the future pointer)\n let dynamicOffset = dynamicWriter.length;\n // Encode the dynamic value into the dynamicWriter\n coder.encode(dynamicWriter, value);\n // Prepare to populate the correct offset once we are done\n let updateFunc = staticWriter.writeUpdatableValue();\n updateFuncs.push((baseOffset) => {\n updateFunc(baseOffset + dynamicOffset);\n });\n }\n else {\n coder.encode(staticWriter, value);\n }\n });\n // Backfill all the dynamic offsets, now that we know the static length\n updateFuncs.forEach((func) => { func(staticWriter.length); });\n let length = writer.appendWriter(staticWriter);\n length += writer.appendWriter(dynamicWriter);\n return length;\n}\nexport function unpack(reader, coders) {\n let values = [];\n let keys = [];\n // A reader anchored to this base\n let baseReader = reader.subReader(0);\n coders.forEach((coder) => {\n let value = null;\n if (coder.dynamic) {\n let offset = reader.readIndex();\n let offsetReader = baseReader.subReader(offset);\n try {\n value = coder.decode(offsetReader);\n }\n catch (error) {\n // Cannot recover from this\n if (isError(error, \"BUFFER_OVERRUN\")) {\n throw error;\n }\n value = error;\n value.baseType = coder.name;\n value.name = coder.localName;\n value.type = coder.type;\n }\n }\n else {\n try {\n value = coder.decode(reader);\n }\n catch (error) {\n // Cannot recover from this\n if (isError(error, \"BUFFER_OVERRUN\")) {\n throw error;\n }\n value = error;\n value.baseType = coder.name;\n value.name = coder.localName;\n value.type = coder.type;\n }\n }\n if (value == undefined) {\n throw new Error(\"investigate\");\n }\n values.push(value);\n keys.push(coder.localName || null);\n });\n return Result.fromItems(values, keys);\n}\nexport class ArrayCoder extends Coder {\n constructor(coder, length, localName) {\n const type = (coder.type + \"[\" + (length >= 0 ? length : \"\") + \"]\");\n const dynamic = (length === -1 || coder.dynamic);\n super(\"array\", type, localName, dynamic);\n defineProperties(this, { coder, length });\n }\n defaultValue() {\n // Verifies the child coder is valid (even if the array is dynamic or 0-length)\n const defaultChild = this.coder.defaultValue();\n const result = [];\n for (let i = 0; i < this.length; i++) {\n result.push(defaultChild);\n }\n return result;\n }\n encode(writer, _value) {\n const value = Typed.dereference(_value, \"array\");\n if (!Array.isArray(value)) {\n this._throwError(\"expected array value\", value);\n }\n let count = this.length;\n if (count === -1) {\n count = value.length;\n writer.writeValue(value.length);\n }\n logger.assertArgumentCount(value.length, count, \"coder array\" + (this.localName ? (\" \" + this.localName) : \"\"));\n let coders = [];\n for (let i = 0; i < value.length; i++) {\n coders.push(this.coder);\n }\n return pack(writer, coders, value);\n }\n decode(reader) {\n let count = this.length;\n if (count === -1) {\n count = reader.readIndex();\n // Check that there is *roughly* enough data to ensure\n // stray random data is not being read as a length. Each\n // slot requires at least 32 bytes for their value (or 32\n // bytes as a link to the data). This could use a much\n // tighter bound, but we are erroring on the side of safety.\n if (count * WordSize > reader.dataLength) {\n logger.throwError(\"insufficient data length\", \"BUFFER_OVERRUN\", {\n buffer: reader.bytes,\n offset: count * WordSize,\n length: reader.dataLength\n });\n }\n }\n let coders = [];\n for (let i = 0; i < count; i++) {\n coders.push(new AnonymousCoder(this.coder));\n }\n return reader.coerce(this.name, unpack(reader, coders));\n }\n}\n//# sourceMappingURL=array.js.map","import { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\nexport class BooleanCoder extends Coder {\n constructor(localName) {\n super(\"bool\", \"bool\", localName, false);\n }\n defaultValue() {\n return false;\n }\n encode(writer, _value) {\n const value = Typed.dereference(_value, \"bool\");\n return writer.writeValue(value ? 1 : 0);\n }\n decode(reader) {\n return reader.coerce(this.type, !reader.readValue());\n }\n}\n//# sourceMappingURL=boolean.js.map","import { arrayify, hexlify } from \"@ethersproject/bytes\";\nimport { Coder } from \"./abstract-coder.js\";\nexport class DynamicBytesCoder extends Coder {\n constructor(type, localName) {\n super(type, type, localName, true);\n }\n defaultValue() {\n return \"0x\";\n }\n encode(writer, value) {\n value = arrayify(value);\n let length = writer.writeValue(value.length);\n length += writer.writeBytes(value);\n return length;\n }\n decode(reader) {\n return reader.readBytes(reader.readIndex(), true);\n }\n}\nexport class BytesCoder extends DynamicBytesCoder {\n constructor(localName) {\n super(\"bytes\", localName);\n }\n decode(reader) {\n return reader.coerce(this.name, hexlify(super.decode(reader)));\n }\n}\n//# sourceMappingURL=bytes.js.map","import { arrayify, hexlify } from \"@ethersproject/bytes\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\nexport class FixedBytesCoder extends Coder {\n constructor(size, localName) {\n let name = \"bytes\" + String(size);\n super(name, name, localName, false);\n defineProperties(this, { size }, { size: \"number\" });\n }\n defaultValue() {\n return (\"0x0000000000000000000000000000000000000000000000000000000000000000\").substring(0, 2 + this.size * 2);\n }\n encode(writer, _value) {\n let data = arrayify(Typed.dereference(_value, this.type));\n if (data.length !== this.size) {\n this._throwError(\"incorrect data length\", _value);\n }\n return writer.writeBytes(data);\n }\n decode(reader) {\n return reader.coerce(this.name, hexlify(reader.readBytes(this.size)));\n }\n}\n//# sourceMappingURL=fixed-bytes.js.map","import { Coder } from \"./abstract-coder.js\";\nconst Empty = new Uint8Array([]);\nexport class NullCoder extends Coder {\n constructor(localName) {\n super(\"null\", \"\", localName, false);\n }\n defaultValue() {\n return null;\n }\n encode(writer, value) {\n if (value != null) {\n this._throwError(\"not null\", value);\n }\n return writer.writeBytes(Empty);\n }\n decode(reader) {\n reader.readBytes(0);\n return reader.coerce(this.name, null);\n }\n}\n//# sourceMappingURL=null.js.map","import { fromTwos, mask, toTwos } from \"@ethersproject/math\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { logger } from \"../logger.js\";\nimport { Typed } from \"../typed.js\";\nimport { Coder, WordSize } from \"./abstract-coder.js\";\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_MAX_UINT256 = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\nexport class NumberCoder extends Coder {\n constructor(size, signed, localName) {\n const name = ((signed ? \"int\" : \"uint\") + (size * 8));\n super(name, name, localName, false);\n defineProperties(this, { size, signed }, { size: \"number\", signed: \"boolean\" });\n }\n defaultValue() {\n return 0;\n }\n encode(writer, _value) {\n let value = logger.getBigInt(Typed.dereference(_value, this.type));\n // Check bounds are safe for encoding\n let maxUintValue = mask(BN_MAX_UINT256, WordSize * 8);\n if (this.signed) {\n let bounds = mask(maxUintValue, (this.size * 8) - 1);\n if (value > bounds || value < -(bounds + BN_1)) {\n this._throwError(\"value out-of-bounds\", _value);\n }\n }\n else if (value < BN_0 || value > mask(maxUintValue, this.size * 8)) {\n this._throwError(\"value out-of-bounds\", _value);\n }\n value = mask(toTwos(value, this.size * 8), this.size * 8);\n if (this.signed) {\n value = toTwos(fromTwos(value, this.size * 8), 8 * WordSize);\n }\n return writer.writeValue(value);\n }\n decode(reader) {\n let value = mask(reader.readValue(), this.size * 8);\n if (this.signed) {\n value = fromTwos(value, this.size * 8);\n }\n return reader.coerce(this.name, value);\n }\n}\n//# sourceMappingURL=number.js.map","export const version = \"@ethersproject/strings@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { logger } from \"./logger.js\";\n///////////////////////////////\nexport var UnicodeNormalizationForm;\n(function (UnicodeNormalizationForm) {\n UnicodeNormalizationForm[\"current\"] = \"\";\n UnicodeNormalizationForm[\"NFC\"] = \"NFC\";\n UnicodeNormalizationForm[\"NFD\"] = \"NFD\";\n UnicodeNormalizationForm[\"NFKC\"] = \"NFKC\";\n UnicodeNormalizationForm[\"NFKD\"] = \"NFKD\";\n})(UnicodeNormalizationForm || (UnicodeNormalizationForm = {}));\n;\nexport var Utf8ErrorReason;\n(function (Utf8ErrorReason) {\n // A continuation byte was present where there was nothing to continue\n // - offset = the index the codepoint began in\n Utf8ErrorReason[\"UNEXPECTED_CONTINUE\"] = \"unexpected continuation byte\";\n // An invalid (non-continuation) byte to start a UTF-8 codepoint was found\n // - offset = the index the codepoint began in\n Utf8ErrorReason[\"BAD_PREFIX\"] = \"bad codepoint prefix\";\n // The string is too short to process the expected codepoint\n // - offset = the index the codepoint began in\n Utf8ErrorReason[\"OVERRUN\"] = \"string overrun\";\n // A missing continuation byte was expected but not found\n // - offset = the index the continuation byte was expected at\n Utf8ErrorReason[\"MISSING_CONTINUE\"] = \"missing continuation byte\";\n // The computed code point is outside the range for UTF-8\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; outside the UTF-8 range\n Utf8ErrorReason[\"OUT_OF_RANGE\"] = \"out of UTF-8 range\";\n // UTF-8 strings may not contain UTF-16 surrogate pairs\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; inside the UTF-16 surrogate range\n Utf8ErrorReason[\"UTF16_SURROGATE\"] = \"UTF-16 surrogate\";\n // The string is an overlong representation\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; already bounds checked\n Utf8ErrorReason[\"OVERLONG\"] = \"overlong representation\";\n})(Utf8ErrorReason || (Utf8ErrorReason = {}));\n;\nfunction errorFunc(reason, offset, bytes, output, badCodepoint) {\n return logger.throwArgumentError(`invalid codepoint at offset ${offset}; ${reason}`, \"bytes\", bytes);\n}\nfunction ignoreFunc(reason, offset, bytes, output, badCodepoint) {\n // If there is an invalid prefix (including stray continuation), skip any additional continuation bytes\n if (reason === Utf8ErrorReason.BAD_PREFIX || reason === Utf8ErrorReason.UNEXPECTED_CONTINUE) {\n let i = 0;\n for (let o = offset + 1; o < bytes.length; o++) {\n if (bytes[o] >> 6 !== 0x02) {\n break;\n }\n i++;\n }\n return i;\n }\n // This byte runs us past the end of the string, so just jump to the end\n // (but the first byte was read already read and therefore skipped)\n if (reason === Utf8ErrorReason.OVERRUN) {\n return bytes.length - offset - 1;\n }\n // Nothing to skip\n return 0;\n}\nfunction replaceFunc(reason, offset, bytes, output, badCodepoint) {\n // Overlong representations are otherwise \"valid\" code points; just non-deistingtished\n if (reason === Utf8ErrorReason.OVERLONG) {\n output.push((badCodepoint != null) ? badCodepoint : -1);\n return 0;\n }\n // Put the replacement character into the output\n output.push(0xfffd);\n // Otherwise, process as if ignoring errors\n return ignoreFunc(reason, offset, bytes, output, badCodepoint);\n}\n// Common error handing strategies\nexport const Utf8ErrorFuncs = Object.freeze({\n error: errorFunc,\n ignore: ignoreFunc,\n replace: replaceFunc\n});\n// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499\nfunction getUtf8CodePoints(_bytes, onError) {\n if (onError == null) {\n onError = Utf8ErrorFuncs.error;\n }\n const bytes = logger.getBytes(_bytes, \"bytes\");\n const result = [];\n let i = 0;\n // Invalid bytes are ignored\n while (i < bytes.length) {\n const c = bytes[i++];\n // 0xxx xxxx\n if (c >> 7 === 0) {\n result.push(c);\n continue;\n }\n // Multibyte; how many bytes left for this character?\n let extraLength = null;\n let overlongMask = null;\n // 110x xxxx 10xx xxxx\n if ((c & 0xe0) === 0xc0) {\n extraLength = 1;\n overlongMask = 0x7f;\n // 1110 xxxx 10xx xxxx 10xx xxxx\n }\n else if ((c & 0xf0) === 0xe0) {\n extraLength = 2;\n overlongMask = 0x7ff;\n // 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx\n }\n else if ((c & 0xf8) === 0xf0) {\n extraLength = 3;\n overlongMask = 0xffff;\n }\n else {\n if ((c & 0xc0) === 0x80) {\n i += onError(Utf8ErrorReason.UNEXPECTED_CONTINUE, i - 1, bytes, result);\n }\n else {\n i += onError(Utf8ErrorReason.BAD_PREFIX, i - 1, bytes, result);\n }\n continue;\n }\n // Do we have enough bytes in our data?\n if (i - 1 + extraLength >= bytes.length) {\n i += onError(Utf8ErrorReason.OVERRUN, i - 1, bytes, result);\n continue;\n }\n // Remove the length prefix from the char\n let res = c & ((1 << (8 - extraLength - 1)) - 1);\n for (let j = 0; j < extraLength; j++) {\n let nextChar = bytes[i];\n // Invalid continuation byte\n if ((nextChar & 0xc0) != 0x80) {\n i += onError(Utf8ErrorReason.MISSING_CONTINUE, i, bytes, result);\n res = null;\n break;\n }\n ;\n res = (res << 6) | (nextChar & 0x3f);\n i++;\n }\n // See above loop for invalid continuation byte\n if (res === null) {\n continue;\n }\n // Maximum code point\n if (res > 0x10ffff) {\n i += onError(Utf8ErrorReason.OUT_OF_RANGE, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n // Reserved for UTF-16 surrogate halves\n if (res >= 0xd800 && res <= 0xdfff) {\n i += onError(Utf8ErrorReason.UTF16_SURROGATE, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n // Check for overlong sequences (more bytes than needed)\n if (res <= overlongMask) {\n i += onError(Utf8ErrorReason.OVERLONG, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n result.push(res);\n }\n return result;\n}\n// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\nexport function toUtf8Bytes(str, form = UnicodeNormalizationForm.current) {\n if (form != UnicodeNormalizationForm.current) {\n logger.assertNormalize(form);\n str = str.normalize(form);\n }\n let result = [];\n for (let i = 0; i < str.length; i++) {\n const c = str.charCodeAt(i);\n if (c < 0x80) {\n result.push(c);\n }\n else if (c < 0x800) {\n result.push((c >> 6) | 0xc0);\n result.push((c & 0x3f) | 0x80);\n }\n else if ((c & 0xfc00) == 0xd800) {\n i++;\n const c2 = str.charCodeAt(i);\n if (i >= str.length || (c2 & 0xfc00) !== 0xdc00) {\n throw new Error(\"invalid utf-8 string\");\n }\n // Surrogate Pair\n const pair = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);\n result.push((pair >> 18) | 0xf0);\n result.push(((pair >> 12) & 0x3f) | 0x80);\n result.push(((pair >> 6) & 0x3f) | 0x80);\n result.push((pair & 0x3f) | 0x80);\n }\n else {\n result.push((c >> 12) | 0xe0);\n result.push(((c >> 6) & 0x3f) | 0x80);\n result.push((c & 0x3f) | 0x80);\n }\n }\n return new Uint8Array(result);\n}\n;\nfunction escapeChar(value) {\n const hex = (\"0000\" + value.toString(16));\n return \"\\\\u\" + hex.substring(hex.length - 4);\n}\nexport function _toEscapedUtf8String(bytes, onError) {\n return '\"' + getUtf8CodePoints(bytes, onError).map((codePoint) => {\n if (codePoint < 256) {\n switch (codePoint) {\n case 8: return \"\\\\b\";\n case 9: return \"\\\\t\";\n case 10: return \"\\\\n\";\n case 13: return \"\\\\r\";\n case 34: return \"\\\\\\\"\";\n case 92: return \"\\\\\\\\\";\n }\n if (codePoint >= 32 && codePoint < 127) {\n return String.fromCharCode(codePoint);\n }\n }\n if (codePoint <= 0xffff) {\n return escapeChar(codePoint);\n }\n codePoint -= 0x10000;\n return escapeChar(((codePoint >> 10) & 0x3ff) + 0xd800) + escapeChar((codePoint & 0x3ff) + 0xdc00);\n }).join(\"\") + '\"';\n}\nexport function _toUtf8String(codePoints) {\n return codePoints.map((codePoint) => {\n if (codePoint <= 0xffff) {\n return String.fromCharCode(codePoint);\n }\n codePoint -= 0x10000;\n return String.fromCharCode((((codePoint >> 10) & 0x3ff) + 0xd800), ((codePoint & 0x3ff) + 0xdc00));\n }).join(\"\");\n}\nexport function toUtf8String(bytes, onError) {\n return _toUtf8String(getUtf8CodePoints(bytes, onError));\n}\nexport function toUtf8CodePoints(str, form = UnicodeNormalizationForm.current) {\n return getUtf8CodePoints(toUtf8Bytes(str, form));\n}\n//# sourceMappingURL=utf8.js.map","import { zeroPadRight } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nimport { toUtf8Bytes, toUtf8String } from \"./utf8.js\";\nexport function formatBytes32String(text) {\n // Get the bytes\n const bytes = toUtf8Bytes(text);\n // Check we have room for null-termination\n if (bytes.length > 31) {\n throw new Error(\"bytes32 string must be less than 32 bytes\");\n }\n // Zero-pad (implicitly null-terminates)\n return zeroPadRight(bytes, 32);\n}\nexport function parseBytes32String(_bytes) {\n const data = logger.getBytes(_bytes, \"bytes\");\n // Must be 32 bytes with a null-termination\n if (data.length !== 32) {\n throw new Error(\"invalid bytes32 - not 32 bytes long\");\n }\n if (data[31] !== 0) {\n throw new Error(\"invalid bytes32 string - no null terminator\");\n }\n // Find the null termination\n let length = 31;\n while (data[length - 1] === 0) {\n length--;\n }\n // Determine the string value\n return toUtf8String(data.slice(0, length));\n}\n//# sourceMappingURL=bytes32.js.map","import { logger } from \"./logger.js\";\nimport { toUtf8CodePoints, _toUtf8String, UnicodeNormalizationForm } from \"./utf8.js\";\nfunction bytes2(data) {\n if ((data.length % 4) !== 0) {\n throw new Error(\"should not happen; bad data\");\n }\n let result = [];\n for (let i = 0; i < data.length; i += 4) {\n result.push(parseInt(data.substring(i, i + 4), 16));\n }\n return result;\n}\nfunction createTable(data, _func) {\n const func = _func || function (value) { return [parseInt(value, 16)]; };\n let lo = 0;\n let result = {};\n data.split(\",\").forEach((pair) => {\n let comps = pair.split(\":\");\n lo += parseInt(comps[0], 16);\n result[lo] = func(comps[1]);\n });\n return result;\n}\nfunction createRangeTable(data) {\n let hi = 0;\n return data.split(\",\").map((v) => {\n let comps = v.split(\"-\");\n if (comps.length === 1) {\n comps[1] = \"0\";\n }\n else if (comps[1] === \"\") {\n comps[1] = \"1\";\n }\n let lo = hi + parseInt(comps[0], 16);\n hi = parseInt(comps[1], 16);\n return { l: lo, h: hi };\n });\n}\nfunction matchMap(value, ranges) {\n let lo = 0;\n for (let i = 0; i < ranges.length; i++) {\n let range = ranges[i];\n lo += range.l;\n if (value >= lo && value <= lo + range.h && ((value - lo) % (range.d || 1)) === 0) {\n if (range.e && range.e.indexOf(value - lo) !== -1) {\n continue;\n }\n return range;\n }\n }\n return null;\n}\nconst Table_A_1_ranges = createRangeTable(\"221,13-1b,5f-,40-10,51-f,11-3,3-3,2-2,2-4,8,2,15,2d,28-8,88,48,27-,3-5,11-20,27-,8,28,3-5,12,18,b-a,1c-4,6-16,2-d,2-2,2,1b-4,17-9,8f-,10,f,1f-2,1c-34,33-14e,4,36-,13-,6-2,1a-f,4,9-,3-,17,8,2-2,5-,2,8-,3-,4-8,2-3,3,6-,16-6,2-,7-3,3-,17,8,3,3,3-,2,6-3,3-,4-a,5,2-6,10-b,4,8,2,4,17,8,3,6-,b,4,4-,2-e,2-4,b-10,4,9-,3-,17,8,3-,5-,9-2,3-,4-7,3-3,3,4-3,c-10,3,7-2,4,5-2,3,2,3-2,3-2,4-2,9,4-3,6-2,4,5-8,2-e,d-d,4,9,4,18,b,6-3,8,4,5-6,3-8,3-3,b-11,3,9,4,18,b,6-3,8,4,5-6,3-6,2,3-3,b-11,3,9,4,18,11-3,7-,4,5-8,2-7,3-3,b-11,3,13-2,19,a,2-,8-2,2-3,7,2,9-11,4-b,3b-3,1e-24,3,2-,3,2-,2-5,5,8,4,2,2-,3,e,4-,6,2,7-,b-,3-21,49,23-5,1c-3,9,25,10-,2-2f,23,6,3,8-2,5-5,1b-45,27-9,2a-,2-3,5b-4,45-4,53-5,8,40,2,5-,8,2,5-,28,2,5-,20,2,5-,8,2,5-,8,8,18,20,2,5-,8,28,14-5,1d-22,56-b,277-8,1e-2,52-e,e,8-a,18-8,15-b,e,4,3-b,5e-2,b-15,10,b-5,59-7,2b-555,9d-3,5b-5,17-,7-,27-,7-,9,2,2,2,20-,36,10,f-,7,14-,4,a,54-3,2-6,6-5,9-,1c-10,13-1d,1c-14,3c-,10-6,32-b,240-30,28-18,c-14,a0,115-,3,66-,b-76,5,5-,1d,24,2,5-2,2,8-,35-2,19,f-10,1d-3,311-37f,1b,5a-b,d7-19,d-3,41,57-,68-4,29-3,5f,29-37,2e-2,25-c,2c-2,4e-3,30,78-3,64-,20,19b7-49,51a7-59,48e-2,38-738,2ba5-5b,222f-,3c-94,8-b,6-4,1b,6,2,3,3,6d-20,16e-f,41-,37-7,2e-2,11-f,5-b,18-,b,14,5-3,6,88-,2,bf-2,7-,7-,7-,4-2,8,8-9,8-2ff,20,5-b,1c-b4,27-,27-cbb1,f7-9,28-2,b5-221,56,48,3-,2-,3-,5,d,2,5,3,42,5-,9,8,1d,5,6,2-2,8,153-3,123-3,33-27fd,a6da-5128,21f-5df,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3,2-1d,61-ff7d\");\n// @TODO: Make this relative...\nconst Table_B_1_flags = \"ad,34f,1806,180b,180c,180d,200b,200c,200d,2060,feff\".split(\",\").map((v) => parseInt(v, 16));\nconst Table_B_2_ranges = [\n { h: 25, s: 32, l: 65 },\n { h: 30, s: 32, e: [23], l: 127 },\n { h: 54, s: 1, e: [48], l: 64, d: 2 },\n { h: 14, s: 1, l: 57, d: 2 },\n { h: 44, s: 1, l: 17, d: 2 },\n { h: 10, s: 1, e: [2, 6, 8], l: 61, d: 2 },\n { h: 16, s: 1, l: 68, d: 2 },\n { h: 84, s: 1, e: [18, 24, 66], l: 19, d: 2 },\n { h: 26, s: 32, e: [17], l: 435 },\n { h: 22, s: 1, l: 71, d: 2 },\n { h: 15, s: 80, l: 40 },\n { h: 31, s: 32, l: 16 },\n { h: 32, s: 1, l: 80, d: 2 },\n { h: 52, s: 1, l: 42, d: 2 },\n { h: 12, s: 1, l: 55, d: 2 },\n { h: 40, s: 1, e: [38], l: 15, d: 2 },\n { h: 14, s: 1, l: 48, d: 2 },\n { h: 37, s: 48, l: 49 },\n { h: 148, s: 1, l: 6351, d: 2 },\n { h: 88, s: 1, l: 160, d: 2 },\n { h: 15, s: 16, l: 704 },\n { h: 25, s: 26, l: 854 },\n { h: 25, s: 32, l: 55915 },\n { h: 37, s: 40, l: 1247 },\n { h: 25, s: -119711, l: 53248 },\n { h: 25, s: -119763, l: 52 },\n { h: 25, s: -119815, l: 52 },\n { h: 25, s: -119867, e: [1, 4, 5, 7, 8, 11, 12, 17], l: 52 },\n { h: 25, s: -119919, l: 52 },\n { h: 24, s: -119971, e: [2, 7, 8, 17], l: 52 },\n { h: 24, s: -120023, e: [2, 7, 13, 15, 16, 17], l: 52 },\n { h: 25, s: -120075, l: 52 },\n { h: 25, s: -120127, l: 52 },\n { h: 25, s: -120179, l: 52 },\n { h: 25, s: -120231, l: 52 },\n { h: 25, s: -120283, l: 52 },\n { h: 25, s: -120335, l: 52 },\n { h: 24, s: -119543, e: [17], l: 56 },\n { h: 24, s: -119601, e: [17], l: 58 },\n { h: 24, s: -119659, e: [17], l: 58 },\n { h: 24, s: -119717, e: [17], l: 58 },\n { h: 24, s: -119775, e: [17], l: 58 }\n];\nconst Table_B_2_lut_abs = createTable(\"b5:3bc,c3:ff,7:73,2:253,5:254,3:256,1:257,5:259,1:25b,3:260,1:263,2:269,1:268,5:26f,1:272,2:275,7:280,3:283,5:288,3:28a,1:28b,5:292,3f:195,1:1bf,29:19e,125:3b9,8b:3b2,1:3b8,1:3c5,3:3c6,1:3c0,1a:3ba,1:3c1,1:3c3,2:3b8,1:3b5,1bc9:3b9,1c:1f76,1:1f77,f:1f7a,1:1f7b,d:1f78,1:1f79,1:1f7c,1:1f7d,107:63,5:25b,4:68,1:68,1:68,3:69,1:69,1:6c,3:6e,4:70,1:71,1:72,1:72,1:72,7:7a,2:3c9,2:7a,2:6b,1:e5,1:62,1:63,3:65,1:66,2:6d,b:3b3,1:3c0,6:64,1b574:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3\");\nconst Table_B_2_lut_rel = createTable(\"179:1,2:1,2:1,5:1,2:1,a:4f,a:1,8:1,2:1,2:1,3:1,5:1,3:1,4:1,2:1,3:1,4:1,8:2,1:1,2:2,1:1,2:2,27:2,195:26,2:25,1:25,1:25,2:40,2:3f,1:3f,33:1,11:-6,1:-9,1ac7:-3a,6d:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,b:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,c:-8,2:-8,2:-8,2:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,49:-8,1:-8,1:-4a,1:-4a,d:-56,1:-56,1:-56,1:-56,d:-8,1:-8,f:-8,1:-8,3:-7\");\nconst Table_B_2_complex = createTable(\"df:00730073,51:00690307,19:02BC006E,a7:006A030C,18a:002003B9,16:03B903080301,20:03C503080301,1d7:05650582,190f:00680331,1:00740308,1:0077030A,1:0079030A,1:006102BE,b6:03C50313,2:03C503130300,2:03C503130301,2:03C503130342,2a:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,3:1F7003B9,1:03B103B9,1:03AC03B9,2:03B10342,1:03B1034203B9,5:03B103B9,6:1F7403B9,1:03B703B9,1:03AE03B9,2:03B70342,1:03B7034203B9,5:03B703B9,6:03B903080300,1:03B903080301,3:03B90342,1:03B903080342,b:03C503080300,1:03C503080301,1:03C10313,2:03C50342,1:03C503080342,b:1F7C03B9,1:03C903B9,1:03CE03B9,2:03C90342,1:03C9034203B9,5:03C903B9,ac:00720073,5b:00B00063,6:00B00066,d:006E006F,a:0073006D,1:00740065006C,1:0074006D,124f:006800700061,2:00610075,2:006F0076,b:00700061,1:006E0061,1:03BC0061,1:006D0061,1:006B0061,1:006B0062,1:006D0062,1:00670062,3:00700066,1:006E0066,1:03BC0066,4:0068007A,1:006B0068007A,1:006D0068007A,1:00670068007A,1:00740068007A,15:00700061,1:006B00700061,1:006D00700061,1:006700700061,8:00700076,1:006E0076,1:03BC0076,1:006D0076,1:006B0076,1:006D0076,1:00700077,1:006E0077,1:03BC0077,1:006D0077,1:006B0077,1:006D0077,1:006B03C9,1:006D03C9,2:00620071,3:00632215006B0067,1:0063006F002E,1:00640062,1:00670079,2:00680070,2:006B006B,1:006B006D,9:00700068,2:00700070006D,1:00700072,2:00730076,1:00770062,c723:00660066,1:00660069,1:0066006C,1:006600660069,1:00660066006C,1:00730074,1:00730074,d:05740576,1:05740565,1:0574056B,1:057E0576,1:0574056D\", bytes2);\nconst Table_C_ranges = createRangeTable(\"80-20,2a0-,39c,32,f71,18e,7f2-f,19-7,30-4,7-5,f81-b,5,a800-20ff,4d1-1f,110,fa-6,d174-7,2e84-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,2,1f-5f,ff7f-20001\");\nfunction flatten(values) {\n return values.reduce((accum, value) => {\n value.forEach((value) => { accum.push(value); });\n return accum;\n }, []);\n}\nexport function _nameprepTableA1(codepoint) {\n return !!matchMap(codepoint, Table_A_1_ranges);\n}\nexport function _nameprepTableB2(codepoint) {\n const range = matchMap(codepoint, Table_B_2_ranges);\n if (range) {\n if (range.s == null) {\n throw new Error(\"should not happenl bad range\");\n }\n return [codepoint + range.s];\n }\n const codes = Table_B_2_lut_abs[codepoint];\n if (codes) {\n return codes;\n }\n const shift = Table_B_2_lut_rel[codepoint];\n if (shift) {\n return [codepoint + shift[0]];\n }\n const complex = Table_B_2_complex[codepoint];\n if (complex) {\n return complex;\n }\n return null;\n}\nexport function _nameprepTableC(codepoint) {\n return !!matchMap(codepoint, Table_C_ranges);\n}\nexport function nameprep(value) {\n // This allows platforms with incomplete normalize to bypass\n // it for very basic names which the built-in toLowerCase\n // will certainly handle correctly\n if (value.match(/^[a-z0-9-]*$/i) && value.length <= 59) {\n return value.toLowerCase();\n }\n // Get the code points (keeping the current normalization)\n let codes = toUtf8CodePoints(value);\n codes = flatten(codes.map((code) => {\n // Substitute Table B.1 (Maps to Nothing)\n if (Table_B_1_flags.indexOf(code) >= 0) {\n return [];\n }\n if (code >= 0xfe00 && code <= 0xfe0f) {\n return [];\n }\n // Substitute Table B.2 (Case Folding)\n let codesTableB2 = _nameprepTableB2(code);\n if (codesTableB2) {\n return codesTableB2;\n }\n // No Substitution\n return [code];\n }));\n // Normalize using form KC\n codes = toUtf8CodePoints(_toUtf8String(codes), UnicodeNormalizationForm.NFKC);\n // Prohibit Tables C.1.2, C.2.2, C.3, C.4, C.5, C.6, C.7, C.8, C.9\n codes.forEach((code) => {\n if (_nameprepTableC(code)) {\n logger.throwArgumentError(\"STRINGPREP_CONTAINS_PROHIBITED\", \"value\", value);\n }\n });\n // Prohibit Unassigned Code Points (Table A.1)\n codes.forEach((code) => {\n if (_nameprepTableA1(code)) {\n logger.throwArgumentError(\"STRINGPREP_CONTAINS_UNASSIGNED\", \"value\", value);\n }\n });\n // IDNA extras\n let name = _toUtf8String(codes);\n // IDNA: 4.2.3.1\n if (name.substring(0, 1) === \"-\" || name.substring(2, 4) === \"--\" || name.substring(name.length - 1) === \"-\") {\n logger.throwArgumentError(\"invalid hyphen\", \"value\", value);\n }\n // IDNA: 4.2.4\n if (name.length > 63) {\n logger.throwArgumentError(\"too long\", \"value\", value);\n }\n return name;\n}\n//# sourceMappingURL=idna.js.map","import { toUtf8Bytes, toUtf8String } from \"@ethersproject/strings\";\nimport { Typed } from \"../typed.js\";\nimport { DynamicBytesCoder } from \"./bytes.js\";\nexport class StringCoder extends DynamicBytesCoder {\n constructor(localName) {\n super(\"string\", localName);\n }\n defaultValue() {\n return \"\";\n }\n encode(writer, _value) {\n return super.encode(writer, toUtf8Bytes(Typed.dereference(_value, \"string\")));\n }\n decode(reader) {\n return toUtf8String(super.decode(reader));\n }\n}\n//# sourceMappingURL=string.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\nimport { pack, unpack } from \"./array.js\";\nexport class TupleCoder extends Coder {\n constructor(coders, localName) {\n let dynamic = false;\n const types = [];\n coders.forEach((coder) => {\n if (coder.dynamic) {\n dynamic = true;\n }\n types.push(coder.type);\n });\n const type = (\"tuple(\" + types.join(\",\") + \")\");\n super(\"tuple\", type, localName, dynamic);\n defineProperties(this, { coders: Object.freeze(coders.slice()) });\n }\n defaultValue() {\n const values = [];\n this.coders.forEach((coder) => {\n values.push(coder.defaultValue());\n });\n // We only output named properties for uniquely named coders\n const uniqueNames = this.coders.reduce((accum, coder) => {\n const name = coder.localName;\n if (name) {\n if (!accum[name]) {\n accum[name] = 0;\n }\n accum[name]++;\n }\n return accum;\n }, {});\n // Add named values\n this.coders.forEach((coder, index) => {\n let name = coder.localName;\n if (!name || uniqueNames[name] !== 1) {\n return;\n }\n if (name === \"length\") {\n name = \"_length\";\n }\n if (values[name] != null) {\n return;\n }\n values[name] = values[index];\n });\n return Object.freeze(values);\n }\n encode(writer, _value) {\n const value = Typed.dereference(_value, \"tuple\");\n return pack(writer, this.coders, value);\n }\n decode(reader) {\n return reader.coerce(this.name, unpack(reader, this.coders));\n }\n}\n//# sourceMappingURL=tuple.js.map","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _AbiCoder_instances, _AbiCoder_getCoder;\n// See: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI\n//import { arrayify } from \"@ethersproject/bytes\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { logger } from \"./logger.js\";\nimport { Reader, Writer } from \"./coders/abstract-coder.js\";\nimport { AddressCoder } from \"./coders/address.js\";\nimport { ArrayCoder } from \"./coders/array.js\";\nimport { BooleanCoder } from \"./coders/boolean.js\";\nimport { BytesCoder } from \"./coders/bytes.js\";\nimport { FixedBytesCoder } from \"./coders/fixed-bytes.js\";\nimport { NullCoder } from \"./coders/null.js\";\nimport { NumberCoder } from \"./coders/number.js\";\nimport { StringCoder } from \"./coders/string.js\";\nimport { TupleCoder } from \"./coders/tuple.js\";\nimport { ParamType } from \"./fragments.js\";\nconst paramTypeBytes = new RegExp(/^bytes([0-9]*)$/);\nconst paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/);\nexport class AbiCoder {\n constructor(coerceFunc) {\n _AbiCoder_instances.add(this);\n defineProperties(this, { coerceFunc }, {}, { coerceFunc: null });\n }\n getDefaultValue(types) {\n const coders = types.map((type) => __classPrivateFieldGet(this, _AbiCoder_instances, \"m\", _AbiCoder_getCoder).call(this, ParamType.from(type)));\n const coder = new TupleCoder(coders, \"_\");\n return coder.defaultValue();\n }\n encode(types, values) {\n logger.assertArgumentCount(values.length, types.length, \"types/values length mismatch\");\n const coders = types.map((type) => __classPrivateFieldGet(this, _AbiCoder_instances, \"m\", _AbiCoder_getCoder).call(this, ParamType.from(type)));\n const coder = (new TupleCoder(coders, \"_\"));\n const writer = new Writer();\n coder.encode(writer, values);\n return writer.data;\n }\n decode(types, data, loose) {\n const coders = types.map((type) => __classPrivateFieldGet(this, _AbiCoder_instances, \"m\", _AbiCoder_getCoder).call(this, ParamType.from(type)));\n const coder = new TupleCoder(coders, \"_\");\n return coder.decode(new Reader(data, this.coerceFunc, loose));\n }\n}\n_AbiCoder_instances = new WeakSet(), _AbiCoder_getCoder = function _AbiCoder_getCoder(param) {\n if (param.isArray()) {\n return new ArrayCoder(__classPrivateFieldGet(this, _AbiCoder_instances, \"m\", _AbiCoder_getCoder).call(this, param.arrayChildren), param.arrayLength, param.name);\n }\n if (param.isTuple()) {\n return new TupleCoder(param.components.map((c) => __classPrivateFieldGet(this, _AbiCoder_instances, \"m\", _AbiCoder_getCoder).call(this, c)), param.name);\n }\n switch (param.baseType) {\n case \"address\":\n return new AddressCoder(param.name);\n case \"bool\":\n return new BooleanCoder(param.name);\n case \"string\":\n return new StringCoder(param.name);\n case \"bytes\":\n return new BytesCoder(param.name);\n case \"\":\n return new NullCoder(param.name);\n }\n // u?int[0-9]*\n let match = param.type.match(paramTypeNumber);\n if (match) {\n let size = parseInt(match[2] || \"256\");\n if (size === 0 || size > 256 || (size % 8) !== 0) {\n logger.throwArgumentError(\"invalid \" + match[1] + \" bit length\", \"param\", param);\n }\n return new NumberCoder(size / 8, (match[1] === \"int\"), param.name);\n }\n // bytes[0-9]+\n match = param.type.match(paramTypeBytes);\n if (match) {\n let size = parseInt(match[1]);\n if (size === 0 || size > 32) {\n logger.throwArgumentError(\"invalid bytes length\", \"param\", param);\n }\n return new FixedBytesCoder(size, param.name);\n }\n return logger.throwArgumentError(\"invalid type\", \"type\", param.type);\n};\nexport const defaultAbiCoder = new AbiCoder();\n//# sourceMappingURL=abi-coder.js.map","import { keccak256 } from \"@ethersproject/crypto\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nexport function id(value) {\n return keccak256(toUtf8Bytes(value));\n}\n//# sourceMappingURL=id.js.map","export const version = \"@ethersproject/hash@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { concat, hexlify } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { nameprep, toUtf8Bytes } from \"@ethersproject/strings\";\nimport { logger } from \"./logger.js\";\nconst Zeros = new Uint8Array(32);\nZeros.fill(0);\nconst Partition = new RegExp(\"^((.*)\\\\.)?([^.]+)$\");\nexport function isValidName(name) {\n try {\n const comps = name.split(\".\");\n for (let i = 0; i < comps.length; i++) {\n if (nameprep(comps[i]).length === 0) {\n throw new Error(\"empty\");\n }\n }\n return true;\n }\n catch (error) { }\n return false;\n}\nexport function namehash(name) {\n if (typeof (name) !== \"string\") {\n logger.throwArgumentError(\"invalid ENS name; not a string\", \"name\", name);\n }\n let current = name;\n let result = Zeros;\n while (current.length) {\n const partition = current.match(Partition);\n if (partition == null || partition[2] === \"\") {\n return logger.throwArgumentError(\"invalid ENS name; missing component\", \"name\", name);\n }\n const label = toUtf8Bytes(nameprep(partition[3]));\n result = keccak256(concat([result, keccak256(label)]));\n current = partition[2] || \"\";\n }\n return hexlify(result);\n}\nexport function dnsEncode(name) {\n if (typeof (name) !== \"string\") {\n logger.throwArgumentError(\"invalid DNS name; not a string\", \"name\", name);\n }\n if (name === \"\") {\n return \"0x00\";\n }\n // @TODO: should we enforce the 255 octet limit?\n return concat(name.split(\".\").map((comp) => {\n if (comp === \"\") {\n logger.throwArgumentError(\"invalid DNS name; missing component\", \"name\", name);\n }\n // We jam in an _ prefix to fill in with the length later\n // Note: Nameprep throws if the component is over 63 bytes\n const bytes = toUtf8Bytes(\"_\" + nameprep(comp));\n bytes[0] = bytes.length - 1;\n return bytes;\n })) + \"00\";\n}\n//# sourceMappingURL=namehash.js.map","import { concat } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nexport const messagePrefix = \"\\x19Ethereum Signed Message:\\n\";\nexport function hashMessage(message) {\n if (typeof (message) === \"string\") {\n message = toUtf8Bytes(message);\n }\n return keccak256(concat([\n toUtf8Bytes(messagePrefix),\n toUtf8Bytes(String(message.length)),\n message\n ]));\n}\n//# sourceMappingURL=message.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _TypedDataEncoder_instances, _TypedDataEncoder_types, _TypedDataEncoder_fullTypes, _TypedDataEncoder_encoderCache, _TypedDataEncoder_getEncoder;\n//import { TypedDataDomain, TypedDataField } from \"@ethersproject/providerabstract-signer\";\nimport { getAddress } from \"@ethersproject/address\";\nimport { arrayify, concat, hexlify, zeroPadLeft, isHexString } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { mask, toHex, toTwos } from \"@ethersproject/math\";\nimport { id } from \"./id.js\";\nimport { logger } from \"./logger.js\";\nconst padding = new Uint8Array(32);\npadding.fill(0);\nconst BN__1 = BigInt(-1);\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_MAX_UINT256 = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\n;\n;\nfunction hexPadRight(value) {\n const bytes = arrayify(value);\n const padOffset = bytes.length % 32;\n if (padOffset) {\n return concat([bytes, padding.slice(padOffset)]);\n }\n return hexlify(bytes);\n}\nconst hexTrue = toHex(BN_1, 32);\nconst hexFalse = toHex(BN_0, 32);\nconst domainFieldTypes = {\n name: \"string\",\n version: \"string\",\n chainId: \"uint256\",\n verifyingContract: \"address\",\n salt: \"bytes32\"\n};\nconst domainFieldNames = [\n \"name\", \"version\", \"chainId\", \"verifyingContract\", \"salt\"\n];\nfunction checkString(key) {\n return function (value) {\n if (typeof (value) !== \"string\") {\n logger.throwArgumentError(`invalid domain value for ${JSON.stringify(key)}`, `domain.${key}`, value);\n }\n return value;\n };\n}\nconst domainChecks = {\n name: checkString(\"name\"),\n version: checkString(\"version\"),\n chainId: function (value) {\n return logger.getBigInt(value, \"domain.chainId\");\n },\n verifyingContract: function (value) {\n try {\n return getAddress(value).toLowerCase();\n }\n catch (error) { }\n return logger.throwArgumentError(`invalid domain value \"verifyingContract\"`, \"domain.verifyingContract\", value);\n },\n salt: function (value) {\n const bytes = logger.getBytes(value, \"domain.salt\");\n if (bytes.length !== 32) {\n logger.throwArgumentError(`invalid domain value \"salt\"`, \"domain.salt\", value);\n }\n return hexlify(bytes);\n }\n};\nfunction getBaseEncoder(type) {\n // intXX and uintXX\n {\n const match = type.match(/^(u?)int(\\d*)$/);\n if (match) {\n const signed = (match[1] === \"\");\n const width = parseInt(match[2] || \"256\");\n if (width % 8 !== 0 || width > 256 || (match[2] && match[2] !== String(width))) {\n logger.throwArgumentError(\"invalid numeric width\", \"type\", type);\n }\n const boundsUpper = mask(BN_MAX_UINT256, signed ? (width - 1) : width);\n const boundsLower = signed ? ((boundsUpper + BN_1) * BN__1) : BN_0;\n return function (_value) {\n const value = logger.getBigInt(_value, \"value\");\n if (value < boundsLower || value > boundsUpper) {\n logger.throwArgumentError(`value out-of-bounds for ${type}`, \"value\", value);\n }\n return toHex(toTwos(value, 256), 32);\n };\n }\n }\n // bytesXX\n {\n const match = type.match(/^bytes(\\d+)$/);\n if (match) {\n const width = parseInt(match[1]);\n if (width === 0 || width > 32 || match[1] !== String(width)) {\n logger.throwArgumentError(\"invalid bytes width\", \"type\", type);\n }\n return function (value) {\n const bytes = arrayify(value);\n if (bytes.length !== width) {\n logger.throwArgumentError(`invalid length for ${type}`, \"value\", value);\n }\n return hexPadRight(value);\n };\n }\n }\n switch (type) {\n case \"address\": return function (value) {\n return zeroPadLeft(getAddress(value), 32);\n };\n case \"bool\": return function (value) {\n return ((!value) ? hexFalse : hexTrue);\n };\n case \"bytes\": return function (value) {\n return keccak256(value);\n };\n case \"string\": return function (value) {\n return id(value);\n };\n }\n return null;\n}\nfunction encodeType(name, fields) {\n return `${name}(${fields.map(({ name, type }) => (type + \" \" + name)).join(\",\")})`;\n}\nexport class TypedDataEncoder {\n constructor(types) {\n _TypedDataEncoder_instances.add(this);\n _TypedDataEncoder_types.set(this, void 0);\n _TypedDataEncoder_fullTypes.set(this, void 0);\n _TypedDataEncoder_encoderCache.set(this, void 0);\n __classPrivateFieldSet(this, _TypedDataEncoder_types, JSON.stringify(types), \"f\");\n __classPrivateFieldSet(this, _TypedDataEncoder_fullTypes, new Map(), \"f\");\n __classPrivateFieldSet(this, _TypedDataEncoder_encoderCache, new Map(), \"f\");\n // Link struct types to their direct child structs\n const links = new Map();\n // Link structs to structs which contain them as a child\n const parents = new Map();\n // Link all subtypes within a given struct\n const subtypes = new Map();\n Object.keys(types).forEach((type) => {\n links.set(type, new Set());\n parents.set(type, []);\n subtypes.set(type, new Set());\n });\n for (const name in types) {\n const uniqueNames = new Set();\n for (const field of types[name]) {\n // Check each field has a unique name\n if (uniqueNames.has(field.name)) {\n logger.throwArgumentError(`duplicate variable name ${JSON.stringify(field.name)} in ${JSON.stringify(name)}`, \"types\", types);\n }\n uniqueNames.add(field.name);\n // Get the base type (drop any array specifiers)\n const baseType = (field.type.match(/^([^\\x5b]*)(\\x5b|$)/))[1] || null;\n if (baseType === name) {\n logger.throwArgumentError(`circular type reference to ${JSON.stringify(baseType)}`, \"types\", types);\n }\n // Is this a base encoding type?\n const encoder = getBaseEncoder(baseType);\n if (encoder) {\n continue;\n }\n if (!parents.has(baseType)) {\n logger.throwArgumentError(`unknown type ${JSON.stringify(baseType)}`, \"types\", types);\n }\n // Add linkage\n parents.get(baseType).push(name);\n links.get(name).add(baseType);\n }\n }\n // Deduce the primary type\n const primaryTypes = Array.from(parents.keys()).filter((n) => (parents.get(n).length === 0));\n if (primaryTypes.length === 0) {\n logger.throwArgumentError(\"missing primary type\", \"types\", types);\n }\n else if (primaryTypes.length > 1) {\n logger.throwArgumentError(`ambiguous primary types or unused types: ${primaryTypes.map((t) => (JSON.stringify(t))).join(\", \")}`, \"types\", types);\n }\n defineProperties(this, { primaryType: primaryTypes[0] });\n // Check for circular type references\n function checkCircular(type, found) {\n if (found.has(type)) {\n logger.throwArgumentError(`circular type reference to ${JSON.stringify(type)}`, \"types\", types);\n }\n found.add(type);\n for (const child of links.get(type)) {\n if (!parents.has(child)) {\n continue;\n }\n // Recursively check children\n checkCircular(child, found);\n // Mark all ancestors as having this decendant\n for (const subtype of found) {\n subtypes.get(subtype).add(child);\n }\n }\n found.delete(type);\n }\n checkCircular(this.primaryType, new Set());\n // Compute each fully describe type\n for (const [name, set] of subtypes) {\n const st = Array.from(set);\n st.sort();\n __classPrivateFieldGet(this, _TypedDataEncoder_fullTypes, \"f\").set(name, encodeType(name, types[name]) + st.map((t) => encodeType(t, types[t])).join(\"\"));\n }\n }\n get types() {\n return JSON.parse(__classPrivateFieldGet(this, _TypedDataEncoder_types, \"f\"));\n }\n getEncoder(type) {\n let encoder = __classPrivateFieldGet(this, _TypedDataEncoder_encoderCache, \"f\").get(type);\n if (!encoder) {\n encoder = __classPrivateFieldGet(this, _TypedDataEncoder_instances, \"m\", _TypedDataEncoder_getEncoder).call(this, type);\n __classPrivateFieldGet(this, _TypedDataEncoder_encoderCache, \"f\").set(type, encoder);\n }\n return encoder;\n }\n encodeType(name) {\n const result = __classPrivateFieldGet(this, _TypedDataEncoder_fullTypes, \"f\").get(name);\n if (!result) {\n return logger.throwArgumentError(`unknown type: ${JSON.stringify(name)}`, \"name\", name);\n }\n return result;\n }\n encodeData(type, value) {\n return this.getEncoder(type)(value);\n }\n hashStruct(name, value) {\n return keccak256(this.encodeData(name, value));\n }\n encode(value) {\n return this.encodeData(this.primaryType, value);\n }\n hash(value) {\n return this.hashStruct(this.primaryType, value);\n }\n _visit(type, value, callback) {\n // Basic encoder type (address, bool, uint256, etc)\n {\n const encoder = getBaseEncoder(type);\n if (encoder) {\n return callback(type, value);\n }\n }\n // Array\n const match = type.match(/^(.*)(\\x5b(\\d*)\\x5d)$/);\n if (match) {\n const subtype = match[1];\n const length = parseInt(match[3]);\n if (length >= 0 && value.length !== length) {\n logger.throwArgumentError(\"array length mismatch; expected length ${ arrayLength }\", \"value\", value);\n }\n return value.map((v) => this._visit(subtype, v, callback));\n }\n // Struct\n const fields = this.types[type];\n if (fields) {\n return fields.reduce((accum, { name, type }) => {\n accum[name] = this._visit(type, value[name], callback);\n return accum;\n }, {});\n }\n return logger.throwArgumentError(`unknown type: ${type}`, \"type\", type);\n }\n visit(value, callback) {\n return this._visit(this.primaryType, value, callback);\n }\n static from(types) {\n return new TypedDataEncoder(types);\n }\n static getPrimaryType(types) {\n return TypedDataEncoder.from(types).primaryType;\n }\n static hashStruct(name, types, value) {\n return TypedDataEncoder.from(types).hashStruct(name, value);\n }\n static hashDomain(domain) {\n const domainFields = [];\n for (const name in domain) {\n const type = domainFieldTypes[name];\n if (!type) {\n logger.throwArgumentError(`invalid typed-data domain key: ${JSON.stringify(name)}`, \"domain\", domain);\n }\n domainFields.push({ name, type });\n }\n domainFields.sort((a, b) => {\n return domainFieldNames.indexOf(a.name) - domainFieldNames.indexOf(b.name);\n });\n return TypedDataEncoder.hashStruct(\"EIP712Domain\", { EIP712Domain: domainFields }, domain);\n }\n static encode(domain, types, value) {\n return concat([\n \"0x1901\",\n TypedDataEncoder.hashDomain(domain),\n TypedDataEncoder.from(types).hash(value)\n ]);\n }\n static hash(domain, types, value) {\n return keccak256(TypedDataEncoder.encode(domain, types, value));\n }\n // Replaces all address types with ENS names with their looked up address\n static async resolveNames(domain, types, value, resolveName) {\n // Make a copy to isolate it from the object passed in\n domain = Object.assign({}, domain);\n // Look up all ENS names\n const ensCache = {};\n // Do we need to look up the domain's verifyingContract?\n if (domain.verifyingContract && !isHexString(domain.verifyingContract, 20)) {\n ensCache[domain.verifyingContract] = \"0x\";\n }\n // We are going to use the encoder to visit all the base values\n const encoder = TypedDataEncoder.from(types);\n // Get a list of all the addresses\n encoder.visit(value, (type, value) => {\n if (type === \"address\" && !isHexString(value, 20)) {\n ensCache[value] = \"0x\";\n }\n return value;\n });\n // Lookup each name\n for (const name in ensCache) {\n ensCache[name] = await resolveName(name);\n }\n // Replace the domain verifyingContract if needed\n if (domain.verifyingContract && ensCache[domain.verifyingContract]) {\n domain.verifyingContract = ensCache[domain.verifyingContract];\n }\n // Replace all ENS names with their address\n value = encoder.visit(value, (type, value) => {\n if (type === \"address\" && ensCache[value]) {\n return ensCache[value];\n }\n return value;\n });\n return { domain, value };\n }\n static getPayload(domain, types, value) {\n // Validate the domain fields\n TypedDataEncoder.hashDomain(domain);\n // Derive the EIP712Domain Struct reference type\n const domainValues = {};\n const domainTypes = [];\n domainFieldNames.forEach((name) => {\n const value = domain[name];\n if (value == null) {\n return;\n }\n domainValues[name] = domainChecks[name](value);\n domainTypes.push({ name, type: domainFieldTypes[name] });\n });\n const encoder = TypedDataEncoder.from(types);\n const typesWithDomain = Object.assign({}, types);\n if (typesWithDomain.EIP712Domain) {\n logger.throwArgumentError(\"types must not contain EIP712Domain type\", \"types.EIP712Domain\", types);\n }\n else {\n typesWithDomain.EIP712Domain = domainTypes;\n }\n // Validate the data structures and types\n encoder.encode(value);\n return {\n types: typesWithDomain,\n domain: domainValues,\n primaryType: encoder.primaryType,\n message: encoder.visit(value, (type, value) => {\n // bytes\n if (type.match(/^bytes(\\d*)/)) {\n return hexlify(logger.getBytes(value));\n }\n // uint or int\n if (type.match(/^u?int/)) {\n return logger.getBigInt(value).toString();\n }\n switch (type) {\n case \"address\":\n return value.toLowerCase();\n case \"bool\":\n return !!value;\n case \"string\":\n if (typeof (value) !== \"string\") {\n logger.throwArgumentError(`invalid string`, \"value\", value);\n }\n return value;\n }\n return logger.throwArgumentError(\"unsupported type\", \"type\", type);\n })\n };\n }\n}\n_TypedDataEncoder_types = new WeakMap(), _TypedDataEncoder_fullTypes = new WeakMap(), _TypedDataEncoder_encoderCache = new WeakMap(), _TypedDataEncoder_instances = new WeakSet(), _TypedDataEncoder_getEncoder = function _TypedDataEncoder_getEncoder(type) {\n // Basic encoder type (address, bool, uint256, etc)\n {\n const encoder = getBaseEncoder(type);\n if (encoder) {\n return encoder;\n }\n }\n // Array\n const match = type.match(/^(.*)(\\x5b(\\d*)\\x5d)$/);\n if (match) {\n const subtype = match[1];\n const subEncoder = this.getEncoder(subtype);\n const length = parseInt(match[3]);\n return (value) => {\n if (length >= 0 && value.length !== length) {\n logger.throwArgumentError(\"array length mismatch; expected length ${ arrayLength }\", \"value\", value);\n }\n let result = value.map(subEncoder);\n if (__classPrivateFieldGet(this, _TypedDataEncoder_fullTypes, \"f\").has(subtype)) {\n result = result.map(keccak256);\n }\n return keccak256(concat(result));\n };\n }\n // Struct\n const fields = this.types[type];\n if (fields) {\n const encodedType = id(__classPrivateFieldGet(this, _TypedDataEncoder_fullTypes, \"f\").get(type));\n return (value) => {\n const values = fields.map(({ name, type }) => {\n const result = this.getEncoder(type)(value[name]);\n if (__classPrivateFieldGet(this, _TypedDataEncoder_fullTypes, \"f\").has(type)) {\n return keccak256(result);\n }\n return result;\n });\n values.unshift(encodedType);\n return concat(values);\n };\n }\n return logger.throwArgumentError(`unknown type: ${type}`, \"type\", type);\n};\n//# sourceMappingURL=typed-data.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Interface_instances, _Interface_errors, _Interface_events, _Interface_functions, _Interface_abiCoder, _Interface_getFunction, _Interface_getEvent;\nimport { arrayify, concat, dataSlice, hexlify, zeroPadLeft, isHexString } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { id } from \"@ethersproject/hash\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { defaultAbiCoder } from \"./abi-coder.js\";\nimport { checkResultErrors, Result } from \"./coders/abstract-coder.js\";\nimport { ConstructorFragment, ErrorFragment, EventFragment, FormatType, Fragment, FunctionFragment, ParamType } from \"./fragments.js\";\nimport { logger } from \"./logger.js\";\nimport { Typed } from \"./typed.js\";\nexport { checkResultErrors, Result };\nexport class LogDescription {\n constructor(fragment, topic, args) {\n const name = fragment.name, signature = fragment.format();\n defineProperties(this, {\n fragment, name, signature, topic, args\n });\n }\n}\nexport class TransactionDescription {\n constructor(fragment, selector, args, value) {\n const name = fragment.name, signature = fragment.format();\n defineProperties(this, {\n fragment, name, args, signature, selector, value\n });\n }\n}\nexport class ErrorDescription {\n constructor(fragment, selector, args) {\n const name = fragment.name, signature = fragment.format();\n defineProperties(this, {\n fragment, name, args, signature, selector\n });\n }\n}\nexport class Indexed {\n constructor(hash) {\n defineProperties(this, { hash, _isIndexed: true });\n }\n static isIndexed(value) {\n return !!(value && value._isIndexed);\n }\n}\n// https://docs.soliditylang.org/en/v0.8.13/control-structures.html?highlight=panic#panic-via-assert-and-error-via-require\nconst PanicReasons = {\n \"0\": \"generic panic\",\n \"1\": \"assert(false)\",\n \"17\": \"arithmetic overflow\",\n \"18\": \"division or modulo by zero\",\n \"33\": \"enum overflow\",\n \"34\": \"invalid encoded storage byte array accessed\",\n \"49\": \"out-of-bounds array access; popping on an empty array\",\n \"50\": \"out-of-bounds access of an array or bytesN\",\n \"65\": \"out of memory\",\n \"81\": \"uninitialized function\",\n};\nconst BuiltinErrors = {\n \"0x08c379a0\": {\n signature: \"Error(string)\",\n name: \"Error\",\n inputs: [\"string\"],\n reason: (message) => {\n return `reverted with reason string ${JSON.stringify(message)}`;\n }\n },\n \"0x4e487b71\": {\n signature: \"Panic(uint256)\",\n name: \"Panic\",\n inputs: [\"uint256\"],\n reason: (code) => {\n let reason = \"unknown panic code\";\n if (code >= 0 && code <= 0xff && PanicReasons[code.toString()]) {\n reason = PanicReasons[code.toString()];\n }\n return `reverted with panic code 0x${code.toString(16)} (${reason})`;\n }\n }\n};\nexport class Interface {\n constructor(fragments) {\n _Interface_instances.add(this);\n _Interface_errors.set(this, void 0);\n _Interface_events.set(this, void 0);\n _Interface_functions.set(this, void 0);\n // #structs: Map;\n _Interface_abiCoder.set(this, void 0);\n let abi = [];\n if (typeof (fragments) === \"string\") {\n abi = JSON.parse(fragments);\n }\n else {\n abi = fragments;\n }\n __classPrivateFieldSet(this, _Interface_functions, new Map(), \"f\");\n __classPrivateFieldSet(this, _Interface_errors, new Map(), \"f\");\n __classPrivateFieldSet(this, _Interface_events, new Map(), \"f\");\n // this.#structs = new Map();\n defineProperties(this, {\n fragments: Object.freeze(abi.map((f) => Fragment.from(f)).filter((f) => (f != null))),\n });\n __classPrivateFieldSet(this, _Interface_abiCoder, this.getAbiCoder(), \"f\");\n // Add all fragments by their signature\n this.fragments.forEach((fragment) => {\n let bucket;\n switch (fragment.type) {\n case \"constructor\":\n if (this.deploy) {\n logger.warn(\"duplicate definition - constructor\");\n return;\n }\n //checkNames(fragment, \"input\", fragment.inputs);\n defineProperties(this, { deploy: fragment });\n return;\n case \"function\":\n //checkNames(fragment, \"input\", fragment.inputs);\n //checkNames(fragment, \"output\", (fragment).outputs);\n bucket = __classPrivateFieldGet(this, _Interface_functions, \"f\");\n break;\n case \"event\":\n //checkNames(fragment, \"input\", fragment.inputs);\n bucket = __classPrivateFieldGet(this, _Interface_events, \"f\");\n break;\n case \"error\":\n bucket = __classPrivateFieldGet(this, _Interface_errors, \"f\");\n break;\n default:\n return;\n }\n const signature = fragment.format();\n if (bucket.has(signature)) {\n logger.warn(\"duplicate definition - \" + signature);\n return;\n }\n bucket.set(signature, fragment);\n });\n // If we do not have a constructor add a default\n if (!this.deploy) {\n defineProperties(this, {\n deploy: ConstructorFragment.fromString(\"constructor()\")\n });\n }\n }\n // @TODO: multi sig?\n format(format) {\n if (!format) {\n format = FormatType.full;\n }\n if (format === FormatType.sighash) {\n logger.throwArgumentError(\"interface does not support formatting sighash\", \"format\", format);\n }\n const abi = this.fragments.map((f) => f.format(format));\n // We need to re-bundle the JSON fragments a bit\n if (format === FormatType.json) {\n return JSON.stringify(abi.map((j) => JSON.parse(j)));\n }\n return abi;\n }\n getAbiCoder() {\n return defaultAbiCoder;\n }\n getFunctionName(key) {\n return (__classPrivateFieldGet(this, _Interface_instances, \"m\", _Interface_getFunction).call(this, key, null, false)).name;\n }\n getFunction(key, values) {\n return __classPrivateFieldGet(this, _Interface_instances, \"m\", _Interface_getFunction).call(this, key, values || null, true);\n }\n getEventName(key) {\n return (__classPrivateFieldGet(this, _Interface_instances, \"m\", _Interface_getEvent).call(this, key, null, false)).name;\n }\n getEvent(key, values) {\n return __classPrivateFieldGet(this, _Interface_instances, \"m\", _Interface_getEvent).call(this, key, values || null, true);\n }\n // Find a function definition by any means necessary (unless it is ambiguous)\n getError(key, values) {\n if (isHexString(key)) {\n const selector = key.toLowerCase();\n for (const fragment of __classPrivateFieldGet(this, _Interface_errors, \"f\").values()) {\n if (selector === this.getSelector(fragment)) {\n return fragment;\n }\n }\n logger.throwArgumentError(\"no matching error\", \"selector\", key);\n }\n // It is a bare name, look up the function (will return null if ambiguous)\n if (key.indexOf(\"(\") === -1) {\n const matching = [];\n for (const [name, fragment] of __classPrivateFieldGet(this, _Interface_errors, \"f\")) {\n if (name.split(\"(\" /* fix:) */)[0] === key) {\n matching.push(fragment);\n }\n }\n if (matching.length === 0) {\n logger.throwArgumentError(\"no matching error\", \"name\", key);\n }\n else if (matching.length > 1) {\n // @TODO: refine by Typed\n logger.throwArgumentError(\"multiple matching errors\", \"name\", key);\n }\n return matching[0];\n }\n // Normalize the signature and lookup the function\n const result = __classPrivateFieldGet(this, _Interface_errors, \"f\").get(ErrorFragment.fromString(key).format());\n if (result) {\n return result;\n }\n return logger.throwArgumentError(\"no matching error\", \"signature\", key);\n }\n // Get the 4-byte selector used by Solidity to identify a function\n getSelector(fragment) {\n /*\n if (typeof(fragment) === \"string\") {\n const matches: Array = [ ];\n\n try { matches.push(this.getFunction(fragment)); } catch (error) { }\n try { matches.push(this.getError(fragment)); } catch (_) { }\n\n if (matches.length === 0) {\n logger.throwArgumentError(\"unknown fragment\", \"key\", fragment);\n } else if (matches.length > 1) {\n logger.throwArgumentError(\"ambiguous fragment matches function and error\", \"key\", fragment);\n }\n\n fragment = matches[0];\n }\n */\n return dataSlice(id(fragment.format()), 0, 4);\n }\n // Get the 32-byte topic hash used by Solidity to identify an event\n getEventTopic(fragment) {\n //if (typeof(fragment) === \"string\") { fragment = this.getEvent(eventFragment); }\n return id(fragment.format());\n }\n _decodeParams(params, data) {\n return __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(params, data);\n }\n _encodeParams(params, values) {\n return __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").encode(params, values);\n }\n encodeDeploy(values) {\n return this._encodeParams(this.deploy.inputs, values || []);\n }\n decodeErrorResult(fragment, data) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getError(fragment);\n }\n if (dataSlice(data, 0, 4) !== this.getSelector(fragment)) {\n logger.throwArgumentError(`data signature does not match error ${fragment.name}.`, \"data\", data);\n }\n return this._decodeParams(fragment.inputs, dataSlice(data, 4));\n }\n encodeErrorResult(fragment, values) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getError(fragment);\n }\n return concat([\n this.getSelector(fragment),\n this._encodeParams(fragment.inputs, values || [])\n ]);\n }\n // Decode the data for a function call (e.g. tx.data)\n decodeFunctionData(fragment, data) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getFunction(fragment);\n }\n if (dataSlice(data, 0, 4) !== this.getSelector(fragment)) {\n logger.throwArgumentError(`data signature does not match function ${fragment.name}.`, \"data\", data);\n }\n return this._decodeParams(fragment.inputs, dataSlice(data, 4));\n }\n // Encode the data for a function call (e.g. tx.data)\n encodeFunctionData(fragment, values) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getFunction(fragment);\n }\n return concat([\n this.getSelector(fragment),\n this._encodeParams(fragment.inputs, values || [])\n ]);\n }\n // Decode the result from a function call (e.g. from eth_call)\n decodeFunctionResult(fragment, data) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getFunction(fragment);\n }\n let message = \"invalid length for result data\";\n const bytes = arrayify(data);\n if ((bytes.length % 32) === 0) {\n try {\n return __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(fragment.outputs, bytes);\n }\n catch (error) {\n message = \"could not decode result data\";\n }\n }\n // Call returned data with no error, but the data is junk\n return logger.throwError(message, \"BAD_DATA\", {\n value: hexlify(bytes),\n info: { method: fragment.name, signature: fragment.format() }\n });\n }\n makeError(fragment, _data, tx) {\n if (typeof (fragment) === \"string\") {\n fragment = this.getFunction(fragment);\n }\n const data = logger.getBytes(_data);\n let args = undefined;\n if (tx) {\n try {\n args = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(fragment.inputs, tx.data || \"0x\");\n }\n catch (error) {\n console.log(error);\n }\n }\n let errorArgs = undefined;\n let errorName = undefined;\n let errorSignature = undefined;\n let reason = \"unknown reason\";\n if (data.length === 0) {\n reason = \"missing error reason\";\n }\n else if ((data.length % 32) === 4) {\n const selector = hexlify(data.slice(0, 4));\n const builtin = BuiltinErrors[selector];\n if (builtin) {\n try {\n errorName = builtin.name;\n errorSignature = builtin.signature;\n errorArgs = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(builtin.inputs, data.slice(4));\n reason = builtin.reason(...errorArgs);\n }\n catch (error) {\n console.log(error); // @TODO: remove\n }\n }\n else {\n reason = \"unknown custom error\";\n try {\n const error = this.getError(selector);\n errorName = error.name;\n errorSignature = error.format();\n reason = `custom error: ${errorSignature}`;\n try {\n errorArgs = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(error.inputs, data.slice(4));\n }\n catch (error) {\n reason = `custom error: ${errorSignature} (coult not decode error data)`;\n }\n }\n catch (error) {\n console.log(error); // @TODO: remove\n }\n }\n }\n return logger.makeError(\"call revert exception\", \"CALL_EXCEPTION\", {\n data: hexlify(data), transaction: null,\n method: fragment.name, signature: fragment.format(), args,\n errorArgs, errorName, errorSignature, reason\n });\n }\n // Encode the result for a function call (e.g. for eth_call)\n encodeFunctionResult(functionFragment, values) {\n if (typeof (functionFragment) === \"string\") {\n functionFragment = this.getFunction(functionFragment);\n }\n return hexlify(__classPrivateFieldGet(this, _Interface_abiCoder, \"f\").encode(functionFragment.outputs, values || []));\n }\n /*\n spelunk(inputs: Array, values: ReadonlyArray, processfunc: (type: string, value: any) => Promise): Promise> {\n const promises: Array> = [ ];\n const process = function(type: ParamType, value: any): any {\n if (type.baseType === \"array\") {\n return descend(type.child\n }\n if (type. === \"address\") {\n }\n };\n \n const descend = function (inputs: Array, values: ReadonlyArray) {\n if (inputs.length !== values.length) { throw new Error(\"length mismatch\"); }\n \n };\n \n const result: Array = [ ];\n values.forEach((value, index) => {\n if (value == null) {\n topics.push(null);\n } else if (param.baseType === \"array\" || param.baseType === \"tuple\") {\n logger.throwArgumentError(\"filtering with tuples or arrays not supported\", (\"contract.\" + param.name), value);\n } else if (Array.isArray(value)) {\n topics.push(value.map((value) => encodeTopic(param, value)));\n } else {\n topics.push(encodeTopic(param, value));\n }\n });\n }\n */\n // Create the filter for the event with search criteria (e.g. for eth_filterLog)\n encodeFilterTopics(eventFragment, values) {\n if (typeof (eventFragment) === \"string\") {\n eventFragment = this.getEvent(eventFragment);\n }\n if (values.length > eventFragment.inputs.length) {\n logger.throwError(\"too many arguments for \" + eventFragment.format(), \"UNEXPECTED_ARGUMENT\", {\n count: values.length,\n expectedCount: eventFragment.inputs.length\n });\n }\n const topics = [];\n if (!eventFragment.anonymous) {\n topics.push(this.getEventTopic(eventFragment));\n }\n const encodeTopic = (param, value) => {\n if (param.type === \"string\") {\n return id(value);\n }\n else if (param.type === \"bytes\") {\n return keccak256(hexlify(value));\n }\n // Check addresses are valid\n if (param.type === \"address\") {\n __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").encode([\"address\"], [value]);\n }\n return zeroPadLeft(hexlify(value), 32);\n //@TOOD should probably be return toHex(value, 32)\n };\n values.forEach((value, index) => {\n const param = eventFragment.inputs[index];\n if (!param.indexed) {\n if (value != null) {\n logger.throwArgumentError(\"cannot filter non-indexed parameters; must be null\", (\"contract.\" + param.name), value);\n }\n return;\n }\n if (value == null) {\n topics.push(null);\n }\n else if (param.baseType === \"array\" || param.baseType === \"tuple\") {\n logger.throwArgumentError(\"filtering with tuples or arrays not supported\", (\"contract.\" + param.name), value);\n }\n else if (Array.isArray(value)) {\n topics.push(value.map((value) => encodeTopic(param, value)));\n }\n else {\n topics.push(encodeTopic(param, value));\n }\n });\n // Trim off trailing nulls\n while (topics.length && topics[topics.length - 1] === null) {\n topics.pop();\n }\n return topics;\n }\n encodeEventLog(eventFragment, values) {\n if (typeof (eventFragment) === \"string\") {\n eventFragment = this.getEvent(eventFragment);\n }\n const topics = [];\n const dataTypes = [];\n const dataValues = [];\n if (!eventFragment.anonymous) {\n topics.push(this.getEventTopic(eventFragment));\n }\n if (values.length !== eventFragment.inputs.length) {\n logger.throwArgumentError(\"event arguments/values mismatch\", \"values\", values);\n }\n eventFragment.inputs.forEach((param, index) => {\n const value = values[index];\n if (param.indexed) {\n if (param.type === \"string\") {\n topics.push(id(value));\n }\n else if (param.type === \"bytes\") {\n topics.push(keccak256(value));\n }\n else if (param.baseType === \"tuple\" || param.baseType === \"array\") {\n // @TODO\n throw new Error(\"not implemented\");\n }\n else {\n topics.push(__classPrivateFieldGet(this, _Interface_abiCoder, \"f\").encode([param.type], [value]));\n }\n }\n else {\n dataTypes.push(param);\n dataValues.push(value);\n }\n });\n return {\n data: __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").encode(dataTypes, dataValues),\n topics: topics\n };\n }\n // Decode a filter for the event and the search criteria\n decodeEventLog(eventFragment, data, topics) {\n if (typeof (eventFragment) === \"string\") {\n eventFragment = this.getEvent(eventFragment);\n }\n if (topics != null && !eventFragment.anonymous) {\n const eventTopic = this.getEventTopic(eventFragment);\n if (!isHexString(topics[0], 32) || topics[0].toLowerCase() !== eventTopic) {\n logger.throwArgumentError(\"fragment/topic mismatch\", \"topics[0]\", topics[0]);\n }\n topics = topics.slice(1);\n }\n const indexed = [];\n const nonIndexed = [];\n const dynamic = [];\n eventFragment.inputs.forEach((param, index) => {\n if (param.indexed) {\n if (param.type === \"string\" || param.type === \"bytes\" || param.baseType === \"tuple\" || param.baseType === \"array\") {\n indexed.push(ParamType.fromObject({ type: \"bytes32\", name: param.name }));\n dynamic.push(true);\n }\n else {\n indexed.push(param);\n dynamic.push(false);\n }\n }\n else {\n nonIndexed.push(param);\n dynamic.push(false);\n }\n });\n const resultIndexed = (topics != null) ? __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(indexed, concat(topics)) : null;\n const resultNonIndexed = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(nonIndexed, data, true);\n //const result: (Array & { [ key: string ]: any }) = [ ];\n const values = [];\n const keys = [];\n let nonIndexedIndex = 0, indexedIndex = 0;\n eventFragment.inputs.forEach((param, index) => {\n let value = null;\n if (param.indexed) {\n if (resultIndexed == null) {\n value = new Indexed(null);\n }\n else if (dynamic[index]) {\n value = new Indexed(resultIndexed[indexedIndex++]);\n }\n else {\n try {\n value = resultIndexed[indexedIndex++];\n }\n catch (error) {\n value = error;\n }\n }\n }\n else {\n try {\n value = resultNonIndexed[nonIndexedIndex++];\n }\n catch (error) {\n value = error;\n }\n }\n values.push(value);\n keys.push(param.name || null);\n });\n return Result.fromItems(values, keys);\n }\n // Given a transaction, find the matching function fragment (if any) and\n // determine all its properties and call parameters\n parseTransaction(tx) {\n const data = logger.getBytes(tx.data, \"tx.data\");\n const value = logger.getBigInt((tx.value != null) ? tx.value : 0, \"tx.value\");\n const fragment = this.getFunction(hexlify(data.slice(0, 4)));\n if (!fragment) {\n return null;\n }\n const args = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(fragment.inputs, data.slice(4));\n return new TransactionDescription(fragment, this.getSelector(fragment), args, value);\n }\n // @TODO\n //parseCallResult(data: BytesLike): ??\n // Given an event log, find the matching event fragment (if any) and\n // determine all its properties and values\n parseLog(log) {\n const fragment = this.getEvent(log.topics[0]);\n if (!fragment || fragment.anonymous) {\n return null;\n }\n // @TODO: If anonymous, and the only method, and the input count matches, should we parse?\n // Probably not, because just because it is the only event in the ABI does\n // not mean we have the full ABI; maybe just a fragment?\n return new LogDescription(fragment, this.getEventTopic(fragment), this.decodeEventLog(fragment, log.data, log.topics));\n }\n parseError(data) {\n const hexData = hexlify(data);\n const fragment = this.getError(dataSlice(hexData, 0, 4));\n if (!fragment) {\n return null;\n }\n const args = __classPrivateFieldGet(this, _Interface_abiCoder, \"f\").decode(fragment.inputs, dataSlice(hexData, 4));\n return new ErrorDescription(fragment, this.getSelector(fragment), args);\n }\n static from(value) {\n // Already an Interface, which is immutable\n if (value instanceof Interface) {\n return value;\n }\n // JSON\n if (typeof (value) === \"string\") {\n return new Interface(JSON.parse(value));\n }\n // Maybe an interface from an older version, or from a symlinked copy\n if (typeof (value.format) === \"function\") {\n return new Interface(value.format(FormatType.json));\n }\n // Array of fragments\n return new Interface(value);\n }\n}\n_Interface_errors = new WeakMap(), _Interface_events = new WeakMap(), _Interface_functions = new WeakMap(), _Interface_abiCoder = new WeakMap(), _Interface_instances = new WeakSet(), _Interface_getFunction = function _Interface_getFunction(key, values, forceUnique) {\n // Selector\n if (isHexString(key)) {\n const selector = key.toLowerCase();\n for (const fragment of __classPrivateFieldGet(this, _Interface_functions, \"f\").values()) {\n if (selector === this.getSelector(fragment)) {\n return fragment;\n }\n }\n logger.throwArgumentError(\"no matching function\", \"selector\", key);\n }\n // It is a bare name, look up the function (will return null if ambiguous)\n if (key.indexOf(\"(\") === -1) {\n const matching = [];\n for (const [name, fragment] of __classPrivateFieldGet(this, _Interface_functions, \"f\")) {\n if (name.split(\"(\" /* fix:) */)[0] === key) {\n matching.push(fragment);\n }\n }\n if (values) {\n const lastValue = (values.length > 0) ? values[values.length - 1] : null;\n let valueLength = values.length;\n let allowOptions = true;\n if (Typed.isTyped(lastValue) && lastValue.type === \"overrides\") {\n allowOptions = false;\n valueLength--;\n }\n // Remove all matches that don't have a compatible length. The args\n // may contain an overrides, so the match may have n or n - 1 parameters\n for (let i = matching.length - 1; i >= 0; i--) {\n const inputs = matching[i].inputs.length;\n if (inputs !== valueLength && (!allowOptions || inputs !== valueLength - 1)) {\n matching.splice(i, 1);\n }\n }\n // Remove all matches that don't match the Typed signature\n for (let i = matching.length - 1; i >= 0; i--) {\n const inputs = matching[i].inputs;\n for (let j = 0; j < values.length; j++) {\n // Not a typed value\n if (!Typed.isTyped(values[j])) {\n continue;\n }\n // We are past the inputs\n if (j >= inputs.length) {\n if (values[j].type === \"overrides\") {\n continue;\n }\n matching.splice(i, 1);\n break;\n }\n // Make sure the value type matches the input type\n if (values[j].type !== inputs[j].baseType) {\n matching.splice(i, 1);\n break;\n }\n }\n }\n }\n // We found a single matching signature with an overrides, but the\n // last value is something that cannot possibly be an options\n if (matching.length === 1 && values && values.length !== matching[0].inputs.length) {\n const lastArg = values[values.length - 1];\n if (lastArg == null || Array.isArray(lastArg) || typeof (lastArg) !== \"object\") {\n matching.splice(0, 1);\n }\n }\n if (matching.length === 0) {\n logger.throwArgumentError(\"no matching function\", \"name\", key);\n }\n else if (matching.length > 1 && forceUnique) {\n const matchStr = matching.map((m) => JSON.stringify(m.format())).join(\", \");\n logger.throwArgumentError(`multiple matching functions (i.e. ${matchStr})`, \"name\", key);\n }\n return matching[0];\n }\n // Normalize the signature and lookup the function\n const result = __classPrivateFieldGet(this, _Interface_functions, \"f\").get(FunctionFragment.fromString(key).format());\n if (result) {\n return result;\n }\n return logger.throwArgumentError(\"no matching function\", \"signature\", key);\n}, _Interface_getEvent = function _Interface_getEvent(key, values, forceUnique) {\n // EventTopic\n if (isHexString(key)) {\n const eventTopic = key.toLowerCase();\n for (const fragment of __classPrivateFieldGet(this, _Interface_events, \"f\").values()) {\n if (eventTopic === this.getEventTopic(fragment)) {\n return fragment;\n }\n }\n logger.throwArgumentError(\"no matching event\", \"eventTopic\", key);\n }\n // It is a bare name, look up the function (will return null if ambiguous)\n if (key.indexOf(\"(\") === -1) {\n const matching = [];\n for (const [name, fragment] of __classPrivateFieldGet(this, _Interface_events, \"f\")) {\n if (name.split(\"(\" /* fix:) */)[0] === key) {\n matching.push(fragment);\n }\n }\n if (values) {\n // Remove all matches that don't have a compatible length.\n for (let i = matching.length - 1; i >= 0; i--) {\n if (matching[i].inputs.length < values.length) {\n matching.splice(i, 1);\n }\n }\n // Remove all matches that don't match the Typed signature\n for (let i = matching.length - 1; i >= 0; i--) {\n const inputs = matching[i].inputs;\n for (let j = 0; j < values.length; j++) {\n // Not a typed value\n if (!Typed.isTyped(values[j])) {\n continue;\n }\n // Make sure the value type matches the input type\n if (values[j].type !== inputs[j].baseType) {\n matching.splice(i, 1);\n break;\n }\n }\n }\n }\n if (matching.length === 0) {\n logger.throwArgumentError(\"no matching event\", \"name\", key);\n }\n else if (matching.length > 1 && forceUnique) {\n // @TODO: refine by Typed\n logger.throwArgumentError(\"multiple matching events\", \"name\", key);\n }\n return matching[0];\n }\n // Normalize the signature and lookup the function\n const result = __classPrivateFieldGet(this, _Interface_events, \"f\").get(EventFragment.fromString(key).format());\n if (result) {\n return result;\n }\n return logger.throwArgumentError(\"no matching event\", \"signature\", key);\n};\n//# sourceMappingURL=interface.js.map","export const version = \"@ethersproject/web@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { version } from \"./_version.js\";\nimport { Logger } from \"@ethersproject/logger\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _FetchResponse_props, _FetchResponse_error;\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { defineProperties, getStore } from \"@ethersproject/properties\";\nimport { toUtf8String } from \"@ethersproject/strings\";\nimport { logger } from \"./logger.js\";\n;\nexport class FetchResponse {\n constructor(statusCode, statusMessage, headers, body, request) {\n _FetchResponse_props.set(this, void 0);\n _FetchResponse_error.set(this, void 0);\n __classPrivateFieldSet(this, _FetchResponse_props, {\n statusCode,\n statusMessage,\n headers: Object.freeze(Object.assign({}, Object.keys(headers).reduce((accum, k) => {\n accum[k.toLowerCase()] = headers[k];\n return accum;\n }, {}))),\n body: ((body == null) ? null : new Uint8Array(body)),\n request: (request || null),\n }, \"f\");\n __classPrivateFieldSet(this, _FetchResponse_error, { message: \"\" }, \"f\");\n }\n toString() {\n const body = getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"body\");\n return ``;\n }\n get statusCode() { return getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"statusCode\"); }\n get statusMessage() { return getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"statusMessage\"); }\n get headers() { return getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"headers\"); }\n get body() {\n const body = getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"body\");\n return (body == null) ? null : new Uint8Array(body);\n }\n get bodyText() {\n try {\n const body = getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"body\");\n return (body == null) ? \"\" : toUtf8String(body);\n }\n catch (error) {\n return logger.throwError(\"response body is not valid UTF-8 data\", \"UNSUPPORTED_OPERATION\", {\n operation: \"bodyText\", info: { response: this }\n });\n }\n }\n get bodyJson() {\n try {\n return JSON.parse(this.bodyText);\n }\n catch (error) {\n return logger.throwError(\"response body is not valid JSON\", \"UNSUPPORTED_OPERATION\", {\n operation: \"bodyJson\", info: { response: this }\n });\n }\n }\n [(_FetchResponse_props = new WeakMap(), _FetchResponse_error = new WeakMap(), Symbol.iterator)]() {\n const headers = this.headers;\n const keys = Object.keys(headers);\n let index = 0;\n return {\n next: () => {\n if (index < keys.length) {\n const key = keys[index++];\n return {\n value: [key, headers[key]], done: false\n };\n }\n return { value: undefined, done: true };\n }\n };\n }\n makeServerError(message, error) {\n let statusMessage;\n if (!message) {\n message = `${this.statusCode} ${this.statusMessage}`;\n statusMessage = `CLIENT ESCALATED SERVER ERROR (${message})`;\n }\n else {\n statusMessage = `CLIENT ESCALATED SERVER ERROR (${this.statusCode} ${this.statusMessage}; ${message})`;\n }\n const response = new FetchResponse(599, statusMessage, this.headers, this.body, getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"request\") || undefined);\n __classPrivateFieldSet(response, _FetchResponse_error, { message, error }, \"f\");\n return response;\n }\n throwThrottleError(message, stall) {\n if (stall == null) {\n stall = 1000;\n }\n if (typeof (stall) !== \"number\" || !Number.isInteger(stall) || stall < 0) {\n logger.throwArgumentError(\"invalid stall timeout\", \"stall\", stall);\n }\n const error = new Error(message || \"throttling requests\");\n defineProperties(error, { stall, throttle: true });\n throw error;\n }\n getHeader(key) {\n return this.headers[key.toLowerCase()];\n }\n hasBody() {\n const body = getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"body\");\n return (body != null);\n }\n get request() { return getStore(__classPrivateFieldGet(this, _FetchResponse_props, \"f\"), \"request\"); }\n ok() {\n return (__classPrivateFieldGet(this, _FetchResponse_error, \"f\").message === \"\" && this.statusCode >= 200 && this.statusCode < 300);\n }\n assertOk() {\n if (this.ok()) {\n return;\n }\n let { message, error } = __classPrivateFieldGet(this, _FetchResponse_error, \"f\");\n if (message === \"\") {\n message = `server response ${this.statusCode} ${this.statusMessage}`;\n }\n logger.throwError(message, \"SERVER_ERROR\", {\n request: (this.request || \"unknown request\"), response: this, error\n });\n }\n}\n//# sourceMappingURL=response.js.map","import { logger } from \"./logger.js\";\nimport { FetchResponse } from \"./response.js\";\nexport async function getUrl(req, timeout) {\n const protocol = req.url.split(\":\")[0].toLowerCase();\n if (protocol !== \"http\" && protocol !== \"https\") {\n logger.throwError(`unsupported protocol ${protocol}`, \"UNSUPPORTED_OPERATION\", {\n info: { protocol },\n operation: \"request\"\n });\n }\n if (req.credentials && !req.allowInsecureAuthentication) {\n logger.throwError(\"insecure authorized connections unsupported\", \"UNSUPPORTED_OPERATION\", {\n operation: \"request\"\n });\n }\n const init = {\n method: req.method,\n headers: new Headers(Array.from(req)),\n body: req.body || undefined,\n };\n const resp = await fetch(req.url, init);\n const headers = {};\n resp.headers.forEach((value, key) => {\n headers[key.toLowerCase()] = value;\n });\n const body = new Uint8Array(await resp.arrayBuffer());\n return new FetchResponse(resp.status, resp.statusText, headers, body, req);\n}\n//# sourceMappingURL=get-url-browser.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _FetchRequest_props;\nimport { getStore, setStore } from \"@ethersproject/properties\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nimport { logger } from \"./logger.js\";\nfunction check(value, type, name) {\n if (typeof (value) !== type) {\n throw new Error(`invalid ${name}`);\n }\n return value;\n}\nexport class FetchRequest {\n constructor(url) {\n _FetchRequest_props.set(this, void 0);\n __classPrivateFieldSet(this, _FetchRequest_props, {\n allowInsecure: false,\n gzip: false,\n headers: {},\n method: \"\",\n timeout: 300,\n url: check(url, \"string\", \"url\")\n }, \"f\");\n }\n // URL\n get url() { return getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"url\"); }\n set url(url) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"url\", check(url, \"string\", \"url\"));\n }\n // Body\n get body() {\n const body = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\");\n if (body == null) {\n return null;\n }\n if (this.isFrozen()) {\n return new Uint8Array(body);\n }\n return body;\n }\n set body(body) {\n if (body == null) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\", undefined);\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\", undefined);\n }\n else if (typeof (body) === \"string\") {\n // @TODO: utf8-check\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\", toUtf8Bytes(body));\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\", \"text/plain\");\n }\n else if (body instanceof Uint8Array) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\", body);\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\", \"application/octet-stream\");\n }\n else if (typeof (body) === \"object\") {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\", toUtf8Bytes(JSON.stringify(body)));\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\", \"application/json\");\n }\n else {\n throw new Error(\"invalid body\");\n }\n }\n hasBody() {\n return (getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\") != null);\n }\n // Method (default: GET with no body, POST with a body)\n get method() {\n const method = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"method\");\n if (method) {\n return method.toUpperCase();\n }\n if (this.body) {\n return \"POST\";\n }\n return \"GET\";\n }\n set method(method) {\n if (method == null) {\n method = \"\";\n }\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"method\", check(method, \"string\", \"method\"));\n }\n // Headers (automatically fills content-type if not explicitly set)\n get headers() {\n const headers = Object.assign({}, getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\"));\n const bodyType = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\");\n if (this.credentials) { /* TODO */ }\n ;\n if (this.allowGzip) {\n headers[\"accept-encoding\"] = \"gzip\";\n }\n if (headers[\"content-type\"] == null && bodyType) {\n headers[\"content-type\"] = bodyType;\n }\n if (this.body) {\n headers[\"content-length\"] = String(this.body.length);\n }\n return Object.freeze(headers);\n }\n getHeader(key) {\n return this.headers[key.toLowerCase()];\n }\n setHeader(key, value) {\n const headers = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\");\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\", headers);\n headers[check(key, \"string\", \"key\").toLowerCase()] = String(value);\n }\n clearHeaders() {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\", {});\n }\n [(_FetchRequest_props = new WeakMap(), Symbol.iterator)]() {\n const headers = this.headers;\n const keys = Object.keys(headers);\n let index = 0;\n return {\n next: () => {\n if (index < keys.length) {\n const key = keys[index++];\n return {\n value: [key, headers[key]], done: false\n };\n }\n return { value: undefined, done: true };\n }\n };\n }\n // Configure an Authorization header\n get credentials() {\n return getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"creds\") || null;\n }\n setCredentials(username, password) {\n if (username.match(/:/)) {\n logger.throwArgumentError(\"invalid basic authentication username\", \"username\", \"[REDACTED]\");\n }\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"creds\", `${username}:${password}`);\n // @TODO:\n //const auth = username + \":\" + password;\n //this.setHeader(\"authorization\", \"Basic \" + base64Encode(toUtf8Bytes(auth)))\n //this.setHeader(\"authorization\", \"Basic TODO:\" + auth);\n }\n // Configure the request to allow gzipped responses\n get allowGzip() {\n return getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"gzip\");\n }\n set allowGzip(value) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"gzip\", !!value);\n }\n // Allow credentials to be sent over an insecure (non-HTTPS) channel\n get allowInsecureAuthentication() {\n return !!getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"allowInsecure\");\n }\n set allowInsecureAuthentication(value) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"allowInsecure\", check(value, \"boolean\", \"allowInsecureAuthentication\"));\n }\n // Timeout (seconds)\n get timeout() { return getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"timeout\"); }\n set timeout(timeout) {\n timeout = check(timeout, \"number\", \"timeout\");\n if (timeout <= 0) {\n throw new Error(\"invalid timerout\");\n }\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"timeout\", timeout);\n }\n redirect(location) {\n // Redirection; for now we only support absolute locataions\n const current = this.url.split(\":\")[0].toLowerCase();\n const target = location.split(\":\")[0].toLowerCase();\n if (this.method !== \"GET\" || (current === \"https\" && target === \"http\") ||\n !location.match(/^https?:$/)) {\n return logger.throwError(`unsupported redirect`, \"UNSUPPORTED_OPERATION\", {\n operation: `redirect(${this.method} ${JSON.stringify(this.url)} => ${JSON.stringify(location)})`\n });\n }\n // Create a copy of this request, with a new URL\n const req = new FetchRequest(location);\n req.method = \"GET\";\n req.allowGzip = this.allowGzip;\n req.timeout = this.timeout;\n setStore(__classPrivateFieldGet(req, _FetchRequest_props, \"f\"), \"body\", getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\"));\n setStore(__classPrivateFieldGet(req, _FetchRequest_props, \"f\"), \"headers\", Object.assign({}, getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\")));\n setStore(__classPrivateFieldGet(req, _FetchRequest_props, \"f\"), \"bodyType\", getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\"));\n // Do not forward credentials unless on the same domain; only absolute\n //req.allowInsecure = false;\n // paths are currently supported; may want a way to specify to forward?\n //setStore(req.#props, \"creds\", getStore(this.#pros, \"creds\"));\n return req;\n }\n clone() {\n const clone = new FetchRequest(this.url);\n // Preserve \"default method\" (i.e. null)\n setStore(__classPrivateFieldGet(clone, _FetchRequest_props, \"f\"), \"method\", getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"method\"));\n // Preserve \"default body\" with type, copying the Uint8Array is present\n const body = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\");\n setStore(__classPrivateFieldGet(clone, _FetchRequest_props, \"f\"), \"body\", (body == null) ? undefined : new Uint8Array(body));\n setStore(__classPrivateFieldGet(clone, _FetchRequest_props, \"f\"), \"bodyType\", getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"bodyType\"));\n // Preserve \"default headers\"\n setStore(__classPrivateFieldGet(clone, _FetchRequest_props, \"f\"), \"headers\", Object.assign({}, getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"headers\")));\n // Credentials is readonly, so we copy internally\n setStore(__classPrivateFieldGet(clone, _FetchRequest_props, \"f\"), \"creds\", getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"creds\"));\n if (this.allowGzip) {\n clone.allowGzip = true;\n }\n clone.timeout = this.timeout;\n if (this.allowInsecureAuthentication) {\n clone.allowInsecureAuthentication = true;\n }\n return clone;\n }\n freeze() {\n // Copy the body so any changes to previous access do not modify it\n const body = getStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\");\n if (body != null) {\n setStore(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"), \"body\", new Uint8Array(body));\n }\n Object.freeze(__classPrivateFieldGet(this, _FetchRequest_props, \"f\").headers);\n Object.freeze(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"));\n return this;\n }\n isFrozen() {\n return Object.isFrozen(__classPrivateFieldGet(this, _FetchRequest_props, \"f\"));\n }\n}\n//# sourceMappingURL=request.js.map","import { decodeBase64 } from \"@ethersproject/bytes\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nimport { getUrl } from \"./get-url.js\"; /*-browser*/\nimport { logger } from \"./logger.js\";\nimport { FetchRequest } from \"./request.js\";\nimport { FetchResponse } from \"./response.js\";\nasync function delay(duration) {\n return new Promise((resolve) => { setTimeout(resolve, duration); });\n}\n// @TODO: Add option for global preflightRequest?\nfunction getTime() { return (new Date()).getTime(); }\nfunction unpercent(value) {\n value = value.replace(/%([0-9a-f][0-9a-f])/gi, (all, code) => {\n return String.fromCharCode(parseInt(code, 16));\n });\n return toUtf8Bytes(value);\n}\nlet lockGateways = false;\nlet ipfsGateway = \"https:/\\/gateway.ipfs.io/\";\nlet arGateway = \"https:/\\/gateway.ar.io/\";\nexport async function fetchData(connection) {\n const conn = (typeof (connection) === \"string\") ? {\n request: new FetchRequest(connection)\n } : (connection instanceof FetchRequest) ? {\n request: connection\n } : Object.assign({}, connection);\n if (conn.request == null) {\n return logger.throwArgumentError(\"missing request\", \"connection\", connection);\n }\n let req = conn.request.clone().freeze();\n switch (conn.request.url.split(\":\")[0]) {\n case \"data\": {\n const match = req.url.match(/^data:([^;:]*)?(;base64)?,(.*)$/i);\n if (match) {\n try {\n const headers = {\n \"content-type\": (match[1] ? match[1] : \"text/plain\")\n };\n const body = (match[2] ? decodeBase64(match[3]) : unpercent(match[3]));\n return new FetchResponse(200, \"OK\", headers, body, req.clone());\n }\n catch (error) {\n return new FetchResponse(400, \"BAD REQUEST (invalid base64 encoded data)\", {}, null, req.clone());\n }\n }\n return new FetchResponse(500, \"INTERNAL SERVER ERROR (unsupported dara URI)\", {}, null, req.clone());\n }\n case \"ipfs\":\n case \"ipns\":\n case \"ar\":\n throw new Error(\"not implemented yet\");\n console.log(\"FF\", arGateway, ipfsGateway);\n case \"http\":\n case \"https\":\n break;\n default:\n throw new Error(\"unsupported scheme\");\n }\n const attempts = (conn.throttleLimit != null) ? conn.throttleLimit : 12;\n if (!Number.isInteger(attempts) || attempts < 1) {\n return logger.throwArgumentError(\"invalid throttleLimit\", \"connection\", connection);\n }\n const slotInterval = (conn.throttleSlotInterval != null) ? conn.throttleSlotInterval : 100;\n //logger.assertInteger(slotInterval, \"connection.throttleSlotInterval\", connection.throttleSlotInterval);\n if (!Number.isInteger(slotInterval) || attempts < 0) {\n return logger.throwArgumentError(\"invalid throttleSlotInterval\", \"connection\", connection);\n }\n const retryFunc = (conn.throttleRetry != null) ? conn.throttleRetry : null;\n if (retryFunc && typeof (retryFunc) !== \"function\") {\n return logger.throwArgumentError(\"invalid throttleRetry callback\", \"connection\", connection);\n }\n const preflightRequest = conn.preflightRequest || null;\n if (preflightRequest && typeof (preflightRequest) !== \"function\") {\n return logger.throwArgumentError(\"invalid preflightRequest callback\", \"connection\", connection);\n }\n const processResponse = conn.processResponse || null;\n if (processResponse && typeof (processResponse) !== \"function\") {\n return logger.throwArgumentError(\"invalid processResponse callback\", \"connection\", connection);\n }\n // Start time of this fetch (for timeouts)\n const t0 = getTime();\n let response = null;\n for (let a = 0; a < attempts; a++) {\n let request = req.clone();\n if (preflightRequest) {\n request = (await preflightRequest(request.freeze())).clone();\n }\n const remainingTime = getTime() - t0;\n if (remainingTime < 0) {\n return logger.throwError(\"timeout\", \"TIMEOUT\", { operation: \"request\", request });\n }\n response = await getUrl(request, remainingTime);\n // Retry logic (server forced)\n if (a < attempts) {\n if (response.statusCode === 301 || response.statusCode === 302) {\n // Try following the redirect; the request will through if the\n // type of redirect is not supported\n try {\n req = request.redirect(response.headers.location || \"\");\n continue;\n }\n catch (error) { }\n ;\n // Things won't get any better on another attempt; abort\n return response;\n }\n else if (response.statusCode === 429) {\n if (retryFunc == null || (await retryFunc(request.freeze(), response, a))) {\n const retryAfter = response.headers[\"retry-after\"];\n if (typeof (retryAfter) === \"string\" && retryAfter.match(/^[1-9][0-9]*$/)) {\n await delay(parseInt(retryAfter));\n }\n else {\n await delay(slotInterval * Math.trunc(Math.random() * Math.pow(2, a)));\n }\n continue;\n }\n }\n }\n // Optional post-processing response; also allows trapping\n // HTTP status errors and doing \"something different\",\n // including any further throttling.\n if (processResponse) {\n try {\n return await processResponse(request, response);\n }\n catch (error) {\n // response.throwThrottleError\n if (error.throttle && typeof (error.stall) === \"number\") {\n if (a < attempts) {\n await delay(error.stall);\n continue;\n }\n // Too many retries should behave more like a 5xx server error\n return response.makeServerError(\"exceeded maximum retry limit\", error);\n }\n // Something went wrong during processing; throw a 5xx server error\n response.makeServerError(\"error in post-processing function\", error).assertOk();\n }\n }\n return response;\n }\n // Too many retries should behave more like a 5xx server error\n return response.makeServerError(\"exceeded maximum retry limit\");\n}\nfetchData.lock = function () {\n lockGateways = true;\n};\n// @TODO: Allow a master Gateway function\nfetchData.setGateway = function (gateway) {\n};\nfetchData.setIpfsGateway = function (gateway) {\n if (lockGateways) {\n logger.throwError(\"gateways are locked\", \"UNSUPPORTED_OPERATION\", {\n operation: \"setIpfsGateway\"\n });\n }\n ipfsGateway = gateway;\n};\nfetchData.setArGateway = function (gateway) {\n if (lockGateways) {\n logger.throwError(\"gateways are locked\", \"UNSUPPORTED_OPERATION\", {\n operation: \"setArGateway\"\n });\n }\n arGateway = gateway;\n};\n//# sourceMappingURL=fetch-data.js.map","export const version = \"@ethersproject/providers@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _a, _EnsResolver_supports2544, _EnsResolver_getResolver;\nimport { concat, dataSlice, hexlify, zeroPadLeft } from \"@ethersproject/bytes\";\nimport { dnsEncode, namehash } from \"@ethersproject/hash\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { encodeBase58, toArray, toNumber } from \"@ethersproject/math\";\nimport { toUtf8Bytes, toUtf8String } from \"@ethersproject/strings\";\nimport { fetchData } from \"@ethersproject/web\";\nimport { logger } from \"./logger.js\";\nconst BN_1 = BigInt(1);\nconst Empty = new Uint8Array([]);\nconst HashZero = \"0x0000000000000000000000000000000000000000000000000000000000000000\";\nfunction parseBytes(result, start) {\n if (result === \"0x\") {\n return null;\n }\n const offset = toNumber(dataSlice(result, start, start + 32));\n const length = toNumber(dataSlice(result, offset, offset + 32));\n return dataSlice(result, offset + 32, offset + 32 + length);\n}\nfunction parseString(result, start) {\n try {\n const bytes = parseBytes(result, start);\n if (bytes != null) {\n return toUtf8String(bytes);\n }\n }\n catch (error) { }\n return null;\n}\nfunction numPad(value) {\n const result = toArray(value);\n if (result.length > 32) {\n throw new Error(\"internal; should not happen\");\n }\n const padded = new Uint8Array(32);\n padded.set(result, 32 - result.length);\n return padded;\n}\nfunction bytesPad(value) {\n if ((value.length % 32) === 0) {\n return value;\n }\n const result = new Uint8Array(Math.ceil(value.length / 32) * 32);\n result.set(value);\n return result;\n}\n// ABI Encodes a series of (bytes, bytes, ...)\nfunction encodeBytes(datas) {\n const result = [];\n let byteCount = 0;\n // Add place-holders for pointers as we add items\n for (let i = 0; i < datas.length; i++) {\n result.push(Empty);\n byteCount += 32;\n }\n for (let i = 0; i < datas.length; i++) {\n const data = logger.getBytes(datas[i]);\n // Update the bytes offset\n result[i] = numPad(byteCount);\n // The length and padded value of data\n result.push(numPad(data.length));\n result.push(bytesPad(data));\n byteCount += 32 + Math.ceil(data.length / 32) * 32;\n }\n return concat(result);\n}\n// @TODO: This should use the fetch-data:ipfs gateway\n// Trim off the ipfs:// prefix and return the default gateway URL\nfunction getIpfsLink(link) {\n if (link.match(/^ipfs:\\/\\/ipfs\\//i)) {\n link = link.substring(12);\n }\n else if (link.match(/^ipfs:\\/\\//i)) {\n link = link.substring(7);\n }\n else {\n logger.throwArgumentError(\"unsupported IPFS format\", \"link\", link);\n }\n return `https:/\\/gateway.ipfs.io/ipfs/${link}`;\n}\n;\n;\nexport class MulticoinProviderPlugin {\n constructor(name) {\n defineProperties(this, { name });\n }\n validate(proivder) {\n return this;\n }\n supportsCoinType(coinType) {\n return false;\n }\n async encodeAddress(coinType, address) {\n throw new Error(\"unsupported coin\");\n }\n async decodeAddress(coinType, data) {\n throw new Error(\"unsupported coin\");\n }\n}\nconst BasicMulticoinPluginId = \"org.ethers.provider-prugins.basicmulticoin\";\nexport class BasicMulticoinProviderPlugin extends MulticoinProviderPlugin {\n constructor() {\n super(BasicMulticoinPluginId);\n }\n}\nconst matcherIpfs = new RegExp(\"^(ipfs):/\\/(.*)$\", \"i\");\nconst matchers = [\n new RegExp(\"^(https):/\\/(.*)$\", \"i\"),\n new RegExp(\"^(data):(.*)$\", \"i\"),\n matcherIpfs,\n new RegExp(\"^eip155:[0-9]+/(erc[0-9]+):(.*)$\", \"i\"),\n];\nexport class EnsResolver {\n constructor(provider, address, name) {\n // For EIP-2544 names, the ancestor that provided the resolver\n _EnsResolver_supports2544.set(this, void 0);\n defineProperties(this, { provider, address, name });\n __classPrivateFieldSet(this, _EnsResolver_supports2544, null, \"f\");\n }\n async supportsWildcard() {\n if (!__classPrivateFieldGet(this, _EnsResolver_supports2544, \"f\")) {\n // supportsInterface(bytes4 = selector(\"resolve(bytes,bytes)\"))\n __classPrivateFieldSet(this, _EnsResolver_supports2544, this.provider.call({\n to: this.address,\n data: \"0x01ffc9a79061b92300000000000000000000000000000000000000000000000000000000\"\n }).then((result) => {\n return (logger.getBigInt(result) === BN_1);\n }).catch((error) => {\n if (error.code === \"CALL_EXCEPTION\") {\n return false;\n }\n // Rethrow the error: link is down, etc. Let future attempts retry.\n __classPrivateFieldSet(this, _EnsResolver_supports2544, null, \"f\");\n throw error;\n }), \"f\");\n }\n return await __classPrivateFieldGet(this, _EnsResolver_supports2544, \"f\");\n }\n async _fetch(selector, parameters = \"0x\") {\n // e.g. keccak256(\"addr(bytes32,uint256)\")\n const addrData = concat([selector, namehash(this.name), parameters]);\n const tx = {\n to: this.address,\n enableCcipRead: true,\n data: addrData\n };\n // Wildcard support; use EIP-2544 to resolve the request\n let wrapped = false;\n if (await this.supportsWildcard()) {\n wrapped = true;\n // selector(\"resolve(bytes,bytes)\")\n tx.data = concat([\"0x9061b923\", encodeBytes([dnsEncode(this.name), addrData])]);\n }\n try {\n let data = await this.provider.call(tx);\n if ((logger.getBytes(data).length % 32) === 4) {\n return logger.throwError(\"resolver threw error\", \"CALL_EXCEPTION\", {\n transaction: tx, data\n });\n }\n if (wrapped) {\n return parseBytes(data, 0);\n }\n return data;\n }\n catch (error) {\n if (error.code !== \"CALL_EXCEPTION\") {\n throw error;\n }\n }\n return null;\n }\n async getAddress(coinType = 60) {\n if (coinType === 60) {\n try {\n // keccak256(\"addr(bytes32)\")\n const result = await this._fetch(\"0x3b3b57de\");\n // No address\n if (result === \"0x\" || result === HashZero) {\n return null;\n }\n const network = await this.provider.getNetwork();\n return network.formatter.callAddress(result);\n }\n catch (error) {\n if (error.code === \"CALL_EXCEPTION\") {\n return null;\n }\n throw error;\n }\n }\n let coinPlugin = null;\n for (const plugin of this.provider.plugins) {\n if (!(plugin instanceof MulticoinProviderPlugin)) {\n continue;\n }\n if (plugin.supportsCoinType(coinType)) {\n coinPlugin = plugin;\n break;\n }\n }\n if (coinPlugin == null) {\n return null;\n }\n // keccak256(\"addr(bytes32,uint256\")\n const data = parseBytes((await this._fetch(\"0xf1cb7e06\", numPad(coinType))) || \"0x\", 0);\n // No address\n if (data == null || data === \"0x\") {\n return null;\n }\n // Compute the address\n const address = await coinPlugin.encodeAddress(coinType, data);\n if (address != null) {\n return address;\n }\n return logger.throwError(`invalid coin data`, \"UNSUPPORTED_OPERATION\", {\n operation: `getAddress(${coinType})`,\n info: { coinType, data }\n });\n }\n async getText(key) {\n // The key encoded as parameter to fetchBytes\n let keyBytes = toUtf8Bytes(key);\n // The nodehash consumes the first slot, so the string pointer targets\n // offset 64, with the length at offset 64 and data starting at offset 96\n const calldata = logger.getBytes(concat([numPad(64), numPad(keyBytes.length), keyBytes]));\n const hexBytes = parseBytes((await this._fetch(\"0x59d1d43c\", bytesPad(calldata))) || \"0x\", 0);\n if (hexBytes == null || hexBytes === \"0x\") {\n return null;\n }\n return toUtf8String(hexBytes);\n }\n async getContentHash() {\n // keccak256(\"contenthash()\")\n const hexBytes = parseBytes((await this._fetch(\"0xbc1c58d1\")) || \"0x\", 0);\n // No contenthash\n if (hexBytes == null || hexBytes === \"0x\") {\n return null;\n }\n // IPFS (CID: 1, Type: 70=DAG-PB, 72=libp2p-key)\n const ipfs = hexBytes.match(/^0x(e3010170|e5010172)(([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f]*))$/);\n if (ipfs) {\n const scheme = (ipfs[1] === \"e3010170\") ? \"ipfs\" : \"ipns\";\n const length = parseInt(ipfs[4], 16);\n if (ipfs[5].length === length * 2) {\n return `${scheme}:/\\/${encodeBase58(\"0x\" + ipfs[2])}`;\n }\n }\n // Swarm (CID: 1, Type: swarm-manifest; hash/length hard-coded to keccak256/32)\n const swarm = hexBytes.match(/^0xe40101fa011b20([0-9a-f]*)$/);\n if (swarm && swarm[1].length === 64) {\n return `bzz:/\\/${swarm[1]}`;\n }\n return logger.throwError(`invalid or unsupported content hash data`, \"UNSUPPORTED_OPERATION\", {\n operation: \"getContentHash()\",\n info: { data: hexBytes }\n });\n }\n async getAvatar() {\n return (await this._getAvatar()).url;\n }\n async _getAvatar() {\n const linkage = [{ type: \"name\", value: this.name }];\n try {\n // test data for ricmoo.eth\n //const avatar = \"eip155:1/erc721:0x265385c7f4132228A0d54EB1A9e7460b91c0cC68/29233\";\n const avatar = await this.getText(\"avatar\");\n if (avatar == null) {\n linkage.push({ type: \"!avatar\", value: \"\" });\n throw new Error(\"!avatar\");\n }\n linkage.push({ type: \"avatar\", value: avatar });\n for (let i = 0; i < matchers.length; i++) {\n const match = avatar.match(matchers[i]);\n if (match == null) {\n continue;\n }\n const scheme = match[1].toLowerCase();\n switch (scheme) {\n case \"https\":\n case \"data\":\n linkage.push({ type: \"url\", value: avatar });\n return { linkage, url: avatar };\n case \"ipfs\": {\n const url = getIpfsLink(avatar);\n linkage.push({ type: \"ipfs\", value: avatar });\n linkage.push({ type: \"url\", value: url });\n return { linkage, url };\n }\n case \"erc721\":\n case \"erc1155\": {\n // Depending on the ERC type, use tokenURI(uint256) or url(uint256)\n const selector = (scheme === \"erc721\") ? \"0xc87b56dd\" : \"0x0e89341c\";\n linkage.push({ type: scheme, value: avatar });\n // The owner of this name\n const owner = await this.getAddress();\n if (owner == null) {\n linkage.push({ type: \"!owner\", value: \"\" });\n throw new Error(\"!owner\");\n }\n const comps = (match[2] || \"\").split(\"/\");\n if (comps.length !== 2) {\n linkage.push({ type: `!${scheme}caip`, value: (match[2] || \"\") });\n throw new Error(\"!caip\");\n }\n const formatter = (await this.provider.getNetwork()).formatter;\n const addr = formatter.address(comps[0]);\n const tokenId = numPad(comps[1]);\n // Check that this account owns the token\n if (scheme === \"erc721\") {\n // ownerOf(uint256 tokenId)\n const tokenOwner = formatter.callAddress(await this.provider.call({\n to: addr, data: concat([\"0x6352211e\", tokenId])\n }));\n if (owner !== tokenOwner) {\n linkage.push({ type: \"!owner\", value: tokenOwner });\n throw new Error(\"!owner\");\n }\n linkage.push({ type: \"owner\", value: tokenOwner });\n }\n else if (scheme === \"erc1155\") {\n // balanceOf(address owner, uint256 tokenId)\n const balance = logger.getBigInt(await this.provider.call({\n to: addr, data: concat([\"0x00fdd58e\", zeroPadLeft(owner, 32), tokenId])\n }));\n if (!balance) {\n linkage.push({ type: \"!balance\", value: \"0\" });\n throw new Error(\"!balance\");\n }\n linkage.push({ type: \"balance\", value: balance.toString() });\n }\n // Call the token contract for the metadata URL\n const tx = {\n to: comps[0],\n data: concat([selector, tokenId])\n };\n let metadataUrl = parseString(await this.provider.call(tx), 0);\n if (metadataUrl == null) {\n linkage.push({ type: \"!metadata-url\", value: \"\" });\n throw new Error(\"!metadata-url\");\n }\n linkage.push({ type: \"metadata-url-base\", value: metadataUrl });\n // ERC-1155 allows a generic {id} in the URL\n if (scheme === \"erc1155\") {\n metadataUrl = metadataUrl.replace(\"{id}\", hexlify(tokenId).substring(2));\n linkage.push({ type: \"metadata-url-expanded\", value: metadataUrl });\n }\n // Transform IPFS metadata links\n if (metadataUrl.match(/^ipfs:/i)) {\n metadataUrl = getIpfsLink(metadataUrl);\n }\n linkage.push({ type: \"metadata-url\", value: metadataUrl });\n // Get the token metadata\n let metadata = {};\n const response = await fetchData(metadataUrl);\n try {\n metadata = response.bodyJson;\n }\n catch (error) {\n try {\n linkage.push({ type: \"!metadata\", value: response.bodyText });\n }\n catch (error) {\n const bytes = response.body;\n if (bytes) {\n linkage.push({ type: \"!metadata\", value: hexlify(bytes) });\n }\n throw error;\n }\n throw error;\n }\n if (!metadata) {\n linkage.push({ type: \"!metadata\", value: \"\" });\n throw new Error(\"!metadata\");\n }\n linkage.push({ type: \"metadata\", value: JSON.stringify(metadata) });\n // Pull the image URL out\n let imageUrl = metadata.image;\n if (typeof (imageUrl) !== \"string\") {\n linkage.push({ type: \"!imageUrl\", value: \"\" });\n throw new Error(\"!imageUrl\");\n }\n if (imageUrl.match(/^(https:\\/\\/|data:)/i)) {\n // Allow\n }\n else {\n // Transform IPFS link to gateway\n const ipfs = imageUrl.match(matcherIpfs);\n if (ipfs == null) {\n linkage.push({ type: \"!imageUrl-ipfs\", value: imageUrl });\n throw new Error(\"!imageUrl-ipfs\");\n }\n linkage.push({ type: \"imageUrl-ipfs\", value: imageUrl });\n imageUrl = getIpfsLink(imageUrl);\n }\n linkage.push({ type: \"url\", value: imageUrl });\n return { linkage, url: imageUrl };\n }\n }\n }\n }\n catch (error) {\n console.log(\"EE\", error);\n }\n return { linkage, url: null };\n }\n static async fromName(provider, name) {\n let currentName = name;\n while (true) {\n if (currentName === \"\" || currentName === \".\") {\n return null;\n }\n // Optimization since the eth node cannot change and does\n // not have a wildcar resolver\n if (name !== \"eth\" && currentName === \"eth\") {\n return null;\n }\n // Check the current node for a resolver\n const addr = await __classPrivateFieldGet(EnsResolver, _a, \"m\", _EnsResolver_getResolver).call(EnsResolver, provider, currentName);\n // Found a resolver!\n if (addr != null) {\n const resolver = new EnsResolver(provider, addr, name);\n // Legacy resolver found, using EIP-2544 so it isn't safe to use\n if (currentName !== name && !(await resolver.supportsWildcard())) {\n return null;\n }\n return resolver;\n }\n // Get the parent node\n currentName = currentName.split(\".\").slice(1).join(\".\");\n }\n }\n}\n_a = EnsResolver, _EnsResolver_supports2544 = new WeakMap(), _EnsResolver_getResolver = async function _EnsResolver_getResolver(provider, name) {\n const network = await provider.getNetwork();\n const ensPlugin = network.getPlugin(\"org.ethers.plugins.ens\");\n // No ENS...\n if (!ensPlugin) {\n return logger.throwError(\"network does not support ENS\", \"UNSUPPORTED_OPERATION\", {\n operation: \"getResolver\", info: { network: network.name }\n });\n }\n try {\n // keccak256(\"resolver(bytes32)\")\n const addrData = await provider.call({\n to: ensPlugin.address,\n data: concat([\"0x0178b8bf\" + namehash(name)]),\n enableCcipRead: true\n });\n const addr = network.formatter.callAddress(addrData);\n if (addr === dataSlice(HashZero, 0, 20)) {\n return null;\n }\n return addr;\n }\n catch (error) {\n // ENS registry cannot throw errors on resolver(bytes32),\n // so probably a link error\n throw error;\n }\n return null;\n};\n//# sourceMappingURL=ens-resolver.js.map","export const version = \"@ethersproject/signing-key@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { version } from \"./_version.js\";\nimport { Logger } from \"@ethersproject/logger\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Signature_props;\nimport { toHex } from \"@ethersproject/math\";\nimport { getStore, setStore } from \"@ethersproject/properties\";\nimport { arrayify, concat, dataLength, dataSlice, hexlify, isHexString } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\n// Constants\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_2 = BigInt(2);\nconst BN_27 = BigInt(27);\nconst BN_28 = BigInt(28);\nconst BN_35 = BigInt(35);\nconst BN_255 = BigInt(255);\nconst BN_MASK_255 = (BN_1 << BN_255) - BN_1;\nconst _guard = {};\nconst Zero = \"0x0000000000000000000000000000000000000000000000000000000000000000\";\nexport class Signature {\n constructor(guard, r, s, v) {\n _Signature_props.set(this, void 0);\n logger.assertPrivate(guard, _guard, \"Signature\");\n __classPrivateFieldSet(this, _Signature_props, { r, s, v, networkV: null }, \"f\");\n }\n get r() { return getStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"r\"); }\n set r(value) {\n if (dataLength(value) !== 32) {\n logger.throwArgumentError(\"invalid r\", \"value\", value);\n }\n setStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"r\", hexlify(value));\n }\n get s() { return getStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"s\"); }\n set s(value) {\n if (dataLength(value) !== 32) {\n logger.throwArgumentError(\"invalid r\", \"value\", value);\n }\n else if (arrayify(value)[0] & 0x80) {\n logger.throwArgumentError(\"non-canonical s\", \"value\", value);\n }\n setStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"s\", hexlify(value));\n }\n get v() { return getStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"v\"); }\n set v(value) {\n const v = logger.getNumber(value, \"value\");\n if (v !== 27 && v !== 28) {\n throw new Error(\"@TODO\");\n }\n setStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"v\", v);\n }\n get networkV() { return getStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"networkV\"); }\n get legacyChainId() {\n const v = this.networkV;\n if (v == null) {\n return null;\n }\n return Signature.getChainId(v);\n }\n get vs() {\n // The EIP-2098 compact representation\n const vs = arrayify(this.s);\n if (this.yParity) {\n vs[0] |= 0x80;\n }\n return hexlify(vs);\n }\n get yParity() {\n if (this.v === 27) {\n return 0;\n }\n return 1;\n /*\n // When v is 0 or 1 it is the recid directly\n if (this.v.isZero()) { return 0; }\n if (this.v.eq(1)) { return 1; }\n\n // Otherwise, odd (e.g. 27) is 0 and even (e.g. 28) is 1\n return this.v.and(1).isZero() ? 1: 0;\n */\n }\n get serialized() {\n return concat([this.r, this.s, (this.yParity ? \"0x1c\" : \"0x1b\")]);\n }\n [(_Signature_props = new WeakMap(), Symbol.for('nodejs.util.inspect.custom'))]() {\n return `Signature { r: \"${this.r}\", s: \"${this.s}\", yParity: ${this.yParity}, networkV: ${this.networkV} }`;\n }\n clone() {\n if (getStore(__classPrivateFieldGet(this, _Signature_props, \"f\"), \"networkV\")) {\n logger.throwError(\"cannot clone EIP-155 signatures\", \"UNSUPPORTED_OPERATION\", {\n operation: \"clone\"\n });\n }\n const { r, s, v } = __classPrivateFieldGet(this, _Signature_props, \"f\");\n return new Signature(_guard, r, s, v);\n }\n freeze() {\n Object.freeze(__classPrivateFieldGet(this, _Signature_props, \"f\"));\n return this;\n }\n isFrozen() {\n return Object.isFrozen(__classPrivateFieldGet(this, _Signature_props, \"f\"));\n }\n toJSON() {\n const { r, s, v, networkV } = this;\n return {\n _type: \"signature\",\n networkV: ((networkV != null) ? networkV.toString() : null),\n r, s, v,\n };\n }\n static create() {\n return new Signature(_guard, Zero, Zero, 27);\n }\n // Get the chain ID from an EIP-155 v\n static getChainId(v) {\n const bv = logger.getBigInt(v, \"v\");\n // The v is not an EIP-155 v, so it is the unspecified chain ID\n if ((bv == BN_27) || (bv == BN_28)) {\n return BN_0;\n }\n // Bad value for an EIP-155 v\n if (bv < BN_35) {\n logger.throwArgumentError(\"invalid EIP-155 v\", \"v\", v);\n }\n return (bv - BN_35) / BN_2;\n }\n // Get the EIP-155 v transformed for a given chainId\n static getChainIdV(chainId, v) {\n return (logger.getBigInt(chainId) * BN_2) + BigInt(35 + v - 27);\n }\n // Convert an EIP-155 v into a normalized v\n static getNormalizedV(v) {\n const bv = logger.getBigInt(v);\n if (bv == BN_0) {\n return 27;\n }\n if (bv == BN_1) {\n return 28;\n }\n // Otherwise, EIP-155 v means odd is 27 and even is 28\n return (bv & BN_1) ? 27 : 28;\n }\n static fromTransaction(r, s, _v) {\n const v = logger.getBigInt(_v, \"v\");\n const sig = Signature.from({ r, s, v });\n setStore(__classPrivateFieldGet(sig, _Signature_props, \"f\"), \"networkV\", v);\n return sig.freeze();\n }\n static from(sig) {\n const throwError = (message) => {\n return logger.throwArgumentError(message, \"signature\", sig);\n };\n if (typeof (sig) === \"string\") {\n if (dataLength(sig) !== 65) {\n throwError(\"invlaid raw signature length\");\n }\n const r = dataSlice(sig, 0, 32);\n const s = dataSlice(sig, 32, 64);\n if (BigInt(s) >> BN_255) {\n throwError(\"non-canonical s\");\n }\n const v = Signature.getNormalizedV(dataSlice(sig, 64, 65));\n return new Signature(_guard, r, s, v);\n }\n if (sig instanceof Signature) {\n return sig.clone();\n }\n const r = sig.r;\n if (r == null) {\n throwError(\"missing r\");\n }\n if (!isHexString(r, 32)) {\n throwError(\"invalid r\");\n }\n const s = (function (s, vs) {\n if (s) {\n if (!isHexString(s, 32)) {\n throwError(\"invalid s\");\n }\n return s;\n }\n if (vs) {\n if (!isHexString(vs, 32)) {\n throwError(\"invalid vs\");\n }\n return toHex(BigInt(vs) & BN_MASK_255, 32);\n }\n return throwError(\"missing s\");\n })(sig.s, sig.vs);\n if (BigInt(s) >> BN_255) {\n throwError(\"non-canonical s\");\n }\n const v = (function (v, vs, yParity) {\n if (v) {\n return Signature.getNormalizedV(v);\n }\n if (vs) {\n if (!isHexString(vs, 32)) {\n throwError(\"invalid vs\");\n }\n return ((arrayify(vs)[0] & 0x80) ? 28 : 27);\n }\n if (yParity) {\n switch (yParity) {\n case 0: return 27;\n case 1: return 28;\n }\n return throwError(\"invalid yParity\");\n }\n //if (chainId) { return BigNumber.from(chainId).and(1).sub(27); } // @TODO: check this\n return throwError(\"missing v\");\n })(sig.v, sig.vs, sig.yParity);\n // @TODO: check vs, chainId, yParity\n const result = new Signature(_guard, r, s, v);\n if (sig.yParity && sig.yParity !== result.yParity) {\n }\n if (sig.vs && sig.vs !== result.vs) {\n }\n //if (sig.chainId && sig.chainId !== result.chainId) {\n //}\n return result;\n }\n}\n//# sourceMappingURL=signature.js.map","/*! noble-secp256k1 - MIT License (c) 2019 Paul Miller (paulmillr.com) */\nimport nodeCrypto from 'crypto';\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _3n = BigInt(3);\nconst _8n = BigInt(8);\nconst POW_2_256 = _2n ** BigInt(256);\nconst CURVE = {\n a: _0n,\n b: BigInt(7),\n P: POW_2_256 - _2n ** BigInt(32) - BigInt(977),\n n: POW_2_256 - BigInt('432420386565659656852420866394968145599'),\n h: _1n,\n Gx: BigInt('55066263022277343669578718895168534326250603453777594175500187360389116729240'),\n Gy: BigInt('32670510020758816978083085130507043184471273380659243275938904335757337482424'),\n beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'),\n};\nexport { CURVE };\nfunction weistrass(x) {\n const { a, b } = CURVE;\n const x2 = mod(x * x);\n const x3 = mod(x2 * x);\n return mod(x3 + a * x + b);\n}\nconst USE_ENDOMORPHISM = CURVE.a === _0n;\nclass JacobianPoint {\n constructor(x, y, z) {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n static fromAffine(p) {\n if (!(p instanceof Point)) {\n throw new TypeError('JacobianPoint#fromAffine: expected Point');\n }\n return new JacobianPoint(p.x, p.y, _1n);\n }\n static toAffineBatch(points) {\n const toInv = invertBatch(points.map((p) => p.z));\n return points.map((p, i) => p.toAffine(toInv[i]));\n }\n static normalizeZ(points) {\n return JacobianPoint.toAffineBatch(points).map(JacobianPoint.fromAffine);\n }\n equals(other) {\n if (!(other instanceof JacobianPoint))\n throw new TypeError('JacobianPoint expected');\n const { x: X1, y: Y1, z: Z1 } = this;\n const { x: X2, y: Y2, z: Z2 } = other;\n const Z1Z1 = mod(Z1 ** _2n);\n const Z2Z2 = mod(Z2 ** _2n);\n const U1 = mod(X1 * Z2Z2);\n const U2 = mod(X2 * Z1Z1);\n const S1 = mod(mod(Y1 * Z2) * Z2Z2);\n const S2 = mod(mod(Y2 * Z1) * Z1Z1);\n return U1 === U2 && S1 === S2;\n }\n negate() {\n return new JacobianPoint(this.x, mod(-this.y), this.z);\n }\n double() {\n const { x: X1, y: Y1, z: Z1 } = this;\n const A = mod(X1 ** _2n);\n const B = mod(Y1 ** _2n);\n const C = mod(B ** _2n);\n const D = mod(_2n * (mod((X1 + B) ** _2n) - A - C));\n const E = mod(_3n * A);\n const F = mod(E ** _2n);\n const X3 = mod(F - _2n * D);\n const Y3 = mod(E * (D - X3) - _8n * C);\n const Z3 = mod(_2n * Y1 * Z1);\n return new JacobianPoint(X3, Y3, Z3);\n }\n add(other) {\n if (!(other instanceof JacobianPoint))\n throw new TypeError('JacobianPoint expected');\n const { x: X1, y: Y1, z: Z1 } = this;\n const { x: X2, y: Y2, z: Z2 } = other;\n if (X2 === _0n || Y2 === _0n)\n return this;\n if (X1 === _0n || Y1 === _0n)\n return other;\n const Z1Z1 = mod(Z1 ** _2n);\n const Z2Z2 = mod(Z2 ** _2n);\n const U1 = mod(X1 * Z2Z2);\n const U2 = mod(X2 * Z1Z1);\n const S1 = mod(mod(Y1 * Z2) * Z2Z2);\n const S2 = mod(mod(Y2 * Z1) * Z1Z1);\n const H = mod(U2 - U1);\n const r = mod(S2 - S1);\n if (H === _0n) {\n if (r === _0n) {\n return this.double();\n }\n else {\n return JacobianPoint.ZERO;\n }\n }\n const HH = mod(H ** _2n);\n const HHH = mod(H * HH);\n const V = mod(U1 * HH);\n const X3 = mod(r ** _2n - HHH - _2n * V);\n const Y3 = mod(r * (V - X3) - S1 * HHH);\n const Z3 = mod(Z1 * Z2 * H);\n return new JacobianPoint(X3, Y3, Z3);\n }\n subtract(other) {\n return this.add(other.negate());\n }\n multiplyUnsafe(scalar) {\n let n = normalizeScalar(scalar);\n const G = JacobianPoint.BASE;\n const P0 = JacobianPoint.ZERO;\n if (n === _0n)\n return P0;\n if (n === _1n)\n return this;\n if (!USE_ENDOMORPHISM) {\n let p = P0;\n let d = this;\n while (n > _0n) {\n if (n & _1n)\n p = p.add(d);\n d = d.double();\n n >>= _1n;\n }\n return p;\n }\n let { k1neg, k1, k2neg, k2 } = splitScalarEndo(n);\n let k1p = P0;\n let k2p = P0;\n let d = this;\n while (k1 > _0n || k2 > _0n) {\n if (k1 & _1n)\n k1p = k1p.add(d);\n if (k2 & _1n)\n k2p = k2p.add(d);\n d = d.double();\n k1 >>= _1n;\n k2 >>= _1n;\n }\n if (k1neg)\n k1p = k1p.negate();\n if (k2neg)\n k2p = k2p.negate();\n k2p = new JacobianPoint(mod(k2p.x * CURVE.beta), k2p.y, k2p.z);\n return k1p.add(k2p);\n }\n precomputeWindow(W) {\n const windows = USE_ENDOMORPHISM ? 128 / W + 1 : 256 / W + 1;\n const points = [];\n let p = this;\n let base = p;\n for (let window = 0; window < windows; window++) {\n base = p;\n points.push(base);\n for (let i = 1; i < 2 ** (W - 1); i++) {\n base = base.add(p);\n points.push(base);\n }\n p = base.double();\n }\n return points;\n }\n wNAF(n, affinePoint) {\n if (!affinePoint && this.equals(JacobianPoint.BASE))\n affinePoint = Point.BASE;\n const W = (affinePoint && affinePoint._WINDOW_SIZE) || 1;\n if (256 % W) {\n throw new Error('Point#wNAF: Invalid precomputation window, must be power of 2');\n }\n let precomputes = affinePoint && pointPrecomputes.get(affinePoint);\n if (!precomputes) {\n precomputes = this.precomputeWindow(W);\n if (affinePoint && W !== 1) {\n precomputes = JacobianPoint.normalizeZ(precomputes);\n pointPrecomputes.set(affinePoint, precomputes);\n }\n }\n let p = JacobianPoint.ZERO;\n let f = JacobianPoint.ZERO;\n const windows = 1 + (USE_ENDOMORPHISM ? 128 / W : 256 / W);\n const windowSize = 2 ** (W - 1);\n const mask = BigInt(2 ** W - 1);\n const maxNumber = 2 ** W;\n const shiftBy = BigInt(W);\n for (let window = 0; window < windows; window++) {\n const offset = window * windowSize;\n let wbits = Number(n & mask);\n n >>= shiftBy;\n if (wbits > windowSize) {\n wbits -= maxNumber;\n n += _1n;\n }\n if (wbits === 0) {\n let pr = precomputes[offset];\n if (window % 2)\n pr = pr.negate();\n f = f.add(pr);\n }\n else {\n let cached = precomputes[offset + Math.abs(wbits) - 1];\n if (wbits < 0)\n cached = cached.negate();\n p = p.add(cached);\n }\n }\n return { p, f };\n }\n multiply(scalar, affinePoint) {\n let n = normalizeScalar(scalar);\n let point;\n let fake;\n if (USE_ENDOMORPHISM) {\n const { k1neg, k1, k2neg, k2 } = splitScalarEndo(n);\n let { p: k1p, f: f1p } = this.wNAF(k1, affinePoint);\n let { p: k2p, f: f2p } = this.wNAF(k2, affinePoint);\n if (k1neg)\n k1p = k1p.negate();\n if (k2neg)\n k2p = k2p.negate();\n k2p = new JacobianPoint(mod(k2p.x * CURVE.beta), k2p.y, k2p.z);\n point = k1p.add(k2p);\n fake = f1p.add(f2p);\n }\n else {\n const { p, f } = this.wNAF(n, affinePoint);\n point = p;\n fake = f;\n }\n return JacobianPoint.normalizeZ([point, fake])[0];\n }\n toAffine(invZ = invert(this.z)) {\n const { x, y, z } = this;\n const iz1 = invZ;\n const iz2 = mod(iz1 * iz1);\n const iz3 = mod(iz2 * iz1);\n const ax = mod(x * iz2);\n const ay = mod(y * iz3);\n const zz = mod(z * iz1);\n if (zz !== _1n)\n throw new Error('invZ was invalid');\n return new Point(ax, ay);\n }\n}\nJacobianPoint.BASE = new JacobianPoint(CURVE.Gx, CURVE.Gy, _1n);\nJacobianPoint.ZERO = new JacobianPoint(_0n, _1n, _0n);\nconst pointPrecomputes = new WeakMap();\nexport class Point {\n constructor(x, y) {\n this.x = x;\n this.y = y;\n }\n _setWindowSize(windowSize) {\n this._WINDOW_SIZE = windowSize;\n pointPrecomputes.delete(this);\n }\n static fromCompressedHex(bytes) {\n const isShort = bytes.length === 32;\n const x = bytesToNumber(isShort ? bytes : bytes.subarray(1));\n if (!isValidFieldElement(x))\n throw new Error('Point is not on curve');\n const y2 = weistrass(x);\n let y = sqrtMod(y2);\n const isYOdd = (y & _1n) === _1n;\n if (isShort) {\n if (isYOdd)\n y = mod(-y);\n }\n else {\n const isFirstByteOdd = (bytes[0] & 1) === 1;\n if (isFirstByteOdd !== isYOdd)\n y = mod(-y);\n }\n const point = new Point(x, y);\n point.assertValidity();\n return point;\n }\n static fromUncompressedHex(bytes) {\n const x = bytesToNumber(bytes.subarray(1, 33));\n const y = bytesToNumber(bytes.subarray(33, 65));\n const point = new Point(x, y);\n point.assertValidity();\n return point;\n }\n static fromHex(hex) {\n const bytes = ensureBytes(hex);\n const len = bytes.length;\n const header = bytes[0];\n if (len === 32 || (len === 33 && (header === 0x02 || header === 0x03))) {\n return this.fromCompressedHex(bytes);\n }\n if (len === 65 && header === 0x04)\n return this.fromUncompressedHex(bytes);\n throw new Error(`Point.fromHex: received invalid point. Expected 32-33 compressed bytes or 65 uncompressed bytes, not ${len}`);\n }\n static fromPrivateKey(privateKey) {\n return Point.BASE.multiply(normalizePrivateKey(privateKey));\n }\n static fromSignature(msgHash, signature, recovery) {\n msgHash = ensureBytes(msgHash);\n const h = truncateHash(msgHash);\n const { r, s } = normalizeSignature(signature);\n if (recovery !== 0 && recovery !== 1) {\n throw new Error('Cannot recover signature: invalid recovery bit');\n }\n if (h === _0n)\n throw new Error('Cannot recover signature: msgHash cannot be 0');\n const prefix = recovery & 1 ? '03' : '02';\n const R = Point.fromHex(prefix + numTo32bStr(r));\n const { n } = CURVE;\n const rinv = invert(r, n);\n const u1 = mod(-h * rinv, n);\n const u2 = mod(s * rinv, n);\n const Q = Point.BASE.multiplyAndAddUnsafe(R, u1, u2);\n if (!Q)\n throw new Error('Cannot recover signature: point at infinify');\n Q.assertValidity();\n return Q;\n }\n toRawBytes(isCompressed = false) {\n return hexToBytes(this.toHex(isCompressed));\n }\n toHex(isCompressed = false) {\n const x = numTo32bStr(this.x);\n if (isCompressed) {\n const prefix = this.y & _1n ? '03' : '02';\n return `${prefix}${x}`;\n }\n else {\n return `04${x}${numTo32bStr(this.y)}`;\n }\n }\n toHexX() {\n return this.toHex(true).slice(2);\n }\n toRawX() {\n return this.toRawBytes(true).slice(1);\n }\n assertValidity() {\n const msg = 'Point is not on elliptic curve';\n const { x, y } = this;\n if (!isValidFieldElement(x) || !isValidFieldElement(y))\n throw new Error(msg);\n const left = mod(y * y);\n const right = weistrass(x);\n if (mod(left - right) !== _0n)\n throw new Error(msg);\n }\n equals(other) {\n return this.x === other.x && this.y === other.y;\n }\n negate() {\n return new Point(this.x, mod(-this.y));\n }\n double() {\n return JacobianPoint.fromAffine(this).double().toAffine();\n }\n add(other) {\n return JacobianPoint.fromAffine(this).add(JacobianPoint.fromAffine(other)).toAffine();\n }\n subtract(other) {\n return this.add(other.negate());\n }\n multiply(scalar) {\n return JacobianPoint.fromAffine(this).multiply(scalar, this).toAffine();\n }\n multiplyAndAddUnsafe(Q, a, b) {\n const P = JacobianPoint.fromAffine(this);\n const aP = P.multiply(a);\n const bQ = JacobianPoint.fromAffine(Q).multiplyUnsafe(b);\n const sum = aP.add(bQ);\n return sum.equals(JacobianPoint.ZERO) ? undefined : sum.toAffine();\n }\n}\nPoint.BASE = new Point(CURVE.Gx, CURVE.Gy);\nPoint.ZERO = new Point(_0n, _0n);\nfunction sliceDER(s) {\n return Number.parseInt(s[0], 16) >= 8 ? '00' + s : s;\n}\nfunction parseDERInt(data) {\n if (data.length < 2 || data[0] !== 0x02) {\n throw new Error(`Invalid signature integer tag: ${bytesToHex(data)}`);\n }\n const len = data[1];\n const res = data.subarray(2, len + 2);\n if (!len || res.length !== len) {\n throw new Error(`Invalid signature integer: wrong length`);\n }\n if (res[0] === 0x00 && res[1] <= 0x7f) {\n throw new Error('Invalid signature integer: trailing length');\n }\n return { data: bytesToNumber(res), left: data.subarray(len + 2) };\n}\nfunction parseDERSignature(data) {\n if (data.length < 2 || data[0] != 0x30) {\n throw new Error(`Invalid signature tag: ${bytesToHex(data)}`);\n }\n if (data[1] !== data.length - 2) {\n throw new Error('Invalid signature: incorrect length');\n }\n const { data: r, left: sBytes } = parseDERInt(data.subarray(2));\n const { data: s, left: rBytesLeft } = parseDERInt(sBytes);\n if (rBytesLeft.length) {\n throw new Error(`Invalid signature: left bytes after parsing: ${bytesToHex(rBytesLeft)}`);\n }\n return { r, s };\n}\nexport class Signature {\n constructor(r, s) {\n this.r = r;\n this.s = s;\n this.assertValidity();\n }\n static fromCompact(hex) {\n const arr = isUint8a(hex);\n const name = 'Signature.fromCompact';\n if (typeof hex !== 'string' && !arr)\n throw new TypeError(`${name}: Expected string or Uint8Array`);\n const str = arr ? bytesToHex(hex) : hex;\n if (str.length !== 128)\n throw new Error(`${name}: Expected 64-byte hex`);\n return new Signature(hexToNumber(str.slice(0, 64)), hexToNumber(str.slice(64, 128)));\n }\n static fromDER(hex) {\n const arr = isUint8a(hex);\n if (typeof hex !== 'string' && !arr)\n throw new TypeError(`Signature.fromDER: Expected string or Uint8Array`);\n const { r, s } = parseDERSignature(arr ? hex : hexToBytes(hex));\n return new Signature(r, s);\n }\n static fromHex(hex) {\n return this.fromDER(hex);\n }\n assertValidity() {\n const { r, s } = this;\n if (!isWithinCurveOrder(r))\n throw new Error('Invalid Signature: r must be 0 < r < n');\n if (!isWithinCurveOrder(s))\n throw new Error('Invalid Signature: s must be 0 < s < n');\n }\n hasHighS() {\n const HALF = CURVE.n >> _1n;\n return this.s > HALF;\n }\n normalizeS() {\n return this.hasHighS() ? new Signature(this.r, CURVE.n - this.s) : this;\n }\n toDERRawBytes(isCompressed = false) {\n return hexToBytes(this.toDERHex(isCompressed));\n }\n toDERHex(isCompressed = false) {\n const sHex = sliceDER(numberToHexUnpadded(this.s));\n if (isCompressed)\n return sHex;\n const rHex = sliceDER(numberToHexUnpadded(this.r));\n const rLen = numberToHexUnpadded(rHex.length / 2);\n const sLen = numberToHexUnpadded(sHex.length / 2);\n const length = numberToHexUnpadded(rHex.length / 2 + sHex.length / 2 + 4);\n return `30${length}02${rLen}${rHex}02${sLen}${sHex}`;\n }\n toRawBytes() {\n return this.toDERRawBytes();\n }\n toHex() {\n return this.toDERHex();\n }\n toCompactRawBytes() {\n return hexToBytes(this.toCompactHex());\n }\n toCompactHex() {\n return numTo32bStr(this.r) + numTo32bStr(this.s);\n }\n}\nfunction concatBytes(...arrays) {\n if (!arrays.every(isUint8a))\n throw new Error('Uint8Array list expected');\n if (arrays.length === 1)\n return arrays[0];\n const length = arrays.reduce((a, arr) => a + arr.length, 0);\n const result = new Uint8Array(length);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const arr = arrays[i];\n result.set(arr, pad);\n pad += arr.length;\n }\n return result;\n}\nfunction isUint8a(bytes) {\n return bytes instanceof Uint8Array;\n}\nconst hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\nfunction bytesToHex(uint8a) {\n if (!(uint8a instanceof Uint8Array))\n throw new Error('Expected Uint8Array');\n let hex = '';\n for (let i = 0; i < uint8a.length; i++) {\n hex += hexes[uint8a[i]];\n }\n return hex;\n}\nfunction numTo32bStr(num) {\n if (num > POW_2_256)\n throw new Error('Expected number < 2^256');\n return num.toString(16).padStart(64, '0');\n}\nfunction numTo32b(num) {\n return hexToBytes(numTo32bStr(num));\n}\nfunction numberToHexUnpadded(num) {\n const hex = num.toString(16);\n return hex.length & 1 ? `0${hex}` : hex;\n}\nfunction hexToNumber(hex) {\n if (typeof hex !== 'string') {\n throw new TypeError('hexToNumber: expected string, got ' + typeof hex);\n }\n return BigInt(`0x${hex}`);\n}\nfunction hexToBytes(hex) {\n if (typeof hex !== 'string') {\n throw new TypeError('hexToBytes: expected string, got ' + typeof hex);\n }\n if (hex.length % 2)\n throw new Error('hexToBytes: received invalid unpadded hex' + hex.length);\n const array = new Uint8Array(hex.length / 2);\n for (let i = 0; i < array.length; i++) {\n const j = i * 2;\n const hexByte = hex.slice(j, j + 2);\n const byte = Number.parseInt(hexByte, 16);\n if (Number.isNaN(byte) || byte < 0)\n throw new Error('Invalid byte sequence');\n array[i] = byte;\n }\n return array;\n}\nfunction bytesToNumber(bytes) {\n return hexToNumber(bytesToHex(bytes));\n}\nfunction ensureBytes(hex) {\n return hex instanceof Uint8Array ? Uint8Array.from(hex) : hexToBytes(hex);\n}\nfunction normalizeScalar(num) {\n if (typeof num === 'number' && Number.isSafeInteger(num) && num > 0)\n return BigInt(num);\n if (typeof num === 'bigint' && isWithinCurveOrder(num))\n return num;\n throw new TypeError('Expected valid private scalar: 0 < scalar < curve.n');\n}\nfunction mod(a, b = CURVE.P) {\n const result = a % b;\n return result >= _0n ? result : b + result;\n}\nfunction pow2(x, power) {\n const { P } = CURVE;\n let res = x;\n while (power-- > _0n) {\n res *= res;\n res %= P;\n }\n return res;\n}\nfunction sqrtMod(x) {\n const { P } = CURVE;\n const _6n = BigInt(6);\n const _11n = BigInt(11);\n const _22n = BigInt(22);\n const _23n = BigInt(23);\n const _44n = BigInt(44);\n const _88n = BigInt(88);\n const b2 = (x * x * x) % P;\n const b3 = (b2 * b2 * x) % P;\n const b6 = (pow2(b3, _3n) * b3) % P;\n const b9 = (pow2(b6, _3n) * b3) % P;\n const b11 = (pow2(b9, _2n) * b2) % P;\n const b22 = (pow2(b11, _11n) * b11) % P;\n const b44 = (pow2(b22, _22n) * b22) % P;\n const b88 = (pow2(b44, _44n) * b44) % P;\n const b176 = (pow2(b88, _88n) * b88) % P;\n const b220 = (pow2(b176, _44n) * b44) % P;\n const b223 = (pow2(b220, _3n) * b3) % P;\n const t1 = (pow2(b223, _23n) * b22) % P;\n const t2 = (pow2(t1, _6n) * b2) % P;\n return pow2(t2, _2n);\n}\nfunction invert(number, modulo = CURVE.P) {\n if (number === _0n || modulo <= _0n) {\n throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);\n }\n let a = mod(number, modulo);\n let b = modulo;\n let x = _0n, y = _1n, u = _1n, v = _0n;\n while (a !== _0n) {\n const q = b / a;\n const r = b % a;\n const m = x - u * q;\n const n = y - v * q;\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n const gcd = b;\n if (gcd !== _1n)\n throw new Error('invert: does not exist');\n return mod(x, modulo);\n}\nfunction invertBatch(nums, p = CURVE.P) {\n const scratch = new Array(nums.length);\n const lastMultiplied = nums.reduce((acc, num, i) => {\n if (num === _0n)\n return acc;\n scratch[i] = acc;\n return mod(acc * num, p);\n }, _1n);\n const inverted = invert(lastMultiplied, p);\n nums.reduceRight((acc, num, i) => {\n if (num === _0n)\n return acc;\n scratch[i] = mod(acc * scratch[i], p);\n return mod(acc * num, p);\n }, inverted);\n return scratch;\n}\nconst divNearest = (a, b) => (a + b / _2n) / b;\nconst POW_2_128 = _2n ** BigInt(128);\nfunction splitScalarEndo(k) {\n const { n } = CURVE;\n const a1 = BigInt('0x3086d221a7d46bcde86c90e49284eb15');\n const b1 = -_1n * BigInt('0xe4437ed6010e88286f547fa90abfe4c3');\n const a2 = BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8');\n const b2 = a1;\n const c1 = divNearest(b2 * k, n);\n const c2 = divNearest(-b1 * k, n);\n let k1 = mod(k - c1 * a1 - c2 * a2, n);\n let k2 = mod(-c1 * b1 - c2 * b2, n);\n const k1neg = k1 > POW_2_128;\n const k2neg = k2 > POW_2_128;\n if (k1neg)\n k1 = n - k1;\n if (k2neg)\n k2 = n - k2;\n if (k1 > POW_2_128 || k2 > POW_2_128) {\n throw new Error('splitScalarEndo: Endomorphism failed, k=' + k);\n }\n return { k1neg, k1, k2neg, k2 };\n}\nfunction truncateHash(hash) {\n const { n } = CURVE;\n const byteLength = hash.length;\n const delta = byteLength * 8 - 256;\n let h = bytesToNumber(hash);\n if (delta > 0)\n h = h >> BigInt(delta);\n if (h >= n)\n h -= n;\n return h;\n}\nclass HmacDrbg {\n constructor() {\n this.v = new Uint8Array(32).fill(1);\n this.k = new Uint8Array(32).fill(0);\n this.counter = 0;\n }\n hmac(...values) {\n return utils.hmacSha256(this.k, ...values);\n }\n hmacSync(...values) {\n if (typeof utils.hmacSha256Sync !== 'function')\n throw new Error('utils.hmacSha256Sync is undefined, you need to set it');\n const res = utils.hmacSha256Sync(this.k, ...values);\n if (res instanceof Promise)\n throw new Error('To use sync sign(), ensure utils.hmacSha256 is sync');\n return res;\n }\n incr() {\n if (this.counter >= 1000) {\n throw new Error('Tried 1,000 k values for sign(), all were invalid');\n }\n this.counter += 1;\n }\n async reseed(seed = new Uint8Array()) {\n this.k = await this.hmac(this.v, Uint8Array.from([0x00]), seed);\n this.v = await this.hmac(this.v);\n if (seed.length === 0)\n return;\n this.k = await this.hmac(this.v, Uint8Array.from([0x01]), seed);\n this.v = await this.hmac(this.v);\n }\n reseedSync(seed = new Uint8Array()) {\n this.k = this.hmacSync(this.v, Uint8Array.from([0x00]), seed);\n this.v = this.hmacSync(this.v);\n if (seed.length === 0)\n return;\n this.k = this.hmacSync(this.v, Uint8Array.from([0x01]), seed);\n this.v = this.hmacSync(this.v);\n }\n async generate() {\n this.incr();\n this.v = await this.hmac(this.v);\n return this.v;\n }\n generateSync() {\n this.incr();\n this.v = this.hmacSync(this.v);\n return this.v;\n }\n}\nfunction isWithinCurveOrder(num) {\n return _0n < num && num < CURVE.n;\n}\nfunction isValidFieldElement(num) {\n return _0n < num && num < CURVE.P;\n}\nfunction kmdToSig(kBytes, m, d) {\n const k = bytesToNumber(kBytes);\n if (!isWithinCurveOrder(k))\n return;\n const { n } = CURVE;\n const q = Point.BASE.multiply(k);\n const r = mod(q.x, n);\n if (r === _0n)\n return;\n const s = mod(invert(k, n) * mod(m + d * r, n), n);\n if (s === _0n)\n return;\n const sig = new Signature(r, s);\n const recovery = (q.x === sig.r ? 0 : 2) | Number(q.y & _1n);\n return { sig, recovery };\n}\nfunction normalizePrivateKey(key) {\n let num;\n if (typeof key === 'bigint') {\n num = key;\n }\n else if (typeof key === 'number' && Number.isSafeInteger(key) && key > 0) {\n num = BigInt(key);\n }\n else if (typeof key === 'string') {\n if (key.length !== 64)\n throw new Error('Expected 32 bytes of private key');\n num = hexToNumber(key);\n }\n else if (isUint8a(key)) {\n if (key.length !== 32)\n throw new Error('Expected 32 bytes of private key');\n num = bytesToNumber(key);\n }\n else {\n throw new TypeError('Expected valid private key');\n }\n if (!isWithinCurveOrder(num))\n throw new Error('Expected private key: 0 < key < n');\n return num;\n}\nfunction normalizePublicKey(publicKey) {\n if (publicKey instanceof Point) {\n publicKey.assertValidity();\n return publicKey;\n }\n else {\n return Point.fromHex(publicKey);\n }\n}\nfunction normalizeSignature(signature) {\n if (signature instanceof Signature) {\n signature.assertValidity();\n return signature;\n }\n try {\n return Signature.fromDER(signature);\n }\n catch (error) {\n return Signature.fromCompact(signature);\n }\n}\nexport function getPublicKey(privateKey, isCompressed = false) {\n return Point.fromPrivateKey(privateKey).toRawBytes(isCompressed);\n}\nexport function recoverPublicKey(msgHash, signature, recovery, isCompressed = false) {\n return Point.fromSignature(msgHash, signature, recovery).toRawBytes(isCompressed);\n}\nfunction isPub(item) {\n const arr = isUint8a(item);\n const str = typeof item === 'string';\n const len = (arr || str) && item.length;\n if (arr)\n return len === 33 || len === 65;\n if (str)\n return len === 66 || len === 130;\n if (item instanceof Point)\n return true;\n return false;\n}\nexport function getSharedSecret(privateA, publicB, isCompressed = false) {\n if (isPub(privateA))\n throw new TypeError('getSharedSecret: first arg must be private key');\n if (!isPub(publicB))\n throw new TypeError('getSharedSecret: second arg must be public key');\n const b = normalizePublicKey(publicB);\n b.assertValidity();\n return b.multiply(normalizePrivateKey(privateA)).toRawBytes(isCompressed);\n}\nfunction bits2int(bytes) {\n const slice = bytes.length > 32 ? bytes.slice(0, 32) : bytes;\n return bytesToNumber(slice);\n}\nfunction bits2octets(bytes) {\n const z1 = bits2int(bytes);\n const z2 = mod(z1, CURVE.n);\n return int2octets(z2 < _0n ? z1 : z2);\n}\nfunction int2octets(num) {\n if (typeof num !== 'bigint')\n throw new Error('Expected bigint');\n const hex = numTo32bStr(num);\n return hexToBytes(hex);\n}\nfunction initSigArgs(msgHash, privateKey, extraEntropy) {\n if (msgHash == null)\n throw new Error(`sign: expected valid message hash, not \"${msgHash}\"`);\n const h1 = ensureBytes(msgHash);\n const d = normalizePrivateKey(privateKey);\n const seedArgs = [int2octets(d), bits2octets(h1)];\n if (extraEntropy != null) {\n if (extraEntropy === true)\n extraEntropy = utils.randomBytes(32);\n const e = ensureBytes(extraEntropy);\n if (e.length !== 32)\n throw new Error('sign: Expected 32 bytes of extra data');\n seedArgs.push(e);\n }\n const seed = concatBytes(...seedArgs);\n const m = bits2int(h1);\n return { seed, m, d };\n}\nfunction finalizeSig(recSig, opts) {\n let { sig, recovery } = recSig;\n const { canonical, der, recovered } = Object.assign({ canonical: true, der: true }, opts);\n if (canonical && sig.hasHighS()) {\n sig = sig.normalizeS();\n recovery ^= 1;\n }\n const hashed = der ? sig.toDERRawBytes() : sig.toCompactRawBytes();\n return recovered ? [hashed, recovery] : hashed;\n}\nasync function sign(msgHash, privKey, opts = {}) {\n const { seed, m, d } = initSigArgs(msgHash, privKey, opts.extraEntropy);\n let sig;\n const drbg = new HmacDrbg();\n await drbg.reseed(seed);\n while (!(sig = kmdToSig(await drbg.generate(), m, d)))\n await drbg.reseed();\n return finalizeSig(sig, opts);\n}\nfunction signSync(msgHash, privKey, opts = {}) {\n const { seed, m, d } = initSigArgs(msgHash, privKey, opts.extraEntropy);\n let sig;\n const drbg = new HmacDrbg();\n drbg.reseedSync(seed);\n while (!(sig = kmdToSig(drbg.generateSync(), m, d)))\n drbg.reseedSync();\n return finalizeSig(sig, opts);\n}\nexport { sign, signSync };\nconst vopts = { strict: true };\nexport function verify(signature, msgHash, publicKey, opts = vopts) {\n let sig;\n try {\n sig = normalizeSignature(signature);\n msgHash = ensureBytes(msgHash);\n }\n catch (error) {\n return false;\n }\n const { r, s } = sig;\n if (opts.strict && sig.hasHighS())\n return false;\n const h = truncateHash(msgHash);\n if (h === _0n)\n return false;\n let P;\n try {\n P = normalizePublicKey(publicKey);\n }\n catch (error) {\n return false;\n }\n const { n } = CURVE;\n const sinv = invert(s, n);\n const u1 = mod(h * sinv, n);\n const u2 = mod(r * sinv, n);\n const R = Point.BASE.multiplyAndAddUnsafe(P, u1, u2);\n if (!R)\n return false;\n const v = mod(R.x, n);\n return v === r;\n}\nasync function taggedHash(tag, ...messages) {\n const tagB = new Uint8Array(tag.split('').map((c) => c.charCodeAt(0)));\n const tagH = await utils.sha256(tagB);\n const h = await utils.sha256(concatBytes(tagH, tagH, ...messages));\n return bytesToNumber(h);\n}\nasync function createChallenge(x, P, message) {\n const rx = numTo32b(x);\n const t = await taggedHash('BIP0340/challenge', rx, P.toRawX(), message);\n return mod(t, CURVE.n);\n}\nfunction hasEvenY(point) {\n return (point.y & _1n) === _0n;\n}\nclass SchnorrSignature {\n constructor(r, s) {\n this.r = r;\n this.s = s;\n this.assertValidity();\n }\n static fromHex(hex) {\n const bytes = ensureBytes(hex);\n if (bytes.length !== 64)\n throw new TypeError(`SchnorrSignature.fromHex: expected 64 bytes, not ${bytes.length}`);\n const r = bytesToNumber(bytes.subarray(0, 32));\n const s = bytesToNumber(bytes.subarray(32, 64));\n return new SchnorrSignature(r, s);\n }\n assertValidity() {\n const { r, s } = this;\n if (!isValidFieldElement(r) || !isWithinCurveOrder(s))\n throw new Error('Invalid signature');\n }\n toHex() {\n return numTo32bStr(this.r) + numTo32bStr(this.s);\n }\n toRawBytes() {\n return hexToBytes(this.toHex());\n }\n}\nfunction schnorrGetPublicKey(privateKey) {\n return Point.fromPrivateKey(privateKey).toRawX();\n}\nasync function schnorrSign(message, privateKey, auxRand = utils.randomBytes()) {\n if (message == null)\n throw new TypeError(`sign: Expected valid message, not \"${message}\"`);\n const { n } = CURVE;\n const m = ensureBytes(message);\n const d0 = normalizePrivateKey(privateKey);\n const rand = ensureBytes(auxRand);\n if (rand.length !== 32)\n throw new TypeError('sign: Expected 32 bytes of aux randomness');\n const P = Point.fromPrivateKey(d0);\n const d = hasEvenY(P) ? d0 : n - d0;\n const t0h = await taggedHash('BIP0340/aux', rand);\n const t = d ^ t0h;\n const k0h = await taggedHash('BIP0340/nonce', numTo32b(t), P.toRawX(), m);\n const k0 = mod(k0h, n);\n if (k0 === _0n)\n throw new Error('sign: Creation of signature failed. k is zero');\n const R = Point.fromPrivateKey(k0);\n const k = hasEvenY(R) ? k0 : n - k0;\n const e = await createChallenge(R.x, P, m);\n const sig = new SchnorrSignature(R.x, mod(k + e * d, n)).toRawBytes();\n const isValid = await schnorrVerify(sig, m, P.toRawX());\n if (!isValid)\n throw new Error('sign: Invalid signature produced');\n return sig;\n}\nasync function schnorrVerify(signature, message, publicKey) {\n const raw = signature instanceof SchnorrSignature;\n let sig;\n try {\n sig = raw ? signature : SchnorrSignature.fromHex(signature);\n if (raw)\n sig.assertValidity();\n }\n catch (error) {\n return false;\n }\n const { r, s } = sig;\n const m = ensureBytes(message);\n let P;\n try {\n P = normalizePublicKey(publicKey);\n }\n catch (error) {\n return false;\n }\n const e = await createChallenge(r, P, m);\n const R = Point.BASE.multiplyAndAddUnsafe(P, normalizePrivateKey(s), mod(-e, CURVE.n));\n if (!R || !hasEvenY(R) || R.x !== r)\n return false;\n return true;\n}\nexport const schnorr = {\n Signature: SchnorrSignature,\n getPublicKey: schnorrGetPublicKey,\n sign: schnorrSign,\n verify: schnorrVerify,\n};\nPoint.BASE._setWindowSize(8);\nconst crypto = {\n node: nodeCrypto,\n web: typeof self === 'object' && 'crypto' in self ? self.crypto : undefined,\n};\nexport const utils = {\n isValidPrivateKey(privateKey) {\n try {\n normalizePrivateKey(privateKey);\n return true;\n }\n catch (error) {\n return false;\n }\n },\n hashToPrivateKey: (hash) => {\n hash = ensureBytes(hash);\n if (hash.length < 40 || hash.length > 1024)\n throw new Error('Expected 40-1024 bytes of private key as per FIPS 186');\n const num = mod(bytesToNumber(hash), CURVE.n);\n if (num === _0n || num === _1n)\n throw new Error('Invalid private key');\n return numTo32b(num);\n },\n randomBytes: (bytesLength = 32) => {\n if (crypto.web) {\n return crypto.web.getRandomValues(new Uint8Array(bytesLength));\n }\n else if (crypto.node) {\n const { randomBytes } = crypto.node;\n return Uint8Array.from(randomBytes(bytesLength));\n }\n else {\n throw new Error(\"The environment doesn't have randomBytes function\");\n }\n },\n randomPrivateKey: () => {\n return utils.hashToPrivateKey(utils.randomBytes(40));\n },\n bytesToHex,\n mod,\n sha256: async (message) => {\n if (crypto.web) {\n const buffer = await crypto.web.subtle.digest('SHA-256', message.buffer);\n return new Uint8Array(buffer);\n }\n else if (crypto.node) {\n const { createHash } = crypto.node;\n return Uint8Array.from(createHash('sha256').update(message).digest());\n }\n else {\n throw new Error(\"The environment doesn't have sha256 function\");\n }\n },\n hmacSha256: async (key, ...messages) => {\n if (crypto.web) {\n const ckey = await crypto.web.subtle.importKey('raw', key, { name: 'HMAC', hash: { name: 'SHA-256' } }, false, ['sign']);\n const message = concatBytes(...messages);\n const buffer = await crypto.web.subtle.sign('HMAC', ckey, message);\n return new Uint8Array(buffer);\n }\n else if (crypto.node) {\n const { createHmac } = crypto.node;\n const hash = createHmac('sha256', key);\n messages.forEach((m) => hash.update(m));\n return Uint8Array.from(hash.digest());\n }\n else {\n throw new Error(\"The environment doesn't have hmac-sha256 function\");\n }\n },\n sha256Sync: undefined,\n hmacSha256Sync: undefined,\n precompute(windowSize = 8, point = Point.BASE) {\n const cached = point === Point.BASE ? point : new Point(point.x, point.y);\n cached._setWindowSize(windowSize);\n cached.multiply(_3n);\n return cached;\n },\n};\n","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _SigningKey_privateKey;\nimport * as secp256k1 from \"@noble/secp256k1\";\nimport { arrayify, concat, dataLength, hexlify } from \"@ethersproject/bytes\";\nimport { computeHmac } from \"@ethersproject/crypto\";\nimport { toHex } from \"@ethersproject/math\";\nimport { Signature } from \"./signature.js\";\nimport { logger } from \"./logger.js\";\n// Make noble-secp256k1 sync\nsecp256k1.utils.hmacSha256Sync = function (key, ...messages) {\n return arrayify(computeHmac(\"sha256\", key, concat(messages)));\n};\nexport class SigningKey {\n constructor(privateKey) {\n _SigningKey_privateKey.set(this, void 0);\n logger.assertArgument((dataLength(privateKey) === 32), \"invalid private key length\", \"privateKey\", \"[REDACTED]\");\n __classPrivateFieldSet(this, _SigningKey_privateKey, hexlify(privateKey), \"f\");\n }\n get privateKey() { return __classPrivateFieldGet(this, _SigningKey_privateKey, \"f\"); }\n get publicKey() { return SigningKey.computePublicKey(__classPrivateFieldGet(this, _SigningKey_privateKey, \"f\")); }\n get compressedPublicKey() { return SigningKey.computePublicKey(__classPrivateFieldGet(this, _SigningKey_privateKey, \"f\"), true); }\n sign(digest) {\n logger.assertArgument((dataLength(digest) === 32), \"invalid digest length\", \"digest\", digest);\n const [sigDer, recid] = secp256k1.signSync(arrayify(digest), arrayify(__classPrivateFieldGet(this, _SigningKey_privateKey, \"f\")), {\n recovered: true,\n canonical: true\n });\n const sig = secp256k1.Signature.fromHex(sigDer);\n return Signature.from({\n r: toHex(\"0x\" + sig.r.toString(16), 32),\n s: toHex(\"0x\" + sig.s.toString(16), 32),\n v: (recid ? 0x1c : 0x1b)\n }).freeze();\n }\n computeShardSecret(other) {\n const pubKey = SigningKey.computePublicKey(other);\n return hexlify(secp256k1.getSharedSecret(arrayify(__classPrivateFieldGet(this, _SigningKey_privateKey, \"f\")), pubKey));\n }\n static computePublicKey(key, compressed) {\n let bytes = logger.getBytes(key, \"key\");\n if (bytes.length === 32) {\n const pubKey = secp256k1.getPublicKey(bytes, !!compressed);\n return hexlify(pubKey);\n }\n if (bytes.length === 64) {\n const pub = new Uint8Array(65);\n pub[0] = 0x04;\n pub.set(bytes, 1);\n bytes = pub;\n }\n const point = secp256k1.Point.fromHex(bytes);\n return hexlify(point.toRawBytes(compressed));\n }\n static recoverPublicKey(digest, signature) {\n const sig = Signature.from(signature);\n const der = secp256k1.Signature.fromCompact(arrayify(concat([sig.r, sig.s]))).toDERRawBytes();\n const pubKey = secp256k1.recoverPublicKey(arrayify(digest), der, sig.yParity);\n if (pubKey != null) {\n return hexlify(pubKey);\n }\n return logger.throwArgumentError(\"invalid signautre for digest\", \"signature\", signature);\n }\n static _addPoints(p0, p1, compressed) {\n const pub0 = secp256k1.Point.fromHex(SigningKey.computePublicKey(p0).substring(2));\n const pub1 = secp256k1.Point.fromHex(SigningKey.computePublicKey(p1).substring(2));\n return \"0x\" + pub0.add(pub1).toHex(!!compressed);\n }\n}\n_SigningKey_privateKey = new WeakMap();\n/*\nconst key = new SigningKey(\"0x1234567890123456789012345678901234567890123456789012345678901234\");\nconsole.log(key);\nconsole.log(key.sign(\"0x1234567890123456789012345678901234567890123456789012345678901234\"));\n{\n const privKey = \"0x1234567812345678123456781234567812345678123456781234567812345678\";\n const signingKey = new SigningKey(privKey);\n console.log(\"0\", signingKey, signingKey.publicKey, signingKey.publicKeyCompressed);\n\n let pubKey = SigningKey.computePublicKey(privKey);\n let pubKeyComp = SigningKey.computePublicKey(privKey, true);\n let pubKeyRaw = \"0x\" + SigningKey.computePublicKey(privKey).substring(4);\n console.log(\"A\", pubKey, pubKeyComp);\n\n let a = SigningKey.computePublicKey(pubKey);\n let b = SigningKey.computePublicKey(pubKey, true);\n console.log(\"B\", a, b);\n\n a = SigningKey.computePublicKey(pubKeyComp);\n b = SigningKey.computePublicKey(pubKeyComp, true);\n console.log(\"C\", a, b);\n\n a = SigningKey.computePublicKey(pubKeyRaw);\n b = SigningKey.computePublicKey(pubKeyRaw, true);\n console.log(\"D\", a, b);\n\n const digest = \"0x1122334411223344112233441122334411223344112233441122334411223344\";\n const sig = signingKey.sign(digest);\n console.log(\"SS\", sig, sig.r, sig.s, sig.yParity);\n\n console.log(\"R\", SigningKey.recoverPublicKey(digest, sig));\n}\n*/\n//# sourceMappingURL=signing-key.js.map","import { getAddress } from \"@ethersproject/address\";\nimport { dataLength } from \"@ethersproject/bytes\";\nfunction accessSetify(addr, storageKeys) {\n return {\n address: getAddress(addr),\n storageKeys: (storageKeys || []).map((storageKey, index) => {\n if (dataLength(storageKey) !== 32) {\n //logger.throwArgumentError(\"invalid access list storageKey\", `accessList[${ addr }>\n throw new Error(\"\");\n }\n return storageKey.toLowerCase();\n })\n };\n}\nexport function accessListify(value) {\n if (Array.isArray(value)) {\n return value.map((set, index) => {\n if (Array.isArray(set)) {\n if (set.length > 2) {\n //logger.throwArgumentError(\"access list expected to be [ address, storageKeys[>\n throw new Error(\"\");\n }\n return accessSetify(set[0], set[1]);\n }\n return accessSetify(set.address, set.storageKeys);\n });\n }\n const result = Object.keys(value).map((addr) => {\n const storageKeys = value[addr].reduce((accum, storageKey) => {\n accum[storageKey] = true;\n return accum;\n }, {});\n return accessSetify(addr, Object.keys(storageKeys).sort());\n });\n result.sort((a, b) => (a.address.localeCompare(b.address)));\n return result;\n}\n//# sourceMappingURL=accesslist.js.map","export const version = \"@ethersproject/transactions@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Transaction_props;\nimport { getAddress } from \"@ethersproject/address\";\nimport { arrayify, concat, hexlify } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { toArray } from \"@ethersproject/math\";\nimport { getStore, setStore } from \"@ethersproject/properties\";\nimport { encodeRlp } from \"@ethersproject/rlp\";\nimport { Signature } from \"@ethersproject/signing-key\";\nimport { accessListify } from \"./accesslist.js\";\nimport { logger } from \"./logger.js\";\nconst BN_0 = BigInt(0);\nfunction formatNumber(_value, name) {\n const value = logger.getBigInt(_value, \"value\");\n const result = toArray(value);\n if (result.length > 32) {\n logger.throwArgumentError(`value too large`, `tx.${name}`, value);\n }\n return result;\n}\nfunction formatAccessList(value) {\n return accessListify(value).map((set) => [set.address, set.storageKeys]);\n}\nfunction _parseLegacy(data) {\n return {};\n}\nfunction _serializeLegacy(tx, sig) {\n const fields = [\n formatNumber(tx.nonce || 0, \"nonce\"),\n formatNumber(tx.gasPrice || 0, \"gasPrice\"),\n formatNumber(tx.gasLimit || 0, \"gasLimit\"),\n ((tx.to != null) ? getAddress(tx.to) : \"0x\"),\n formatNumber(tx.value || 0, \"value\"),\n (tx.data || \"0x\"),\n ];\n let chainId = BN_0;\n if (tx.chainId != null) {\n // A chainId was provided; if non-zero we'll use EIP-155\n chainId = logger.getBigInt(tx.chainId, \"tx.chainId\");\n // We have a chainId in the tx and an EIP-155 v in the signature,\n // make sure they agree with each other\n if (sig && sig.networkV != null && sig.legacyChainId !== chainId) {\n logger.throwArgumentError(\"tx.chainId/sig.v mismatch\", \"sig\", sig);\n }\n }\n else if (sig) {\n // No chainId provided, but the signature is signing with EIP-155; derive chainId\n const legacy = sig.legacyChainId;\n if (legacy != null) {\n chainId = legacy;\n }\n }\n // Requesting an unsigned transaction\n if (!sig) {\n // We have an EIP-155 transaction (chainId was specified and non-zero)\n if (chainId !== BN_0) {\n fields.push(toArray(chainId));\n fields.push(\"0x\");\n fields.push(\"0x\");\n }\n return encodeRlp(fields);\n }\n // We pushed a chainId and null r, s on for hashing only; remove those\n let v = BigInt(27 + sig.yParity);\n if (chainId !== BN_0) {\n v = Signature.getChainIdV(chainId, sig.v);\n }\n else if (BigInt(sig.v) !== v) {\n logger.throwArgumentError(\"tx.chainId/sig.v mismatch\", \"sig\", sig);\n }\n fields.push(toArray(v));\n fields.push(toArray(sig.r));\n fields.push(toArray(sig.s));\n return encodeRlp(fields);\n}\nfunction _parseEip1559(data) {\n throw new Error(\"@TODO\");\n}\nfunction _serializeEip1559(tx, sig) {\n // If there is an explicit gasPrice, make sure it matches the\n // EIP-1559 fees; otherwise they may not understand what they\n // think they are setting in terms of fee.\n //if (tx.gasPrice != null) {\n // if (tx.gasPrice !== (tx.maxFeePerGas || BN_0)) {\n // logger.throwArgumentError(\"mismatch EIP-1559 gasPrice != maxFeePerGas\", \"tx\", tx);\n // }\n //}\n const fields = [\n formatNumber(tx.chainId || 0, \"chainId\"),\n formatNumber(tx.nonce || 0, \"nonce\"),\n formatNumber(tx.maxPriorityFeePerGas || 0, \"maxPriorityFeePerGas\"),\n formatNumber(tx.maxFeePerGas || 0, \"maxFeePerGas\"),\n formatNumber(tx.gasLimit || 0, \"gasLimit\"),\n ((tx.to != null) ? getAddress(tx.to) : \"0x\"),\n formatNumber(tx.value || 0, \"value\"),\n (tx.data || \"0x\"),\n (formatAccessList(tx.accessList || []))\n ];\n if (sig) {\n fields.push(formatNumber(sig.yParity, \"yParity\"));\n fields.push(toArray(sig.r));\n fields.push(toArray(sig.s));\n }\n return concat([\"0x02\", encodeRlp(fields)]);\n}\nfunction _parseEip2930(data) {\n throw new Error(\"@TODO\");\n}\nfunction _serializeEip2930(tx, sig) {\n const fields = [\n formatNumber(tx.chainId || 0, \"chainId\"),\n formatNumber(tx.nonce || 0, \"nonce\"),\n formatNumber(tx.gasPrice || 0, \"gasPrice\"),\n formatNumber(tx.gasLimit || 0, \"gasLimit\"),\n ((tx.to != null) ? getAddress(tx.to) : \"0x\"),\n formatNumber(tx.value || 0, \"value\"),\n (tx.data || \"0x\"),\n (formatAccessList(tx.accessList || []))\n ];\n if (sig) {\n fields.push(formatNumber(sig.yParity, \"recoveryParam\"));\n fields.push(toArray(sig.r));\n fields.push(toArray(sig.s));\n }\n return concat([\"0x01\", encodeRlp(fields)]);\n}\nexport class Transaction {\n constructor() {\n _Transaction_props.set(this, void 0);\n __classPrivateFieldSet(this, _Transaction_props, {\n type: null,\n to: null,\n nonce: 0,\n gasLimit: BigInt(0),\n gasPrice: null,\n maxPriorityFeePerGas: null,\n maxFeePerGas: null,\n data: \"0x\",\n value: BigInt(0),\n chainId: BigInt(0),\n sig: null,\n accessList: null\n }, \"f\");\n }\n // A type of null indicates the type will be populated automatically\n get type() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"type\"); }\n get typeName() {\n switch (this.type) {\n case 0: return \"legacy\";\n case 1: return \"eip-2930\";\n case 2: return \"eip-1559\";\n }\n return null;\n }\n set type(value) {\n switch (value) {\n case null:\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"type\", null);\n break;\n case 0:\n case \"legacy\":\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"type\", 0);\n break;\n case 1:\n case \"berlin\":\n case \"eip-2930\":\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"type\", 1);\n break;\n case 2:\n case \"london\":\n case \"eip-1559\":\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"type\", 2);\n break;\n default:\n throw new Error(`unsupported transaction type`);\n }\n }\n /*\n detectType(): number {\n const hasFee = (this.maxFeePerGas != null) || (this.maxPriorityFeePerGas != null);\n const hasAccessList = (this.accessList != null);\n const hasLegacy = (this.gasPrice != null);\n\n if (hasLegacy) {\n if (hasFee) {\n throw new Error(\"cannot mix legacy and london properties\");\n }\n if (hasAccessList) { return 1; }\n return 0;\n }\n\n return 2;\n }\n */\n get to() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"to\"); }\n set to(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"to\", (value == null) ? null : getAddress(value));\n }\n get nonce() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"nonce\"); }\n set nonce(value) { setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"nonce\", logger.getNumber(value, \"value\")); }\n get gasLimit() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"gasLimit\"); }\n set gasLimit(value) { setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"gasLimit\", logger.getBigInt(value)); }\n get gasPrice() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"gasPrice\"); }\n set gasPrice(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"gasPrice\", (value == null) ? null : logger.getBigInt(value));\n }\n get maxPriorityFeePerGas() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"maxPriorityFeePerGas\"); }\n set maxPriorityFeePerGas(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"maxPriorityFeePerGas\", (value == null) ? null : logger.getBigInt(value));\n }\n get maxFeePerGas() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"maxFeePerGas\"); }\n set maxFeePerGas(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"maxFeePerGas\", (value == null) ? null : logger.getBigInt(value));\n }\n get data() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"data\"); }\n set data(value) { setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"data\", hexlify(value)); }\n get value() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"value\"); }\n set value(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"value\", logger.getBigInt(value));\n }\n get chainId() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"chainId\"); }\n set chainId(value) { setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"chainId\", logger.getBigInt(value)); }\n get signature() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"sig\") || null; }\n set signature(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"sig\", (value == null) ? null : Signature.from(value));\n }\n get accessList() { return getStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"accessList\") || null; }\n set accessList(value) {\n setStore(__classPrivateFieldGet(this, _Transaction_props, \"f\"), \"accessList\", (value == null) ? null : accessListify(value));\n }\n get hash() {\n if (this.signature == null) {\n throw new Error(\"cannot hash unsigned transaction; maybe you meant .unsignedHash\");\n }\n return keccak256(this.serialized);\n }\n get unsignedHash() {\n return keccak256(this.unsignedSerialized);\n }\n get from() {\n if (this.signature == null) {\n return null;\n }\n // use ecomputeAddress(this.fromPublicKey);\n return \"\";\n }\n get fromPublicKey() {\n if (this.signature == null) {\n return null;\n }\n // use ecrecover\n return \"\";\n }\n isSigned() {\n return this.signature != null;\n }\n get serialized() {\n if (this.signature == null) {\n throw new Error(\"cannot serialize unsigned transaction; maybe you meant .unsignedSerialized\");\n }\n const types = this.inferTypes();\n if (types.length !== 1) {\n throw new Error(\"cannot determine transaction type; specify type manually\");\n }\n switch (types[0]) {\n case 0:\n return _serializeLegacy(this, this.signature);\n case 1:\n return _serializeEip2930(this, this.signature);\n case 2:\n return _serializeEip1559(this, this.signature);\n }\n throw new Error(\"unsupported type\");\n }\n get unsignedSerialized() {\n if (this.signature != null) {\n throw new Error(\"cannot serialize unsigned transaction; maybe you meant .unsignedSerialized\");\n }\n const types = this.inferTypes();\n if (types.length !== 1) {\n throw new Error(\"cannot determine transaction type; specify type manually\");\n }\n switch (types[0]) {\n case 0:\n return _serializeLegacy(this);\n case 1:\n return _serializeEip2930(this);\n case 2:\n return _serializeEip1559(this);\n }\n throw new Error(\"unsupported type\");\n }\n // Validates properties and lists possible types this transaction adheres to\n inferTypes() {\n // Checks that there are no conflicting properties set\n const hasGasPrice = this.gasPrice != null;\n const hasFee = (this.maxFeePerGas != null || this.maxPriorityFeePerGas != null);\n const hasAccessList = (this.accessList != null);\n //if (hasGasPrice && hasFee) {\n // throw new Error(\"transaction cannot have gasPrice and maxFeePerGas\");\n //}\n if (!!this.maxFeePerGas && !!this.maxPriorityFeePerGas) {\n if (this.maxFeePerGas < this.maxPriorityFeePerGas) {\n throw new Error(\"priorityFee cannot be more than maxFee\");\n }\n }\n //if (this.type === 2 && hasGasPrice) {\n // throw new Error(\"eip-1559 transaction cannot have gasPrice\");\n //}\n if ((this.type === 0 || this.type === 1) && hasFee) {\n throw new Error(\"transaction type cannot have maxFeePerGas or maxPriorityFeePerGas\");\n }\n if (this.type === 0 && hasAccessList) {\n throw new Error(\"legacy transaction cannot have accessList\");\n }\n const types = [];\n // Explicit type\n if (this.type != null) {\n types.push(this.type);\n }\n else {\n if (hasFee) {\n types.push(2);\n }\n else if (hasGasPrice) {\n types.push(1);\n if (!hasAccessList) {\n types.push(0);\n }\n }\n else if (hasAccessList) {\n types.push(1);\n types.push(2);\n }\n else {\n types.push(0);\n types.push(1);\n types.push(2);\n }\n }\n types.sort();\n return types;\n }\n clone() {\n return Transaction.from(this);\n }\n freeze() {\n if (__classPrivateFieldGet(this, _Transaction_props, \"f\").sig) {\n __classPrivateFieldGet(this, _Transaction_props, \"f\").sig = (__classPrivateFieldGet(this, _Transaction_props, \"f\").sig.clone().freeze());\n }\n if (__classPrivateFieldGet(this, _Transaction_props, \"f\").accessList) {\n __classPrivateFieldGet(this, _Transaction_props, \"f\").accessList = Object.freeze(__classPrivateFieldGet(this, _Transaction_props, \"f\").accessList.map((set) => {\n Object.freeze(set.storageKeys);\n return Object.freeze(set);\n }));\n }\n Object.freeze(__classPrivateFieldGet(this, _Transaction_props, \"f\"));\n return this;\n }\n isFrozen() {\n return Object.isFrozen(__classPrivateFieldGet(this, _Transaction_props, \"f\"));\n }\n static from(tx) {\n if (typeof (tx) === \"string\") {\n const payload = arrayify(tx);\n if (payload[0] >= 0x7f) { // @TODO: > vs >= ??\n return Transaction.from(_parseLegacy(payload));\n }\n switch (payload[0]) {\n case 1: return Transaction.from(_parseEip2930(payload.slice(1)));\n case 2: return Transaction.from(_parseEip1559(payload.slice(1)));\n }\n throw new Error(\"unsupported transaction type\");\n }\n const result = new Transaction();\n if (tx.type != null) {\n result.type = tx.type;\n }\n if (tx.to != null) {\n result.to = tx.to;\n }\n if (tx.nonce != null) {\n result.nonce = tx.nonce;\n }\n if (tx.gasLimit != null) {\n result.gasLimit = tx.gasLimit;\n }\n if (tx.gasPrice != null) {\n result.gasPrice = tx.gasPrice;\n }\n if (tx.maxPriorityFeePerGas != null) {\n result.maxPriorityFeePerGas = tx.maxPriorityFeePerGas;\n }\n if (tx.maxFeePerGas != null) {\n result.maxFeePerGas = tx.maxFeePerGas;\n }\n if (tx.data != null) {\n result.data = tx.data;\n }\n if (tx.value != null) {\n result.value = tx.value;\n }\n if (tx.chainId != null) {\n result.chainId = tx.chainId;\n }\n if (tx.signature != null) {\n result.signature = Signature.from(tx.signature);\n }\n if (tx.accessList != null) {\n result.accessList = tx.accessList;\n }\n // Should these be checked?? Should from be allowed if there is no signature?\n // from?: null | A;\n // hash?: null | string;\n return result;\n }\n}\n_Transaction_props = new WeakMap();\n//# sourceMappingURL=transaction.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Block_transactions, _TransactionReceipt_logs;\n//import { resolveAddress } from \"@ethersproject/address\";\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { accessListify } from \"@ethersproject/transactions\";\nimport { logger } from \"./logger.js\";\n// -----------------------\nfunction getValue(value) {\n if (value == null) {\n return null;\n }\n return value;\n}\nfunction toJson(value) {\n if (value == null) {\n return null;\n }\n return value.toString();\n}\n// @TODO? implements Required\nexport class FeeData {\n constructor(gasPrice, maxFeePerGas, maxPriorityFeePerGas) {\n defineProperties(this, {\n gasPrice: getValue(gasPrice),\n maxFeePerGas: getValue(maxFeePerGas),\n maxPriorityFeePerGas: getValue(maxPriorityFeePerGas)\n });\n }\n toJSON() {\n const { gasPrice, maxFeePerGas, maxPriorityFeePerGas } = this;\n return {\n _type: \"FeeData\",\n gasPrice: toJson(gasPrice),\n maxFeePerGas: toJson(maxFeePerGas),\n maxPriorityFeePerGas: toJson(maxPriorityFeePerGas),\n };\n }\n}\n;\nexport function copyRequest(req) {\n const result = {};\n // These could be addresses, ENS names or Addressables\n if (req.to) {\n result.to = req.to;\n }\n if (req.from) {\n result.from = req.from;\n }\n if (req.data) {\n result.data = hexlify(req.data);\n }\n const bigIntKeys = \"chainId,gasLimit,gasPrice,maxFeePerGas, maxPriorityFeePerGas,value\".split(/,/);\n for (const key in bigIntKeys) {\n if (!(key in req) || req[key] == null) {\n continue;\n }\n result[key] = logger.getBigInt(req[key], `request.${key}`);\n }\n const numberKeys = \"type,nonce\".split(/,/);\n for (const key in numberKeys) {\n if (!(key in req) || req[key] == null) {\n continue;\n }\n result[key] = logger.getNumber(req[key], `request.${key}`);\n }\n if (req.accessList) {\n result.accessList = accessListify(req.accessList);\n }\n if (\"blockTag\" in req) {\n result.blockTag = req.blockTag;\n }\n if (\"enableCcipRead\" in req) {\n result.enableCcipReadEnabled = !!req.enableCcipRead;\n }\n if (\"customData\" in req) {\n result.customData = req.customData;\n }\n return result;\n}\n;\nexport class Block {\n constructor(block, provider) {\n _Block_transactions.set(this, void 0);\n if (provider == null) {\n provider = dummyProvider;\n }\n __classPrivateFieldSet(this, _Block_transactions, Object.freeze(block.transactions.map((tx) => {\n if (typeof (tx) !== \"string\" && tx.provider !== provider) {\n throw new Error(\"provider mismatch\");\n }\n return tx;\n })), \"f\");\n ;\n defineProperties(this, {\n provider,\n hash: getValue(block.hash),\n number: block.number,\n timestamp: block.timestamp,\n parentHash: block.parentHash,\n nonce: block.nonce,\n difficulty: block.difficulty,\n gasLimit: block.gasLimit,\n gasUsed: block.gasUsed,\n miner: block.miner,\n extraData: block.extraData,\n baseFeePerGas: getValue(block.baseFeePerGas)\n });\n }\n get transactions() { return __classPrivateFieldGet(this, _Block_transactions, \"f\"); }\n //connect(provider: Provider): Block {\n // return new Block(this, provider);\n //}\n toJSON() {\n const { baseFeePerGas, difficulty, extraData, gasLimit, gasUsed, hash, miner, nonce, number, parentHash, timestamp, transactions } = this;\n return {\n _type: \"Block\",\n baseFeePerGas: toJson(baseFeePerGas),\n difficulty: toJson(difficulty),\n extraData,\n gasLimit: toJson(gasLimit),\n gasUsed: toJson(gasUsed),\n hash, miner, nonce, number, parentHash, timestamp,\n transactions,\n };\n }\n [(_Block_transactions = new WeakMap(), Symbol.iterator)]() {\n let index = 0;\n return {\n next: () => {\n if (index < this.length) {\n return {\n value: this.transactions[index++], done: false\n };\n }\n return { value: undefined, done: true };\n }\n };\n }\n get length() { return this.transactions.length; }\n get date() {\n if (this.timestamp == null) {\n return null;\n }\n return new Date(this.timestamp * 1000);\n }\n async getTransaction(index) {\n const tx = this.transactions[index];\n if (tx == null) {\n throw new Error(\"no such tx\");\n }\n if (typeof (tx) === \"string\") {\n return (await this.provider.getTransaction(tx));\n }\n else {\n return tx;\n }\n }\n isMined() { return !!this.hash; }\n isLondon() { return !!this.baseFeePerGas; }\n orphanedEvent() {\n if (!this.isMined()) {\n throw new Error(\"\");\n }\n return createOrphanedBlockFilter(this);\n }\n}\nexport class Log {\n constructor(log, provider) {\n if (provider == null) {\n provider = dummyProvider;\n }\n this.provider = provider;\n const topics = Object.freeze(log.topics.slice());\n defineProperties(this, {\n transactionHash: log.transactionHash,\n blockHash: log.blockHash,\n blockNumber: log.blockNumber,\n removed: log.removed,\n address: log.address,\n data: log.data,\n topics,\n index: log.index,\n transactionIndex: log.transactionIndex,\n });\n }\n //connect(provider: Provider): Log {\n // return new Log(this, provider);\n //}\n toJSON() {\n const { address, blockHash, blockNumber, data, index, removed, topics, transactionHash, transactionIndex } = this;\n return {\n _type: \"log\",\n address, blockHash, blockNumber, data, index,\n removed, topics, transactionHash, transactionIndex\n };\n }\n async getBlock() {\n return (await this.provider.getBlock(this.blockHash));\n }\n async getTransaction() {\n return (await this.provider.getTransaction(this.transactionHash));\n }\n async getTransactionReceipt() {\n return (await this.provider.getTransactionReceipt(this.transactionHash));\n }\n removedEvent() {\n return createRemovedLogFilter(this);\n }\n}\nexport class TransactionReceipt {\n constructor(tx, provider) {\n _TransactionReceipt_logs.set(this, void 0);\n if (provider == null) {\n provider = dummyProvider;\n }\n __classPrivateFieldSet(this, _TransactionReceipt_logs, Object.freeze(tx.logs.map((log) => {\n if (provider !== log.provider) {\n //return log.connect(provider);\n throw new Error(\"provider mismatch\");\n }\n return log;\n })), \"f\");\n defineProperties(this, {\n provider,\n to: tx.to,\n from: tx.from,\n contractAddress: tx.contractAddress,\n hash: tx.hash,\n index: tx.index,\n blockHash: tx.blockHash,\n blockNumber: tx.blockNumber,\n logsBloom: tx.logsBloom,\n gasUsed: tx.gasUsed,\n cumulativeGasUsed: tx.cumulativeGasUsed,\n gasPrice: (tx.effectiveGasPrice || tx.gasPrice),\n byzantium: tx.byzantium,\n status: tx.status,\n root: tx.root\n });\n }\n get logs() { return __classPrivateFieldGet(this, _TransactionReceipt_logs, \"f\"); }\n //connect(provider: Provider): TransactionReceipt {\n // return new TransactionReceipt(this, provider);\n //}\n toJSON() {\n const { to, from, contractAddress, hash, index, blockHash, blockNumber, logsBloom, logs, byzantium, status, root } = this;\n return {\n _type: \"TransactionReceipt\",\n blockHash, blockNumber, byzantium, contractAddress,\n cumulativeGasUsed: toJson(this.cumulativeGasUsed),\n from,\n gasPrice: toJson(this.gasPrice),\n gasUsed: toJson(this.gasUsed),\n hash, index, logs, logsBloom, root, status, to\n };\n }\n get length() { return this.logs.length; }\n [(_TransactionReceipt_logs = new WeakMap(), Symbol.iterator)]() {\n let index = 0;\n return {\n next: () => {\n if (index < this.length) {\n return { value: this.logs[index++], done: false };\n }\n return { value: undefined, done: true };\n }\n };\n }\n get fee() {\n return this.gasUsed * this.gasPrice;\n }\n async getBlock() {\n const block = await this.provider.getBlock(this.blockHash);\n if (block == null) {\n throw new Error(\"TODO\");\n }\n return block;\n }\n async getTransaction() {\n const tx = await this.provider.getTransaction(this.hash);\n if (tx == null) {\n throw new Error(\"TODO\");\n }\n return tx;\n }\n async confirmations() {\n return (await this.provider.getBlockNumber()) - this.blockNumber + 1;\n }\n removedEvent() {\n return createRemovedTransactionFilter(this);\n }\n reorderedEvent(other) {\n if (other && !other.isMined()) {\n return logger.throwError(\"unmined 'other' transction cannot be orphaned\", \"UNSUPPORTED_OPERATION\", {\n operation: \"reorderedEvent(other)\"\n });\n }\n return createReorderedTransactionFilter(this, other);\n }\n}\n;\nexport class TransactionResponse {\n constructor(tx, provider) {\n if (provider == null) {\n provider = dummyProvider;\n }\n this.provider = provider;\n this.blockNumber = (tx.blockNumber != null) ? tx.blockNumber : null;\n this.blockHash = (tx.blockHash != null) ? tx.blockHash : null;\n this.hash = tx.hash;\n this.index = tx.index;\n this.type = tx.type;\n this.from = tx.from;\n this.to = tx.to || null;\n this.gasLimit = tx.gasLimit;\n this.nonce = tx.nonce;\n this.data = tx.data;\n this.value = tx.value;\n this.gasPrice = tx.gasPrice;\n this.maxPriorityFeePerGas = (tx.maxPriorityFeePerGas != null) ? tx.maxPriorityFeePerGas : null;\n this.maxFeePerGas = (tx.maxFeePerGas != null) ? tx.maxFeePerGas : null;\n this.chainId = tx.chainId;\n this.signature = tx.signature;\n this.accessList = (tx.accessList != null) ? tx.accessList : null;\n }\n //connect(provider: Provider): TransactionResponse {\n // return new TransactionResponse(this, provider);\n //}\n toJSON() {\n const { blockNumber, blockHash, index, hash, type, to, from, nonce, data, signature, accessList } = this;\n return {\n _type: \"TransactionReceipt\",\n accessList, blockNumber, blockHash,\n chainId: toJson(this.chainId),\n data, from,\n gasLimit: toJson(this.gasLimit),\n gasPrice: toJson(this.gasPrice),\n hash,\n maxFeePerGas: toJson(this.maxFeePerGas),\n maxPriorityFeePerGas: toJson(this.maxPriorityFeePerGas),\n nonce, signature, to, index, type,\n value: toJson(this.value),\n };\n }\n async getBlock() {\n let blockNumber = this.blockNumber;\n if (blockNumber == null) {\n const tx = await this.getTransaction();\n if (tx) {\n blockNumber = tx.blockNumber;\n }\n }\n if (blockNumber == null) {\n return null;\n }\n const block = this.provider.getBlock(blockNumber);\n if (block == null) {\n throw new Error(\"TODO\");\n }\n return block;\n }\n async getTransaction() {\n return this.provider.getTransaction(this.hash);\n }\n async wait(confirms) {\n return this.provider.waitForTransaction(this.hash, confirms);\n }\n isMined() {\n return (this.blockHash != null);\n }\n isLegacy() {\n return (this.type === 0);\n }\n isBerlin() {\n return (this.type === 1);\n }\n isLondon() {\n return (this.type === 2);\n }\n removedEvent() {\n if (!this.isMined()) {\n return logger.throwError(\"unmined transaction canot be orphaned\", \"UNSUPPORTED_OPERATION\", {\n operation: \"removeEvent()\"\n });\n }\n return createRemovedTransactionFilter(this);\n }\n reorderedEvent(other) {\n if (!this.isMined()) {\n return logger.throwError(\"unmined transaction canot be orphaned\", \"UNSUPPORTED_OPERATION\", {\n operation: \"removeEvent()\"\n });\n }\n if (other && !other.isMined()) {\n return logger.throwError(\"unmined 'other' transaction canot be orphaned\", \"UNSUPPORTED_OPERATION\", {\n operation: \"removeEvent()\"\n });\n }\n return createReorderedTransactionFilter(this, other);\n }\n}\nfunction createOrphanedBlockFilter(block) {\n return { orphan: \"drop-block\", hash: block.hash, number: block.number };\n}\nfunction createReorderedTransactionFilter(tx, other) {\n return { orphan: \"reorder-transaction\", tx, other };\n}\nfunction createRemovedTransactionFilter(tx) {\n return { orphan: \"drop-transaction\", tx };\n}\nfunction createRemovedLogFilter(log) {\n return { orphan: \"drop-log\", log: {\n transactionHash: log.transactionHash,\n blockHash: log.blockHash,\n blockNumber: log.blockNumber,\n address: log.address,\n data: log.data,\n topics: Object.freeze(log.topics.slice()),\n index: log.index\n } };\n}\nfunction fail() {\n throw new Error(\"this provider should not be used\");\n}\nclass DummyProvider {\n async getNetwork() { return fail(); }\n async getFeeData() { return fail(); }\n async estimateGas(tx) { return fail(); }\n async call(tx) { return fail(); }\n async resolveName(name) { return fail(); }\n // State\n async getBlockNumber() { return fail(); }\n // Account\n async getBalanceOf(address, blockTag) {\n return fail();\n }\n async getTransactionCountOf(address, blockTag) {\n return fail();\n }\n async getCode(address, blockTag) {\n return fail();\n }\n async getStorageAt(address, position, blockTag) {\n return fail();\n }\n // Write\n async broadcastTransaction(signedTx) { return fail(); }\n // Queries\n async getBlock(blockHashOrBlockTag) {\n return fail();\n }\n async getBlockWithTransactions(blockHashOrBlockTag) {\n return fail();\n }\n async getTransaction(hash) {\n return fail();\n }\n async getTransactionReceipt(hash) {\n return fail();\n }\n // Bloom-filter Queries\n async getLogs(filter) {\n return fail();\n }\n // ENS\n async lookupAddress(address) {\n return fail();\n }\n async waitForTransaction(hash, confirms, timeout) {\n return fail();\n }\n async waitForBlock(blockTag) {\n return fail();\n }\n // EventEmitterable\n async on(event, listener) { return fail(); }\n async once(event, listener) { return fail(); }\n async emit(event, ...args) { return fail(); }\n async listenerCount(event) { return fail(); }\n async listeners(event) { return fail(); }\n async off(event, listener) { return fail(); }\n async removeAllListeners(event) { return fail(); }\n async addListener(event, listener) { return fail(); }\n async removeListener(event, listener) { return fail(); }\n}\n// A singleton provider instance that can be used as a placeholder. This\n// allows API that have a Provider added later to not require a null check.\nexport const dummyProvider = new DummyProvider();\n//# sourceMappingURL=provider.js.map","// Belongs to Networks; requires abstract-provider\n// provider requires abstract-provider and network\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Formatter_format, _Formatter_baseBlock;\n/**\n * Formatter\n *\n * This is responsibile for converting much of the various\n * loose network values into a concrete ethers-ready value.\n *\n * For example, converting addresses to checksum addresses,\n * validating a hash is 32 bytes, and so on.\n *\n * By sub-classing this class and providing it in a custom\n * Network object this allows exotic (non-Ethereum) networks\n * to be fairly simple to adapt to ethers.\n */\nimport { getAddress, getCreateAddress } from \"@ethersproject/address\";\nimport { dataLength, dataSlice, isHexString, quantity } from \"@ethersproject/bytes\";\nimport { toHex } from \"@ethersproject/math\";\nimport { Signature } from \"@ethersproject/signing-key\";\nimport { accessListify } from \"@ethersproject/transactions\";\nimport { Block, Log, TransactionReceipt, TransactionResponse } from \"./provider.js\";\nimport { logger } from \"./logger.js\";\nconst BN_MAX_UINT256 = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\n//export type AccessListSet = { address: string, storageKeys: Array };\n//export type AccessList = Array;\n//export type AccessListish = AccessList |\n// Array<[ string, Array ]> |\n// Record>;\nfunction stringify(value) {\n if (typeof (value) !== \"string\") {\n throw new Error(\"invalid string\");\n }\n return value;\n}\nexport class Formatter {\n constructor() {\n _Formatter_format.set(this, void 0);\n _Formatter_baseBlock.set(this, void 0);\n const address = this.address.bind(this);\n const bigNumber = this.bigNumber.bind(this);\n const blockTag = this.blockTag.bind(this);\n const data = this.data.bind(this);\n const hash = this.hash.bind(this);\n const number = this.number.bind(this);\n const uint256 = this.uint256.bind(this);\n const topics = this.arrayOf(hash);\n __classPrivateFieldSet(this, _Formatter_format, {\n address,\n bigNumber,\n blockTag,\n data,\n hash,\n number,\n uint256,\n topics,\n filter: this.object({\n fromBlock: this.allowNull(blockTag, undefined),\n toBlock: this.allowNull(blockTag, undefined),\n blockHash: this.allowNull(hash, undefined),\n address: this.allowNull(address, undefined),\n topics: this.allowNull(topics, undefined)\n }),\n transactionRequest: this.object({\n from: this.allowNull(address),\n type: this.allowNull(number),\n to: this.allowNull(address),\n nonce: this.allowNull(number),\n gasLimit: this.allowNull(uint256),\n gasPrice: this.allowNull(uint256),\n maxFeePerGas: this.allowNull(uint256),\n maxPriorityFeePerGas: this.allowNull(uint256),\n data: this.allowNull(data),\n value: this.allowNull(uint256),\n }),\n transactionResponse: this.object({\n hash: hash,\n index: number,\n type: this.allowNull(number, 0),\n // These can be null for pending blocks\n blockHash: this.allowNull(hash),\n blockNumber: this.allowNull(number),\n // For Legacy transactions, this comes from the v\n chainId: this.allowNull(number),\n from: address,\n to: this.address,\n gasLimit: bigNumber,\n gasPrice: this.allowNull(bigNumber),\n maxFeePerGas: this.allowNull(bigNumber),\n maxPriorityFeePerGas: this.allowNull(bigNumber),\n value: bigNumber,\n data: data,\n nonce: number,\n r: hash,\n s: hash,\n v: number,\n accessList: this.allowNull(this.accessList)\n }, {\n index: [\"transactionIndex\"]\n }),\n }, \"f\");\n __classPrivateFieldSet(this, _Formatter_baseBlock, this.object({\n number: number,\n hash: this.allowNull(hash, null),\n timestamp: number,\n parentHash: hash,\n nonce: this.allowNull(stringify, \"0x0000000000000000\"),\n difficulty: bigNumber,\n gasLimit: bigNumber,\n gasUsed: bigNumber,\n miner: this.allowNull(address, \"0x0000000000000000000000000000000000000000\"),\n extraData: stringify,\n baseFeePerGas: this.allowNull(bigNumber),\n }), \"f\");\n }\n // An address\n address(value) {\n return getAddress(value);\n }\n // An address from a call result; may be zero-padded\n callAddress(value) {\n if (dataLength(value) !== 32 || dataSlice(value, 0, 12) !== \"0x000000000000000000000000\") {\n logger.throwArgumentError(\"invalid call address\", \"value\", value);\n }\n return this.address(dataSlice(value, 12));\n }\n // An address from a transaction (e.g. { from: string, nonce: number })\n contractAddress(value) {\n return getCreateAddress({\n from: this.address(value.from),\n nonce: logger.getNumber(value.nonce, \"value.nonce\")\n });\n }\n // Block Tag\n blockTag(value) {\n if (value == null) {\n return \"latest\";\n }\n switch (value) {\n case \"earliest\":\n return \"0x0\";\n case \"latest\":\n case \"pending\":\n return value;\n }\n if (typeof (value) === \"number\" || (isHexString(value) && dataLength(value) < 32)) {\n return quantity(value);\n }\n return logger.throwArgumentError(\"invalid blockTag\", \"value\", value);\n }\n // Block objects\n block(value, provider) {\n const params = __classPrivateFieldGet(this, _Formatter_baseBlock, \"f\").call(this, value);\n params.transactions = value.transactions.map((t) => this.hash(t));\n return new Block(params, provider);\n }\n blockWithTransactions(value, provider) {\n throw new Error();\n }\n // Transactions\n transactionRequest(value, provider) {\n return __classPrivateFieldGet(this, _Formatter_format, \"f\").transactionRequest(value);\n }\n transactionResponse(value, provider) {\n value = Object.assign({}, value);\n // @TODO: Use the remap feature\n if (value.data == null && value.input != null) {\n value.data = value.input;\n }\n if (value.gasLimit == null && value.gas) {\n value.gasLimit = value.gas;\n }\n value = __classPrivateFieldGet(this, _Formatter_format, \"f\").transactionResponse(value);\n const sig = Signature.fromTransaction(value.r, value.s, value.v);\n value.signature = sig;\n if (value.chainId == null) {\n value.chainId = sig.legacyChainId;\n }\n return new TransactionResponse(value, provider);\n }\n // Receipts\n log(value, provider) {\n const log = this.object({\n address: this.address,\n blockHash: this.hash,\n blockNumber: this.number,\n data: this.data,\n index: this.number,\n removed: this.boolean,\n topics: this.topics,\n transactionHash: this.hash,\n transactionIndex: this.number,\n }, {\n index: [\"logIndex\"]\n })(value);\n return new Log(log, provider);\n }\n receipt(value, provider) {\n const receipt = this.object({\n blockHash: this.hash,\n blockNumber: this.number,\n contractAddress: this.allowNull(this.address),\n cumulativeGasUsed: this.bigNumber,\n from: this.address,\n gasUsed: this.bigNumber,\n logs: this.arrayOf((v) => (this.log(v, provider))),\n logsBloom: this.data,\n root: this.allowNull(this.data),\n status: this.allowNull(this.number),\n to: this.address,\n gasPrice: this.allowNull(this.bigNumber),\n hash: this.hash,\n index: this.number,\n type: this.allowNull(this.number, 0),\n }, {\n hash: [\"transactionHash\"],\n gasPrice: [\"effectiveGasPrice\"],\n index: [\"transactionIndex\"]\n })(value);\n // RSK incorrectly implemented EIP-658, so we munge things a bit here for it\n if (receipt.root != null) {\n if (receipt.root.length <= 4) {\n // Could be 0x00, 0x0, 0x01 or 0x1\n const value = parseInt(receipt.root);\n if (value === 0 || value === 1) {\n // Make sure if both are specified, they match\n if (receipt.status != null && receipt.status !== value) {\n return logger.throwError(\"alt-root-status/status mismatch\", \"BAD_DATA\", {\n value: { root: receipt.root, status: receipt.status }\n });\n }\n receipt.status = value;\n delete receipt.root;\n }\n else {\n return logger.throwError(\"invalid alt-root-status\", \"BAD_DATA\", {\n value: receipt.root\n });\n }\n }\n else if (!isHexString(receipt.root, 32)) {\n // Must be a valid bytes32\n return logger.throwError(\"invalid receipt root hash\", \"BAD_DATA\", {\n value: receipt.root\n });\n }\n }\n //receipt.byzantium = (receipt.root == null);\n return new TransactionReceipt(receipt, provider);\n }\n // Fitlers\n topics(value) {\n return __classPrivateFieldGet(this, _Formatter_format, \"f\").topics(value);\n }\n filter(value) {\n return __classPrivateFieldGet(this, _Formatter_format, \"f\").filter(value);\n }\n filterLog(value) {\n console.log(\"ME\", value);\n return null;\n }\n // Converts a serialized transaction to a TransactionResponse\n transaction(value) {\n throw new Error();\n }\n // Useful utility formatters functions, which if need be use the\n // methods within the formatter to ensure internal compatibility\n // Access List; converts an AccessListish to an AccessList\n accessList(value) {\n return accessListify(value);\n }\n // Converts falsish values to a specific value, otherwise use the formatter. Calls preserve `this`.\n allowFalsish(format, ifFalse) {\n return ((value) => {\n if (!value) {\n return ifFalse;\n }\n return format.call(this, value);\n });\n }\n // Allows null, optionally replacing it with a default value. Calls preserve `this`.\n allowNull(format, ifNull) {\n return ((value) => {\n if (value == null) {\n return ifNull;\n }\n return format.call(this, value);\n });\n }\n // Requires an Array satisfying the formatter. Calls preserves `this`.\n arrayOf(format) {\n return ((array) => {\n if (!Array.isArray(array)) {\n throw new Error(\"not an array\");\n }\n return array.map((i) => format.call(this, i));\n });\n }\n // Requires a value which is a value BigNumber\n bigNumber(value) {\n return logger.getBigInt(value, \"value\");\n }\n uint256(value) {\n const result = this.bigNumber(value);\n if (result < 0 || result > BN_MAX_UINT256) {\n logger.throwArgumentError(\"invalid uint256\", \"value\", value);\n }\n return result;\n }\n // Requires a value which is a value boolean or string equivalent\n boolean(value) {\n switch (value) {\n case true:\n case \"true\":\n return true;\n case false:\n case \"false\":\n return false;\n }\n return logger.throwArgumentError(`invalid boolean; ${JSON.stringify(value)}`, \"value\", value);\n }\n // Requires a value which is a valid hexstring. If dataOrLength is true,\n // the length must be even (i.e. a datahexstring) or if it is a number,\n // specifies teh number of bytes value must represent\n _hexstring(dataOrLength) {\n if (dataOrLength == null) {\n dataOrLength = false;\n }\n return (function (value) {\n if (isHexString(value, dataOrLength)) {\n return value.toLowerCase();\n }\n throw new Error(\"bad hexstring\");\n });\n }\n data(value) {\n if (dataLength(value) == null) {\n logger.throwArgumentError(\"\", \"value\", value);\n }\n return value;\n }\n // Requires a network-native hash\n hash(value) {\n if (dataLength(value) !== 32) {\n logger.throwArgumentError(\"\", \"value\", value);\n }\n return __classPrivateFieldGet(this, _Formatter_format, \"f\").data(value);\n }\n // Requires a valid number, within the IEEE 754 safe range\n number(value) {\n return logger.getNumber(value);\n }\n // Requires an object which matches a fleet of other formatters\n // Any FormatFunc may return `undefined` to have the value omitted\n // from the result object. Calls preserve `this`.\n object(format, altNames) {\n return ((value) => {\n const result = {};\n for (const key in format) {\n let srcKey = key;\n if (altNames && key in altNames && !(srcKey in value)) {\n for (const altKey of altNames[key]) {\n if (altKey in value) {\n srcKey = altKey;\n break;\n }\n }\n }\n try {\n const nv = format[key].call(this, value[srcKey]);\n if (nv !== undefined) {\n result[key] = nv;\n }\n }\n catch (error) {\n const message = (error instanceof Error) ? error.message : \"not-an-error\";\n logger.throwError(`invalid value for value.${key} (${message})`, \"BAD_DATA\", { value });\n }\n }\n return result;\n });\n }\n // Requires a value which matches a network-native storage slot\n storageSlot(value) {\n return toHex(logger.getBigInt(value), 32);\n }\n}\n_Formatter_format = new WeakMap(), _Formatter_baseBlock = new WeakMap();\n//# sourceMappingURL=formatter.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { logger } from \"./logger.js\";\nconst EnsAddress = \"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\";\nexport class NetworkPlugin {\n constructor(name) {\n defineProperties(this, { name });\n }\n clone() {\n return new NetworkPlugin(this.name);\n }\n validate(network) {\n return this;\n }\n}\nexport class GasCostPlugin extends NetworkPlugin {\n constructor(effectiveBlock = 0, costs) {\n super(`org.ethers.plugins.gas-cost#${(effectiveBlock || 0)}`);\n const props = { effectiveBlock };\n function set(name, nullish) {\n let value = (costs || {})[name];\n if (value == null) {\n value = nullish;\n }\n if (typeof (value) !== \"number\") {\n logger.throwArgumentError(`invalud value for ${name}`, \"costs\", costs);\n }\n props[name] = value;\n }\n set(\"txBase\", 21000);\n set(\"txCreate\", 32000);\n set(\"txDataZero\", 4);\n set(\"txDataNonzero\", 16);\n set(\"txAccessListStorageKey\", 1900);\n set(\"txAccessListAddress\", 2400);\n defineProperties(this, props);\n }\n clone() {\n return new GasCostPlugin(this.effectiveBlock, this);\n }\n}\n// Networks shoudl use this plugin to specify the contract address\n// and network necessary to resolve ENS names.\nexport class EnsPlugin extends NetworkPlugin {\n constructor(address, targetNetwork) {\n super(\"org.ethers.plugins.ens\");\n defineProperties(this, {\n address: (address || EnsAddress),\n targetNetwork: ((targetNetwork == null) ? 1 : targetNetwork)\n });\n }\n clone() {\n return new EnsPlugin(this.address, this.targetNetwork);\n }\n validate(network) {\n network.formatter.address(this.address);\n return this;\n }\n}\nexport class MaxPriorityFeePlugin extends NetworkPlugin {\n constructor(priorityFee) {\n super(\"org.ethers.plugins.max-priority-fee\");\n defineProperties(this, {\n priorityFee: logger.getBigInt(priorityFee)\n });\n }\n async getPriorityFee(provider) {\n return this.priorityFee;\n }\n clone() {\n return new MaxPriorityFeePlugin(this.priorityFee);\n }\n}\n//# sourceMappingURL=plugins-network.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Network_props;\nimport { getStore, setStore } from \"@ethersproject/properties\";\nimport { Formatter } from \"./formatter.js\";\nimport { logger } from \"./logger.js\";\nimport { EnsPlugin, GasCostPlugin } from \"./plugins-network.js\";\n/* * * *\n// Networks which operation against an L2 can use this plugin to\n// specify how to access L1, for the purpose of resolving ENS,\n// for example.\nexport class LayerOneConnectionPlugin extends NetworkPlugin {\n readonly provider!: Provider;\n// @TODO: Rename to ChainAccess and allow for connecting to any chain\n constructor(provider: Provider) {\n super(\"org.ethers.plugins.layer-one-connection\");\n defineProperties(this, { provider });\n }\n\n clone(): LayerOneConnectionPlugin {\n return new LayerOneConnectionPlugin(this.provider);\n }\n}\n*/\n/* * * *\nexport class PriceOraclePlugin extends NetworkPlugin {\n readonly address!: string;\n\n constructor(address: string) {\n super(\"org.ethers.plugins.price-oracle\");\n defineProperties(this, { address });\n }\n\n clone(): PriceOraclePlugin {\n return new PriceOraclePlugin(this.address);\n }\n}\n*/\n// Networks or clients with a higher need for security (such as clients\n// that may automatically make CCIP requests without user interaction)\n// can use this plugin to anonymize requests or intercept CCIP requests\n// to notify and/or receive authorization from the user\n/* * * *\nexport type FetchDataFunc = (req: Frozen) => Promise;\nexport class CcipPreflightPlugin extends NetworkPlugin {\n readonly fetchData!: FetchDataFunc;\n\n constructor(fetchData: FetchDataFunc) {\n super(\"org.ethers.plugins.ccip-preflight\");\n defineProperties(this, { fetchData });\n }\n\n clone(): CcipPreflightPlugin {\n return new CcipPreflightPlugin(this.fetchData);\n }\n}\n*/\nconst Networks = new Map();\nconst defaultFormatter = new Formatter();\nexport class Network {\n constructor(name, _chainId, formatter) {\n _Network_props.set(this, void 0);\n const chainId = logger.getBigInt(_chainId);\n if (formatter == null) {\n formatter = defaultFormatter;\n }\n const plugins = new Map();\n __classPrivateFieldSet(this, _Network_props, { name, chainId, formatter, plugins }, \"f\");\n }\n toJSON() {\n return { name: this.name, chainId: this.chainId };\n }\n get name() { return getStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"name\"); }\n set name(value) { setStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"name\", value); }\n get chainId() { return getStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"chainId\"); }\n set chainId(value) { setStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"chainId\", logger.getBigInt(value, \"chainId\")); }\n get formatter() { return getStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"formatter\"); }\n set formatter(value) { setStore(__classPrivateFieldGet(this, _Network_props, \"f\"), \"formatter\", value); }\n get plugins() {\n return Array.from(__classPrivateFieldGet(this, _Network_props, \"f\").plugins.values());\n }\n attachPlugin(plugin) {\n if (this.isFrozen()) {\n throw new Error(\"frozen\");\n }\n if (__classPrivateFieldGet(this, _Network_props, \"f\").plugins.get(plugin.name)) {\n throw new Error(`cannot replace existing plugin: ${plugin.name} `);\n }\n __classPrivateFieldGet(this, _Network_props, \"f\").plugins.set(plugin.name, plugin.validate(this));\n return this;\n }\n getPlugin(name) {\n return (__classPrivateFieldGet(this, _Network_props, \"f\").plugins.get(name)) || null;\n }\n // Gets a list of Plugins which match basename, ignoring any fragment\n getPlugins(basename) {\n return (this.plugins.filter((p) => (p.name.split(\"#\")[0] === basename)));\n }\n clone() {\n const clone = new Network(this.name, this.chainId, this.formatter);\n this.plugins.forEach((plugin) => {\n clone.attachPlugin(plugin.clone());\n });\n return clone;\n }\n freeze() {\n Object.freeze(__classPrivateFieldGet(this, _Network_props, \"f\"));\n return this;\n }\n isFrozen() {\n return Object.isFrozen(__classPrivateFieldGet(this, _Network_props, \"f\"));\n }\n computeIntrinsicGas(tx) {\n const costs = this.getPlugin(\"org.ethers.gas-cost\") || (new GasCostPlugin());\n let gas = costs.txBase;\n if (tx.to == null) {\n gas += costs.txCreate;\n }\n if (tx.data) {\n for (let i = 2; i < tx.data.length; i += 2) {\n if (tx.data.substring(i, i + 2) === \"00\") {\n gas += costs.txDataZero;\n }\n else {\n gas += costs.txDataNonzero;\n }\n }\n }\n if (tx.accessList) {\n const accessList = this.formatter.accessList(tx.accessList);\n for (const addr in accessList) {\n gas += costs.txAccessListAddress + costs.txAccessListStorageKey * accessList[addr].storageKeys.length;\n }\n }\n return gas;\n }\n static from(network) {\n // Default network\n if (network == null) {\n return Network.from(\"homestead\");\n }\n // Canonical name or chain ID\n if (typeof (network) === \"number\") {\n network = BigInt(network);\n }\n if (typeof (network) === \"string\" || typeof (network) === \"bigint\") {\n const networkFunc = Networks.get(network);\n if (networkFunc) {\n return networkFunc();\n }\n if (typeof (network) === \"bigint\") {\n return new Network(\"unknown\", network);\n }\n logger.throwArgumentError(\"unknown network\", \"network\", network);\n }\n // Clonable with network-like abilities\n if (typeof (network.clone) === \"function\") {\n const clone = network.clone();\n //if (typeof(network.name) !== \"string\" || typeof(network.chainId) !== \"number\") {\n //}\n return clone;\n }\n // Networkish\n if (typeof (network) === \"object\") {\n if (typeof (network.name) !== \"string\" || typeof (network.chainId) !== \"number\") {\n logger.throwArgumentError(\"invalid network object name or chainId\", \"network\", network);\n }\n const custom = new Network((network.name), (network.chainId));\n if (network.ensAddress || network.ensNetwork != null) {\n custom.attachPlugin(new EnsPlugin(network.ensAddress, network.ensNetwork));\n }\n //if ((network).layerOneConnection) {\n // custom.attachPlugin(new LayerOneConnectionPlugin((network).layerOneConnection));\n //}\n return custom;\n }\n return logger.throwArgumentError(\"invalid network\", \"network\", network);\n }\n static register(nameOrChainId, networkFunc) {\n if (typeof (nameOrChainId) === \"number\") {\n nameOrChainId = BigInt(nameOrChainId);\n }\n const existing = Networks.get(nameOrChainId);\n if (existing) {\n logger.throwArgumentError(`conflicting network for ${JSON.stringify(existing.name)}`, \"nameOrChainId\", nameOrChainId);\n }\n Networks.set(nameOrChainId, networkFunc);\n }\n}\n_Network_props = new WeakMap();\n//# sourceMappingURL=network.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _PollingBlockSubscriber_instances, _PollingBlockSubscriber_provider, _PollingBlockSubscriber_poller, _PollingBlockSubscriber_interval, _PollingBlockSubscriber_blockNumber, _PollingBlockSubscriber_poll, _OnBlockSubscriber_provider, _OnBlockSubscriber_poll, _PollingOrphanSubscriber_filter, _PollingTransactionSubscriber_hash, _PollingEventSubscriber_instances, _PollingEventSubscriber_provider, _PollingEventSubscriber_filter, _PollingEventSubscriber_poller, _PollingEventSubscriber_blockNumber, _PollingEventSubscriber_poll;\nimport { isHexString } from \"@ethersproject/bytes\";\nimport { logger } from \"./logger.js\";\nfunction copy(obj) {\n return JSON.parse(JSON.stringify(obj));\n}\nexport function getPollingSubscriber(provider, event) {\n if (event === \"block\") {\n return new PollingBlockSubscriber(provider);\n }\n if (isHexString(event, 32)) {\n return new PollingTransactionSubscriber(provider, event);\n }\n return logger.throwError(\"unsupported polling event\", \"UNSUPPORTED_OPERATION\", {\n operation: \"getPollingSubscriber\", info: { event }\n });\n}\n// @TODO: refactor this\nexport class PollingBlockSubscriber {\n constructor(provider) {\n _PollingBlockSubscriber_instances.add(this);\n _PollingBlockSubscriber_provider.set(this, void 0);\n _PollingBlockSubscriber_poller.set(this, void 0);\n _PollingBlockSubscriber_interval.set(this, void 0);\n // The most recent block we have scanned for events. The value -2\n // indicates we still need to fetch an initial block number\n _PollingBlockSubscriber_blockNumber.set(this, void 0);\n __classPrivateFieldSet(this, _PollingBlockSubscriber_provider, provider, \"f\");\n __classPrivateFieldSet(this, _PollingBlockSubscriber_poller, null, \"f\");\n __classPrivateFieldSet(this, _PollingBlockSubscriber_interval, 4000, \"f\");\n __classPrivateFieldSet(this, _PollingBlockSubscriber_blockNumber, -2, \"f\");\n }\n get pollingInterval() { return __classPrivateFieldGet(this, _PollingBlockSubscriber_interval, \"f\"); }\n set pollingInterval(value) { __classPrivateFieldSet(this, _PollingBlockSubscriber_interval, value, \"f\"); }\n start() {\n if (__classPrivateFieldGet(this, _PollingBlockSubscriber_poller, \"f\")) {\n throw new Error(\"subscriber already running\");\n }\n __classPrivateFieldGet(this, _PollingBlockSubscriber_instances, \"m\", _PollingBlockSubscriber_poll).call(this);\n __classPrivateFieldSet(this, _PollingBlockSubscriber_poller, setTimeout(__classPrivateFieldGet(this, _PollingBlockSubscriber_instances, \"m\", _PollingBlockSubscriber_poll).bind(this), __classPrivateFieldGet(this, _PollingBlockSubscriber_interval, \"f\")), \"f\");\n }\n stop() {\n if (!__classPrivateFieldGet(this, _PollingBlockSubscriber_poller, \"f\")) {\n throw new Error(\"subscriber not running\");\n }\n clearTimeout(__classPrivateFieldGet(this, _PollingBlockSubscriber_poller, \"f\"));\n __classPrivateFieldSet(this, _PollingBlockSubscriber_poller, null, \"f\");\n }\n pause(dropWhilePaused) {\n this.stop();\n if (dropWhilePaused) {\n __classPrivateFieldSet(this, _PollingBlockSubscriber_blockNumber, -2, \"f\");\n }\n }\n resume() {\n this.start();\n }\n}\n_PollingBlockSubscriber_provider = new WeakMap(), _PollingBlockSubscriber_poller = new WeakMap(), _PollingBlockSubscriber_interval = new WeakMap(), _PollingBlockSubscriber_blockNumber = new WeakMap(), _PollingBlockSubscriber_instances = new WeakSet(), _PollingBlockSubscriber_poll = async function _PollingBlockSubscriber_poll() {\n const blockNumber = await __classPrivateFieldGet(this, _PollingBlockSubscriber_provider, \"f\").getBlockNumber();\n if (__classPrivateFieldGet(this, _PollingBlockSubscriber_blockNumber, \"f\") === -2) {\n __classPrivateFieldSet(this, _PollingBlockSubscriber_blockNumber, blockNumber, \"f\");\n return;\n }\n // @TODO: Put a cap on the maximum number of events per loop?\n if (blockNumber !== __classPrivateFieldGet(this, _PollingBlockSubscriber_blockNumber, \"f\")) {\n for (let b = __classPrivateFieldGet(this, _PollingBlockSubscriber_blockNumber, \"f\") + 1; b <= blockNumber; b++) {\n __classPrivateFieldGet(this, _PollingBlockSubscriber_provider, \"f\").emit(\"block\", b);\n }\n __classPrivateFieldSet(this, _PollingBlockSubscriber_blockNumber, blockNumber, \"f\");\n }\n __classPrivateFieldSet(this, _PollingBlockSubscriber_poller, setTimeout(__classPrivateFieldGet(this, _PollingBlockSubscriber_instances, \"m\", _PollingBlockSubscriber_poll).bind(this), __classPrivateFieldGet(this, _PollingBlockSubscriber_interval, \"f\")), \"f\");\n};\nexport class OnBlockSubscriber {\n constructor(provider) {\n _OnBlockSubscriber_provider.set(this, void 0);\n _OnBlockSubscriber_poll.set(this, void 0);\n __classPrivateFieldSet(this, _OnBlockSubscriber_provider, provider, \"f\");\n __classPrivateFieldSet(this, _OnBlockSubscriber_poll, (blockNumber) => {\n this._poll(blockNumber, __classPrivateFieldGet(this, _OnBlockSubscriber_provider, \"f\"));\n }, \"f\");\n }\n async _poll(blockNumber, provider) {\n throw new Error(\"sub-classes must override this\");\n }\n start() {\n __classPrivateFieldGet(this, _OnBlockSubscriber_poll, \"f\").call(this, -2);\n __classPrivateFieldGet(this, _OnBlockSubscriber_provider, \"f\").on(\"block\", __classPrivateFieldGet(this, _OnBlockSubscriber_poll, \"f\"));\n }\n stop() {\n __classPrivateFieldGet(this, _OnBlockSubscriber_provider, \"f\").off(\"block\", __classPrivateFieldGet(this, _OnBlockSubscriber_poll, \"f\"));\n }\n pause(dropWhilePaused) { this.stop(); }\n resume() { this.start(); }\n}\n_OnBlockSubscriber_provider = new WeakMap(), _OnBlockSubscriber_poll = new WeakMap();\nexport class PollingOrphanSubscriber extends OnBlockSubscriber {\n constructor(provider, filter) {\n super(provider);\n _PollingOrphanSubscriber_filter.set(this, void 0);\n __classPrivateFieldSet(this, _PollingOrphanSubscriber_filter, copy(filter), \"f\");\n }\n async _poll(blockNumber, provider) {\n console.log(__classPrivateFieldGet(this, _PollingOrphanSubscriber_filter, \"f\"));\n throw new Error(\"@TODO\");\n }\n}\n_PollingOrphanSubscriber_filter = new WeakMap();\nexport class PollingTransactionSubscriber extends OnBlockSubscriber {\n constructor(provider, hash) {\n super(provider);\n _PollingTransactionSubscriber_hash.set(this, void 0);\n __classPrivateFieldSet(this, _PollingTransactionSubscriber_hash, hash, \"f\");\n }\n async _poll(blockNumber, provider) {\n const tx = await provider.getTransactionReceipt(__classPrivateFieldGet(this, _PollingTransactionSubscriber_hash, \"f\"));\n if (tx) {\n provider.emit(__classPrivateFieldGet(this, _PollingTransactionSubscriber_hash, \"f\"), tx);\n }\n }\n}\n_PollingTransactionSubscriber_hash = new WeakMap();\nexport class PollingEventSubscriber {\n constructor(provider, filter) {\n _PollingEventSubscriber_instances.add(this);\n _PollingEventSubscriber_provider.set(this, void 0);\n _PollingEventSubscriber_filter.set(this, void 0);\n _PollingEventSubscriber_poller.set(this, void 0);\n // The most recent block we have scanned for events. The value -2\n // indicates we still need to fetch an initial block number\n _PollingEventSubscriber_blockNumber.set(this, void 0);\n __classPrivateFieldSet(this, _PollingEventSubscriber_provider, provider, \"f\");\n __classPrivateFieldSet(this, _PollingEventSubscriber_filter, copy(filter), \"f\");\n __classPrivateFieldSet(this, _PollingEventSubscriber_poller, __classPrivateFieldGet(this, _PollingEventSubscriber_instances, \"m\", _PollingEventSubscriber_poll).bind(this), \"f\");\n __classPrivateFieldSet(this, _PollingEventSubscriber_blockNumber, -2, \"f\");\n }\n start() {\n if (__classPrivateFieldGet(this, _PollingEventSubscriber_blockNumber, \"f\") === -2) {\n __classPrivateFieldGet(this, _PollingEventSubscriber_provider, \"f\").getBlockNumber().then((blockNumber) => {\n __classPrivateFieldSet(this, _PollingEventSubscriber_blockNumber, blockNumber, \"f\");\n });\n }\n __classPrivateFieldGet(this, _PollingEventSubscriber_provider, \"f\").on(\"block\", __classPrivateFieldGet(this, _PollingEventSubscriber_poller, \"f\"));\n }\n stop() {\n __classPrivateFieldGet(this, _PollingEventSubscriber_provider, \"f\").off(\"block\", __classPrivateFieldGet(this, _PollingEventSubscriber_poller, \"f\"));\n }\n pause(dropWhilePaused) {\n this.stop();\n if (dropWhilePaused) {\n __classPrivateFieldSet(this, _PollingEventSubscriber_blockNumber, -2, \"f\");\n }\n }\n resume() {\n this.start();\n }\n}\n_PollingEventSubscriber_provider = new WeakMap(), _PollingEventSubscriber_filter = new WeakMap(), _PollingEventSubscriber_poller = new WeakMap(), _PollingEventSubscriber_blockNumber = new WeakMap(), _PollingEventSubscriber_instances = new WeakSet(), _PollingEventSubscriber_poll = async function _PollingEventSubscriber_poll(blockNumber) {\n // The initial block hasn't been determined yet\n if (__classPrivateFieldGet(this, _PollingEventSubscriber_blockNumber, \"f\") === -2) {\n return;\n }\n const filter = copy(__classPrivateFieldGet(this, _PollingEventSubscriber_filter, \"f\"));\n filter.fromBlock = __classPrivateFieldGet(this, _PollingEventSubscriber_blockNumber, \"f\") + 1;\n filter.toBlock = blockNumber;\n __classPrivateFieldSet(this, _PollingEventSubscriber_blockNumber, blockNumber, \"f\");\n const logs = await __classPrivateFieldGet(this, _PollingEventSubscriber_provider, \"f\").getLogs(filter);\n for (const log of logs) {\n __classPrivateFieldGet(this, _PollingEventSubscriber_provider, \"f\").emit(__classPrivateFieldGet(this, _PollingEventSubscriber_filter, \"f\"), log);\n }\n};\n//# sourceMappingURL=subscriber-polling.js.map","// @TODO\n// Event coalescence\n// When we register an event with an async value (e.g. address is a Signer\n// or ENS name), we need to add it immeidately for the Event API, but also\n// need time to resolve the address. Upon resolving the address, we need to\n// migrate the listener to the static event. We also need to maintain a map\n// of Signer/ENS name to address so we can sync respond to listenerCount.\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _AbstractProvider_instances, _AbstractProvider_subs, _AbstractProvider_plugins, _AbstractProvider_pausedState, _AbstractProvider_networkPromise, _AbstractProvider_anyNetwork, _AbstractProvider_performCache, _AbstractProvider_nextTimer, _AbstractProvider_timers, _AbstractProvider_disableCcipRead, _AbstractProvider_perform, _AbstractProvider_call, _AbstractProvider_getBlock, _AbstractProvider_hasSub, _AbstractProvider_getSub;\nimport { resolveAddress } from \"@ethersproject/address\";\nimport { concat, dataLength, dataSlice, hexlify, isHexString } from \"@ethersproject/bytes\";\nimport { isCallException } from \"@ethersproject/logger\";\nimport { toArray } from \"@ethersproject/math\";\nimport { defineProperties, EventPayload, resolveProperties } from \"@ethersproject/properties\";\nimport { toUtf8String } from \"@ethersproject/strings\";\nimport { fetchData, FetchRequest } from \"@ethersproject/web\";\nimport { EnsResolver } from \"./ens-resolver.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { FeeData } from \"./provider.js\";\nimport { PollingBlockSubscriber, PollingEventSubscriber, PollingOrphanSubscriber, PollingTransactionSubscriber } from \"./subscriber-polling.js\";\n// Constants\nconst BN_2 = BigInt(2);\nconst MAX_CCIP_REDIRECTS = 10;\nfunction getTag(prefix, value) {\n return prefix + \":\" + JSON.stringify(value, (k, v) => {\n if (typeof (v) === \"bigint\") {\n return `bigint:${v.toString()}`;\n }\n if (typeof (v) === \"string\") {\n return v.toLowerCase();\n }\n // Sort object keys\n if (typeof (v) === \"object\" && !Array.isArray(v)) {\n const keys = Object.keys(v);\n keys.sort();\n return keys.reduce((accum, key) => {\n accum[key] = v[key];\n return accum;\n }, {});\n }\n return v;\n });\n}\nexport class UnmanagedSubscriber {\n constructor(name) { defineProperties(this, { name }); }\n start() { }\n stop() { }\n pause(dropWhilePaused) { }\n resume() { }\n}\nfunction copy(value) {\n return JSON.parse(JSON.stringify(value));\n}\nfunction concisify(items) {\n items = Array.from((new Set(items)).values());\n items.sort();\n return items;\n}\n// Normalize a ProviderEvent into a Subscription\n// @TODO: Make events sync if possible; like block\n//function getSyncSubscription(_event: ProviderEvent): Subscription {\n//}\nasync function getSubscription(_event, provider) {\n if (_event == null) {\n throw new Error(\"invalid event\");\n }\n // Normalize topic array info an EventFilter\n if (Array.isArray(_event)) {\n _event = { topics: _event };\n }\n if (typeof (_event) === \"string\") {\n switch (_event) {\n case \"block\":\n case \"pending\":\n case \"debug\":\n case \"network\": {\n return { type: _event, tag: _event };\n }\n }\n }\n if (isHexString(_event, 32)) {\n const hash = _event.toLowerCase();\n return { type: \"transaction\", tag: getTag(\"tx\", { hash }), hash };\n }\n if (_event.orphan) {\n const event = _event;\n // @TODO: Should lowercase and whatnot things here instead of copy...\n return { type: \"orphan\", tag: getTag(\"orphan\", event), filter: copy(event) };\n }\n if ((_event.address || _event.topics)) {\n const event = _event;\n const filter = {\n topics: ((event.topics || []).map((t) => {\n if (t == null) {\n return null;\n }\n if (Array.isArray(t)) {\n return concisify(t.map((t) => t.toLowerCase()));\n }\n return t.toLowerCase();\n }))\n };\n if (event.address) {\n const addresses = [];\n const promises = [];\n const addAddress = (addr) => {\n if (isHexString(addr)) {\n addresses.push(addr);\n }\n else {\n promises.push((async () => {\n addresses.push(await resolveAddress(addr, provider));\n })());\n }\n };\n if (Array.isArray(event.address)) {\n event.address.forEach(addAddress);\n }\n else {\n addAddress(event.address);\n }\n if (promises.length) {\n await Promise.all(promises);\n }\n filter.address = concisify(addresses.map((a) => a.toLowerCase()));\n }\n return { filter, tag: getTag(\"event\", filter), type: \"event\" };\n }\n return logger.throwArgumentError(\"unknown ProviderEvent\", \"event\", _event);\n}\nfunction getTime() { return (new Date()).getTime(); }\nexport function copyRequest(tx) {\n // @TODO: copy the copy from contracts and use it from this\n return tx;\n}\nexport class AbstractProvider {\n // @TODO: This should be a () => Promise so network can be\n // done when needed; or rely entirely on _detectNetwork?\n constructor(_network) {\n _AbstractProvider_instances.add(this);\n _AbstractProvider_subs.set(this, void 0);\n _AbstractProvider_plugins.set(this, void 0);\n // null=unpaused, true=paused+dropWhilePaused, false=paused\n _AbstractProvider_pausedState.set(this, void 0);\n _AbstractProvider_networkPromise.set(this, void 0);\n _AbstractProvider_anyNetwork.set(this, void 0);\n _AbstractProvider_performCache.set(this, void 0);\n _AbstractProvider_nextTimer.set(this, void 0);\n _AbstractProvider_timers.set(this, void 0);\n _AbstractProvider_disableCcipRead.set(this, void 0);\n if (_network === \"any\") {\n __classPrivateFieldSet(this, _AbstractProvider_anyNetwork, true, \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, null, \"f\");\n }\n else if (_network) {\n const network = Network.from(_network);\n __classPrivateFieldSet(this, _AbstractProvider_anyNetwork, false, \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, Promise.resolve(network), \"f\");\n setTimeout(() => { this.emit(\"network\", network, null); }, 0);\n }\n else {\n __classPrivateFieldSet(this, _AbstractProvider_anyNetwork, false, \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, null, \"f\");\n }\n //this.#approxNumber = -2;\n //this.#approxNumberT0 = 0;\n __classPrivateFieldSet(this, _AbstractProvider_performCache, new Map(), \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_subs, new Map(), \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_plugins, new Map(), \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_pausedState, null, \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_nextTimer, 0, \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_timers, new Map(), \"f\");\n __classPrivateFieldSet(this, _AbstractProvider_disableCcipRead, false, \"f\");\n }\n get plugins() {\n return Array.from(__classPrivateFieldGet(this, _AbstractProvider_plugins, \"f\").values());\n }\n attachPlugin(plugin) {\n if (__classPrivateFieldGet(this, _AbstractProvider_plugins, \"f\").get(plugin.name)) {\n throw new Error(`cannot replace existing plugin: ${plugin.name} `);\n }\n __classPrivateFieldGet(this, _AbstractProvider_plugins, \"f\").set(plugin.name, plugin.validate(this));\n return this;\n }\n getPlugin(name) {\n return (__classPrivateFieldGet(this, _AbstractProvider_plugins, \"f\").get(name)) || null;\n }\n set disableCcipRead(value) { __classPrivateFieldSet(this, _AbstractProvider_disableCcipRead, !!value, \"f\"); }\n get disableCcipRead() { return __classPrivateFieldGet(this, _AbstractProvider_disableCcipRead, \"f\"); }\n async ccipReadFetch(tx, calldata, urls) {\n if (this.disableCcipRead || urls.length === 0 || tx.to == null) {\n return null;\n }\n const sender = tx.to.toLowerCase();\n const data = calldata.toLowerCase();\n const errorMessages = [];\n for (let i = 0; i < urls.length; i++) {\n const url = urls[i];\n // URL expansion\n const href = url.replace(\"{sender}\", sender).replace(\"{data}\", data);\n // If no {data} is present, use POST; otherwise GET\n //const json: string | null = (url.indexOf(\"{data}\") >= 0) ? null: JSON.stringify({ data, sender });\n //const result = await fetchJson({ url: href, errorPassThrough: true }, json, (value, response) => {\n // value.status = response.statusCode;\n // return value;\n //});\n const request = new FetchRequest(href);\n if (url.indexOf(\"{data}\") === -1) {\n request.body = { data, sender };\n }\n let errorMessage = \"unknown error\";\n const resp = await fetchData(request);\n try {\n const result = resp.bodyJson;\n if (result.data) {\n return result.data;\n }\n if (result.message) {\n errorMessage = result.message;\n }\n }\n catch (error) { }\n // 4xx indicates the result is not present; stop\n if (resp.statusCode >= 400 && resp.statusCode < 500) {\n return logger.throwError(`response not found during CCIP fetch: ${errorMessage}`, \"OFFCHAIN_FAULT\", {\n reason: \"404_MISSING_RESOURCE\",\n transaction: tx, info: { url, errorMessage }\n });\n }\n // 5xx indicates server issue; try the next url\n errorMessages.push(errorMessage);\n }\n return logger.throwError(`error encountered during CCIP fetch: ${errorMessages.map((m) => JSON.stringify(m)).join(\", \")}`, \"OFFCHAIN_FAULT\", {\n reason: \"500_SERVER_ERROR\",\n transaction: tx, info: { urls, errorMessages }\n });\n }\n _wrapTransaction(tx, hash, blockNumber) {\n return tx;\n }\n _detectNetwork() {\n return logger.throwError(\"sub-classes must implement this\", \"UNSUPPORTED_OPERATION\", {\n operation: \"_detectNetwork\"\n });\n }\n async _perform(req) {\n return logger.throwError(`unsupported method: ${req.method}`, \"UNSUPPORTED_OPERATION\", {\n operation: req.method,\n info: req\n });\n }\n // State\n async getBlockNumber() {\n return logger.getNumber(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getBlockNumber\" }), \"%response\");\n }\n async _getAddress(address) {\n if (typeof (address) === \"string\") {\n return address;\n }\n return await address.getAddress();\n }\n async _getBlockTag(blockTag) {\n const network = await this.getNetwork();\n if (typeof (blockTag) === \"number\" && Number.isSafeInteger(blockTag) && blockTag < 0) {\n //let blockNumber = await this._getApproxBlockNumber(500);\n let blockNumber = await this.getBlockNumber();\n blockNumber += blockTag;\n if (blockNumber < 0) {\n blockNumber = 0;\n }\n return network.formatter.blockTag(blockNumber);\n }\n return network.formatter.blockTag(blockTag);\n }\n async getNetwork() {\n // No explicit network was set and this is our first time\n if (__classPrivateFieldGet(this, _AbstractProvider_networkPromise, \"f\") == null) {\n // Detect the current network (shared with all calls)\n const detectNetwork = this._detectNetwork().then((network) => {\n this.emit(\"network\", network, null);\n return network;\n }, (error) => {\n // Reset the networkPromise on failure, so we will try again\n if (__classPrivateFieldGet(this, _AbstractProvider_networkPromise, \"f\") === detectNetwork) {\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, null, \"f\");\n }\n throw error;\n });\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, detectNetwork, \"f\");\n return await detectNetwork;\n }\n const networkPromise = __classPrivateFieldGet(this, _AbstractProvider_networkPromise, \"f\");\n const [expected, actual] = await Promise.all([\n networkPromise,\n this._detectNetwork() // The actual connected network\n ]);\n if (expected.chainId !== actual.chainId) {\n if (__classPrivateFieldGet(this, _AbstractProvider_anyNetwork, \"f\")) {\n // The \"any\" network can change, so notify listeners\n this.emit(\"network\", actual, expected);\n // Update the network if something else hasn't already changed it\n if (__classPrivateFieldGet(this, _AbstractProvider_networkPromise, \"f\") === networkPromise) {\n __classPrivateFieldSet(this, _AbstractProvider_networkPromise, Promise.resolve(actual), \"f\");\n }\n }\n else {\n // Otherwise, we do not allow changes to the underlying network\n logger.throwError(`network changed: ${expected.chainId} => ${actual.chainId} `, \"NETWORK_ERROR\", {\n event: \"changed\"\n });\n }\n }\n return expected.clone().freeze();\n }\n async getFeeData() {\n const { block, gasPrice } = await resolveProperties({\n block: this.getBlock(\"latest\"),\n gasPrice: ((async () => {\n try {\n const gasPrice = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getGasPrice\" });\n return logger.getBigInt(gasPrice, \"%response\");\n }\n catch (error) { }\n return null;\n })())\n });\n let maxFeePerGas = null, maxPriorityFeePerGas = null;\n if (block && block.baseFeePerGas) {\n // We may want to compute this more accurately in the future,\n // using the formula \"check if the base fee is correct\".\n // See: https://eips.ethereum.org/EIPS/eip-1559\n maxPriorityFeePerGas = BigInt(\"1500000000\");\n // Allow a network to override their maximum priority fee per gas\n const priorityFeePlugin = (await this.getNetwork()).getPlugin(\"org.ethers.plugins.max-priority-fee\");\n if (priorityFeePlugin) {\n maxPriorityFeePerGas = await priorityFeePlugin.getPriorityFee(this);\n }\n maxFeePerGas = (block.baseFeePerGas * BN_2) + maxPriorityFeePerGas;\n }\n return new FeeData(gasPrice, maxFeePerGas, maxPriorityFeePerGas);\n }\n async _getTransaction(_request) {\n const network = await this.getNetwork();\n // Fill in any addresses\n const request = Object.assign({}, _request, await resolveProperties({\n to: (_request.to ? resolveAddress(_request.to, this) : undefined),\n from: (_request.from ? resolveAddress(_request.from, this) : undefined),\n }));\n return network.formatter.transactionRequest(request);\n }\n async estimateGas(_tx) {\n const transaction = await this._getTransaction(_tx);\n return logger.getBigInt(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"estimateGas\", transaction\n }), \"%response\");\n }\n async call(_tx) {\n const { tx, blockTag } = await resolveProperties({\n tx: this._getTransaction(_tx),\n blockTag: this._getBlockTag(_tx.blockTag)\n });\n return __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_call).call(this, tx, blockTag, _tx.enableCcipRead ? 0 : -1);\n }\n // Account\n async getBalanceOf(_address, _blockTag) {\n const { address, blockTag } = await resolveProperties({\n address: resolveAddress(_address),\n blockTag: this._getBlockTag(_blockTag)\n });\n return logger.getBigInt(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getBalance\", address, blockTag\n }), \"%response\");\n }\n async getTransactionCountOf(_address, _blockTag) {\n const { address, blockTag } = await resolveProperties({\n address: resolveAddress(_address),\n blockTag: this._getBlockTag(_blockTag)\n });\n return logger.getNumber(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getTransactionCount\", address, blockTag\n }), \"%response\");\n }\n async getCode(_address, _blockTag) {\n const { address, blockTag } = await resolveProperties({\n address: resolveAddress(_address),\n blockTag: this._getBlockTag(_blockTag)\n });\n return hexlify(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getCode\", address, blockTag\n }));\n }\n async getStorageAt(_address, _position, _blockTag) {\n const position = logger.getBigInt(_position);\n const { address, blockTag } = await resolveProperties({\n address: resolveAddress(_address),\n blockTag: this._getBlockTag(_blockTag)\n });\n return hexlify(await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getStorageAt\", address, position, blockTag\n }));\n }\n // Write\n async broadcastTransaction(signedTx) {\n throw new Error();\n return {};\n }\n // Queries\n async getBlock(block) {\n const format = (await this.getNetwork()).formatter;\n const params = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_getBlock).call(this, block, false);\n if (params == null) {\n return null;\n }\n return format.block(params, this);\n }\n async getBlockWithTransactions(block) {\n const format = (await this.getNetwork()).formatter;\n const params = __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_getBlock).call(this, block, true);\n if (params == null) {\n return null;\n }\n return format.blockWithTransactions(params, this);\n }\n async getTransaction(hash) {\n const format = (await this.getNetwork()).formatter;\n const params = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getTransaction\", hash });\n return format.transactionResponse(params, this);\n }\n async getTransactionReceipt(hash) {\n const format = (await this.getNetwork()).formatter;\n const receipt = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getTransactionReceipt\", hash });\n if (receipt == null) {\n return null;\n }\n // Some backends did not backfill the effectiveGasPrice into old transactions\n // in the receipt, so we look it up manually and inject it.\n if (receipt.gasPrice == null && receipt.effectiveGasPrice == null) {\n const tx = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getTransaction\", hash });\n receipt.effectiveGasPrice = tx.gasPrice;\n }\n return format.receipt(receipt, this);\n }\n async _getFilter(filter) {\n const lookup = {};\n if (filter.address) {\n if (Array.isArray(filter.address)) {\n lookup.address = Promise.all(filter.address.map((a) => resolveAddress(a, this)));\n }\n else {\n lookup.address = resolveAddress(filter.address, this);\n }\n }\n const addBlockTag = (key) => {\n if (filter[key] == null) {\n return;\n }\n lookup[key] = this._getBlockTag(filter[key]);\n };\n addBlockTag(\"fromBlock\");\n addBlockTag(\"toBlock\");\n const result = await resolveProperties(lookup);\n if (Array.isArray(result.address)) {\n result.address.sort();\n }\n if (filter.blockHash) {\n if (filter.fromBlock || filter.toBlock) {\n throw new Error(\"invalid filter\");\n }\n result.blockHash = filter.blockHash;\n }\n return result;\n }\n // Bloom-filter Queries\n async getLogs(_filter) {\n const { network, filter } = await resolveProperties({\n network: this.getNetwork(),\n filter: this._getFilter(_filter)\n });\n return (await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, { method: \"getLogs\", filter })).map((l) => {\n return network.formatter.log(l, this);\n });\n }\n // ENS\n _getProvider(chainId) {\n return logger.throwError(\"provider cannot connect to target network\", \"UNSUPPORTED_OPERATION\", {\n operation: \"_getProvider()\"\n });\n }\n async getResolver(name) {\n return await EnsResolver.fromName(this, name);\n }\n async getAvatar(name) {\n const resolver = await this.getResolver(name);\n if (resolver) {\n return await resolver.getAvatar();\n }\n return null;\n }\n async resolveName(name) {\n if (typeof (name) === \"string\") {\n const resolver = await this.getResolver(name);\n if (resolver) {\n return await resolver.getAddress();\n }\n }\n else {\n const address = await name.getAddress();\n if (address == null) {\n return logger.throwArgumentError(\"Addressable returned no address\", \"name\", name);\n }\n return address;\n }\n return null;\n }\n async lookupAddress(address) {\n throw new Error();\n //return \"TODO\";\n }\n async waitForTransaction(hash, confirms = 1, timeout) {\n if (confirms === 0) {\n return this.getTransactionReceipt(hash);\n }\n return new Promise(async (resolve, reject) => {\n let timer = null;\n const listener = (async (blockNumber) => {\n try {\n const receipt = await this.getTransactionReceipt(hash);\n if (receipt != null) {\n if (blockNumber - receipt.blockNumber + 1 >= confirms) {\n resolve(receipt);\n this.off(\"block\", listener);\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n return;\n }\n }\n }\n catch (error) {\n console.log(\"EEE\", error);\n }\n this.once(\"block\", listener);\n });\n if (timeout != null) {\n timer = setTimeout(() => {\n if (timer == null) {\n return;\n }\n timer = null;\n this.off(\"block\", listener);\n reject(logger.makeError(\"timeout\", \"TIMEOUT\", {}));\n }, timeout);\n }\n listener(await this.getBlockNumber());\n });\n }\n async waitForBlock(blockTag) {\n throw new Error();\n //return new Block({ }, this);\n }\n _clearTimeout(timerId) {\n const timer = __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").get(timerId);\n if (!timer) {\n return;\n }\n if (timer.timer) {\n clearTimeout(timer.timer);\n }\n __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").delete(timerId);\n }\n _setTimeout(_func, timeout = 0) {\n var _a, _b;\n const timerId = (__classPrivateFieldSet(this, _AbstractProvider_nextTimer, (_b = __classPrivateFieldGet(this, _AbstractProvider_nextTimer, \"f\"), _a = _b++, _b), \"f\"), _a);\n const func = () => {\n __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").delete(timerId);\n _func();\n };\n if (this.paused) {\n __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").set(timerId, { timer: null, func, time: timeout });\n }\n else {\n const timer = setTimeout(func, timeout);\n __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").set(timerId, { timer, func, time: getTime() });\n }\n return timerId;\n }\n _forEachSubscriber(func) {\n for (const sub of __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").values()) {\n func(sub.subscriber);\n }\n }\n // Event API; sub-classes should override this; any supported\n // event filter will have been munged into an EventFilter\n _getSubscriber(sub) {\n switch (sub.type) {\n case \"debug\":\n case \"network\":\n return new UnmanagedSubscriber(sub.type);\n case \"block\":\n return new PollingBlockSubscriber(this);\n case \"event\":\n return new PollingEventSubscriber(this, sub.filter);\n case \"transaction\":\n return new PollingTransactionSubscriber(this, sub.hash);\n case \"orphan\":\n return new PollingOrphanSubscriber(this, sub.filter);\n }\n throw new Error(`unsupported event: ${sub.type}`);\n }\n _recoverSubscriber(oldSub, newSub) {\n for (const sub of __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").values()) {\n if (sub.subscriber === oldSub) {\n if (sub.started) {\n sub.subscriber.stop();\n }\n sub.subscriber = newSub;\n if (sub.started) {\n newSub.start();\n }\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") != null) {\n newSub.pause(__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\"));\n }\n break;\n }\n }\n }\n async on(event, listener) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_getSub).call(this, event);\n sub.listeners.push({ listener, once: false });\n if (!sub.started) {\n sub.subscriber.start();\n sub.started = true;\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") != null) {\n sub.subscriber.pause(__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\"));\n }\n }\n return this;\n }\n async once(event, listener) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_getSub).call(this, event);\n sub.listeners.push({ listener, once: true });\n if (!sub.started) {\n sub.subscriber.start();\n sub.started = true;\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") != null) {\n sub.subscriber.pause(__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\"));\n }\n }\n return this;\n }\n async emit(event, ...args) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_hasSub).call(this, event, args);\n if (!sub) {\n return false;\n }\n ;\n const count = sub.listeners.length;\n sub.listeners = sub.listeners.filter(({ listener, once }) => {\n const payload = new EventPayload(this, (once ? null : listener), event);\n setTimeout(() => { listener.call(this, ...args, payload); }, 0);\n return !once;\n });\n return (count > 0);\n }\n async listenerCount(event) {\n if (event) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_hasSub).call(this, event);\n if (!sub) {\n return 0;\n }\n return sub.listeners.length;\n }\n let total = 0;\n for (const { listeners } of __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").values()) {\n total += listeners.length;\n }\n return total;\n }\n async listeners(event) {\n if (event) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_hasSub).call(this, event);\n if (!sub) {\n return [];\n }\n return sub.listeners.map(({ listener }) => listener);\n }\n let result = [];\n for (const { listeners } of __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").values()) {\n result = result.concat(listeners.map(({ listener }) => listener));\n }\n return result;\n }\n async off(event, listener) {\n const sub = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_hasSub).call(this, event);\n if (!sub) {\n return this;\n }\n if (listener) {\n const index = sub.listeners.map(({ listener }) => listener).indexOf(listener);\n if (index >= 0) {\n sub.listeners.splice(index, 1);\n }\n }\n if (!listener || sub.listeners.length === 0) {\n if (sub.started) {\n sub.subscriber.stop();\n }\n __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").delete(sub.tag);\n }\n return this;\n }\n async removeAllListeners(event) {\n if (event) {\n const { tag, started, subscriber } = await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_getSub).call(this, event);\n if (started) {\n subscriber.stop();\n }\n __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").delete(tag);\n }\n else {\n for (const [tag, { started, subscriber }] of __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\")) {\n if (started) {\n subscriber.stop();\n }\n __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").delete(tag);\n }\n }\n return this;\n }\n // Alias for \"on\"\n async addListener(event, listener) {\n return await this.on(event, listener);\n }\n // Alias for \"off\"\n async removeListener(event, listener) {\n return this.off(event, listener);\n }\n // Sub-classes should override this to shutdown any sockets, etc.\n // but MUST call this super.shutdown.\n async shutdown() {\n // Stop all listeners\n this.removeAllListeners();\n // Shut down all tiemrs\n for (const timerId of __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").keys()) {\n this._clearTimeout(timerId);\n }\n }\n get paused() { return (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") != null); }\n pause(dropWhilePaused) {\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") != null) {\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") == !!dropWhilePaused) {\n return;\n }\n return logger.throwError(\"cannot change pause type; resume first\", \"UNSUPPORTED_OPERATION\", {\n operation: \"pause\"\n });\n }\n this._forEachSubscriber((s) => s.pause(dropWhilePaused));\n __classPrivateFieldSet(this, _AbstractProvider_pausedState, !!dropWhilePaused, \"f\");\n for (const timer of __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").values()) {\n // Clear the timer\n if (timer.timer) {\n clearTimeout(timer.timer);\n }\n // Remaining time needed for when we become unpaused\n timer.time = getTime() - timer.time;\n }\n }\n resume() {\n if (__classPrivateFieldGet(this, _AbstractProvider_pausedState, \"f\") == null) {\n return;\n }\n this._forEachSubscriber((s) => s.resume());\n __classPrivateFieldSet(this, _AbstractProvider_pausedState, null, \"f\");\n for (const timer of __classPrivateFieldGet(this, _AbstractProvider_timers, \"f\").values()) {\n // Remaining time when we were paused\n let timeout = timer.time;\n if (timeout < 0) {\n timeout = 0;\n }\n // Start time (in cause paused, so we con compute remaininf time)\n timer.time = getTime();\n // Start the timer\n setTimeout(timer.func, timeout);\n }\n }\n}\n_AbstractProvider_subs = new WeakMap(), _AbstractProvider_plugins = new WeakMap(), _AbstractProvider_pausedState = new WeakMap(), _AbstractProvider_networkPromise = new WeakMap(), _AbstractProvider_anyNetwork = new WeakMap(), _AbstractProvider_performCache = new WeakMap(), _AbstractProvider_nextTimer = new WeakMap(), _AbstractProvider_timers = new WeakMap(), _AbstractProvider_disableCcipRead = new WeakMap(), _AbstractProvider_instances = new WeakSet(), _AbstractProvider_perform = \n// Shares multiple identical requests made during the same 250ms\nasync function _AbstractProvider_perform(req) {\n // Create a tag\n const tag = getTag(req.method, req);\n let perform = __classPrivateFieldGet(this, _AbstractProvider_performCache, \"f\").get(tag);\n if (!perform) {\n perform = this._perform(req);\n __classPrivateFieldGet(this, _AbstractProvider_performCache, \"f\").set(tag, perform);\n setTimeout(() => {\n if (__classPrivateFieldGet(this, _AbstractProvider_performCache, \"f\").get(tag) === perform) {\n __classPrivateFieldGet(this, _AbstractProvider_performCache, \"f\").delete(tag);\n }\n }, 250);\n }\n return await perform;\n}, _AbstractProvider_call = async function _AbstractProvider_call(tx, blockTag, attempt) {\n if (attempt >= MAX_CCIP_REDIRECTS) {\n logger.throwError(\"CCIP read exceeded maximum redirections\", \"OFFCHAIN_FAULT\", {\n reason: \"TOO_MANY_REDIRECTS\",\n transaction: Object.assign({}, tx, { blockTag, enableCcipRead: true })\n });\n }\n const transaction = copyRequest(tx);\n try {\n return hexlify(await this._perform({ method: \"call\", transaction, blockTag }));\n }\n catch (error) {\n // CCIP Read OffchainLookup\n if (!this.disableCcipRead && isCallException(error) && attempt >= 0 && blockTag === \"latest\" && transaction.to != null && dataSlice(error.data, 0, 4) === \"0x556f1830\") {\n const data = error.data;\n const txSender = await resolveAddress(transaction.to, this);\n // Parse the CCIP Read Arguments\n let ccipArgs;\n try {\n ccipArgs = parseOffchainLookup(dataSlice(error.data, 4));\n }\n catch (error) {\n return logger.throwError(error.message, \"OFFCHAIN_FAULT\", {\n reason: \"BAD_DATA\",\n transaction, info: { data }\n });\n }\n // Check the sender of the OffchainLookup matches the transaction\n if (ccipArgs.sender.toLowerCase() !== txSender.toLowerCase()) {\n return logger.throwError(\"CCIP Read sender mismatch\", \"CALL_EXCEPTION\", {\n data, transaction,\n errorSignature: \"OffchainLookup(address,string[],bytes,bytes4,bytes)\",\n errorName: \"OffchainLookup\",\n errorArgs: ccipArgs.errorArgs\n });\n }\n const ccipResult = await this.ccipReadFetch(transaction, ccipArgs.calldata, ccipArgs.urls);\n if (ccipResult == null) {\n return logger.throwError(\"CCIP Read failed to fetch data\", \"OFFCHAIN_FAULT\", {\n reason: \"FETCH_FAILED\",\n transaction, info: { data: error.data, errorArgs: ccipArgs.errorArgs }\n });\n }\n return __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_call).call(this, {\n to: txSender,\n data: concat([\n ccipArgs.selector, encodeBytes([ccipResult, ccipArgs.extraData])\n ]),\n }, blockTag, attempt + 1);\n }\n throw error;\n }\n}, _AbstractProvider_getBlock = async function _AbstractProvider_getBlock(block, includeTransactions) {\n const format = (await this.getNetwork()).formatter;\n if (isHexString(block, 32)) {\n return await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getBlock\", blockHash: block, includeTransactions\n });\n }\n return await __classPrivateFieldGet(this, _AbstractProvider_instances, \"m\", _AbstractProvider_perform).call(this, {\n method: \"getBlock\", blockTag: format.blockTag(block), includeTransactions\n });\n}, _AbstractProvider_hasSub = async function _AbstractProvider_hasSub(event, emitArgs) {\n let sub = await getSubscription(event, this);\n // This is a log that is removing an existing log; we actually want\n // to emit an orphan event for the removed log\n if (sub.type === \"event\" && emitArgs && emitArgs.length > 0 && emitArgs[0].removed === true) {\n sub = await getSubscription({ orphan: \"drop-log\", log: emitArgs[0] }, this);\n }\n return __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").get(sub.tag) || null;\n}, _AbstractProvider_getSub = async function _AbstractProvider_getSub(event) {\n const subscription = await getSubscription(event, this);\n // Prevent tampering with our tag in any subclass' _getSubscriber\n const tag = subscription.tag;\n let sub = __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").get(tag);\n if (!sub) {\n const subscriber = this._getSubscriber(subscription);\n const addressableMap = new WeakMap();\n const nameMap = new Map();\n sub = { subscriber, tag, addressableMap, nameMap, started: false, listeners: [] };\n __classPrivateFieldGet(this, _AbstractProvider_subs, \"f\").set(tag, sub);\n }\n return sub;\n};\nfunction _parseString(result, start) {\n try {\n const bytes = _parseBytes(result, start);\n if (bytes) {\n return toUtf8String(bytes);\n }\n }\n catch (error) { }\n return null;\n}\nfunction _parseBytes(result, start) {\n if (result === \"0x\") {\n return null;\n }\n try {\n const offset = logger.getNumber(dataSlice(result, start, start + 32));\n const length = logger.getNumber(dataSlice(result, offset, offset + 32));\n return dataSlice(result, offset + 32, offset + 32 + length);\n }\n catch (error) { }\n return null;\n}\nfunction numPad(value) {\n const result = toArray(value);\n if (result.length > 32) {\n throw new Error(\"internal; should not happen\");\n }\n const padded = new Uint8Array(32);\n padded.set(result, 32 - result.length);\n return padded;\n}\nfunction bytesPad(value) {\n if ((value.length % 32) === 0) {\n return value;\n }\n const result = new Uint8Array(Math.ceil(value.length / 32) * 32);\n result.set(value);\n return result;\n}\nconst empty = new Uint8Array([]);\n// ABI Encodes a series of (bytes, bytes, ...)\nfunction encodeBytes(datas) {\n const result = [];\n let byteCount = 0;\n // Add place-holders for pointers as we add items\n for (let i = 0; i < datas.length; i++) {\n result.push(empty);\n byteCount += 32;\n }\n for (let i = 0; i < datas.length; i++) {\n const data = logger.getBytes(datas[i]);\n // Update the bytes offset\n result[i] = numPad(byteCount);\n // The length and padded value of data\n result.push(numPad(data.length));\n result.push(bytesPad(data));\n byteCount += 32 + Math.ceil(data.length / 32) * 32;\n }\n return concat(result);\n}\nconst zeros = \"0x0000000000000000000000000000000000000000000000000000000000000000\";\nfunction parseOffchainLookup(data) {\n const result = {\n sender: \"\", urls: [], calldata: \"\", selector: \"\", extraData: \"\", errorArgs: []\n };\n if (dataLength(data) < 5 * 32) {\n throw new Error(\"insufficient OffchainLookup data\");\n }\n const sender = dataSlice(data, 0, 32);\n if (dataSlice(sender, 0, 12) !== dataSlice(zeros, 0, 12)) {\n throw new Error(\"corrupt OffchainLookup sender\");\n }\n result.sender = dataSlice(sender, 12);\n // Read the URLs from the response\n try {\n const urls = [];\n const urlsOffset = logger.getNumber(dataSlice(data, 32, 64));\n const urlsLength = logger.getNumber(dataSlice(data, urlsOffset, urlsOffset + 32));\n const urlsData = dataSlice(data, urlsOffset + 32);\n for (let u = 0; u < urlsLength; u++) {\n const url = _parseString(urlsData, u * 32);\n if (url == null) {\n throw new Error(\"abort\");\n }\n urls.push(url);\n }\n result.urls = urls;\n }\n catch (error) {\n throw new Error(\"corrupt OffchainLookup urls\");\n }\n // Get the CCIP calldata to forward\n try {\n const calldata = _parseBytes(data, 64);\n if (calldata == null) {\n throw new Error(\"abort\");\n }\n result.calldata = calldata;\n }\n catch (error) {\n throw new Error(\"corrupt OffchainLookup calldata\");\n }\n // Get the callbackSelector (bytes4)\n if (dataSlice(data, 100, 128) !== dataSlice(zeros, 0, 28)) {\n throw new Error(\"corrupt OffchainLookup callbaackSelector\");\n }\n result.selector = dataSlice(data, 96, 100);\n // Get the extra data to send back to the contract as context\n try {\n const extraData = _parseBytes(data, 128);\n if (extraData == null) {\n throw new Error(\"abort\");\n }\n result.extraData = extraData;\n }\n catch (error) {\n throw new Error(\"corrupt OffchainLookup extraData\");\n }\n result.errorArgs = \"sender,urls,calldata,selector,extraData\".split(/,/).map((k) => result[k]);\n return result;\n}\n//# sourceMappingURL=abstract-provider.js.map","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar _AbstractSigner_instances, _AbstractSigner_checkProvider, _AbstractSigner_fromify, _VoidSigner_instances, _VoidSigner_throwUnsupported, _WrappedSigner_signer;\nimport { defineProperties, resolveProperties } from \"@ethersproject/properties\";\nimport { Transaction } from \"@ethersproject/transactions\";\nimport { logger } from \"./logger.js\";\nexport class AbstractSigner {\n constructor(provider) {\n _AbstractSigner_instances.add(this);\n defineProperties(this, { provider: (provider || null) });\n }\n async getBalance(blockTag) {\n return __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"getBalance\").getBalanceOf(await this.getAddress(), blockTag);\n }\n async getTransactionCount(blockTag) {\n return __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"getTransactionCount\").getTransactionCountOf(await this.getAddress(), blockTag);\n }\n async estimateGas(tx) {\n return __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"estimateGas\").estimateGas(await __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_fromify).call(this, tx));\n }\n async call(tx) {\n return __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"call\").call(await __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_fromify).call(this, tx));\n }\n async populateTransaction(tx) {\n const provider = __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"populateTransaction\");\n //let pop: Deferrable = Object.assign({ }, tx);\n let pop = Object.assign({}, tx);\n if (pop.to != null) {\n pop.to = provider.resolveName(pop.to).then((to) => {\n if (to == null) {\n return logger.throwArgumentError(\"transaction to ENS name not configured\", \"tx.to\", pop.to);\n }\n return to;\n });\n }\n if (pop.from != null) {\n const from = pop.from;\n pop.from = Promise.all([\n this.getAddress(),\n this.resolveName(from)\n ]).then(([address, from]) => {\n if (!from || address.toLowerCase() !== from.toLowerCase()) {\n return logger.throwArgumentError(\"transaction from mismatch\", \"tx.from\", from);\n }\n return address;\n });\n }\n if (pop.nonce == null) {\n pop.nonce = this.getTransactionCount();\n }\n pop = resolveProperties(pop);\n if (pop.gasLimit == null) {\n pop.gasLimit = provider.estimateGas(pop);\n }\n pop = resolveProperties(pop);\n //@TODO: Copy logic from AbstractSigner in v5\n return await resolveProperties(pop);\n }\n async resolveName(name) {\n const provider = __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"resolveName\");\n return await provider.resolveName(name);\n }\n async sendTransaction(tx) {\n const provider = __classPrivateFieldGet(this, _AbstractSigner_instances, \"m\", _AbstractSigner_checkProvider).call(this, \"sendTransaction\");\n const txObj = Transaction.from(await this.populateTransaction(tx));\n return await provider.broadcastTransaction(await this.signTransaction(txObj));\n }\n}\n_AbstractSigner_instances = new WeakSet(), _AbstractSigner_checkProvider = function _AbstractSigner_checkProvider(operation) {\n if (this.provider) {\n return this.provider;\n }\n return logger.throwError(\"missing provider\", \"UNSUPPORTED_OPERATION\", { operation });\n}, _AbstractSigner_fromify = async function _AbstractSigner_fromify(tx) {\n tx = Object.assign({}, tx);\n const actions = [];\n if (tx.from != null) {\n const from = tx.from;\n actions.push(Promise.all([\n this.getAddress(),\n this.resolveName(from)\n ]).then(([address, from]) => {\n if (!from || address.toLowerCase() !== from.toLowerCase()) {\n logger.throwArgumentError(\"transaction from mismatch\", \"tx.from\", from);\n }\n tx.from = address;\n }));\n }\n await Promise.all(actions);\n return tx;\n};\nexport class VoidSigner extends AbstractSigner {\n constructor(address, provider) {\n super(provider);\n _VoidSigner_instances.add(this);\n defineProperties(this, { address });\n }\n async getAddress() { return this.address; }\n connect(provider) {\n return new VoidSigner(this.address, provider);\n }\n async signTransaction(tx) {\n __classPrivateFieldGet(this, _VoidSigner_instances, \"m\", _VoidSigner_throwUnsupported).call(this, \"transactions\", \"signTransaction\");\n }\n async signMessage(message) {\n __classPrivateFieldGet(this, _VoidSigner_instances, \"m\", _VoidSigner_throwUnsupported).call(this, \"messages\", \"signMessage\");\n }\n async signTypedData(domain, types, value) {\n __classPrivateFieldGet(this, _VoidSigner_instances, \"m\", _VoidSigner_throwUnsupported).call(this, \"typed-data\", \"signTypedData\");\n }\n}\n_VoidSigner_instances = new WeakSet(), _VoidSigner_throwUnsupported = function _VoidSigner_throwUnsupported(suffix, operation) {\n return logger.throwError(`VoidSigner cannot sign ${suffix}`, \"UNSUPPORTED_OPERATION\", {\n operation\n });\n};\nexport class WrappedSigner extends AbstractSigner {\n //get provider(): null | Provider { return this.#signer.provider; }\n constructor(signer) {\n super(signer.provider);\n _WrappedSigner_signer.set(this, void 0);\n __classPrivateFieldSet(this, _WrappedSigner_signer, signer, \"f\");\n }\n async getAddress() {\n return await __classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").getAddress();\n }\n connect(provider) {\n return new WrappedSigner(__classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").connect(provider));\n }\n async signTransaction(tx) {\n return await __classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").signTransaction(tx);\n }\n async sendTransaction(tx) {\n return await __classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").sendTransaction(tx);\n }\n async signMessage(message) {\n return await __classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").signMessage(message);\n }\n async signTypedData(domain, types, value) {\n return await __classPrivateFieldGet(this, _WrappedSigner_signer, \"f\").signTypedData(domain, types, value);\n }\n}\n_WrappedSigner_signer = new WeakMap();\n//# sourceMappingURL=abstract-signer.js.map","// Show the throttle message only once\nconst shown = new Set();\nexport function showThrottleMessage(service) {\n if (shown.has(service)) {\n return;\n }\n shown.add(service);\n console.log(\"========= NOTICE =========\");\n console.log(`Request-Rate Exceeded for ${service} (this message will not be repeated)`);\n console.log(\"\");\n console.log(\"The default API keys for each service are provided as a highly-throttled,\");\n console.log(\"community resource for low-traffic projects and early prototyping.\");\n console.log(\"\");\n console.log(\"While your application will continue to function, we highly recommended\");\n console.log(\"signing up for your own API keys to improve performance, increase your\");\n console.log(\"request rate/limit and enable other perks, such as metrics and advanced APIs.\");\n console.log(\"\");\n console.log(\"For more details: https:/\\/docs.ethers.io/api-keys/\");\n console.log(\"==========================\");\n}\n//# sourceMappingURL=community.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _FilterIdSubscriber_instances, _FilterIdSubscriber_provider, _FilterIdSubscriber_filterIdPromise, _FilterIdSubscriber_poller, _FilterIdSubscriber_network, _FilterIdSubscriber_poll, _FilterIdSubscriber_teardown, _FilterIdEventSubscriber_event;\nimport { PollingEventSubscriber } from \"./subscriber-polling.js\";\nfunction copy(obj) {\n return JSON.parse(JSON.stringify(obj));\n}\nexport class FilterIdSubscriber {\n constructor(provider) {\n _FilterIdSubscriber_instances.add(this);\n _FilterIdSubscriber_provider.set(this, void 0);\n _FilterIdSubscriber_filterIdPromise.set(this, void 0);\n _FilterIdSubscriber_poller.set(this, void 0);\n _FilterIdSubscriber_network.set(this, void 0);\n __classPrivateFieldSet(this, _FilterIdSubscriber_provider, provider, \"f\");\n __classPrivateFieldSet(this, _FilterIdSubscriber_filterIdPromise, null, \"f\");\n __classPrivateFieldSet(this, _FilterIdSubscriber_poller, __classPrivateFieldGet(this, _FilterIdSubscriber_instances, \"m\", _FilterIdSubscriber_poll).bind(this), \"f\");\n __classPrivateFieldSet(this, _FilterIdSubscriber_network, null, \"f\");\n }\n _subscribe(provider) {\n throw new Error(\"subclasses must override this\");\n }\n _emitResults(provider, result) {\n throw new Error(\"subclasses must override this\");\n }\n _recover(provider) {\n throw new Error(\"subclasses must override this\");\n }\n start() { __classPrivateFieldGet(this, _FilterIdSubscriber_instances, \"m\", _FilterIdSubscriber_poll).call(this, -2); }\n stop() {\n __classPrivateFieldGet(this, _FilterIdSubscriber_instances, \"m\", _FilterIdSubscriber_teardown).call(this);\n __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").off(\"block\", __classPrivateFieldGet(this, _FilterIdSubscriber_poller, \"f\"));\n }\n pause(dropWhilePaused) {\n if (dropWhilePaused) {\n __classPrivateFieldGet(this, _FilterIdSubscriber_instances, \"m\", _FilterIdSubscriber_teardown).call(this);\n }\n __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").off(\"block\", __classPrivateFieldGet(this, _FilterIdSubscriber_poller, \"f\"));\n }\n resume() { this.start(); }\n}\n_FilterIdSubscriber_provider = new WeakMap(), _FilterIdSubscriber_filterIdPromise = new WeakMap(), _FilterIdSubscriber_poller = new WeakMap(), _FilterIdSubscriber_network = new WeakMap(), _FilterIdSubscriber_instances = new WeakSet(), _FilterIdSubscriber_poll = async function _FilterIdSubscriber_poll(blockNumber) {\n try {\n if (__classPrivateFieldGet(this, _FilterIdSubscriber_filterIdPromise, \"f\") == null) {\n __classPrivateFieldSet(this, _FilterIdSubscriber_filterIdPromise, this._subscribe(__classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\")), \"f\");\n }\n const filterId = await __classPrivateFieldGet(this, _FilterIdSubscriber_filterIdPromise, \"f\");\n if (filterId == null) {\n __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\")._recoverSubscriber(this, this._recover(__classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\")));\n return;\n }\n const network = await __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").getNetwork();\n if (!__classPrivateFieldGet(this, _FilterIdSubscriber_network, \"f\")) {\n __classPrivateFieldSet(this, _FilterIdSubscriber_network, network, \"f\");\n }\n if (__classPrivateFieldGet(this, _FilterIdSubscriber_network, \"f\").chainId !== network.chainId) {\n throw new Error(\"chaid changed\");\n }\n const result = await __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").send(\"eth_getFilterChanges\", [filterId]);\n await this._emitResults(__classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\"), result);\n }\n catch (error) {\n console.log(\"@TODO\", error);\n }\n __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").once(\"block\", __classPrivateFieldGet(this, _FilterIdSubscriber_poller, \"f\"));\n}, _FilterIdSubscriber_teardown = function _FilterIdSubscriber_teardown() {\n const filterIdPromise = __classPrivateFieldGet(this, _FilterIdSubscriber_filterIdPromise, \"f\");\n if (filterIdPromise) {\n __classPrivateFieldSet(this, _FilterIdSubscriber_filterIdPromise, null, \"f\");\n filterIdPromise.then((filterId) => {\n __classPrivateFieldGet(this, _FilterIdSubscriber_provider, \"f\").send(\"eth_uninstallFilter\", [filterId]);\n });\n }\n};\nexport class FilterIdEventSubscriber extends FilterIdSubscriber {\n constructor(provider, filter) {\n super(provider);\n _FilterIdEventSubscriber_event.set(this, void 0);\n __classPrivateFieldSet(this, _FilterIdEventSubscriber_event, copy(filter), \"f\");\n }\n _recover(provider) {\n return new PollingEventSubscriber(provider, __classPrivateFieldGet(this, _FilterIdEventSubscriber_event, \"f\"));\n }\n async _subscribe(provider) {\n const filterId = await provider.send(\"eth_newFilter\", [__classPrivateFieldGet(this, _FilterIdEventSubscriber_event, \"f\")]);\n console.log(\"____SUB\", filterId);\n return filterId;\n }\n async _emitResults(provider, results) {\n const network = await provider.getNetwork();\n for (const result of results) {\n const log = network.formatter.log(result, provider);\n provider.emit(__classPrivateFieldGet(this, _FilterIdEventSubscriber_event, \"f\"), log);\n }\n }\n}\n_FilterIdEventSubscriber_event = new WeakMap();\nexport class FilterIdPendingSubscriber extends FilterIdSubscriber {\n async _subscribe(provider) {\n return await provider.send(\"eth_newPendingTransactionFilter\", []);\n }\n async _emitResults(provider, results) {\n const network = await provider.getNetwork();\n for (const result of results) {\n provider.emit(\"pending\", network.formatter.hash(result));\n }\n }\n}\n//# sourceMappingURL=subscriber-filterid.js.map","// @TODO:\n// - Add the batching API\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _JsonRpcApiProvider_nextId, _JsonRpcApiProvider_options, _JsonRpcProvider_connect, _JsonRpcProvider_pollingInterval;\n// https://playground.open-rpc.org/?schemaUrl=https://raw.githubusercontent.com/ethereum/eth1.0-apis/assembled-spec/openrpc.json&uiSchema%5BappBar%5D%5Bui:splitView%5D=true&uiSchema%5BappBar%5D%5Bui:input%5D=false&uiSchema%5BappBar%5D%5Bui:examplesDropdown%5D=false\nimport { resolveAddress } from \"@ethersproject/address\";\nimport { hexlify, isHexString, quantity } from \"@ethersproject/bytes\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { TypedDataEncoder } from \"@ethersproject/hash\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nimport { accessListify } from \"@ethersproject/transactions\";\nimport { fetchData, FetchRequest } from \"@ethersproject/web\";\nimport { AbstractProvider, UnmanagedSubscriber } from \"./abstract-provider.js\";\nimport { Network } from \"./network.js\";\nimport { FilterIdEventSubscriber, FilterIdPendingSubscriber } from \"./subscriber-filterid.js\";\nimport { logger } from \"./logger.js\";\nfunction copy(value) {\n return JSON.parse(JSON.stringify(value));\n}\nconst Primitive = \"bigint,boolean,function,number,string,symbol\".split(/,/g);\n//const Methods = \"getAddress,then\".split(/,/g);\nfunction deepCopy(value) {\n if (value == null || Primitive.indexOf(typeof (value)) >= 0) {\n return value;\n }\n // Keep any Addressable\n if (typeof (value.getAddress) === \"function\") {\n return value;\n }\n if (Array.isArray(value)) {\n return (value.map(deepCopy));\n }\n if (typeof (value) === \"object\") {\n return Object.keys(value).reduce((accum, key) => {\n accum[key] = value[key];\n return accum;\n }, {});\n }\n throw new Error(`should not happen: ${value} (${typeof (value)})`);\n}\nfunction getLowerCase(value) {\n if (value) {\n return value.toLowerCase();\n }\n return value;\n}\nfunction isPollable(value) {\n return (value && typeof (value.pollingInterval) === \"number\");\n}\nconst defaultOptions = {\n // Default to use filter ID (the FilterIdSubscriber will\n // fallback onto polling if subscription fails)\n polling: false,\n // Maximum batch size (in bytes)\n batchMaxSize: (1 << 20),\n // How long to wait before dispatching a new batch\n batchStallTime: 250,\n};\n// @TODO: Unchecked Signers\nexport class JsonRpcSigner {\n constructor(provider, address) {\n defineProperties(this, { provider, address });\n }\n connect(provider) {\n return logger.throwError(\"cannot reconnect JsonRpcSigner\", \"UNSUPPORTED_OPERATION\", {\n operation: \"signer.connect\"\n });\n }\n async getAddress() {\n return this.address;\n }\n async getNetwork() {\n return await this.provider.getNetwork();\n }\n async getFeeData() {\n return await this.provider.getFeeData();\n }\n async estimateGas(tx) {\n return await this.provider.estimateGas(tx);\n }\n async call(tx) {\n return await this.provider.call(tx);\n }\n async resolveName(name) {\n return await this.provider.resolveName(name);\n }\n async getBalance(blockTag) {\n return await this.provider.getBalanceOf(this.address);\n }\n async getTransactionCount(blockTag) {\n return await this.provider.getTransactionCountOf(this.address);\n }\n // Returns just the hash of the transaction after sent, which is what\n // the bare JSON-RPC API does;\n async sendUncheckedTransaction(_tx) {\n const tx = deepCopy(_tx);\n const promises = [];\n // Make sure the from matches the sender\n if (tx.from) {\n const _from = tx.from;\n promises.push((async () => {\n const from = await resolveAddress(_from, this.provider);\n if (from == null || from.toLowerCase() !== this.address.toLowerCase()) {\n logger.throwArgumentError(\"from address mismatch\", \"transaction\", _tx);\n }\n tx.from = from;\n })());\n }\n else {\n tx.from = this.address;\n }\n // The JSON-RPC for eth_sendTransaction uses 90000 gas; if the user\n // wishes to use this, it is easy to specify explicitly, otherwise\n // we look it up for them.\n if (tx.gasLimit == null) {\n promises.push((async () => {\n tx.gasLimit = await this.provider.estimateGas(Object.assign(Object.assign({}, tx), { from: this.address }));\n })());\n }\n // The address may be an ENS name or Addressable\n if (tx.to != null) {\n const _to = tx.to;\n promises.push((async () => {\n tx.to = await resolveAddress(_to, this.provider);\n })());\n }\n // Wait until all of our properties are filled in\n if (promises.length) {\n await Promise.all(promises);\n }\n const hexTx = this.provider.getRpcTransaction(tx);\n return this.provider.send(\"eth_sendTransaction\", [hexTx]);\n }\n async sendTransaction(tx) {\n // This cannot be mined any earlier than any recent block\n const blockNumber = await this.provider.getBlockNumber();\n // Send the transaction\n const hash = await this.sendUncheckedTransaction(tx);\n // Unfortunately, JSON-RPC only provides and opaque transaction hash\n // for a response, and we need the actual transaction, so we poll\n // for it; it should show up very quickly\n return await (new Promise((resolve, reject) => {\n const checkTx = async (duration) => {\n // Try getting the transaction\n const tx = await this.provider.getTransaction(hash);\n if (tx != null) {\n resolve(this.provider._wrapTransaction(tx, hash, blockNumber));\n return;\n }\n // Wait another 4 seconds\n this.provider._setTimeout(() => { checkTx(4000); }, duration);\n };\n checkTx(1000);\n }));\n }\n async signTransaction(_tx) {\n const tx = deepCopy(_tx);\n // Make sure the from matches the sender\n if (tx.from) {\n const from = await resolveAddress(tx.from, this.provider);\n if (from == null || from.toLowerCase() !== this.address.toLowerCase()) {\n return logger.throwArgumentError(\"from address mismatch\", \"transaction\", _tx);\n }\n tx.from = from;\n }\n else {\n tx.from = this.address;\n }\n const hexTx = this.provider.getRpcTransaction(tx);\n return await this.provider.send(\"eth_sign_Transaction\", [hexTx]);\n }\n async signMessage(_message) {\n const message = ((typeof (_message) === \"string\") ? toUtf8Bytes(_message) : _message);\n return await this.provider.send(\"personal_sign\", [\n hexlify(message), this.address.toLowerCase()\n ]);\n }\n async signTypedData(domain, types, _value) {\n const value = deepCopy(_value);\n // Populate any ENS names (in-place)\n const populated = await TypedDataEncoder.resolveNames(domain, types, value, async (value) => {\n const address = await resolveAddress(value);\n if (address == null) {\n return logger.throwArgumentError(\"TypedData does not support null address\", \"value\", value);\n }\n return address;\n });\n return await this.provider.send(\"eth_signTypedData_v4\", [\n this.address.toLowerCase(),\n JSON.stringify(TypedDataEncoder.getPayload(populated.domain, types, populated.value))\n ]);\n }\n async unlock(password) {\n return this.provider.send(\"personal_unlockAccount\", [\n this.address.toLowerCase(), password, null\n ]);\n }\n // https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign\n async _legacySignMessage(_message) {\n const message = ((typeof (_message) === \"string\") ? toUtf8Bytes(_message) : _message);\n return await this.provider.send(\"eth_sign\", [\n this.address.toLowerCase(), hexlify(message)\n ]);\n }\n}\nexport class JsonRpcApiProvider extends AbstractProvider {\n constructor(network) {\n super(network);\n _JsonRpcApiProvider_nextId.set(this, void 0);\n _JsonRpcApiProvider_options.set(this, void 0);\n __classPrivateFieldSet(this, _JsonRpcApiProvider_nextId, 1, \"f\");\n __classPrivateFieldSet(this, _JsonRpcApiProvider_options, Object.assign({}, defaultOptions), \"f\");\n }\n _getOptions(key) {\n return __classPrivateFieldGet(this, _JsonRpcApiProvider_options, \"f\")[key];\n }\n _setOptions(options) {\n // Validate all the options\n for (const _key in options) {\n const key = _key;\n const value = options[key];\n if (typeof (value) !== typeof (__classPrivateFieldGet(this, _JsonRpcApiProvider_options, \"f\")[key])) {\n return logger.throwArgumentError(\"invalid option value\", `options.${key}`, value);\n }\n }\n // Update the values\n for (const _key in options) {\n const key = _key;\n __classPrivateFieldGet(this, _JsonRpcApiProvider_options, \"f\")[key] = (options[key]);\n }\n }\n prepareRequest(method, params) {\n var _a, _b;\n return {\n method, params, id: (__classPrivateFieldSet(this, _JsonRpcApiProvider_nextId, (_b = __classPrivateFieldGet(this, _JsonRpcApiProvider_nextId, \"f\"), _a = _b++, _b), \"f\"), _a), jsonrpc: \"2.0\"\n };\n }\n // Sends the payload to the backend\n //async sendPayload(payload: any): Promise {\n // throw new Error(\"sub-class must implement this\");\n //}\n async send(method, params) {\n // @TODO: This should construct and queue the payload\n throw new Error(\"sub-class must implement this\");\n }\n async getSigner(address = 0) {\n const network = await this.getNetwork();\n const accounts = await this.send(\"eth_accounts\", []);\n // Account index\n if (typeof (address) === \"number\") {\n if (address > accounts.length) {\n throw new Error(\"no such account\");\n }\n return new JsonRpcSigner(this, accounts[address]);\n }\n // Account address\n address = network.formatter.address(address);\n for (const account of accounts) {\n if (network.formatter.address(account) === account) {\n return new JsonRpcSigner(this, account);\n }\n }\n throw new Error(\"invalid account\");\n }\n // Sub-classes can override this; it detects the *actual* network we\n // are connected to\n async _detectNetwork() {\n return Network.from(logger.getBigInt(await this._perform({ method: \"chainId\" })));\n }\n _getSubscriber(sub) {\n // Pending Filters aren't availble via polling\n if (sub.type === \"pending\") {\n return new FilterIdPendingSubscriber(this);\n }\n if (sub.type === \"event\") {\n return new FilterIdEventSubscriber(this, sub.filter);\n }\n // Orphaned Logs are handled automatically, by the filter, since\n // logs with removed are emitted by it\n if (sub.type === \"orphan\" && sub.filter.orphan === \"drop-log\") {\n return new UnmanagedSubscriber(\"orphan\");\n }\n return super._getSubscriber(sub);\n }\n getRpcTransaction(tx) {\n const result = {};\n // JSON-RPC now requires numeric values to be \"quantity\" values\n [\"chainId\", \"gasLimit\", \"gasPrice\", \"type\", \"maxFeePerGas\", \"maxPriorityFeePerGas\", \"nonce\", \"value\"].forEach((key) => {\n if (tx[key] == null) {\n return;\n }\n let dstKey = key;\n if (key === \"gasLimit\") {\n dstKey = \"gas\";\n }\n result[dstKey] = quantity(tx[key]);\n });\n // Make sure addresses and data are lowercase\n [\"from\", \"to\", \"data\"].forEach((key) => {\n if (tx[key] == null) {\n return;\n }\n result[key] = hexlify(tx[key]);\n });\n // Normalize the access list object\n if (tx.accessList) {\n result[\"accessList\"] = accessListify(tx.accessList);\n }\n return result;\n }\n getRpcRequest(req) {\n switch (req.method) {\n case \"chainId\":\n return { method: \"eth_chainId\", args: [] };\n case \"getBlockNumber\":\n return { method: \"eth_blockNumber\", args: [] };\n case \"getGasPrice\":\n return { method: \"eth_gasPrice\", args: [] };\n case \"getBalance\":\n return {\n method: \"eth_getBalance\",\n args: [getLowerCase(req.address), req.blockTag]\n };\n case \"getTransactionCount\":\n return {\n method: \"eth_getTransactionCount\",\n args: [getLowerCase(req.address), req.blockTag]\n };\n case \"getCode\":\n return {\n method: \"eth_getCode\",\n args: [getLowerCase(req.address), req.blockTag]\n };\n case \"getStorageAt\":\n return {\n method: \"eth_getStorageAt\",\n args: [\n getLowerCase(req.address),\n (\"0x\" + req.position.toString(16)),\n req.blockTag\n ]\n };\n case \"sendTransaction\":\n return {\n method: \"eth_sendRawTransaction\",\n args: [req.signedTransaction]\n };\n case \"getBlock\":\n if (\"blockTag\" in req) {\n return {\n method: \"eth_getBlockByNumber\",\n args: [req.blockTag, !!req.includeTransactions]\n };\n }\n else if (\"blockHash\" in req) {\n return {\n method: \"eth_getBlockByHash\",\n args: [req.blockHash, !!req.includeTransactions]\n };\n }\n break;\n case \"getTransaction\":\n return {\n method: \"eth_getTransactionByHash\",\n args: [req.hash]\n };\n case \"getTransactionReceipt\":\n return {\n method: \"eth_getTransactionReceipt\",\n args: [req.hash]\n };\n case \"call\":\n return {\n method: \"eth_call\",\n args: [this.getRpcTransaction(req.transaction), req.blockTag]\n };\n case \"estimateGas\": {\n return {\n method: \"eth_estimateGas\",\n args: [this.getRpcTransaction(req.transaction)]\n };\n }\n case \"getLogs\":\n if (req.filter && req.filter.address != null) {\n if (Array.isArray(req.filter.address)) {\n req.filter.address = req.filter.address.map(getLowerCase);\n }\n else {\n req.filter.address = getLowerCase(req.filter.address);\n }\n }\n return { method: \"eth_getLogs\", args: [req.filter] };\n }\n return null;\n }\n getRpcError(method, args, error) {\n if (method === \"eth_call\") {\n const result = spelunkData(error);\n if (result) {\n // @TODO: Extract errorSignature, errorName, errorArgs, reason if\n // it is Error(string) or Panic(uint25)\n return logger.makeError(\"execution reverted during JSON-RPC call\", \"CALL_EXCEPTION\", {\n data: result.data,\n transaction: args[0]\n });\n }\n return logger.makeError(\"missing revert data during JSON-RPC call\", \"CALL_EXCEPTION\", {\n data: \"0x\", transaction: args[0], info: { error }\n });\n }\n if (method === \"eth_estimateGas\") {\n }\n const message = JSON.stringify(spelunkMessage(error));\n if (message.match(/insufficient funds|base fee exceeds gas limit/)) {\n return logger.makeError(\"insufficient funds for intrinsic transaction cost\", \"INSUFFICIENT_FUNDS\", {\n transaction: args[0]\n });\n }\n if (message.match(/nonce/) && message.match(/too low/)) {\n return logger.makeError(\"nonce has already been used\", \"NONCE_EXPIRED\", {\n transaction: args[0]\n });\n }\n // \"replacement transaction underpriced\"\n if (message.match(/replacement transaction/) && message.match(/underpriced/)) {\n return logger.makeError(\"replacement fee too low\", \"REPLACEMENT_UNDERPRICED\", {\n transaction: args[0]\n });\n }\n if (message.match(/only replay-protected/)) {\n return logger.makeError(\"legacy pre-eip-155 transactions not supported\", \"UNSUPPORTED_OPERATION\", {\n operation: method, info: { transaction: args[0] }\n });\n }\n if (method === \"estimateGas\" && message.match(/gas required exceeds allowance|always failing transaction|execution reverted/)) {\n return logger.makeError(\"cannot estimate gas; transaction may fail or may require manual gas limit\", \"UNPREDICTABLE_GAS_LIMIT\", {\n transaction: args[0]\n });\n }\n return error;\n }\n async _perform(req) {\n // Legacy networks do not like the type field being passed along (which\n // is fair), so we delete type if it is 0 and a non-EIP-1559 network\n if (req.method === \"call\" || req.method === \"estimateGas\") {\n let tx = req.transaction;\n if (tx && tx.type != null && logger.getBigInt(tx.type)) {\n // If there are no EIP-1559 properties, it might be non-EIP-a559\n if (tx.maxFeePerGas == null && tx.maxPriorityFeePerGas == null) {\n const feeData = await this.getFeeData();\n if (feeData.maxFeePerGas == null && feeData.maxPriorityFeePerGas == null) {\n // Network doesn't know about EIP-1559 (and hence type)\n req = Object.assign({}, req, {\n transaction: Object.assign({}, tx, { type: undefined })\n });\n }\n }\n }\n }\n const request = this.getRpcRequest(req);\n if (request != null) {\n this.emit(\"debug\", { type: \"sendRequest\", request });\n try {\n const result = await this.send(request.method, request.args);\n //console.log(\"RR\", result);\n this.emit(\"debug\", { type: \"getResponse\", result });\n return result;\n }\n catch (error) {\n this.emit(\"debug\", { type: \"getError\", error });\n throw this.getRpcError(request.method, request.args, error);\n }\n }\n return super._perform(req);\n }\n}\n_JsonRpcApiProvider_nextId = new WeakMap(), _JsonRpcApiProvider_options = new WeakMap();\nexport class JsonRpcProvider extends JsonRpcApiProvider {\n constructor(url, network) {\n if (url == null) {\n url = \"http:/\\/localhost:8545\";\n }\n super(network);\n _JsonRpcProvider_connect.set(this, void 0);\n _JsonRpcProvider_pollingInterval.set(this, void 0);\n if (typeof (url) === \"string\") {\n __classPrivateFieldSet(this, _JsonRpcProvider_connect, { request: new FetchRequest(url) }, \"f\");\n }\n else {\n __classPrivateFieldSet(this, _JsonRpcProvider_connect, Object.assign({}, url), \"f\");\n __classPrivateFieldGet(this, _JsonRpcProvider_connect, \"f\").request = __classPrivateFieldGet(this, _JsonRpcProvider_connect, \"f\").request.clone();\n }\n __classPrivateFieldSet(this, _JsonRpcProvider_pollingInterval, 4000, \"f\");\n }\n async send(method, params) {\n params = copy(params);\n // Configure a POST connection for the requested method\n const connection = Object.assign({}, __classPrivateFieldGet(this, _JsonRpcProvider_connect, \"f\"));\n connection.request = connection.request.clone();\n connection.request.body = this.prepareRequest(method, params);\n const result = (await fetchData(connection)).bodyJson;\n if (\"error\" in result) {\n return logger.throwError(\"error from JSON-RPC\", \"UNKNOWN_ERROR\", {\n result\n });\n }\n return result.result;\n }\n get pollingInterval() { return __classPrivateFieldGet(this, _JsonRpcProvider_pollingInterval, \"f\"); }\n set pollingInterval(value) {\n if (!Number.isInteger(value) || value < 0) {\n throw new Error(\"invalid interval\");\n }\n __classPrivateFieldSet(this, _JsonRpcProvider_pollingInterval, value, \"f\");\n this._forEachSubscriber((sub) => {\n if (isPollable(sub)) {\n sub.pollingInterval = __classPrivateFieldGet(this, _JsonRpcProvider_pollingInterval, \"f\");\n }\n });\n }\n}\n_JsonRpcProvider_connect = new WeakMap(), _JsonRpcProvider_pollingInterval = new WeakMap();\n// This class should only be used when it is not possible for the\n// underlying network to change, such as with INFURA. If you are\n// using MetaMask or some other client which allows users to change\n// their network DO NOT USE THIS. Bad things will happen.\nexport class StaticJsonRpcProvider extends JsonRpcProvider {\n constructor(url, network) {\n super(url, network);\n defineProperties(this, { network });\n }\n async _detectNetwork() {\n return this.network;\n }\n}\nfunction spelunkData(value) {\n if (value == null) {\n return null;\n }\n // These *are* the droids we're looking for.\n if (typeof (value.message) === \"string\" && value.message.match(\"reverted\") && isHexString(value.data)) {\n return { message: value.message, data: value.data };\n }\n // Spelunk further...\n if (typeof (value) === \"object\") {\n for (const key in value) {\n const result = spelunkData(value[key]);\n if (result) {\n return result;\n }\n }\n return null;\n }\n // Might be a JSON string we can further descend...\n if (typeof (value) === \"string\") {\n try {\n return spelunkData(JSON.parse(value));\n }\n catch (error) { }\n }\n return null;\n}\nfunction _spelunkMessage(value, result) {\n if (value == null) {\n return;\n }\n // These *are* the droids we're looking for.\n if (typeof (value.message) === \"string\") {\n result.push(value.message);\n }\n // Spelunk further...\n if (typeof (value) === \"object\") {\n for (const key in value) {\n _spelunkMessage(value[key], result);\n }\n }\n // Might be a JSON string we can further descend...\n if (typeof (value) === \"string\") {\n try {\n return _spelunkMessage(JSON.parse(value), result);\n }\n catch (error) { }\n }\n}\nfunction spelunkMessage(value) {\n const result = [];\n _spelunkMessage(value, result);\n return result;\n}\n//# sourceMappingURL=provider-jsonrpc.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { FetchRequest } from \"@ethersproject/web\";\nimport { showThrottleMessage } from \"./community.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { StaticJsonRpcProvider } from \"./provider-jsonrpc.js\";\nconst defaultApiKey = \"9f7d929b018cdffb338517efa06f58359e86ff1ffd350bc889738523659e7972\";\nfunction getHost(name) {\n switch (name) {\n case \"homestead\":\n return \"rpc.ankr.com/eth\";\n case \"matic\":\n return \"rpc.ankr.com/polygon\";\n case \"arbitrum\":\n return \"rpc.ankr.com/arbitrum\";\n }\n return logger.throwArgumentError(\"unsupported network\", \"network\", name);\n}\nexport class AnkrProvider extends StaticJsonRpcProvider {\n constructor(_network = \"homestead\", apiKey) {\n const network = Network.from(_network);\n if (apiKey == null) {\n apiKey = defaultApiKey;\n }\n const connection = AnkrProvider.getConnection(network, apiKey);\n super(connection, network);\n defineProperties(this, { apiKey });\n // Ankr does not support filterId, so we force polling\n super._setOptions({ polling: true });\n }\n _getProvider(chainId) {\n try {\n return new AnkrProvider(chainId, this.apiKey);\n }\n catch (error) { }\n return super._getProvider(chainId);\n }\n static getConnection(network, apiKey) {\n if (apiKey == null) {\n apiKey = defaultApiKey;\n }\n const request = new FetchRequest(`https:/\\/${getHost(network.name)}/${apiKey}`);\n request.allowGzip = true;\n const throttleRetry = async (request, response, attempt) => {\n if (apiKey === defaultApiKey) {\n showThrottleMessage(\"AnkrProvider\");\n }\n return true;\n };\n return { request, throttleRetry };\n }\n isCommunityResource() {\n return (this.apiKey === defaultApiKey);\n }\n}\n//# sourceMappingURL=provider-ankr.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { FetchRequest } from \"@ethersproject/web\";\nimport { showThrottleMessage } from \"./community.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { StaticJsonRpcProvider } from \"./provider-jsonrpc.js\";\nconst defaultApiKey = \"_gg7wSSi0KMBsdKnGVfHDueq6xMB9EkC\";\nfunction getHost(name) {\n switch (name) {\n case \"homestead\":\n return \"eth-mainnet.alchemyapi.io\";\n case \"ropsten\":\n return \"eth-ropsten.alchemyapi.io\";\n case \"rinkeby\":\n return \"eth-rinkeby.alchemyapi.io\";\n case \"goerli\":\n return \"eth-goerli.alchemyapi.io\";\n case \"kovan\":\n return \"eth-kovan.alchemyapi.io\";\n case \"matic\":\n return \"polygon-mainnet.g.alchemy.com\";\n case \"maticmum\":\n return \"polygon-mumbai.g.alchemy.com\";\n case \"arbitrum\":\n return \"arb-mainnet.g.alchemy.com\";\n case \"arbitrum-rinkeby\":\n return \"arb-rinkeby.g.alchemy.com\";\n case \"optimism\":\n return \"opt-mainnet.g.alchemy.com\";\n case \"optimism-kovan\":\n return \"opt-kovan.g.alchemy.com\";\n }\n return logger.throwArgumentError(\"unsupported network\", \"network\", name);\n}\nexport class AlchemyProvider extends StaticJsonRpcProvider {\n constructor(_network = \"homestead\", apiKey) {\n const network = Network.from(_network);\n if (apiKey == null) {\n apiKey = defaultApiKey;\n }\n super(AlchemyProvider.getConnection(network, apiKey), network);\n defineProperties(this, { apiKey });\n }\n _getProvider(chainId) {\n try {\n return new AlchemyProvider(chainId, this.apiKey);\n }\n catch (error) { }\n return super._getProvider(chainId);\n }\n isCommunityResource() {\n return (this.apiKey === defaultApiKey);\n }\n static getConnection(network, apiKey) {\n if (apiKey == null) {\n apiKey = defaultApiKey;\n }\n const request = new FetchRequest(`https:/\\/${getHost(network.name)}/v2/${apiKey}`);\n request.allowGzip = true;\n const throttleRetry = async (request, response, attempt) => {\n if (apiKey === defaultApiKey) {\n showThrottleMessage(\"alchemy\");\n }\n return true;\n };\n return { request, throttleRetry };\n }\n}\n//# sourceMappingURL=provider-alchemy.js.map","import { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { StaticJsonRpcProvider } from \"./provider-jsonrpc.js\";\nexport class CloudflareProvider extends StaticJsonRpcProvider {\n constructor(_network = \"homestead\") {\n const network = Network.from(_network);\n if (network.name !== \"homestead\") {\n return logger.throwArgumentError(\"unsupported network\", \"network\", _network);\n }\n super(\"https:/\\/cloudflare-eth.com/\", network);\n }\n}\n//# sourceMappingURL=provider-cloudflare.js.map","import { hexlify, isHexString, quantity } from \"@ethersproject/bytes\";\nimport { isError } from \"@ethersproject/logger\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { toUtf8String } from \"@ethersproject/strings\";\nimport { fetchData, FetchRequest } from \"@ethersproject/web\";\nif (false) {\n console.log(isHexString, isError);\n} // @TODO\nimport { AbstractProvider } from \"./abstract-provider.js\";\nimport { Network } from \"./network.js\";\nimport { NetworkPlugin } from \"./plugins-network.js\";\nimport { logger } from \"./logger.js\";\nconst defaultApiKey = \"9D13ZE7XSBTJ94N9BNJ2MA33VMAY2YPIRB\";\nconst EtherscanPluginId = \"org.ethers.plugins.etherscan\";\nexport class EtherscanPlugin extends NetworkPlugin {\n constructor(baseUrl, communityApiKey) {\n super(EtherscanPluginId);\n //if (communityApiKey == null) { communityApiKey = null; }\n defineProperties(this, { baseUrl, communityApiKey });\n }\n clone() {\n return new EtherscanPlugin(this.baseUrl, this.communityApiKey);\n }\n}\nexport class EtherscanProvider extends AbstractProvider {\n constructor(_network, apiKey) {\n super();\n const network = Network.from(_network);\n if (apiKey == null) {\n const plugin = network.getPlugin(EtherscanPluginId);\n if (plugin) {\n apiKey = plugin.communityApiKey;\n }\n else {\n apiKey = defaultApiKey;\n }\n }\n defineProperties(this, { apiKey, network });\n // Test that the network is supported by Etherscan\n this.getBaseUrl();\n }\n getBaseUrl() {\n const plugin = this.network.getPlugin(EtherscanPluginId);\n if (plugin) {\n return plugin.baseUrl;\n }\n switch (this.network.name) {\n case \"homestead\":\n return \"https:/\\/api.etherscan.io\";\n case \"ropsten\":\n return \"https:/\\/api-ropsten.etherscan.io\";\n case \"rinkeby\":\n return \"https:/\\/api-rinkeby.etherscan.io\";\n case \"kovan\":\n return \"https:/\\/api-kovan.etherscan.io\";\n case \"goerli\":\n return \"https:/\\/api-goerli.etherscan.io\";\n default:\n }\n return logger.throwArgumentError(\"unsupported network\", \"network\", this.network);\n }\n getUrl(module, params) {\n const query = Object.keys(params).reduce((accum, key) => {\n const value = params[key];\n if (value != null) {\n accum += `&${key}=${value}`;\n }\n return accum;\n }, \"\");\n const apiKey = ((this.apiKey) ? `&apikey=${this.apiKey}` : \"\");\n return `${this.getBaseUrl()}/api?module=${module}${query}${apiKey}`;\n }\n getPostUrl() {\n return `${this.getBaseUrl()}/api`;\n }\n getPostData(module, params) {\n params.module = module;\n params.apikey = this.apiKey;\n return params;\n }\n async detectNetwork() {\n return this.network;\n }\n async fetch(module, params, post) {\n const url = (post ? this.getPostUrl() : this.getUrl(module, params));\n const payload = (post ? this.getPostData(module, params) : null);\n /*\n this.emit(\"debug\", {\n action: \"request\",\n request: url,\n provider: this\n });\n */\n const request = new FetchRequest(url);\n const connection = {\n request,\n throttleSlotInterval: 1000,\n processResponse: async (request, response) => {\n const result = response.hasBody() ? JSON.parse(toUtf8String(response.body)) : {};\n const throttle = ((typeof (result.result) === \"string\") ? result.result : \"\").toLowerCase().indexOf(\"rate limit\") >= 0;\n if (module === \"proxy\") {\n // This JSON response indicates we are being throttled\n if (result && result.status == 0 && result.message == \"NOTOK\" && throttle) {\n response.throwThrottleError(result.result);\n }\n }\n else {\n if (throttle) {\n response.throwThrottleError(result.result);\n }\n }\n return response;\n },\n };\n if (payload) {\n request.setHeader(\"content-type\", \"application/x-www-form-urlencoded; charset=UTF-8\");\n request.body = Object.keys(payload).map((k) => `${k}=${payload[k]}`).join(\"&\");\n }\n const response = await fetchData(connection);\n if (!response.hasBody()) {\n throw new Error();\n }\n /*\n this.emit(\"debug\", {\n action: \"response\",\n request: url,\n response: deepCopy(result),\n provider: this\n });\n */\n const result = JSON.parse(toUtf8String(response.body));\n if (module === \"proxy\") {\n if (result.jsonrpc != \"2.0\") {\n // @TODO: not any\n const error = new Error(\"invalid response\");\n error.result = JSON.stringify(result);\n throw error;\n }\n if (result.error) {\n // @TODO: not any\n const error = new Error(result.error.message || \"unknown error\");\n if (result.error.code) {\n error.code = result.error.code;\n }\n if (result.error.data) {\n error.data = result.error.data;\n }\n throw error;\n }\n return result.result;\n }\n else {\n // getLogs, getHistory have weird success responses\n if (result.status == 0 && (result.message === \"No records found\" || result.message === \"No transactions found\")) {\n return result.result;\n }\n if (result.status != 1 || result.message != \"OK\") {\n const error = new Error(\"invalid response\");\n error.result = JSON.stringify(result);\n // if ((result.result || \"\").toLowerCase().indexOf(\"rate limit\") >= 0) {\n // error.throttleRetry = true;\n // }\n throw error;\n }\n return result.result;\n }\n }\n // The transaction has already been sanitized by the calls in Provider\n _getTransactionPostData(transaction) {\n const result = {};\n for (let key in transaction) {\n if (transaction[key] == null) {\n continue;\n }\n let value = transaction[key];\n if (key === \"type\" && value === 0) {\n continue;\n }\n // Quantity-types require no leading zero, unless 0\n if ({ type: true, gasLimit: true, gasPrice: true, maxFeePerGs: true, maxPriorityFeePerGas: true, nonce: true, value: true }[key]) {\n value = quantity(hexlify(value));\n }\n else if (key === \"accessList\") {\n value = \"[\" + this.network.formatter.accessList(value).map((set) => {\n return `{address:\"${set.address}\",storageKeys:[\"${set.storageKeys.join('\",\"')}\"]}`;\n }).join(\",\") + \"]\";\n }\n else {\n value = hexlify(value);\n }\n result[key] = value;\n }\n return result;\n }\n _checkError(req, error, transaction) {\n /*\n let body = \"\";\n if (isError(error, Logger.Errors.SERVER_ERROR) && error.response && error.response.hasBody()) {\n body = toUtf8String(error.response.body);\n }\n console.log(body);\n \n // Undo the \"convenience\" some nodes are attempting to prevent backwards\n // incompatibility; maybe for v6 consider forwarding reverts as errors\n if (method === \"call\" && body) {\n \n // Etherscan keeps changing their string\n if (body.match(/reverted/i) || body.match(/VM execution error/i)) {\n \n // Etherscan prefixes the data like \"Reverted 0x1234\"\n let data = e.data;\n if (data) { data = \"0x\" + data.replace(/^.*0x/i, \"\"); }\n if (!isHexString(data)) { data = \"0x\"; }\n \n logger.throwError(\"call exception\", Logger.Errors.CALL_EXCEPTION, {\n error, data\n });\n }\n }\n \n // Get the message from any nested error structure\n let message = error.message;\n if (isError(error, Logger.Errors.SERVER_ERROR)) {\n if (error.error && typeof(error.error.message) === \"string\") {\n message = error.error.message;\n } else if (typeof(error.body) === \"string\") {\n message = error.body;\n } else if (typeof(error.responseText) === \"string\") {\n message = error.responseText;\n }\n }\n message = (message || \"\").toLowerCase();\n \n // \"Insufficient funds. The account you tried to send transaction from\n // does not have enough funds. Required 21464000000000 and got: 0\"\n if (message.match(/insufficient funds/)) {\n logger.throwError(\"insufficient funds for intrinsic transaction cost\", Logger.Errors.INSUFFICIENT_FUNDS, {\n error, transaction, info: { method }\n });\n }\n \n // \"Transaction with the same hash was already imported.\"\n if (message.match(/same hash was already imported|transaction nonce is too low|nonce too low/)) {\n logger.throwError(\"nonce has already been used\", Logger.Errors.NONCE_EXPIRED, {\n error, transaction, info: { method }\n });\n }\n \n // \"Transaction gas price is too low. There is another transaction with\n // same nonce in the queue. Try increasing the gas price or incrementing the nonce.\"\n if (message.match(/another transaction with same nonce/)) {\n logger.throwError(\"replacement fee too low\", Logger.Errors.REPLACEMENT_UNDERPRICED, {\n error, transaction, info: { method }\n });\n }\n \n if (message.match(/execution failed due to an exception|execution reverted/)) {\n logger.throwError(\"cannot estimate gas; transaction may fail or may require manual gas limit\", Logger.Errors.UNPREDICTABLE_GAS_LIMIT, {\n error, transaction, info: { method }\n });\n }\n */\n throw error;\n }\n async _detectNetwork() {\n return this.network;\n }\n async _perform(req) {\n switch (req.method) {\n case \"chainId\":\n return this.network.chainId;\n case \"getBlockNumber\":\n return this.fetch(\"proxy\", { action: \"eth_blockNumber\" });\n case \"getGasPrice\":\n return this.fetch(\"proxy\", { action: \"eth_gasPrice\" });\n case \"getBalance\":\n // Returns base-10 result\n return this.fetch(\"account\", {\n action: \"balance\",\n address: req.address,\n tag: req.blockTag\n });\n case \"getTransactionCount\":\n return this.fetch(\"proxy\", {\n action: \"eth_getTransactionCount\",\n address: req.address,\n tag: req.blockTag\n });\n case \"getCode\":\n return this.fetch(\"proxy\", {\n action: \"eth_getCode\",\n address: req.address,\n tag: req.blockTag\n });\n case \"getStorageAt\":\n return this.fetch(\"proxy\", {\n action: \"eth_getStorageAt\",\n address: req.address,\n position: req.position,\n tag: req.blockTag\n });\n case \"sendTransaction\":\n return this.fetch(\"proxy\", {\n action: \"eth_sendRawTransaction\",\n hex: req.signedTransaction\n }, true).catch((error) => {\n return this._checkError(req, error, req.signedTransaction);\n });\n case \"getBlock\":\n if (\"blockTag\" in req) {\n return this.fetch(\"proxy\", {\n action: \"eth_getBlockByNumber\",\n tag: req.blockTag,\n boolean: (req.includeTransactions ? \"true\" : \"false\")\n });\n }\n return logger.throwError(\"getBlock by blockHash not supported by Etherscan\", \"UNSUPPORTED_OPERATION\", {\n operation: \"getBlock(blockHash)\"\n });\n case \"getTransaction\":\n return this.fetch(\"proxy\", {\n action: \"eth_getTransactionByHash\",\n txhash: req.hash\n });\n case \"getTransactionReceipt\":\n return this.fetch(\"proxy\", {\n action: \"eth_getTransactionReceipt\",\n txhash: req.hash\n });\n case \"call\": {\n if (req.blockTag !== \"latest\") {\n throw new Error(\"EtherscanProvider does not support blockTag for call\");\n }\n const postData = this._getTransactionPostData(req.transaction);\n postData.module = \"proxy\";\n postData.action = \"eth_call\";\n try {\n return await this.fetch(\"proxy\", postData, true);\n }\n catch (error) {\n return this._checkError(req, error, req.transaction);\n }\n }\n case \"estimateGas\": {\n const postData = this._getTransactionPostData(req.transaction);\n postData.module = \"proxy\";\n postData.action = \"eth_estimateGas\";\n try {\n return await this.fetch(\"proxy\", postData, true);\n }\n catch (error) {\n return this._checkError(req, error, req.transaction);\n }\n }\n /*\n case \"getLogs\": {\n // Needs to complain if more than one address is passed in\n const args: Record = { action: \"getLogs\" }\n \n if (params.filter.fromBlock) {\n args.fromBlock = checkLogTag(params.filter.fromBlock);\n }\n \n if (params.filter.toBlock) {\n args.toBlock = checkLogTag(params.filter.toBlock);\n }\n \n if (params.filter.address) {\n args.address = params.filter.address;\n }\n \n // @TODO: We can handle slightly more complicated logs using the logs API\n if (params.filter.topics && params.filter.topics.length > 0) {\n if (params.filter.topics.length > 1) {\n logger.throwError(\"unsupported topic count\", Logger.Errors.UNSUPPORTED_OPERATION, { topics: params.filter.topics });\n }\n if (params.filter.topics.length === 1) {\n const topic0 = params.filter.topics[0];\n if (typeof(topic0) !== \"string\" || topic0.length !== 66) {\n logger.throwError(\"unsupported topic format\", Logger.Errors.UNSUPPORTED_OPERATION, { topic0: topic0 });\n }\n args.topic0 = topic0;\n }\n }\n \n const logs: Array = await this.fetch(\"logs\", args);\n \n // Cache txHash => blockHash\n let blocks: { [tag: string]: string } = {};\n \n // Add any missing blockHash to the logs\n for (let i = 0; i < logs.length; i++) {\n const log = logs[i];\n if (log.blockHash != null) { continue; }\n if (blocks[log.blockNumber] == null) {\n const block = await this.getBlock(log.blockNumber);\n if (block) {\n blocks[log.blockNumber] = block.hash;\n }\n }\n \n log.blockHash = blocks[log.blockNumber];\n }\n \n return logs;\n }\n */\n default:\n break;\n }\n return super._perform(req);\n }\n async getNetwork() {\n return this.network;\n }\n async getEtherPrice() {\n if (this.network.name !== \"homestead\") {\n return 0.0;\n }\n return parseFloat((await this.fetch(\"stats\", { action: \"ethprice\" })).ethusd);\n }\n isCommunityResource() {\n const plugin = this.network.getPlugin(EtherscanPluginId);\n if (plugin) {\n return (plugin.communityApiKey === this.apiKey);\n }\n return (defaultApiKey === this.apiKey);\n }\n}\n/*\n(async function() {\n const provider = new EtherscanProvider();\n console.log(provider);\n console.log(await provider.getBlockNumber());\n / *\n provider.on(\"block\", (b) => {\n console.log(\"BB\", b);\n });\n console.log(await provider.getTransactionReceipt(\"0xa5ded92f548e9f362192f9ab7e5b3fbc9b5a919a868e29247f177d49ce38de6e\"));\n\n provider.once(\"0xa5ded92f548e9f362192f9ab7e5b3fbc9b5a919a868e29247f177d49ce38de6e\", (tx) => {\n console.log(\"TT\", tx);\n });\n * /\n try {\n console.log(await provider.getBlock(100));\n } catch (error) {\n console.log(error);\n }\n\n try {\n console.log(await provider.getBlock(13821768));\n } catch (error) {\n console.log(error);\n }\n\n})();\n*/\n//# sourceMappingURL=provider-etherscan.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { FetchRequest } from \"@ethersproject/web\";\nimport { showThrottleMessage } from \"./community.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { StaticJsonRpcProvider } from \"./provider-jsonrpc.js\";\nconst defaultProjectId = \"84842078b09946638c03157f83405213\";\nfunction getHost(name) {\n switch (name) {\n case \"homestead\":\n return \"mainnet.infura.io\";\n case \"ropsten\":\n return \"ropsten.infura.io\";\n case \"rinkeby\":\n return \"rinkeby.infura.io\";\n case \"kovan\":\n return \"kovan.infura.io\";\n case \"goerli\":\n return \"goerli.infura.io\";\n case \"matic\":\n return \"polygon-mainnet.infura.io\";\n case \"maticmum\":\n return \"polygon-mumbai.infura.io\";\n case \"optimism\":\n return \"optimism-mainnet.infura.io\";\n case \"optimism-kovan\":\n return \"optimism-kovan.infura.io\";\n case \"arbitrum\":\n return \"arbitrum-mainnet.infura.io\";\n case \"arbitrum-rinkeby\":\n return \"arbitrum-rinkeby.infura.io\";\n }\n return logger.throwArgumentError(\"unsupported network\", \"network\", name);\n}\nexport class InfuraProvider extends StaticJsonRpcProvider {\n constructor(_network = \"homestead\", projectId, projectSecret) {\n const network = Network.from(_network);\n if (projectId == null) {\n projectId = defaultProjectId;\n }\n if (projectSecret == null) {\n projectSecret = null;\n }\n const connection = InfuraProvider.getConnection(network, projectId, projectSecret);\n super(connection, network);\n defineProperties(this, { projectId, projectSecret });\n }\n _getProvider(chainId) {\n try {\n return new InfuraProvider(chainId, this.projectId, this.projectSecret);\n }\n catch (error) { }\n return super._getProvider(chainId);\n }\n static getConnection(network, projectId, projectSecret) {\n if (projectId == null) {\n projectId = defaultProjectId;\n }\n if (projectSecret == null) {\n projectSecret = null;\n }\n const request = new FetchRequest(`https:/\\/${getHost(network.name)}/v3/${projectId}`);\n request.allowGzip = true;\n if (projectSecret) {\n request.setCredentials(\"\", projectSecret);\n }\n const throttleRetry = async (request, response, attempt) => {\n if (projectId === defaultProjectId) {\n showThrottleMessage(\"InfuraProvider\");\n }\n return true;\n };\n return { request, throttleRetry };\n }\n isCommunityResource() {\n return (this.projectId === defaultProjectId);\n }\n}\n//# sourceMappingURL=provider-infura.js.map","import { defineProperties } from \"@ethersproject/properties\";\nimport { FetchRequest } from \"@ethersproject/web\";\nimport { showThrottleMessage } from \"./community.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { StaticJsonRpcProvider } from \"./provider-jsonrpc.js\";\n// These are load-balancer-based application IDs\nconst defaultAppIds = {\n homestead: \"6004bcd10040261633ade990\",\n ropsten: \"6004bd4d0040261633ade991\",\n rinkeby: \"6004bda20040261633ade994\",\n goerli: \"6004bd860040261633ade992\",\n};\nfunction getHost(name) {\n switch (name) {\n case \"homestead\":\n return \"eth-mainnet.gateway.pokt.network\";\n case \"ropsten\":\n return \"eth-ropsten.gateway.pokt.network\";\n case \"rinkeby\":\n return \"eth-rinkeby.gateway.pokt.network\";\n case \"goerli\":\n return \"eth-goerli.gateway.pokt.network\";\n }\n return logger.throwArgumentError(\"unsupported network\", \"network\", name);\n}\nfunction normalizeApiKey(network, _appId, applicationSecretKey, loadBalancer) {\n loadBalancer = !!loadBalancer;\n let community = false;\n let applicationId = _appId;\n if (applicationId == null) {\n applicationId = defaultAppIds[network.name];\n if (applicationId == null) {\n logger.throwArgumentError(\"network does not support default applicationId\", \"applicationId\", _appId);\n }\n loadBalancer = true;\n community = true;\n }\n else if (applicationId === defaultAppIds[network.name]) {\n loadBalancer = true;\n community = true;\n }\n if (applicationSecretKey == null) {\n applicationSecretKey = null;\n }\n return { applicationId, applicationSecretKey, community, loadBalancer };\n}\nexport class PocketProvider extends StaticJsonRpcProvider {\n constructor(_network = \"homestead\", _appId, _secretKey, _loadBalancer) {\n const network = Network.from(_network);\n const { applicationId, applicationSecretKey, loadBalancer } = normalizeApiKey(network, _appId, _secretKey, _loadBalancer);\n const connection = PocketProvider.getConnection(network, applicationId, applicationSecretKey, loadBalancer);\n super(connection, network);\n defineProperties(this, { applicationId, applicationSecretKey, loadBalancer });\n }\n static getConnection(network, _appId, _secretKey, _loadBalancer) {\n const { applicationId, applicationSecretKey, community, loadBalancer } = normalizeApiKey(network, _appId, _secretKey, _loadBalancer);\n let url = `https:/\\/${getHost(network.name)}/v1/`;\n if (loadBalancer) {\n url += \"lb/\";\n }\n url += applicationId;\n const request = new FetchRequest(url);\n request.allowGzip = true;\n if (applicationSecretKey) {\n request.setCredentials(\"\", applicationSecretKey);\n }\n const throttleRetry = async (request, response, attempt) => {\n if (community) {\n showThrottleMessage(\"PocketProvider\");\n }\n return true;\n };\n return { request, throttleRetry };\n }\n isCommunityResource() {\n return (this.applicationId === defaultAppIds[this.network.name]);\n }\n}\n//# sourceMappingURL=provider-pocket.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _FallbackProvider_instances, _FallbackProvider_configs, _FallbackProvider_initialSyncPromise, _FallbackProvider_getNextConfig, _FallbackProvider_addRunner, _FallbackProvider_initialSync, _FallbackProvider_checkQuorum, _FallbackProvider_waitForQuorum;\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { AbstractProvider } from \"./abstract-provider.js\";\nimport { logger } from \"./logger.js\";\nimport { Network } from \"./network.js\";\nimport { shuffle } from \"./shuffle.js\";\n//const BN_0 = BigInt(\"0\");\nconst BN_1 = BigInt(\"1\");\nconst BN_2 = BigInt(\"2\");\nfunction stall(duration) {\n return new Promise((resolve) => { setTimeout(resolve, duration); });\n}\nfunction getTime() { return (new Date()).getTime(); }\n;\nconst defaultConfig = { stallTimeout: 400, priority: 1, weight: 1 };\nconst defaultState = {\n blockNumber: -2, requests: 0, lateResponses: 0, errorResponses: 0,\n outOfSync: -1, unsupportedEvents: 0, rollingDuration: 0, score: 0,\n _network: null, _updateNumber: null, _totalTime: 0\n};\nasync function waitForSync(config, blockNumber) {\n while (config.blockNumber < 0 || config.blockNumber < blockNumber) {\n if (!config._updateNumber) {\n config._updateNumber = (async () => {\n const blockNumber = await config.provider.getBlockNumber();\n if (blockNumber > config.blockNumber) {\n config.blockNumber = blockNumber;\n }\n config._updateNumber = null;\n })();\n }\n await config._updateNumber;\n config.outOfSync++;\n }\n}\n// Normalizes a result to a string that can be used to compare against\n// other results using normal string equality\nfunction normalize(network, value, req) {\n switch (req.method) {\n case \"chainId\":\n return logger.getBigInt(value).toString();\n case \"getBlockNumber\":\n return logger.getNumber(value).toString();\n case \"getGasPrice\":\n return logger.getBigInt(value).toString();\n case \"getBalance\":\n return logger.getBigInt(value).toString();\n case \"getTransactionCount\":\n return logger.getNumber(value).toString();\n case \"getCode\":\n return hexlify(value);\n case \"getStorageAt\":\n return hexlify(value);\n case \"getBlock\":\n if (req.includeTransactions) {\n return JSON.stringify(network.formatter.blockWithTransactions(value));\n }\n return JSON.stringify(network.formatter.block(value));\n case \"getTransaction\":\n return JSON.stringify(network.formatter.transactionResponse(value));\n case \"getTransactionReceipt\":\n return JSON.stringify(network.formatter.receipt(value));\n case \"call\":\n return hexlify(value);\n case \"estimateGas\":\n return logger.getBigInt(value).toString();\n case \"getLogs\":\n return JSON.stringify(value.map((v) => network.formatter.log(v)));\n }\n return logger.throwError(\"unsupported method\", \"UNSUPPORTED_OPERATION\", {\n operation: `_perform(${JSON.stringify(req.method)})`\n });\n}\n// This strategy picks the highest wieght result, as long as the weight is\n// equal to or greater than quorum\nfunction checkQuorum(quorum, results) {\n const tally = new Map();\n for (const { result, normal, weight } of results) {\n const t = tally.get(normal) || { result, weight: 0 };\n t.weight += weight;\n tally.set(normal, t);\n }\n let bestWeight = 0;\n let bestResult = undefined;\n for (const { weight, result } of tally.values()) {\n if (weight >= quorum && weight > bestWeight) {\n bestWeight = weight;\n bestResult = result;\n }\n }\n return bestResult;\n}\n/*\nfunction getMean(results: Array): bigint {\n const total = results.reduce((a, r) => (a + BigInt(r.result)), BN_0);\n return total / BigInt(results.length);\n}\n*/\nfunction getMedian(results) {\n // Get the sorted values\n const values = results.map((r) => BigInt(r.result));\n values.sort((a, b) => ((a < b) ? -1 : (b > a) ? 1 : 0));\n const mid = values.length / 2;\n // Odd-length; take the middle value\n if (values.length % 2) {\n return values[mid];\n }\n // Even length; take the ceiling of the mean of the center two values\n return (values[mid - 1] + values[mid] + BN_1) / BN_2;\n}\nexport class FallbackProvider extends AbstractProvider {\n constructor(providers, network) {\n super(network);\n _FallbackProvider_instances.add(this);\n _FallbackProvider_configs.set(this, void 0);\n _FallbackProvider_initialSyncPromise.set(this, void 0);\n __classPrivateFieldSet(this, _FallbackProvider_configs, providers.map((p) => {\n if (p instanceof AbstractProvider) {\n return Object.assign({ provider: p }, defaultConfig, defaultState);\n }\n else {\n return Object.assign({}, defaultConfig, p, defaultState);\n }\n }), \"f\");\n __classPrivateFieldSet(this, _FallbackProvider_initialSyncPromise, null, \"f\");\n this.quorum = 2; //Math.ceil(providers.length / 2);\n this.eventQuorum = 1;\n this.eventWorkers = 1;\n if (this.quorum > __classPrivateFieldGet(this, _FallbackProvider_configs, \"f\").reduce((a, c) => (a + c.weight), 0)) {\n logger.throwArgumentError(\"quorum exceed provider wieght\", \"quorum\", this.quorum);\n }\n }\n async _detectNetwork() {\n return Network.from(logger.getBigInt(await this._perform({ method: \"chainId\" }))).freeze();\n }\n _getSubscriber(sub) {\n throw new Error(\"@TODO\");\n }\n async _perform(req) {\n await __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_initialSync).call(this);\n // Bootstrap enough to meet quorum\n const running = new Set();\n for (let i = 0; i < this.quorum; i++) {\n __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_addRunner).call(this, running, req);\n }\n const result = __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_waitForQuorum).call(this, running, req);\n for (const runner of running) {\n runner.done = true;\n }\n return result;\n }\n}\n_FallbackProvider_configs = new WeakMap(), _FallbackProvider_initialSyncPromise = new WeakMap(), _FallbackProvider_instances = new WeakSet(), _FallbackProvider_getNextConfig = function _FallbackProvider_getNextConfig(configs) {\n // Shuffle the states, sorted by priority\n const allConfigs = __classPrivateFieldGet(this, _FallbackProvider_configs, \"f\").slice();\n shuffle(allConfigs);\n allConfigs.sort((a, b) => (b.priority - a.priority));\n for (const config of allConfigs) {\n if (configs.indexOf(config) === -1) {\n return config;\n }\n }\n return null;\n}, _FallbackProvider_addRunner = function _FallbackProvider_addRunner(running, req) {\n const config = __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_getNextConfig).call(this, Array.from(running).map((r) => r.config));\n if (config == null) {\n return null;\n }\n const result = {};\n const runner = {\n config, result, didBump: false, done: false,\n perform: null, staller: null\n };\n const now = getTime();\n runner.perform = (async () => {\n try {\n config.requests++;\n result.result = await config.provider._perform(req);\n }\n catch (error) {\n config.errorResponses++;\n result.error = error;\n }\n if (runner.done) {\n config.lateResponses++;\n }\n const dt = (getTime() - now);\n config._totalTime += dt;\n config.rollingDuration = 0.95 * config.rollingDuration + 0.05 * dt;\n runner.perform = null;\n })();\n runner.staller = (async () => {\n await stall(config.stallTimeout);\n runner.staller = null;\n })();\n running.add(runner);\n return runner;\n}, _FallbackProvider_initialSync = \n// Initializes the blockNumber and network for each runner and\n// blocks until initialized\nasync function _FallbackProvider_initialSync() {\n let initialSync = __classPrivateFieldGet(this, _FallbackProvider_initialSyncPromise, \"f\");\n if (!initialSync) {\n const promises = [];\n __classPrivateFieldGet(this, _FallbackProvider_configs, \"f\").forEach((config) => {\n promises.push(waitForSync(config, 0));\n promises.push((async () => {\n config._network = await config.provider.getNetwork();\n })());\n });\n __classPrivateFieldSet(this, _FallbackProvider_initialSyncPromise, initialSync = (async () => {\n // Wait for all providers to have a block number and network\n await Promise.all(promises);\n // Check all the networks match\n let chainId = null;\n for (const config of __classPrivateFieldGet(this, _FallbackProvider_configs, \"f\")) {\n const network = (config._network);\n if (chainId == null) {\n chainId = network.chainId;\n }\n else if (network.chainId !== chainId) {\n logger.throwError(\"cannot mix providers on different networks\", \"UNSUPPORTED_OPERATION\", {\n operation: \"new FallbackProvider\"\n });\n }\n }\n })(), \"f\");\n }\n await initialSync;\n}, _FallbackProvider_checkQuorum = async function _FallbackProvider_checkQuorum(running, req) {\n // Get all the result objects\n const results = [];\n for (const runner of running) {\n if (\"result\" in runner.result) {\n const result = runner.result.result;\n results.push({\n result,\n normal: normalize((runner.config._network), result, req),\n weight: runner.config.weight\n });\n }\n }\n // Are there enough results to event meet quorum?\n if (results.reduce((a, r) => (a + r.weight), 0) < this.quorum) {\n return undefined;\n }\n switch (req.method) {\n case \"getBlockNumber\": {\n throw new Error(\"TODO\");\n }\n case \"getGasPrice\":\n case \"estimateGas\":\n return getMedian(results);\n case \"getBlock\":\n // Pending blocks are mempool dependant and already\n // quite untrustworthy\n if (\"blockTag\" in req && req.blockTag === \"pending\") {\n return results[0].result;\n }\n return checkQuorum(this.quorum, results);\n case \"chainId\":\n case \"getBalance\":\n case \"getTransactionCount\":\n case \"getCode\":\n case \"getStorageAt\":\n case \"getTransaction\":\n case \"getTransactionReceipt\":\n case \"getLogs\":\n return checkQuorum(this.quorum, results);\n case \"call\":\n // @TODO: Check errors\n return checkQuorum(this.quorum, results);\n case \"sendTransaction\":\n throw new Error(\"TODO\");\n }\n return logger.throwError(\"unsupported method\", \"UNSUPPORTED_OPERATION\", {\n operation: `_perform(${JSON.stringify(req.method)})`\n });\n}, _FallbackProvider_waitForQuorum = async function _FallbackProvider_waitForQuorum(running, req) {\n if (running.size === 0) {\n throw new Error(\"no runners?!\");\n }\n // Any promises that are interesting to watch for; an expired stall\n // or a successful perform\n const interesting = [];\n //const results: Array = [ ];\n //const errors: Array = [ ];\n let newRunners = 0;\n for (const runner of running) {\n // @TODO: use runner.perfom != null\n /*\n if (\"result\" in runner.result) {\n results.push(runner.result.result);\n } else if (\"error\" in runner.result) {\n errors.push(runner.result.error);\n }\n*/\n // No responses, yet; keep an eye on it\n if (runner.perform) {\n interesting.push(runner.perform);\n }\n // Still stalling...\n if (runner.staller) {\n interesting.push(runner.staller);\n continue;\n }\n // This runner has already triggered another runner\n if (runner.didBump) {\n continue;\n }\n // Got a response (result or error) or stalled; kick off another runner\n runner.didBump = true;\n newRunners++;\n }\n // Check for quorum\n /*\n console.log({ results, errors } );\n if (results.length >= this.quorum) {\n return results[0];\n }\n\n if (errors.length >= this.quorum) {\n return errors[0];\n }\n */\n const value = await __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_checkQuorum).call(this, running, req);\n if (value !== undefined) {\n if (value instanceof Error) {\n throw value;\n }\n return value;\n }\n // Add any new runners, because a staller timed out or a result\n // or error response came in.\n for (let i = 0; i < newRunners; i++) {\n __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_addRunner).call(this, running, req);\n }\n if (interesting.length === 0) {\n throw new Error(\"quorum not met\");\n // return logger.throwError(\"failed to meet quorum\", \"\", {\n // });\n }\n // Wait for someone to either complete its perform or trigger a stall\n await Promise.race(interesting);\n return await __classPrivateFieldGet(this, _FallbackProvider_instances, \"m\", _FallbackProvider_waitForQuorum).call(this, running, req);\n};\n//# sourceMappingURL=provider-fallback.js.map","export function shuffle(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n const tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n }\n}\n//# sourceMappingURL=shuffle.js.map","function getGlobal() {\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n throw new Error('unable to locate global object');\n}\n;\nconst _WebSocket = getGlobal().WebSocket;\nexport { _WebSocket as WebSocket };\n//# sourceMappingURL=ws-browser.js.map","/**\n * SocketProvider\n *\n * Generic long-lived socket provider.\n *\n * Sub-classing notes\n * - a sub-class MUST call the `_start()` method once connected\n * - a sub-class MUST override the `_write(string)` method\n * - a sub-class MUST call `_processMessage(string)` for each message\n */\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _SocketSubscriber_provider, _SocketSubscriber_filter, _SocketSubscriber_filterId, _SocketSubscriber_paused, _SocketSubscriber_emitPromise, _SocketEventSubscriber_logFilter, _SocketEventSubscriber_formatter, _SocketProvider_callbacks, _SocketProvider_ready, _SocketProvider_subs, _SocketProvider_pending;\nimport { UnmanagedSubscriber } from \"./abstract-provider.js\";\nimport { logger } from \"./logger.js\";\nimport { JsonRpcApiProvider } from \"./provider-jsonrpc.js\";\nexport class SocketSubscriber {\n constructor(provider, filter) {\n _SocketSubscriber_provider.set(this, void 0);\n _SocketSubscriber_filter.set(this, void 0);\n _SocketSubscriber_filterId.set(this, void 0);\n _SocketSubscriber_paused.set(this, void 0);\n _SocketSubscriber_emitPromise.set(this, void 0);\n __classPrivateFieldSet(this, _SocketSubscriber_provider, provider, \"f\");\n __classPrivateFieldSet(this, _SocketSubscriber_filter, JSON.stringify(filter), \"f\");\n __classPrivateFieldSet(this, _SocketSubscriber_filterId, null, \"f\");\n __classPrivateFieldSet(this, _SocketSubscriber_paused, null, \"f\");\n __classPrivateFieldSet(this, _SocketSubscriber_emitPromise, null, \"f\");\n }\n get filter() { return JSON.parse(__classPrivateFieldGet(this, _SocketSubscriber_filter, \"f\")); }\n start() {\n __classPrivateFieldSet(this, _SocketSubscriber_filterId, __classPrivateFieldGet(this, _SocketSubscriber_provider, \"f\").send(\"eth_subscribe\", this.filter).then((filterId) => {\n ;\n __classPrivateFieldGet(this, _SocketSubscriber_provider, \"f\")._register(filterId, this);\n return filterId;\n }), \"f\");\n }\n stop() {\n (__classPrivateFieldGet(this, _SocketSubscriber_filterId, \"f\")).then((filterId) => {\n __classPrivateFieldGet(this, _SocketSubscriber_provider, \"f\").send(\"eth_unsubscribe\", [filterId]);\n });\n __classPrivateFieldSet(this, _SocketSubscriber_filterId, null, \"f\");\n }\n // @TODO: pause should trap the current blockNumber, unsub, and on resume use getLogs\n // and resume\n pause(dropWhilePaused) {\n if (!dropWhilePaused) {\n logger.throwError(\"preserve logs while paused not supported by SocketSubscriber yet\", \"UNSUPPORTED_OPERATION\", {\n operation: \"pause(false)\"\n });\n }\n __classPrivateFieldSet(this, _SocketSubscriber_paused, !!dropWhilePaused, \"f\");\n }\n resume() {\n __classPrivateFieldSet(this, _SocketSubscriber_paused, null, \"f\");\n }\n _handleMessage(message) {\n if (__classPrivateFieldGet(this, _SocketSubscriber_filterId, \"f\") == null) {\n return;\n }\n if (__classPrivateFieldGet(this, _SocketSubscriber_paused, \"f\") === null) {\n let emitPromise = __classPrivateFieldGet(this, _SocketSubscriber_emitPromise, \"f\");\n if (emitPromise == null) {\n emitPromise = this._emit(__classPrivateFieldGet(this, _SocketSubscriber_provider, \"f\"), message);\n }\n else {\n emitPromise = emitPromise.then(async () => {\n await this._emit(__classPrivateFieldGet(this, _SocketSubscriber_provider, \"f\"), message);\n });\n }\n __classPrivateFieldSet(this, _SocketSubscriber_emitPromise, emitPromise.then(() => {\n if (__classPrivateFieldGet(this, _SocketSubscriber_emitPromise, \"f\") === emitPromise) {\n __classPrivateFieldSet(this, _SocketSubscriber_emitPromise, null, \"f\");\n }\n }), \"f\");\n }\n }\n async _emit(provider, message) {\n throw new Error(\"sub-classes must implemente this; _emit\");\n }\n}\n_SocketSubscriber_provider = new WeakMap(), _SocketSubscriber_filter = new WeakMap(), _SocketSubscriber_filterId = new WeakMap(), _SocketSubscriber_paused = new WeakMap(), _SocketSubscriber_emitPromise = new WeakMap();\nexport class SocketBlockSubscriber extends SocketSubscriber {\n constructor(provider) {\n super(provider, [\"newHeads\"]);\n }\n async _emit(provider, message) {\n provider.emit(\"block\", parseInt(message.number));\n }\n}\nexport class SocketPendingSubscriber extends SocketSubscriber {\n constructor(provider) {\n super(provider, [\"newPendingTransactions\"]);\n }\n async _emit(provider, message) {\n provider.emit(\"pending\", message);\n }\n}\nexport class SocketEventSubscriber extends SocketSubscriber {\n constructor(provider, filter) {\n super(provider, [\"logs\", filter]);\n _SocketEventSubscriber_logFilter.set(this, void 0);\n _SocketEventSubscriber_formatter.set(this, void 0);\n __classPrivateFieldSet(this, _SocketEventSubscriber_logFilter, JSON.stringify(filter), \"f\");\n __classPrivateFieldSet(this, _SocketEventSubscriber_formatter, provider.getNetwork().then((network) => network.formatter), \"f\");\n }\n get logFilter() { return JSON.parse(__classPrivateFieldGet(this, _SocketEventSubscriber_logFilter, \"f\")); }\n async _emit(provider, message) {\n const formatter = await __classPrivateFieldGet(this, _SocketEventSubscriber_formatter, \"f\");\n provider.emit(__classPrivateFieldGet(this, _SocketEventSubscriber_logFilter, \"f\"), formatter.log(message, provider));\n }\n}\n_SocketEventSubscriber_logFilter = new WeakMap(), _SocketEventSubscriber_formatter = new WeakMap();\nexport class SocketProvider extends JsonRpcApiProvider {\n constructor(network) {\n super(network);\n _SocketProvider_callbacks.set(this, void 0);\n _SocketProvider_ready.set(this, void 0);\n // Maps each filterId to its subscriber\n _SocketProvider_subs.set(this, void 0);\n // If any events come in before a subscriber has finished\n // registering, queue them\n _SocketProvider_pending.set(this, void 0);\n __classPrivateFieldSet(this, _SocketProvider_callbacks, new Map(), \"f\");\n __classPrivateFieldSet(this, _SocketProvider_ready, false, \"f\");\n __classPrivateFieldSet(this, _SocketProvider_subs, new Map(), \"f\");\n __classPrivateFieldSet(this, _SocketProvider_pending, new Map(), \"f\");\n }\n _getSubscriber(sub) {\n switch (sub.type) {\n case \"close\":\n return new UnmanagedSubscriber(\"close\");\n case \"block\":\n return new SocketBlockSubscriber(this);\n case \"pending\":\n return new SocketPendingSubscriber(this);\n case \"event\":\n return new SocketEventSubscriber(this, sub.filter);\n case \"orphan\":\n // Handled auto-matically within AbstractProvider\n // when the log.removed = true\n if (sub.filter.orphan === \"drop-log\") {\n return new UnmanagedSubscriber(\"drop-log\");\n }\n }\n return super._getSubscriber(sub);\n }\n _register(filterId, subscriber) {\n __classPrivateFieldGet(this, _SocketProvider_subs, \"f\").set(filterId, subscriber);\n const pending = __classPrivateFieldGet(this, _SocketProvider_pending, \"f\").get(filterId);\n if (pending) {\n for (const message of pending) {\n subscriber._handleMessage(message);\n }\n __classPrivateFieldGet(this, _SocketProvider_pending, \"f\").delete(filterId);\n }\n }\n async send(method, params) {\n const payload = this.prepareRequest(method, params);\n const promise = new Promise((resolve, reject) => {\n __classPrivateFieldGet(this, _SocketProvider_callbacks, \"f\").set(payload.id, { payload, resolve, reject });\n });\n if (__classPrivateFieldGet(this, _SocketProvider_ready, \"f\")) {\n await this._write(JSON.stringify(payload));\n }\n return await promise;\n }\n // Sub-classes must call this once they are connected\n async _start() {\n if (__classPrivateFieldGet(this, _SocketProvider_ready, \"f\")) {\n return;\n }\n __classPrivateFieldSet(this, _SocketProvider_ready, true, \"f\");\n for (const { payload } of __classPrivateFieldGet(this, _SocketProvider_callbacks, \"f\").values()) {\n await this._write(JSON.stringify(payload));\n }\n }\n // Sub-classes must call this for each message\n async _processMessage(message) {\n const result = JSON.parse(message);\n if (\"id\" in result) {\n const promise = __classPrivateFieldGet(this, _SocketProvider_callbacks, \"f\").get(result.id);\n if (!promise) {\n console.log(\"Weird... Response for not a thing we sent\");\n return;\n }\n __classPrivateFieldGet(this, _SocketProvider_callbacks, \"f\").delete(result.id);\n if (\"error\" in result) {\n const { message, code, data } = result.error;\n const error = logger.makeError(message || \"unkonwn error\", \"SERVER_ERROR\", {\n request: `ws:${JSON.stringify(promise.payload)}`,\n info: { code, data }\n });\n promise.reject(error);\n }\n else {\n promise.resolve(result.result);\n }\n }\n else if (result.method === \"eth_subscription\") {\n const filterId = result.params.subscription;\n const subscriber = __classPrivateFieldGet(this, _SocketProvider_subs, \"f\").get(filterId);\n if (subscriber) {\n subscriber._handleMessage(result.params.result);\n }\n else {\n let pending = __classPrivateFieldGet(this, _SocketProvider_pending, \"f\").get(filterId);\n if (pending == null) {\n pending = [];\n __classPrivateFieldGet(this, _SocketProvider_pending, \"f\").set(filterId, pending);\n }\n pending.push(result.params.result);\n }\n }\n }\n async _write(message) {\n throw new Error(\"sub-classes must override this\");\n }\n}\n_SocketProvider_callbacks = new WeakMap(), _SocketProvider_ready = new WeakMap(), _SocketProvider_subs = new WeakMap(), _SocketProvider_pending = new WeakMap();\n//# sourceMappingURL=provider-socket.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _WebSocketProvider_websocket;\nimport { WebSocket } from \"ws\"; /*-browser*/\nimport { SocketProvider } from \"./provider-socket.js\";\nexport class WebSocketProvider extends SocketProvider {\n constructor(url, network) {\n super(network);\n _WebSocketProvider_websocket.set(this, void 0);\n if (typeof (url) === \"string\") {\n __classPrivateFieldSet(this, _WebSocketProvider_websocket, new WebSocket(url), \"f\");\n }\n else {\n __classPrivateFieldSet(this, _WebSocketProvider_websocket, url, \"f\");\n }\n this.websocket.onopen = () => {\n this._start();\n };\n this.websocket.onmessage = (message) => {\n this._processMessage(message.data);\n };\n }\n get websocket() { return __classPrivateFieldGet(this, _WebSocketProvider_websocket, \"f\"); }\n async _write(message) {\n this.websocket.send(message);\n }\n}\n_WebSocketProvider_websocket = new WeakMap();\n//# sourceMappingURL=provider-websocket.js.map","import { EnsPlugin, GasCostPlugin, MaxPriorityFeePlugin } from \"./plugins-network.js\";\nimport { EtherscanPlugin } from \"./provider-etherscan.js\";\nimport { Network as _Network } from \"./network.js\";\n// See: https://chainlist.org\nfunction injectCommonNetworks(Network) {\n /// Register popular Ethereum networks\n function registerEth(name, chainId, options) {\n const func = function () {\n const network = new Network(name, chainId);\n // We use 0 to disable ENS\n if (options.ensNetwork != null) {\n network.attachPlugin(new EnsPlugin(null, options.ensNetwork));\n }\n if (options.priorityFee) {\n network.attachPlugin(new MaxPriorityFeePlugin(options.priorityFee));\n }\n if (options.etherscan) {\n const { url, apiKey } = options.etherscan;\n network.attachPlugin(new EtherscanPlugin(url, apiKey));\n }\n network.attachPlugin(new GasCostPlugin());\n return network;\n };\n // Register the network by name and chain ID\n Network.register(name, func);\n Network.register(chainId, func);\n if (options.altNames) {\n options.altNames.forEach((name) => {\n Network.register(name, func);\n });\n }\n }\n registerEth(\"homestead\", 1, { ensNetwork: 1, altNames: [\"mainnet\"] });\n registerEth(\"ropsten\", 3, { ensNetwork: 3 });\n registerEth(\"rinkeby\", 4, { ensNetwork: 4 });\n registerEth(\"goerli\", 5, { ensNetwork: 5 });\n registerEth(\"kovan\", 42, { ensNetwork: 42 });\n registerEth(\"classic\", 61, {});\n registerEth(\"classicKotti\", 6, {});\n registerEth(\"xdai\", 100, { ensNetwork: 1 });\n // Polygon has a 35 gwei maxPriorityFee requirement\n registerEth(\"matic\", 137, {\n ensNetwork: 1,\n priorityFee: 35000000000,\n etherscan: {\n apiKey: \"W6T8DJW654GNTQ34EFEYYP3EZD9DD27CT7\",\n url: \"https:/\\/api.polygonscan.com/\"\n }\n });\n registerEth(\"maticMumbai\", 80001, {\n priorityFee: 35000000000,\n etherscan: {\n apiKey: \"W6T8DJW654GNTQ34EFEYYP3EZD9DD27CT7\",\n url: \"https:/\\/api-testnet.polygonscan.com/\"\n }\n });\n registerEth(\"bnb\", 56, {\n ensNetwork: 1,\n etherscan: {\n apiKey: \"EVTS3CU31AATZV72YQ55TPGXGMVIFUQ9M9\",\n url: \"http:/\\/api.bscscan.com\"\n }\n });\n registerEth(\"bnbt\", 97, {\n etherscan: {\n apiKey: \"EVTS3CU31AATZV72YQ55TPGXGMVIFUQ9M9\",\n url: \"http:/\\/api-testnet.bscscan.com\"\n }\n });\n return Network;\n}\nconst Network = injectCommonNetworks(_Network);\nexport { Network };\n//# sourceMappingURL=common-networks.js.map","const IpcSocketProvider = undefined;\nexport { IpcSocketProvider };\n//# sourceMappingURL=provider-ipcsocket-browser.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _ContractTransactionReceipt_interface, _ContractTransactionResponse_interface;\nimport { defineProperties, EventPayload } from \"@ethersproject/properties\";\nimport { Log, TransactionReceipt, TransactionResponse } from \"@ethersproject/providers\";\nexport class EventLog extends Log {\n constructor(log, iface, fragment) {\n super(log, log.provider);\n const args = iface.decodeEventLog(fragment, log.data, log.topics);\n defineProperties(this, { args, fragment, interface: iface });\n }\n get eventName() { return this.fragment.name; }\n get eventSignature() { return this.fragment.format(); }\n}\nexport class ContractTransactionReceipt extends TransactionReceipt {\n constructor(iface, provider, tx) {\n super(tx, provider);\n _ContractTransactionReceipt_interface.set(this, void 0);\n __classPrivateFieldSet(this, _ContractTransactionReceipt_interface, iface, \"f\");\n }\n get logs() {\n return super.logs.map((log) => {\n const fragment = log.topics.length ? __classPrivateFieldGet(this, _ContractTransactionReceipt_interface, \"f\").getEvent(log.topics[0]) : null;\n if (fragment) {\n return new EventLog(log, __classPrivateFieldGet(this, _ContractTransactionReceipt_interface, \"f\"), fragment);\n }\n else {\n return log;\n }\n });\n }\n}\n_ContractTransactionReceipt_interface = new WeakMap();\nexport class ContractTransactionResponse extends TransactionResponse {\n constructor(iface, provider, tx) {\n super(tx, provider);\n _ContractTransactionResponse_interface.set(this, void 0);\n __classPrivateFieldSet(this, _ContractTransactionResponse_interface, iface, \"f\");\n }\n async wait(confirms) {\n const receipt = await super.wait();\n if (receipt == null) {\n return null;\n }\n return new ContractTransactionReceipt(__classPrivateFieldGet(this, _ContractTransactionResponse_interface, \"f\"), this.provider, receipt);\n }\n}\n_ContractTransactionResponse_interface = new WeakMap();\nexport class ContractEventPayload extends EventPayload {\n constructor(contract, listener, filter, fragment, _log) {\n super(contract, listener, filter);\n const log = new EventLog(_log, contract.interface, fragment);\n const args = contract.interface.decodeEventLog(fragment, log.data, log.topics);\n defineProperties(this, { args, fragment, log });\n }\n get eventName() {\n return this.fragment.name;\n }\n get eventSignature() {\n return this.fragment.format();\n }\n async getBlock() {\n return await this.log.getBlock();\n }\n async getTransaction() {\n return await this.log.getTransaction();\n }\n async getTransactionReceipt() {\n return await this.log.getTransactionReceipt();\n }\n}\n//# sourceMappingURL=wrappers.js.map","export const version = \"@ethersproject/contract@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _PreparedTopicFilter_filter;\nimport { resolveAddress } from \"@ethersproject/address\";\nimport { Interface, Typed } from \"@ethersproject/abi\";\nimport { isHexString } from \"@ethersproject/bytes\";\nimport { isCallException } from \"@ethersproject/logger\";\nimport { defineProperties, resolveProperties } from \"@ethersproject/properties\";\nimport { copyRequest } from \"@ethersproject/providers\";\nimport { ContractEventPayload, ContractTransactionResponse, EventLog } from \"./wrappers.js\";\nimport { logger } from \"./logger.js\";\nfunction canEstimate(value) {\n return (value && typeof (value.estimateGas) === \"function\");\n}\nfunction canCall(value) {\n return (value && typeof (value.call) === \"function\");\n}\nfunction canSend(value) {\n return (value && typeof (value.sendTransaction) === \"function\");\n}\nfunction canResolve(value) {\n return (value && typeof (value.resolveName) === \"function\");\n}\nfunction canQuery(value) {\n return (value && typeof (value.getLogs) === \"function\");\n}\nfunction canSubscribe(value) {\n return (value && typeof (value.on) === \"function\" && typeof (value.off) === \"function\");\n}\nfunction concisify(items) {\n items = Array.from((new Set(items)).values());\n items.sort();\n return items;\n}\nclass PreparedTopicFilter {\n constructor(contract, fragment, args) {\n _PreparedTopicFilter_filter.set(this, void 0);\n defineProperties(this, { fragment });\n if (fragment.inputs.length < args.length) {\n throw new Error(\"too many arguments\");\n }\n // Recursively descend into args and resolve any addresses\n const runner = getRunner(contract.runner, \"resolveName\");\n const resolver = canResolve(runner) ? runner : null;\n __classPrivateFieldSet(this, _PreparedTopicFilter_filter, (async function () {\n const resolvedArgs = await Promise.all(fragment.inputs.map((param, index) => {\n return param.walkAsync(args[index], (type, value) => {\n if (type === \"address\") {\n return resolveAddress(value, resolver);\n }\n return value;\n });\n }));\n return contract.interface.encodeFilterTopics(fragment, resolvedArgs);\n })(), \"f\");\n }\n getTopicFilter() {\n return __classPrivateFieldGet(this, _PreparedTopicFilter_filter, \"f\");\n }\n}\n_PreparedTopicFilter_filter = new WeakMap();\n// A = Arguments passed in as a tuple\n// R = The result type of the call (i.e. if only one return type,\n// the qualified type, otherwise Result)\n// D = The type the default call will return (i.e. R for view/pure,\n// TransactionResponse otherwise)\n//export interface ContractMethod = Array, R = any, D extends R | ContractTransactionResponse = ContractTransactionResponse> {\nfunction _WrappedMethodBase() {\n return Function;\n}\nfunction getRunner(value, feature) {\n if (value == null) {\n return null;\n }\n if (typeof (value[feature]) === \"function\") {\n return value;\n }\n if (value.provider && typeof (value.provider[feature]) === \"function\") {\n return value.provider;\n }\n return null;\n}\nexport async function copyOverrides(arg) {\n // Create a shallow copy (we'll deep-ify anything needed during normalizing)\n const overrides = copyRequest(Typed.dereference(arg, \"overrides\"));\n // Some sanity checking; these are what these methods adds\n //if ((overrides).to) {\n if (overrides.to) {\n logger.throwArgumentError(\"cannot override to\", \"overrides.to\", overrides.to);\n }\n else if (overrides.data) {\n logger.throwArgumentError(\"cannot override data\", \"overrides.data\", overrides.data);\n }\n // Resolve any from\n if (overrides.from) {\n overrides.from = await resolveAddress(overrides.from);\n }\n return overrides;\n}\nexport async function resolveArgs(_runner, inputs, args) {\n // Recursively descend into args and resolve any addresses\n const runner = getRunner(_runner, \"resolveName\");\n const resolver = canResolve(runner) ? runner : null;\n return await Promise.all(inputs.map((param, index) => {\n return param.walkAsync(args[index], (type, value) => {\n if (type === \"address\") {\n return resolveAddress(value, resolver);\n }\n return value;\n });\n }));\n}\nclass WrappedMethod extends _WrappedMethodBase() {\n constructor(contract, key) {\n super();\n defineProperties(this, {\n name: contract.interface.getFunctionName(key),\n _contract: contract, _key: key\n });\n const proxy = new Proxy(this, {\n // Perform the default operation for this fragment type\n apply: async (target, thisArg, args) => {\n const fragment = target.getFragment(...args);\n if (fragment.constant) {\n return await target.staticCall(...args);\n }\n return await target.send(...args);\n },\n });\n return proxy;\n }\n // Only works on non-ambiguous keys (refined fragment is always non-ambiguous)\n get fragment() {\n return this._contract.interface.getFunction(this._key);\n }\n getFragment(...args) {\n return this._contract.interface.getFunction(this._key, args);\n }\n async populateTransaction(...args) {\n const fragment = this.getFragment(...args);\n // If an overrides was passed in, copy it and normalize the values\n let overrides = {};\n if (fragment.inputs.length + 1 === args.length) {\n overrides = await copyOverrides(args.pop());\n }\n if (fragment.inputs.length !== args.length) {\n throw new Error(\"internal error: fragment inputs doesn't match arguments; should not happen\");\n }\n const resolvedArgs = await resolveArgs(this._contract.runner, fragment.inputs, args);\n return Object.assign({}, overrides, await resolveProperties({\n to: this._contract.getAddress(),\n data: this._contract.interface.encodeFunctionData(fragment, resolvedArgs)\n }));\n }\n async staticCall(...args) {\n const result = await this.staticCallResult(...args);\n if (result.length === 1) {\n return result[0];\n }\n return result;\n }\n async send(...args) {\n const runner = getRunner(this._contract.runner, \"sendTransaction\");\n if (!canSend(runner)) {\n return logger.throwError(\"contract runner does not support sending transactions\", \"UNSUPPORTED_OPERATION\", {\n operation: \"sendTransaction\"\n });\n }\n const tx = await runner.sendTransaction(await this.populateTransaction(...args));\n const provider = getRunner(this._contract.runner, \"getLogs\");\n return new ContractTransactionResponse(this._contract.interface, provider, tx);\n }\n async estimateGas(...args) {\n const runner = getRunner(this._contract.runner, \"estimateGas\");\n if (!canEstimate(runner)) {\n return logger.throwError(\"contract runner does not support gas estimation\", \"UNSUPPORTED_OPERATION\", {\n operation: \"estimateGas\"\n });\n }\n return await runner.estimateGas(await this.populateTransaction(...args));\n }\n async staticCallResult(...args) {\n const runner = getRunner(this._contract.runner, \"call\");\n if (!canCall(runner)) {\n return logger.throwError(\"contract runner does not support calling\", \"UNSUPPORTED_OPERATION\", {\n operation: \"call\"\n });\n }\n const fragment = this.getFragment(...args);\n const tx = await this.populateTransaction(...args);\n let result = \"0x\";\n try {\n result = await runner.call(tx);\n }\n catch (error) {\n if (isCallException(error)) {\n throw this._contract.interface.makeError(fragment, error.data, tx);\n }\n throw error;\n }\n return this._contract.interface.decodeFunctionResult(fragment, result);\n }\n}\nfunction _WrappedEventBase() {\n return Function;\n}\nclass WrappedEvent extends _WrappedEventBase() {\n constructor(contract, key) {\n super();\n defineProperties(this, {\n name: contract.interface.getEventName(key),\n _contract: contract, _key: key\n });\n return new Proxy(this, {\n // Perform the default operation for this fragment type\n apply: async (target, thisArg, args) => {\n return new PreparedTopicFilter(contract, target.getFragment(...args), args);\n },\n });\n }\n // Only works on non-ambiguous keys\n get fragment() {\n return this._contract.interface.getEvent(this._key);\n }\n getFragment(...args) {\n return this._contract.interface.getEvent(this._key, args);\n }\n}\n;\n// The combination of TypeScrype, Private Fields and Proxies makes\n// the world go boom; so we hide variables with some trickery keeping\n// a symbol attached to each BaseContract which its sub-class (even\n// via a Proxy) can reach and use to look up its internal values.\nconst internal = Symbol.for(\"_ethersInternal_contract\");\nconst internalValues = new WeakMap();\nfunction setInternal(contract, values) {\n internalValues.set(contract[internal], values);\n}\nfunction getInternal(contract) {\n return internalValues.get(contract[internal]);\n}\nfunction isDeferred(value) {\n return (value && typeof (value) === \"object\" && (\"getTopicFilter\" in value) &&\n (typeof (value.getTopicFilter) === \"function\") && value.fragment);\n}\nasync function getSubTag(contract, event) {\n let fragment;\n let topics;\n if (Array.isArray(event)) {\n // Topics; e.g. `[ \"0x1234...89ab\" ]`\n fragment = contract.interface.getEvent(event[0]);\n topics = event;\n }\n else if (typeof (event) === \"string\") {\n // Event name (name or signature); `\"Transfer\"`\n fragment = contract.interface.getEvent(event);\n topics = [contract.interface.getEventTopic(fragment)];\n }\n else if (isDeferred(event)) {\n // Deferred Topic Filter; e.g. `contract.filter.Transfer(from)`\n fragment = event.fragment;\n topics = await event.getTopicFilter();\n }\n else if (\"fragment\" in event) {\n // ContractEvent; e.g. `contract.filter.Transfer`\n fragment = event.fragment;\n topics = [contract.interface.getEventTopic(fragment)];\n }\n else {\n console.log(event);\n throw new Error(\"TODO\");\n }\n // Normalize topics and sort TopicSets\n topics = topics.map((t) => {\n if (t == null) {\n return null;\n }\n if (Array.isArray(t)) {\n return concisify(t.map((t) => t.toLowerCase()));\n }\n return t.toLowerCase();\n });\n const tag = topics.map((t) => {\n if (t == null) {\n return \"null\";\n }\n if (Array.isArray(t)) {\n return t.join(\"|\");\n }\n return t;\n }).join(\"&\");\n return { fragment, tag, topics };\n}\nasync function hasSub(contract, event) {\n const { subs } = getInternal(contract);\n return subs.get((await getSubTag(contract, event)).tag) || null;\n}\nasync function getSub(contract, event) {\n // Make sure our runner can actually subscribe to events\n const runner = getRunner(contract.runner, \"on\");\n const runnerOff = getRunner(contract.runner, \"off\");\n if (!runner || runner !== runnerOff || !canSubscribe(runner)) {\n return logger.throwError(\"contract runner does not support subscribing\", \"UNSUPPORTED_OPERATION\", {\n operation: \"on\"\n });\n }\n const { fragment, tag, topics } = await getSubTag(contract, event);\n const { addr, subs } = getInternal(contract);\n let sub = subs.get(tag);\n if (!sub) {\n const address = (addr ? addr : contract);\n const filter = { address, topics };\n const listener = (log) => {\n const payload = new ContractEventPayload(contract, null, event, fragment, log);\n emit(contract, event, payload.args, payload);\n };\n let started = false;\n const start = () => {\n if (started) {\n return;\n }\n runner.on(filter, listener);\n started = true;\n };\n const stop = () => {\n if (!started) {\n return;\n }\n runner.off(filter, listener);\n started = false;\n };\n sub = { tag, listeners: [], start, stop };\n subs.set(tag, sub);\n }\n return sub;\n}\nasync function _emit(contract, event, args, payload) {\n await lastEmit;\n const sub = await hasSub(contract, event);\n if (!sub) {\n return false;\n }\n const count = sub.listeners.length;\n sub.listeners = sub.listeners.filter(({ listener, once }) => {\n const passArgs = args.slice();\n if (payload) {\n passArgs.push(new ContractEventPayload(contract, (once ? null : listener), event, payload.fragment, payload.log));\n }\n setTimeout(() => { listener.call(contract, ...passArgs); }, 0);\n return !once;\n });\n return (count > 0);\n}\n// We use this to ensure one emit resolves before firing the next to\n// ensure correct ordering (note this cannot throw and just adds the\n// notice to the event queu using setTimeout).\nlet lastEmit = Promise.resolve();\nasync function emit(contract, event, args, payload) {\n try {\n await lastEmit;\n }\n catch (error) { }\n const resultPromise = _emit(contract, event, args, payload);\n lastEmit = resultPromise;\n return await resultPromise;\n}\nconst passProperties = [\"then\"];\nexport class BaseContract {\n constructor(target, abi, runner = null, _deployTx) {\n const iface = Interface.from(abi);\n defineProperties(this, { target, runner, interface: iface });\n Object.defineProperty(this, internal, { value: {} });\n let addrPromise;\n let addr = null;\n let deployTx = null;\n if (_deployTx) {\n const provider = getRunner(runner, \"getLogs\");\n deployTx = new ContractTransactionResponse(this.interface, provider, _deployTx);\n }\n let subs = new Map();\n // Resolve the target as the address\n if (typeof (target) === \"string\") {\n if (isHexString(target)) {\n addr = target;\n addrPromise = Promise.resolve(target);\n }\n else {\n const resolver = getRunner(runner, \"resolveName\");\n if (!canResolve(resolver)) {\n throw logger.makeError(\"contract runner does not support name resolution\", \"UNSUPPORTED_OPERATION\", {\n operation: \"resolveName\"\n });\n }\n addrPromise = resolver.resolveName(target).then((addr) => {\n if (addr == null) {\n throw new Error(\"TODO\");\n }\n getInternal(this).addr = addr;\n return addr;\n });\n }\n }\n else {\n addrPromise = target.getAddress().then((addr) => {\n if (addr == null) {\n throw new Error(\"TODO\");\n }\n getInternal(this).addr = addr;\n return addr;\n });\n }\n // Set our private values\n setInternal(this, { addrPromise, addr, deployTx, subs });\n // Add the event filters\n const filters = new Proxy({}, {\n get: (target, _prop, receiver) => {\n // Pass important checks (like `then` for Promise) through\n if (passProperties.indexOf(_prop) >= 0) {\n return Reflect.get(target, _prop, receiver);\n }\n const prop = String(_prop);\n const result = this.getEvent(prop);\n if (result) {\n return result;\n }\n throw new Error(`unknown contract event: ${prop}`);\n }\n });\n defineProperties(this, { filters });\n // Return a Proxy that will respond to functions\n return new Proxy(this, {\n get: (target, _prop, receiver) => {\n if (_prop in target || passProperties.indexOf(_prop) >= 0) {\n return Reflect.get(target, _prop, receiver);\n }\n const prop = String(_prop);\n const result = target.getFunction(prop);\n if (result) {\n return result;\n }\n throw new Error(`unknown contract method: ${prop}`);\n }\n });\n }\n async getAddress() { return await getInternal(this).addrPromise; }\n deploymentTransaction() {\n return getInternal(this).deployTx;\n }\n getFunction(key) {\n if (typeof (key) !== \"string\") {\n key = key.format();\n }\n return (new WrappedMethod(this, key));\n }\n getEvent(key) {\n if (typeof (key) !== \"string\") {\n key = key.format();\n }\n return (new WrappedEvent(this, key));\n }\n async queryFilter(event, fromBlock = 0, toBlock = \"latest\") {\n const { addr, addrPromise } = getInternal(this);\n const address = (addr ? addr : (await addrPromise));\n const { fragment, topics } = await getSubTag(this, event);\n const filter = { address, topics, fromBlock, toBlock };\n const runner = getRunner(this.runner, \"getLogs\");\n if (!canQuery(runner)) {\n return logger.throwError(\"contract runner does not support querying\", \"UNSUPPORTED_OPERATION\", {\n operation: \"getLogs\"\n });\n }\n return (await runner.getLogs(filter)).map((log) => {\n return new EventLog(log, this.interface, fragment);\n });\n }\n async on(event, listener) {\n const sub = await getSub(this, event);\n sub.listeners.push({ listener, once: false });\n sub.start();\n return this;\n }\n async once(event, listener) {\n const sub = await getSub(this, event);\n sub.listeners.push({ listener, once: true });\n sub.start();\n return this;\n }\n async emit(event, ...args) {\n return await emit(this, event, args, null);\n }\n async listenerCount(event) {\n if (event) {\n const sub = await hasSub(this, event);\n if (!sub) {\n return 0;\n }\n return sub.listeners.length;\n }\n const { subs } = getInternal(this);\n let total = 0;\n for (const { listeners } of subs.values()) {\n total += listeners.length;\n }\n return total;\n }\n async listeners(event) {\n if (event) {\n const sub = await hasSub(this, event);\n if (!sub) {\n return [];\n }\n return sub.listeners.map(({ listener }) => listener);\n }\n const { subs } = getInternal(this);\n let result = [];\n for (const { listeners } of subs.values()) {\n result = result.concat(listeners.map(({ listener }) => listener));\n }\n return result;\n }\n async off(event, listener) {\n const sub = await hasSub(this, event);\n if (!sub) {\n return this;\n }\n if (listener) {\n const index = sub.listeners.map(({ listener }) => listener).indexOf(listener);\n if (index >= 0) {\n sub.listeners.splice(index, 1);\n }\n }\n if (listener == null || sub.listeners.length === 0) {\n sub.stop();\n getInternal(this).subs.delete(sub.tag);\n }\n return this;\n }\n async removeAllListeners(event) {\n if (event) {\n const sub = await hasSub(this, event);\n if (!sub) {\n return this;\n }\n sub.stop();\n getInternal(this).subs.delete(sub.tag);\n }\n else {\n const { subs } = getInternal(this);\n for (const { tag, stop } of subs.values()) {\n stop();\n subs.delete(tag);\n }\n }\n return this;\n }\n // Alias for \"on\"\n async addListener(event, listener) {\n return await this.on(event, listener);\n }\n // Alias for \"off\"\n async removeListener(event, listener) {\n return await this.off(event, listener);\n }\n static buildClass(abi) {\n class CustomContract extends BaseContract {\n constructor(address, runner = null) {\n super(address, abi, runner);\n }\n }\n return CustomContract;\n }\n ;\n static from(target, abi, runner = null) {\n const contract = new this(target, abi, runner);\n return contract;\n }\n}\nfunction _ContractBase() {\n return BaseContract;\n}\nexport class Contract extends _ContractBase() {\n}\n//# sourceMappingURL=contract.js.map","import { getAddress } from \"@ethersproject/address\";\nimport { keccak256 } from \"@ethersproject/crypto\";\nimport { SigningKey } from \"@ethersproject/signing-key\";\nexport function computeAddress(key) {\n const publicKey = SigningKey.computePublicKey(key, false);\n return getAddress(keccak256(\"0x\" + publicKey.substring(4)).substring(26));\n}\n//# sourceMappingURL=address.js.map","const subsChrs = \" !#$%&'()*+,-./<=>?@[]^_`{|}~\";\nconst Word = /^[a-z]*$/i;\nfunction unfold(words, sep) {\n let initial = 97;\n return words.reduce((accum, word) => {\n if (word === sep) {\n initial++;\n }\n else if (word.match(Word)) {\n accum.push(String.fromCharCode(initial) + word);\n }\n else {\n initial = 97;\n accum.push(word);\n }\n return accum;\n }, []);\n}\nexport function decode(data, subs) {\n // Replace all the substitutions with their expanded form\n for (let i = subsChrs.length - 1; i >= 0; i--) {\n data = data.split(subsChrs[i]).join(subs.substring(2 * i, 2 * i + 2));\n }\n // Get all tle clumps; each suffix, first-increment and second-increment\n const clumps = [];\n const leftover = data.replace(/(:|([0-9])|([A-Z][a-z]*))/g, (all, item, semi, word) => {\n if (semi) {\n for (let i = parseInt(semi); i >= 0; i--) {\n clumps.push(\";\");\n }\n }\n else {\n clumps.push(item.toLowerCase());\n }\n return \"\";\n });\n if (leftover) {\n throw new Error(`leftovers: ${JSON.stringify(leftover)}`);\n }\n return unfold(unfold(clumps, \";\"), \":\");\n}\nexport function decodeOwl(data) {\n if (data[0] !== \"0\") {\n throw TypeError(\"unsupported auwl data\");\n }\n return decode(data.substring(1 + 2 * subsChrs.length), data.substring(1, 1 + 2 * subsChrs.length));\n}\n//# sourceMappingURL=decode-owl.js.map","export const version = \"@ethersproject/wordlists@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","import { defineProperties } from \"@ethersproject/properties\";\nexport class Wordlist {\n constructor(locale) {\n defineProperties(this, { locale });\n }\n // Subclasses may override this\n split(mnemonic) {\n return mnemonic.toLowerCase().split(/ +/g);\n }\n // Subclasses may override this\n join(words) {\n return words.join(\" \");\n }\n}\n//# sourceMappingURL=wordlist.js.map","// Use the encode-latin.js script to create the necessary\n// data files to be consumed by this class\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _WordlistOwl_instances, _WordlistOwl_data, _WordlistOwl_checksum, _WordlistOwl_words, _WordlistOwl_loadWords;\nimport { id } from \"@ethersproject/hash\";\nimport { decodeOwl } from \"./decode-owl.js\";\nimport { logger } from \"./logger.js\";\nimport { Wordlist } from \"./wordlist.js\";\nexport class WordlistOwl extends Wordlist {\n constructor(locale, data, checksum) {\n super(locale);\n _WordlistOwl_instances.add(this);\n _WordlistOwl_data.set(this, void 0);\n _WordlistOwl_checksum.set(this, void 0);\n _WordlistOwl_words.set(this, void 0);\n __classPrivateFieldSet(this, _WordlistOwl_data, data, \"f\");\n __classPrivateFieldSet(this, _WordlistOwl_checksum, checksum, \"f\");\n __classPrivateFieldSet(this, _WordlistOwl_words, null, \"f\");\n }\n get _data() { return __classPrivateFieldGet(this, _WordlistOwl_data, \"f\"); }\n _decodeWords() {\n return decodeOwl(__classPrivateFieldGet(this, _WordlistOwl_data, \"f\"));\n }\n getWord(index) {\n const words = __classPrivateFieldGet(this, _WordlistOwl_instances, \"m\", _WordlistOwl_loadWords).call(this);\n if (index < 0 || index >= words.length) {\n logger.throwArgumentError(`invalid word index: ${index}`, \"index\", index);\n }\n return words[index];\n }\n getWordIndex(word) {\n return __classPrivateFieldGet(this, _WordlistOwl_instances, \"m\", _WordlistOwl_loadWords).call(this).indexOf(word);\n }\n}\n_WordlistOwl_data = new WeakMap(), _WordlistOwl_checksum = new WeakMap(), _WordlistOwl_words = new WeakMap(), _WordlistOwl_instances = new WeakSet(), _WordlistOwl_loadWords = function _WordlistOwl_loadWords() {\n if (__classPrivateFieldGet(this, _WordlistOwl_words, \"f\") == null) {\n const words = this._decodeWords();\n // Verify the computed list matches the official list\n const checksum = id(words.join(\"\\n\") + \"\\n\");\n /* c8 ignore start */\n if (checksum !== __classPrivateFieldGet(this, _WordlistOwl_checksum, \"f\")) {\n throw new Error(`BIP39 Wordlist for ${this.locale} FAILED`);\n }\n /* c8 ignore stop */\n __classPrivateFieldSet(this, _WordlistOwl_words, words, \"f\");\n }\n return __classPrivateFieldGet(this, _WordlistOwl_words, \"f\");\n};\n//# sourceMappingURL=wordlist-owl.js.map","import { WordlistOwl } from \"./wordlist-owl.js\";\nconst words = \"0erleonalorenseinceregesticitStanvetearctssi#ch2Athck&tneLl0And#Il.yLeOutO=S|S%b/ra@SurdU'0Ce[Cid|CountCu'Hie=IdOu,-Qui*Ro[TT]T%T*[Tu$0AptDD-tD*[Ju,M.UltV<)Vi)0Rob-0FairF%dRaid0A(EEntRee0Ead0MRRp%tS!_rmBumCoholErtI&LLeyLowMo,O}PhaReadySoT Ways0A>urAz(gOngOuntU'd0Aly,Ch%Ci|G G!GryIm$K!Noun)Nu$O` Sw T&naTiqueXietyY1ArtOlogyPe?P!Pro=Ril1ChCt-EaEnaGueMMedM%MyOundR<+Re,Ri=RowTTefa@Ti,Tw%k0KPe@SaultSetSi,SumeThma0H!>OmTa{T&dT.udeTra@0Ct]D.Gu,NtTh%ToTumn0Era+OcadoOid0AkeA*AyEsomeFulKw?d0Is:ByChel%C#D+GL<)Lc#y~MbooN_{Ad!AftAmA}AshAt AwlAzyEamEd.EekEwI{etImeIspIt-OpO[Ou^OwdUci$UelUi'Umb!Un^UshYY,$2BeLtu*PPbo?dRiousRr|Rta(R=Sh]/omTe3C!:DMa+MpN)Ng R(gShUght WnY3AlBa>BrisCadeCemb CideCl(eC%a>C*a'ErF&'F(eFyG*eLayLiv M3AgramAlAm#dAryCeE'lEtFf G.$Gn.yLemmaNn NosaurRe@RtSag*eScov Sea'ShSmi[S%d Splay/<)V tVideV%)Zzy5Ct%Cum|G~Lph(Ma(Na>NkeyN%OrSeUb!Ve_ftAg#AmaA,-AwEamE[IftIllInkIpI=OpUmY2CkMbNeR(g/T^Ty1Arf1Nam-:G G!RlyRnR`Sily/Sy1HoOlogyOnomy0GeItUca>1F%t0G1GhtTh 2BowD E@r-EgSe0B?kBodyBra)Er+Ot]PloyPow Pty0Ab!A@DD![D%'EmyErgyF%)Ga+G(eH<)JoyLi,OughR-hRollSu*T Ti*TryVelope1Isode0U$Uip0AA'OdeOs]R%Upt0CapeSayS&)Ta>0Ern$H-s1Id&)IlOkeOl=1A@Amp!Ce[Ch<+C.eCludeCu'Ecu>Erci'Hau,Hib.I!I,ItOt-PM&'Mu}Pa@Po'Pro=Pul'0ChCludeComeC*a'DexD-a>Do%Du,ryFN Noc|PutQuirySSue0Em1Ory:CketGu?RZz3AlousAns~yWel9BInKeUr}yY5D+I)MpNg!Ni%Nk/:Ng?oo3EnEpT^upY3CkDD}yNdNgdomSsTT^&TeTt&Wi4EeIfeO{Ow:BBelB%Dd DyKeMpNgua+PtopR+T T(UghUndryVaWWnWsu.Y Zy3Ad AfArnA=Ctu*FtGG$G&dIsu*M#NdNg`NsOp?dSs#Tt Vel3ArB tyBr?yC&'FeFtGhtKeMbM.NkOnQuid/Tt!VeZ?d5AdAnB, C$CkG-NelyNgOpTt yUdUn+VeY$5CkyGga+Mb N?N^Xury3R-s:Ch(eDG-G}tIdIlInJ%KeMm$NNa+Nda>NgoNs]Nu$P!Rb!R^Rg(R(eRketRria+SkSs/ T^T i$ThTrixTt XimumZe3AdowAnAsu*AtCh<-D$DiaLodyLtMb M%yNt]NuRcyR+R.RryShSsa+T$Thod3Dd!DnightLk~]M-NdNimumN%Nu>Rac!Rr%S ySs/akeXXedXtu*5Bi!DelDifyMM|N.%NkeyN, N`OnR$ReRn(gSqu.oTh T]T%Unta(U'VeVie5ChFf(LeLtiplySc!SeumShroomS-/Tu$3Self/ yTh:I=MePk(Rrow/yT]Tu*3ArCkEdGati=G!@I` PhewR=/TTw%kUtr$V WsXt3CeGht5B!I'M(eeOd!Rm$R`SeTab!TeTh(gTi)VelW5C!?Mb R'T:K0EyJe@Li+Scu*S =Ta(Vious0CurEAyEa'Ed+U{UgUn+2EmEtIntL?LeLi)NdNyOlPul?Rt]S.]Ssib!/TatoTt yV tyWd W _@i)Ai'Ed-tEf Epa*Es|EttyEv|I)IdeIm?yIntI%.yIs#Iva>IzeOb!mO)[Odu)Of.OgramOje@Omo>OofOp tyOsp O>@OudOvide2Bl-Dd(g~LpL'Mpk(N^PilPpyR^a'R.yRpo'R'ShTZz!3Ramid:99Al.yAntumArt E,]I{ItIzO>:Bb.Cco#CeCkD?DioIlInI'~yMpN^NdomN+PidReTeTh V&WZ%3AdyAlAs#BelBuildC$lCei=CipeC%dCyc!Du)F!@F%mFu'G]G*tGul?Je@LaxLea'LiefLyMa(Memb M(dMo=Nd NewNtOp&PairPeatPla)P%tQui*ScueSemb!Si,Sour)Sp#'SultTi*T*atTurnUn]Ve$ViewW?d2Y`m0BBb#CeChDeD+F!GhtGidNgOtPp!SkTu$V$V 5AdA,BotBu,CketM<)OfOkieOmSeTa>UghUndU>Y$5Bb DeGLeNNwayR$:DDd!D}[FeIlLadLm#L#LtLu>MeMp!NdTisfyToshiU)Usa+VeY1A!AnA*Att E}HemeHoolI&)I[%sOrp]OutRapRe&RiptRub1AAr^As#AtC#dC*tCt]Cur.yEdEkGm|Le@~M(?Ni%N'Nt&)RiesRvi)Ss]Tt!TupV&_dowAftAllowA*EdEllEriffIeldIftI}IpIv O{OeOotOpOrtOuld O=RimpRugUff!Y0Bl(gCkDeE+GhtGnL|Lk~yLv Mil?Mp!N)NgR&/ Tua>XZe1A>Et^IIllInIrtUll0AbAmEepEnd I)IdeIghtImOgAyEakEelEmEpE*oI{IllIngO{Oma^O}OolOryO=Ra>gyReetRikeR#gRugg!Ud|UffUmb!Y!0Bje@Bm.BwayC)[ChDd&Ff G?G+,ItMm NNnyN'tP PplyP*meReRfa)R+Rpri'RroundR=ySpe@/a(1AllowAmpApArmE?EetIftImIngIt^Ord1MbolMptomRup/em:B!Ck!GIlL|LkNkPeR+tSk/eTtooXi3A^Am~NNGradeHoldOnP Set1BOng::Rd3Ar~ow9UUngU`:3BraRo9NeO\";\nconst checksum = \"0x3c8acc1e7b08d8e76f9fda015ef48dc8c710a73cb7e0f77b2c18a9b5a7adde60\";\nexport class LangEn extends WordlistOwl {\n constructor() { super(\"en\", words, checksum); }\n}\nexport const langEn = new LangEn();\n//# sourceMappingURL=lang-en.js.map","import { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version.js\";\nexport const logger = new Logger(version);\n//# sourceMappingURL=logger.js.map","export const version = \"@ethersproject/wallet@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map","import { langEn as en } from \"./lang-en.js\";\nexport const wordlists = Object.freeze({\n en\n});\n//# sourceMappingURL=wordlists-en.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _WordlistOwlA_accent;\nimport { WordlistOwl } from \"./wordlist-owl.js\";\nimport { decodeOwlA } from \"./decode-owla.js\";\nexport class WordlistOwlA extends WordlistOwl {\n constructor(locale, data, accent, checksum) {\n super(locale, data, checksum);\n _WordlistOwlA_accent.set(this, void 0);\n __classPrivateFieldSet(this, _WordlistOwlA_accent, accent, \"f\");\n }\n get _accent() { return __classPrivateFieldGet(this, _WordlistOwlA_accent, \"f\"); }\n _decodeWords() {\n return decodeOwlA(this._data, this._accent);\n }\n}\n_WordlistOwlA_accent = new WeakMap();\n//# sourceMappingURL=wordlist-owla.js.map","import { decodeBits } from \"./bit-reader.js\";\nimport { decodeOwl } from \"./decode-owl.js\";\nexport function decodeOwlA(data, accents) {\n let words = decodeOwl(data).join(\",\");\n // Inject the accents\n accents.split(/,/g).forEach((accent) => {\n const match = accent.match(/^([a-z]*)([0-9]+)([0-9])(.*)$/);\n if (!match) {\n throw new Error(\"internal error parsing accents\");\n }\n let posOffset = 0;\n const positions = decodeBits(parseInt(match[3]), match[4]);\n const charCode = parseInt(match[2]);\n const regex = new RegExp(`([${match[1]}])`, \"g\");\n words = words.replace(regex, (all, letter) => {\n const rem = --positions[posOffset];\n if (rem === 0) {\n letter = String.fromCharCode(letter.charCodeAt(0), charCode);\n posOffset++;\n }\n return letter;\n });\n });\n return words.split(\",\");\n}\n//# sourceMappingURL=decode-owla.js.map","const Base64 = \")!@#$%^&*(ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_\";\nexport function decodeBits(width, data) {\n const maxValue = (1 << width) - 1;\n const result = [];\n let accum = 0, bits = 0, flood = 0;\n for (let i = 0; i < data.length; i++) {\n // Accumulate 6 bits of data\n accum = ((accum << 6) | Base64.indexOf(data[i]));\n bits += 6;\n // While we have enough for a word...\n while (bits >= width) {\n // ...read the word\n const value = (accum >> (bits - width));\n accum &= (1 << (bits - width)) - 1;\n bits -= width;\n // A value of 0 indicates we exceeded maxValue, it\n // floods over into the next value\n if (value === 0) {\n flood += maxValue;\n }\n else {\n result.push(value + flood);\n flood = 0;\n }\n }\n }\n return result;\n}\n//# sourceMappingURL=bit-reader.js.map","import { arrayify, hexlify } from \"@ethersproject/bytes\";\nimport { pbkdf2, sha256 } from \"@ethersproject/crypto\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { toUtf8Bytes, UnicodeNormalizationForm } from \"@ethersproject/strings\";\nimport { langEn } from \"@ethersproject/wordlists\";\nimport { logger } from \"./logger.js\";\n// Returns a byte with the MSB bits set\nfunction getUpperMask(bits) {\n return ((1 << bits) - 1) << (8 - bits) & 0xff;\n}\n// Returns a byte with the LSB bits set\nfunction getLowerMask(bits) {\n return ((1 << bits) - 1) & 0xff;\n}\nfunction mnemonicToEntropy(mnemonic, wordlist = langEn) {\n logger.assertNormalize(\"NFKD\");\n if (wordlist == null) {\n wordlist = langEn;\n }\n const words = wordlist.split(mnemonic);\n if ((words.length % 3) !== 0 || words.length < 12 || words.length > 24) {\n logger.throwArgumentError(\"invalid mnemonic length\", \"mnemonic\", \"[ REDACTED ]\");\n }\n const entropy = arrayify(new Uint8Array(Math.ceil(11 * words.length / 8)));\n let offset = 0;\n for (let i = 0; i < words.length; i++) {\n let index = wordlist.getWordIndex(words[i].normalize(\"NFKD\"));\n if (index === -1) {\n logger.throwArgumentError(`invalid mnemonic word at index ${i}`, \"mnemonic\", \"[ REDACTED ]\");\n }\n for (let bit = 0; bit < 11; bit++) {\n if (index & (1 << (10 - bit))) {\n entropy[offset >> 3] |= (1 << (7 - (offset % 8)));\n }\n offset++;\n }\n }\n const entropyBits = 32 * words.length / 3;\n const checksumBits = words.length / 3;\n const checksumMask = getUpperMask(checksumBits);\n const checksum = arrayify(sha256(entropy.slice(0, entropyBits / 8)))[0] & checksumMask;\n if (checksum !== (entropy[entropy.length - 1] & checksumMask)) {\n logger.throwArgumentError(\"invalid mnemonic checksum\", \"mnemonic\", \"[ REDACTED ]\");\n }\n return hexlify(entropy.slice(0, entropyBits / 8));\n}\nfunction entropyToMnemonic(entropy, wordlist = langEn) {\n if ((entropy.length % 4) || entropy.length < 16 || entropy.length > 32) {\n logger.throwArgumentError(\"invalid entropy size\", \"entropy\", \"[ REDACTED ]\");\n }\n if (wordlist == null) {\n wordlist = langEn;\n }\n const indices = [0];\n let remainingBits = 11;\n for (let i = 0; i < entropy.length; i++) {\n // Consume the whole byte (with still more to go)\n if (remainingBits > 8) {\n indices[indices.length - 1] <<= 8;\n indices[indices.length - 1] |= entropy[i];\n remainingBits -= 8;\n // This byte will complete an 11-bit index\n }\n else {\n indices[indices.length - 1] <<= remainingBits;\n indices[indices.length - 1] |= entropy[i] >> (8 - remainingBits);\n // Start the next word\n indices.push(entropy[i] & getLowerMask(8 - remainingBits));\n remainingBits += 3;\n }\n }\n // Compute the checksum bits\n const checksumBits = entropy.length / 4;\n const checksum = parseInt(sha256(entropy).substring(2, 4), 16) & getUpperMask(checksumBits);\n // Shift the checksum into the word indices\n indices[indices.length - 1] <<= checksumBits;\n indices[indices.length - 1] |= (checksum >> (8 - checksumBits));\n return wordlist.join(indices.map((index) => wordlist.getWord(index)));\n}\nconst _guard = {};\nexport class Mnemonic {\n constructor(guard, entropy, phrase, password, wordlist) {\n if (password == null) {\n password = \"\";\n }\n if (wordlist == null) {\n wordlist = langEn;\n }\n logger.assertPrivate(guard, _guard, \"Mnemonic\");\n defineProperties(this, { phrase, password, wordlist, entropy });\n }\n computeSeed() {\n const salt = toUtf8Bytes(\"mnemonic\" + this.password, UnicodeNormalizationForm.NFKD);\n return pbkdf2(toUtf8Bytes(this.phrase, UnicodeNormalizationForm.NFKD), salt, 2048, 64, \"sha512\");\n }\n static fromPhrase(phrase, password, wordlist) {\n // Normalize the case and space; throws if invalid\n const entropy = mnemonicToEntropy(phrase, wordlist);\n phrase = entropyToMnemonic(logger.getBytes(entropy), wordlist);\n return new Mnemonic(_guard, entropy, phrase, password, wordlist);\n }\n static fromEntropy(_entropy, password, wordlist) {\n const entropy = logger.getBytes(_entropy, \"entropy\");\n const phrase = entropyToMnemonic(entropy, wordlist);\n return new Mnemonic(_guard, hexlify(entropy), phrase, password, wordlist);\n }\n static entropyToPhrase(_entropy, wordlist) {\n const entropy = logger.getBytes(_entropy, \"entropy\");\n return entropyToMnemonic(entropy, wordlist);\n }\n static phraseToEntropy(phrase, wordlist) {\n return mnemonicToEntropy(phrase, wordlist);\n }\n static isValidMnemonic(phrase, wordlist) {\n try {\n mnemonicToEntropy(phrase, wordlist);\n return true;\n }\n catch (error) { }\n return false;\n }\n}\n//# sourceMappingURL=mnemonic.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _BaseWallet_signingKey;\nimport { getAddress, resolveAddress } from \"@ethersproject/address\";\nimport { hashMessage, TypedDataEncoder } from \"@ethersproject/hash\";\nimport { defineProperties, resolveProperties } from \"@ethersproject/properties\";\nimport { AbstractSigner } from \"@ethersproject/providers\";\nimport { Transaction } from \"@ethersproject/transactions\";\nimport { computeAddress } from \"./address.js\";\nimport { logger } from \"./logger.js\";\nexport class BaseWallet extends AbstractSigner {\n constructor(privateKey, provider) {\n super(provider);\n _BaseWallet_signingKey.set(this, void 0);\n __classPrivateFieldSet(this, _BaseWallet_signingKey, privateKey, \"f\");\n const address = computeAddress(this.signingKey.publicKey);\n defineProperties(this, { address });\n }\n // Store these in getters to reduce visibility in console.log\n get signingKey() { return __classPrivateFieldGet(this, _BaseWallet_signingKey, \"f\"); }\n get privateKey() { return this.signingKey.privateKey; }\n async getAddress() { return this.address; }\n connect(provider) {\n return new BaseWallet(__classPrivateFieldGet(this, _BaseWallet_signingKey, \"f\"), provider);\n }\n async signTransaction(_tx) {\n // Replace any Addressable or ENS name with an address\n const tx = Object.assign({}, _tx, await resolveProperties({\n to: (_tx.to ? resolveAddress(_tx.to, this.provider) : undefined),\n from: (_tx.from ? resolveAddress(_tx.from, this.provider) : undefined)\n }));\n if (tx.from != null) {\n if (getAddress(tx.from) !== this.address) {\n logger.throwArgumentError(\"transaction from address mismatch\", \"tx.from\", _tx.from);\n }\n delete tx.from;\n }\n // Build the transaction\n const btx = Transaction.from(tx);\n btx.signature = this.signingKey.sign(btx.unsignedHash);\n return btx.serialized;\n }\n async signMessage(message) {\n return this.signingKey.sign(hashMessage(message)).serialized;\n }\n async signTypedData(domain, types, value) {\n // Populate any ENS names\n const populated = await TypedDataEncoder.resolveNames(domain, types, value, async (name) => {\n if (this.provider == null) {\n return logger.throwError(\"cannot resolve ENS names without a provider\", \"UNSUPPORTED_OPERATION\", {\n operation: \"resolveName\",\n info: { name }\n });\n }\n const address = await this.provider.resolveName(name);\n if (address == null) {\n return logger.throwError(\"unconfigured ENS name\", \"UNCONFIGURED_NAME\", {\n value: name\n });\n }\n return address;\n });\n return this.signingKey.sign(TypedDataEncoder.hash(populated.domain, types, populated.value)).serialized;\n }\n}\n_BaseWallet_signingKey = new WeakMap();\n//# sourceMappingURL=base-wallet.js.map","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar _a, _HDNodeWallet_fromSeed, _HDNodeWalletManager_root;\nimport { arrayify, concat, dataSlice, hexlify } from \"@ethersproject/bytes\";\nimport { computeHmac, randomBytes, ripemd160, sha256 } from \"@ethersproject/crypto\";\nimport { decodeBase58, encodeBase58, toBigInt, toHex } from \"@ethersproject/math\";\nimport { defineProperties } from \"@ethersproject/properties\";\nimport { VoidSigner } from \"@ethersproject/providers\";\nimport { SigningKey } from \"@ethersproject/signing-key\";\nimport { langEn } from \"@ethersproject/wordlists/lib/lang-en.js\";\nimport { computeAddress } from \"./address.js\";\nimport { logger } from \"./logger.js\";\nimport { Mnemonic } from \"./mnemonic.js\";\nimport { BaseWallet } from \"./base-wallet.js\";\nexport const defaultPath = \"m/44'/60'/0'/0/0\";\n// \"Bitcoin seed\"\nconst MasterSecret = new Uint8Array([66, 105, 116, 99, 111, 105, 110, 32, 115, 101, 101, 100]);\nconst HardenedBit = 0x80000000;\nconst N = BigInt(\"0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141\");\nconst Nibbles = \"0123456789abcdef\";\nfunction zpad(value, length) {\n let result = \"\";\n while (value) {\n result = Nibbles[value % 16] + result;\n value = Math.trunc(value / 16);\n }\n while (result.length < length * 2) {\n result = \"0\" + result;\n }\n return \"0x\" + result;\n}\nfunction encodeBase58Check(_value) {\n const value = logger.getBytes(_value);\n const check = dataSlice(sha256(sha256(value)), 0, 4);\n const bytes = concat([value, check]);\n return encodeBase58(bytes);\n}\nconst _guard = {};\nfunction ser_I(index, chainCode, publicKey, privateKey) {\n const data = new Uint8Array(37);\n if (index & HardenedBit) {\n if (privateKey == null) {\n return logger.throwError(\"cannot derive child of neutered node\", \"UNSUPPORTED_OPERATION\", {\n operation: \"deriveChild\"\n });\n }\n // Data = 0x00 || ser_256(k_par)\n data.set(arrayify(privateKey), 1);\n }\n else {\n // Data = ser_p(point(k_par))\n data.set(arrayify(publicKey));\n }\n // Data += ser_32(i)\n for (let i = 24; i >= 0; i -= 8) {\n data[33 + (i >> 3)] = ((index >> (24 - i)) & 0xff);\n }\n const I = arrayify(computeHmac(\"sha512\", chainCode, data));\n return { IL: I.slice(0, 32), IR: I.slice(32) };\n}\nfunction derivePath(node, path) {\n const components = path.split(\"/\");\n if (components.length === 0 || (components[0] === \"m\" && node.depth !== 0)) {\n throw new Error(\"invalid path - \" + path);\n }\n if (components[0] === \"m\") {\n components.shift();\n }\n let result = node;\n for (let i = 0; i < components.length; i++) {\n const component = components[i];\n if (component.match(/^[0-9]+'$/)) {\n const index = parseInt(component.substring(0, component.length - 1));\n if (index >= HardenedBit) {\n throw new Error(\"invalid path index - \" + component);\n }\n result = result.deriveChild(HardenedBit + index);\n }\n else if (component.match(/^[0-9]+$/)) {\n const index = parseInt(component);\n if (index >= HardenedBit) {\n throw new Error(\"invalid path index - \" + component);\n }\n result = result.deriveChild(index);\n }\n else {\n throw new Error(\"invalid path component - \" + component);\n }\n }\n return result;\n}\nexport class HDNodeWallet extends BaseWallet {\n constructor(guard, signingKey, parentFingerprint, chainCode, path, index, depth, mnemonic, provider) {\n super(signingKey, provider);\n logger.assertPrivate(guard, _guard, \"HDNodeWallet\");\n defineProperties(this, { publicKey: signingKey.compressedPublicKey });\n const fingerprint = dataSlice(ripemd160(sha256(this.publicKey)), 0, 4);\n defineProperties(this, {\n parentFingerprint, fingerprint,\n chainCode, path, index, depth\n });\n defineProperties(this, { mnemonic });\n }\n connect(provider) {\n return new HDNodeWallet(_guard, this.signingKey, this.parentFingerprint, this.chainCode, this.path, this.index, this.depth, this.mnemonic, provider);\n }\n get extendedKey() {\n // We only support the mainnet values for now, but if anyone needs\n // testnet values, let me know. I believe current sentiment is that\n // we should always use mainnet, and use BIP-44 to derive the network\n // - Mainnet: public=0x0488B21E, private=0x0488ADE4\n // - Testnet: public=0x043587CF, private=0x04358394\n if (this.depth >= 256) {\n throw new Error(\"Depth too large!\");\n }\n return encodeBase58Check(concat([\n \"0x0488ADE4\", zpad(this.depth, 1), this.parentFingerprint,\n zpad(this.index, 4), this.chainCode,\n concat([\"0x00\", this.privateKey])\n ]));\n }\n hasPath() { return (this.path != null); }\n neuter() {\n return new HDNodeVoidWallet(_guard, this.address, this.publicKey, this.parentFingerprint, this.chainCode, this.path, this.index, this.depth, this.provider);\n }\n deriveChild(_index) {\n const index = logger.getNumber(_index, \"index\");\n if (index > 0xffffffff) {\n throw new Error(\"invalid index - \" + String(index));\n }\n // Base path\n let path = this.path;\n if (path) {\n path += \"/\" + (index & ~HardenedBit);\n if (index & HardenedBit) {\n path += \"'\";\n }\n }\n const { IR, IL } = ser_I(index, this.chainCode, this.publicKey, this.privateKey);\n const ki = new SigningKey(toHex((toBigInt(IL) + BigInt(this.privateKey)) % N, 32));\n return new HDNodeWallet(_guard, ki, this.fingerprint, hexlify(IR), path, index, this.depth + 1, this.mnemonic, this.provider);\n }\n derivePath(path) {\n return derivePath(this, path);\n }\n static fromSeed(seed) {\n return __classPrivateFieldGet(HDNodeWallet, _a, \"m\", _HDNodeWallet_fromSeed).call(HDNodeWallet, seed, null);\n }\n static fromPhrase(phrase, password = \"\", path = defaultPath, wordlist = langEn) {\n if (!path) {\n path = defaultPath;\n }\n const mnemonic = Mnemonic.fromPhrase(phrase, password, wordlist);\n return __classPrivateFieldGet(HDNodeWallet, _a, \"m\", _HDNodeWallet_fromSeed).call(HDNodeWallet, mnemonic.computeSeed(), mnemonic).derivePath(path);\n }\n static fromMnemonic(mnemonic, path = defaultPath) {\n if (!path) {\n path = defaultPath;\n }\n return __classPrivateFieldGet(HDNodeWallet, _a, \"m\", _HDNodeWallet_fromSeed).call(HDNodeWallet, mnemonic.computeSeed(), mnemonic).derivePath(path);\n }\n static fromExtendedKey(extendedKey) {\n const bytes = arrayify(decodeBase58(extendedKey)); // @TODO: redact\n if (bytes.length !== 82 || encodeBase58Check(bytes.slice(0, 78)) !== extendedKey) {\n logger.throwArgumentError(\"invalid extended key\", \"extendedKey\", \"[ REDACTED ]\");\n }\n const depth = bytes[4];\n const parentFingerprint = hexlify(bytes.slice(5, 9));\n const index = parseInt(hexlify(bytes.slice(9, 13)).substring(2), 16);\n const chainCode = hexlify(bytes.slice(13, 45));\n const key = bytes.slice(45, 78);\n switch (hexlify(bytes.slice(0, 4))) {\n // Public Key\n case \"0x0488b21e\":\n case \"0x043587cf\": {\n const publicKey = hexlify(key);\n return new HDNodeVoidWallet(_guard, computeAddress(publicKey), publicKey, parentFingerprint, chainCode, null, index, depth, null);\n }\n // Private Key\n case \"0x0488ade4\":\n case \"0x04358394 \":\n if (key[0] !== 0) {\n break;\n }\n return new HDNodeWallet(_guard, new SigningKey(key.slice(1)), parentFingerprint, chainCode, null, index, depth, null, null);\n }\n return logger.throwArgumentError(\"invalid extended key prefix\", \"extendedKey\", \"[ REDACTED ]\");\n }\n static createRandom(password = \"\", path = defaultPath, wordlist = langEn) {\n if (!path) {\n path = defaultPath;\n }\n const mnemonic = Mnemonic.fromEntropy(randomBytes(16), password, wordlist);\n return __classPrivateFieldGet(HDNodeWallet, _a, \"m\", _HDNodeWallet_fromSeed).call(HDNodeWallet, mnemonic.computeSeed(), mnemonic).derivePath(path);\n }\n}\n_a = HDNodeWallet, _HDNodeWallet_fromSeed = function _HDNodeWallet_fromSeed(_seed, mnemonic) {\n const seed = logger.getBytes(_seed, \"seed\");\n if (seed.length < 16 || seed.length > 64) {\n throw new Error(\"invalid seed\");\n }\n const I = arrayify(computeHmac(\"sha512\", MasterSecret, seed));\n const signingKey = new SigningKey(hexlify(I.slice(0, 32)));\n return new HDNodeWallet(_guard, signingKey, \"0x00000000\", hexlify(I.slice(32)), \"m\", 0, 0, mnemonic, null);\n};\nexport class HDNodeVoidWallet extends VoidSigner {\n constructor(guard, address, publicKey, parentFingerprint, chainCode, path, index, depth, provider) {\n super(address, provider);\n logger.assertPrivate(guard, _guard, \"HDNodeVoidWallet\");\n defineProperties(this, { publicKey });\n const fingerprint = dataSlice(ripemd160(sha256(publicKey)), 0, 4);\n defineProperties(this, {\n publicKey, fingerprint, parentFingerprint, chainCode, path, index, depth\n });\n }\n connect(provider) {\n return new HDNodeVoidWallet(_guard, this.address, this.publicKey, this.parentFingerprint, this.chainCode, this.path, this.index, this.depth, provider);\n }\n get extendedKey() {\n // We only support the mainnet values for now, but if anyone needs\n // testnet values, let me know. I believe current sentiment is that\n // we should always use mainnet, and use BIP-44 to derive the network\n // - Mainnet: public=0x0488B21E, private=0x0488ADE4\n // - Testnet: public=0x043587CF, private=0x04358394\n if (this.depth >= 256) {\n throw new Error(\"Depth too large!\");\n }\n return encodeBase58Check(concat([\n \"0x0488B21E\",\n zpad(this.depth, 1),\n this.parentFingerprint,\n zpad(this.index, 4),\n this.chainCode,\n this.publicKey,\n ]));\n }\n hasPath() { return (this.path != null); }\n deriveChild(_index) {\n const index = logger.getNumber(_index, \"index\");\n if (index > 0xffffffff) {\n throw new Error(\"invalid index - \" + String(index));\n }\n // Base path\n let path = this.path;\n if (path) {\n path += \"/\" + (index & ~HardenedBit);\n if (index & HardenedBit) {\n path += \"'\";\n }\n }\n const { IR, IL } = ser_I(index, this.chainCode, this.publicKey, null);\n const Ki = SigningKey._addPoints(IL, this.publicKey, true);\n const address = computeAddress(Ki);\n return new HDNodeVoidWallet(_guard, address, Ki, this.fingerprint, hexlify(IR), path, index, this.depth + 1, this.provider);\n }\n derivePath(path) {\n return derivePath(this, path);\n }\n}\nexport class HDNodeWalletManager {\n constructor(phrase, password = \"\", path = \"m/44'/60'/0'/0\", locale = langEn) {\n _HDNodeWalletManager_root.set(this, void 0);\n __classPrivateFieldSet(this, _HDNodeWalletManager_root, HDNodeWallet.fromPhrase(phrase, password, path, locale), \"f\");\n }\n getSigner(index = 0) {\n return __classPrivateFieldGet(this, _HDNodeWalletManager_root, \"f\").deriveChild(index);\n }\n}\n_HDNodeWalletManager_root = new WeakMap();\nexport function getAccountPath(_index) {\n const index = logger.getNumber(_index, \"index\");\n if (index < 0 || index >= HardenedBit) {\n logger.throwArgumentError(\"invalid account index\", \"index\", index);\n }\n return `m/44'/60'/${index}'/0/0`;\n}\n//# sourceMappingURL=hdwallet.js.map","/*! MIT License. Copyright 2015-2022 Richard Moore . See LICENSE.txt. */\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _AES_key, _AES_Kd, _AES_Ke;\n// Number of rounds by keysize\nconst numberOfRounds = { 16: 10, 24: 12, 32: 14 };\n// Round constant words\nconst rcon = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91];\n// S-box and Inverse S-box (S is for Substitution)\nconst S = [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16];\nconst Si = [0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d];\n// Transformations for encryption\nconst T1 = [0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a];\nconst T2 = [0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616];\nconst T3 = [0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16];\nconst T4 = [0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c];\n// Transformations for decryption\nconst T5 = [0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742];\nconst T6 = [0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857];\nconst T7 = [0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8];\nconst T8 = [0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0];\n// Transformations for decryption key expansion\nconst U1 = [0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3];\nconst U2 = [0x00000000, 0x0b0e090d, 0x161c121a, 0x1d121b17, 0x2c382434, 0x27362d39, 0x3a24362e, 0x312a3f23, 0x58704868, 0x537e4165, 0x4e6c5a72, 0x4562537f, 0x74486c5c, 0x7f466551, 0x62547e46, 0x695a774b, 0xb0e090d0, 0xbbee99dd, 0xa6fc82ca, 0xadf28bc7, 0x9cd8b4e4, 0x97d6bde9, 0x8ac4a6fe, 0x81caaff3, 0xe890d8b8, 0xe39ed1b5, 0xfe8ccaa2, 0xf582c3af, 0xc4a8fc8c, 0xcfa6f581, 0xd2b4ee96, 0xd9bae79b, 0x7bdb3bbb, 0x70d532b6, 0x6dc729a1, 0x66c920ac, 0x57e31f8f, 0x5ced1682, 0x41ff0d95, 0x4af10498, 0x23ab73d3, 0x28a57ade, 0x35b761c9, 0x3eb968c4, 0x0f9357e7, 0x049d5eea, 0x198f45fd, 0x12814cf0, 0xcb3bab6b, 0xc035a266, 0xdd27b971, 0xd629b07c, 0xe7038f5f, 0xec0d8652, 0xf11f9d45, 0xfa119448, 0x934be303, 0x9845ea0e, 0x8557f119, 0x8e59f814, 0xbf73c737, 0xb47dce3a, 0xa96fd52d, 0xa261dc20, 0xf6ad766d, 0xfda37f60, 0xe0b16477, 0xebbf6d7a, 0xda955259, 0xd19b5b54, 0xcc894043, 0xc787494e, 0xaedd3e05, 0xa5d33708, 0xb8c12c1f, 0xb3cf2512, 0x82e51a31, 0x89eb133c, 0x94f9082b, 0x9ff70126, 0x464de6bd, 0x4d43efb0, 0x5051f4a7, 0x5b5ffdaa, 0x6a75c289, 0x617bcb84, 0x7c69d093, 0x7767d99e, 0x1e3daed5, 0x1533a7d8, 0x0821bccf, 0x032fb5c2, 0x32058ae1, 0x390b83ec, 0x241998fb, 0x2f1791f6, 0x8d764dd6, 0x867844db, 0x9b6a5fcc, 0x906456c1, 0xa14e69e2, 0xaa4060ef, 0xb7527bf8, 0xbc5c72f5, 0xd50605be, 0xde080cb3, 0xc31a17a4, 0xc8141ea9, 0xf93e218a, 0xf2302887, 0xef223390, 0xe42c3a9d, 0x3d96dd06, 0x3698d40b, 0x2b8acf1c, 0x2084c611, 0x11aef932, 0x1aa0f03f, 0x07b2eb28, 0x0cbce225, 0x65e6956e, 0x6ee89c63, 0x73fa8774, 0x78f48e79, 0x49deb15a, 0x42d0b857, 0x5fc2a340, 0x54ccaa4d, 0xf741ecda, 0xfc4fe5d7, 0xe15dfec0, 0xea53f7cd, 0xdb79c8ee, 0xd077c1e3, 0xcd65daf4, 0xc66bd3f9, 0xaf31a4b2, 0xa43fadbf, 0xb92db6a8, 0xb223bfa5, 0x83098086, 0x8807898b, 0x9515929c, 0x9e1b9b91, 0x47a17c0a, 0x4caf7507, 0x51bd6e10, 0x5ab3671d, 0x6b99583e, 0x60975133, 0x7d854a24, 0x768b4329, 0x1fd13462, 0x14df3d6f, 0x09cd2678, 0x02c32f75, 0x33e91056, 0x38e7195b, 0x25f5024c, 0x2efb0b41, 0x8c9ad761, 0x8794de6c, 0x9a86c57b, 0x9188cc76, 0xa0a2f355, 0xabacfa58, 0xb6bee14f, 0xbdb0e842, 0xd4ea9f09, 0xdfe49604, 0xc2f68d13, 0xc9f8841e, 0xf8d2bb3d, 0xf3dcb230, 0xeecea927, 0xe5c0a02a, 0x3c7a47b1, 0x37744ebc, 0x2a6655ab, 0x21685ca6, 0x10426385, 0x1b4c6a88, 0x065e719f, 0x0d507892, 0x640a0fd9, 0x6f0406d4, 0x72161dc3, 0x791814ce, 0x48322bed, 0x433c22e0, 0x5e2e39f7, 0x552030fa, 0x01ec9ab7, 0x0ae293ba, 0x17f088ad, 0x1cfe81a0, 0x2dd4be83, 0x26dab78e, 0x3bc8ac99, 0x30c6a594, 0x599cd2df, 0x5292dbd2, 0x4f80c0c5, 0x448ec9c8, 0x75a4f6eb, 0x7eaaffe6, 0x63b8e4f1, 0x68b6edfc, 0xb10c0a67, 0xba02036a, 0xa710187d, 0xac1e1170, 0x9d342e53, 0x963a275e, 0x8b283c49, 0x80263544, 0xe97c420f, 0xe2724b02, 0xff605015, 0xf46e5918, 0xc544663b, 0xce4a6f36, 0xd3587421, 0xd8567d2c, 0x7a37a10c, 0x7139a801, 0x6c2bb316, 0x6725ba1b, 0x560f8538, 0x5d018c35, 0x40139722, 0x4b1d9e2f, 0x2247e964, 0x2949e069, 0x345bfb7e, 0x3f55f273, 0x0e7fcd50, 0x0571c45d, 0x1863df4a, 0x136dd647, 0xcad731dc, 0xc1d938d1, 0xdccb23c6, 0xd7c52acb, 0xe6ef15e8, 0xede11ce5, 0xf0f307f2, 0xfbfd0eff, 0x92a779b4, 0x99a970b9, 0x84bb6bae, 0x8fb562a3, 0xbe9f5d80, 0xb591548d, 0xa8834f9a, 0xa38d4697];\nconst U3 = [0x00000000, 0x0d0b0e09, 0x1a161c12, 0x171d121b, 0x342c3824, 0x3927362d, 0x2e3a2436, 0x23312a3f, 0x68587048, 0x65537e41, 0x724e6c5a, 0x7f456253, 0x5c74486c, 0x517f4665, 0x4662547e, 0x4b695a77, 0xd0b0e090, 0xddbbee99, 0xcaa6fc82, 0xc7adf28b, 0xe49cd8b4, 0xe997d6bd, 0xfe8ac4a6, 0xf381caaf, 0xb8e890d8, 0xb5e39ed1, 0xa2fe8cca, 0xaff582c3, 0x8cc4a8fc, 0x81cfa6f5, 0x96d2b4ee, 0x9bd9bae7, 0xbb7bdb3b, 0xb670d532, 0xa16dc729, 0xac66c920, 0x8f57e31f, 0x825ced16, 0x9541ff0d, 0x984af104, 0xd323ab73, 0xde28a57a, 0xc935b761, 0xc43eb968, 0xe70f9357, 0xea049d5e, 0xfd198f45, 0xf012814c, 0x6bcb3bab, 0x66c035a2, 0x71dd27b9, 0x7cd629b0, 0x5fe7038f, 0x52ec0d86, 0x45f11f9d, 0x48fa1194, 0x03934be3, 0x0e9845ea, 0x198557f1, 0x148e59f8, 0x37bf73c7, 0x3ab47dce, 0x2da96fd5, 0x20a261dc, 0x6df6ad76, 0x60fda37f, 0x77e0b164, 0x7aebbf6d, 0x59da9552, 0x54d19b5b, 0x43cc8940, 0x4ec78749, 0x05aedd3e, 0x08a5d337, 0x1fb8c12c, 0x12b3cf25, 0x3182e51a, 0x3c89eb13, 0x2b94f908, 0x269ff701, 0xbd464de6, 0xb04d43ef, 0xa75051f4, 0xaa5b5ffd, 0x896a75c2, 0x84617bcb, 0x937c69d0, 0x9e7767d9, 0xd51e3dae, 0xd81533a7, 0xcf0821bc, 0xc2032fb5, 0xe132058a, 0xec390b83, 0xfb241998, 0xf62f1791, 0xd68d764d, 0xdb867844, 0xcc9b6a5f, 0xc1906456, 0xe2a14e69, 0xefaa4060, 0xf8b7527b, 0xf5bc5c72, 0xbed50605, 0xb3de080c, 0xa4c31a17, 0xa9c8141e, 0x8af93e21, 0x87f23028, 0x90ef2233, 0x9de42c3a, 0x063d96dd, 0x0b3698d4, 0x1c2b8acf, 0x112084c6, 0x3211aef9, 0x3f1aa0f0, 0x2807b2eb, 0x250cbce2, 0x6e65e695, 0x636ee89c, 0x7473fa87, 0x7978f48e, 0x5a49deb1, 0x5742d0b8, 0x405fc2a3, 0x4d54ccaa, 0xdaf741ec, 0xd7fc4fe5, 0xc0e15dfe, 0xcdea53f7, 0xeedb79c8, 0xe3d077c1, 0xf4cd65da, 0xf9c66bd3, 0xb2af31a4, 0xbfa43fad, 0xa8b92db6, 0xa5b223bf, 0x86830980, 0x8b880789, 0x9c951592, 0x919e1b9b, 0x0a47a17c, 0x074caf75, 0x1051bd6e, 0x1d5ab367, 0x3e6b9958, 0x33609751, 0x247d854a, 0x29768b43, 0x621fd134, 0x6f14df3d, 0x7809cd26, 0x7502c32f, 0x5633e910, 0x5b38e719, 0x4c25f502, 0x412efb0b, 0x618c9ad7, 0x6c8794de, 0x7b9a86c5, 0x769188cc, 0x55a0a2f3, 0x58abacfa, 0x4fb6bee1, 0x42bdb0e8, 0x09d4ea9f, 0x04dfe496, 0x13c2f68d, 0x1ec9f884, 0x3df8d2bb, 0x30f3dcb2, 0x27eecea9, 0x2ae5c0a0, 0xb13c7a47, 0xbc37744e, 0xab2a6655, 0xa621685c, 0x85104263, 0x881b4c6a, 0x9f065e71, 0x920d5078, 0xd9640a0f, 0xd46f0406, 0xc372161d, 0xce791814, 0xed48322b, 0xe0433c22, 0xf75e2e39, 0xfa552030, 0xb701ec9a, 0xba0ae293, 0xad17f088, 0xa01cfe81, 0x832dd4be, 0x8e26dab7, 0x993bc8ac, 0x9430c6a5, 0xdf599cd2, 0xd25292db, 0xc54f80c0, 0xc8448ec9, 0xeb75a4f6, 0xe67eaaff, 0xf163b8e4, 0xfc68b6ed, 0x67b10c0a, 0x6aba0203, 0x7da71018, 0x70ac1e11, 0x539d342e, 0x5e963a27, 0x498b283c, 0x44802635, 0x0fe97c42, 0x02e2724b, 0x15ff6050, 0x18f46e59, 0x3bc54466, 0x36ce4a6f, 0x21d35874, 0x2cd8567d, 0x0c7a37a1, 0x017139a8, 0x166c2bb3, 0x1b6725ba, 0x38560f85, 0x355d018c, 0x22401397, 0x2f4b1d9e, 0x642247e9, 0x692949e0, 0x7e345bfb, 0x733f55f2, 0x500e7fcd, 0x5d0571c4, 0x4a1863df, 0x47136dd6, 0xdccad731, 0xd1c1d938, 0xc6dccb23, 0xcbd7c52a, 0xe8e6ef15, 0xe5ede11c, 0xf2f0f307, 0xfffbfd0e, 0xb492a779, 0xb999a970, 0xae84bb6b, 0xa38fb562, 0x80be9f5d, 0x8db59154, 0x9aa8834f, 0x97a38d46];\nconst U4 = [0x00000000, 0x090d0b0e, 0x121a161c, 0x1b171d12, 0x24342c38, 0x2d392736, 0x362e3a24, 0x3f23312a, 0x48685870, 0x4165537e, 0x5a724e6c, 0x537f4562, 0x6c5c7448, 0x65517f46, 0x7e466254, 0x774b695a, 0x90d0b0e0, 0x99ddbbee, 0x82caa6fc, 0x8bc7adf2, 0xb4e49cd8, 0xbde997d6, 0xa6fe8ac4, 0xaff381ca, 0xd8b8e890, 0xd1b5e39e, 0xcaa2fe8c, 0xc3aff582, 0xfc8cc4a8, 0xf581cfa6, 0xee96d2b4, 0xe79bd9ba, 0x3bbb7bdb, 0x32b670d5, 0x29a16dc7, 0x20ac66c9, 0x1f8f57e3, 0x16825ced, 0x0d9541ff, 0x04984af1, 0x73d323ab, 0x7ade28a5, 0x61c935b7, 0x68c43eb9, 0x57e70f93, 0x5eea049d, 0x45fd198f, 0x4cf01281, 0xab6bcb3b, 0xa266c035, 0xb971dd27, 0xb07cd629, 0x8f5fe703, 0x8652ec0d, 0x9d45f11f, 0x9448fa11, 0xe303934b, 0xea0e9845, 0xf1198557, 0xf8148e59, 0xc737bf73, 0xce3ab47d, 0xd52da96f, 0xdc20a261, 0x766df6ad, 0x7f60fda3, 0x6477e0b1, 0x6d7aebbf, 0x5259da95, 0x5b54d19b, 0x4043cc89, 0x494ec787, 0x3e05aedd, 0x3708a5d3, 0x2c1fb8c1, 0x2512b3cf, 0x1a3182e5, 0x133c89eb, 0x082b94f9, 0x01269ff7, 0xe6bd464d, 0xefb04d43, 0xf4a75051, 0xfdaa5b5f, 0xc2896a75, 0xcb84617b, 0xd0937c69, 0xd99e7767, 0xaed51e3d, 0xa7d81533, 0xbccf0821, 0xb5c2032f, 0x8ae13205, 0x83ec390b, 0x98fb2419, 0x91f62f17, 0x4dd68d76, 0x44db8678, 0x5fcc9b6a, 0x56c19064, 0x69e2a14e, 0x60efaa40, 0x7bf8b752, 0x72f5bc5c, 0x05bed506, 0x0cb3de08, 0x17a4c31a, 0x1ea9c814, 0x218af93e, 0x2887f230, 0x3390ef22, 0x3a9de42c, 0xdd063d96, 0xd40b3698, 0xcf1c2b8a, 0xc6112084, 0xf93211ae, 0xf03f1aa0, 0xeb2807b2, 0xe2250cbc, 0x956e65e6, 0x9c636ee8, 0x877473fa, 0x8e7978f4, 0xb15a49de, 0xb85742d0, 0xa3405fc2, 0xaa4d54cc, 0xecdaf741, 0xe5d7fc4f, 0xfec0e15d, 0xf7cdea53, 0xc8eedb79, 0xc1e3d077, 0xdaf4cd65, 0xd3f9c66b, 0xa4b2af31, 0xadbfa43f, 0xb6a8b92d, 0xbfa5b223, 0x80868309, 0x898b8807, 0x929c9515, 0x9b919e1b, 0x7c0a47a1, 0x75074caf, 0x6e1051bd, 0x671d5ab3, 0x583e6b99, 0x51336097, 0x4a247d85, 0x4329768b, 0x34621fd1, 0x3d6f14df, 0x267809cd, 0x2f7502c3, 0x105633e9, 0x195b38e7, 0x024c25f5, 0x0b412efb, 0xd7618c9a, 0xde6c8794, 0xc57b9a86, 0xcc769188, 0xf355a0a2, 0xfa58abac, 0xe14fb6be, 0xe842bdb0, 0x9f09d4ea, 0x9604dfe4, 0x8d13c2f6, 0x841ec9f8, 0xbb3df8d2, 0xb230f3dc, 0xa927eece, 0xa02ae5c0, 0x47b13c7a, 0x4ebc3774, 0x55ab2a66, 0x5ca62168, 0x63851042, 0x6a881b4c, 0x719f065e, 0x78920d50, 0x0fd9640a, 0x06d46f04, 0x1dc37216, 0x14ce7918, 0x2bed4832, 0x22e0433c, 0x39f75e2e, 0x30fa5520, 0x9ab701ec, 0x93ba0ae2, 0x88ad17f0, 0x81a01cfe, 0xbe832dd4, 0xb78e26da, 0xac993bc8, 0xa59430c6, 0xd2df599c, 0xdbd25292, 0xc0c54f80, 0xc9c8448e, 0xf6eb75a4, 0xffe67eaa, 0xe4f163b8, 0xedfc68b6, 0x0a67b10c, 0x036aba02, 0x187da710, 0x1170ac1e, 0x2e539d34, 0x275e963a, 0x3c498b28, 0x35448026, 0x420fe97c, 0x4b02e272, 0x5015ff60, 0x5918f46e, 0x663bc544, 0x6f36ce4a, 0x7421d358, 0x7d2cd856, 0xa10c7a37, 0xa8017139, 0xb3166c2b, 0xba1b6725, 0x8538560f, 0x8c355d01, 0x97224013, 0x9e2f4b1d, 0xe9642247, 0xe0692949, 0xfb7e345b, 0xf2733f55, 0xcd500e7f, 0xc45d0571, 0xdf4a1863, 0xd647136d, 0x31dccad7, 0x38d1c1d9, 0x23c6dccb, 0x2acbd7c5, 0x15e8e6ef, 0x1ce5ede1, 0x07f2f0f3, 0x0efffbfd, 0x79b492a7, 0x70b999a9, 0x6bae84bb, 0x62a38fb5, 0x5d80be9f, 0x548db591, 0x4f9aa883, 0x4697a38d];\nfunction convertToInt32(bytes) {\n const result = [];\n for (let i = 0; i < bytes.length; i += 4) {\n result.push((bytes[i] << 24) | (bytes[i + 1] << 16) | (bytes[i + 2] << 8) | bytes[i + 3]);\n }\n return result;\n}\nexport class AES {\n constructor(key) {\n _AES_key.set(this, void 0);\n _AES_Kd.set(this, void 0);\n _AES_Ke.set(this, void 0);\n if (!(this instanceof AES)) {\n throw Error('AES must be instanitated with `new`');\n }\n __classPrivateFieldSet(this, _AES_key, new Uint8Array(key), \"f\");\n const rounds = numberOfRounds[this.key.length];\n if (rounds == null) {\n throw new TypeError('invalid key size (must be 16, 24 or 32 bytes)');\n }\n // encryption round keys\n __classPrivateFieldSet(this, _AES_Ke, [], \"f\");\n // decryption round keys\n __classPrivateFieldSet(this, _AES_Kd, [], \"f\");\n for (let i = 0; i <= rounds; i++) {\n __classPrivateFieldGet(this, _AES_Ke, \"f\").push([0, 0, 0, 0]);\n __classPrivateFieldGet(this, _AES_Kd, \"f\").push([0, 0, 0, 0]);\n }\n const roundKeyCount = (rounds + 1) * 4;\n const KC = this.key.length / 4;\n // convert the key into ints\n const tk = convertToInt32(this.key);\n // copy values into round key arrays\n let index;\n for (let i = 0; i < KC; i++) {\n index = i >> 2;\n __classPrivateFieldGet(this, _AES_Ke, \"f\")[index][i % 4] = tk[i];\n __classPrivateFieldGet(this, _AES_Kd, \"f\")[rounds - index][i % 4] = tk[i];\n }\n // key expansion (fips-197 section 5.2)\n let rconpointer = 0;\n let t = KC, tt;\n while (t < roundKeyCount) {\n tt = tk[KC - 1];\n tk[0] ^= ((S[(tt >> 16) & 0xFF] << 24) ^\n (S[(tt >> 8) & 0xFF] << 16) ^\n (S[tt & 0xFF] << 8) ^\n S[(tt >> 24) & 0xFF] ^\n (rcon[rconpointer] << 24));\n rconpointer += 1;\n // key expansion (for non-256 bit)\n if (KC != 8) {\n for (let i = 1; i < KC; i++) {\n tk[i] ^= tk[i - 1];\n }\n // key expansion for 256-bit keys is \"slightly different\" (fips-197)\n }\n else {\n for (let i = 1; i < (KC / 2); i++) {\n tk[i] ^= tk[i - 1];\n }\n tt = tk[(KC / 2) - 1];\n tk[KC / 2] ^= (S[tt & 0xFF] ^\n (S[(tt >> 8) & 0xFF] << 8) ^\n (S[(tt >> 16) & 0xFF] << 16) ^\n (S[(tt >> 24) & 0xFF] << 24));\n for (let i = (KC / 2) + 1; i < KC; i++) {\n tk[i] ^= tk[i - 1];\n }\n }\n // copy values into round key arrays\n let i = 0, r, c;\n while (i < KC && t < roundKeyCount) {\n r = t >> 2;\n c = t % 4;\n __classPrivateFieldGet(this, _AES_Ke, \"f\")[r][c] = tk[i];\n __classPrivateFieldGet(this, _AES_Kd, \"f\")[rounds - r][c] = tk[i++];\n t++;\n }\n }\n // inverse-cipher-ify the decryption round key (fips-197 section 5.3)\n for (let r = 1; r < rounds; r++) {\n for (let c = 0; c < 4; c++) {\n tt = __classPrivateFieldGet(this, _AES_Kd, \"f\")[r][c];\n __classPrivateFieldGet(this, _AES_Kd, \"f\")[r][c] = (U1[(tt >> 24) & 0xFF] ^\n U2[(tt >> 16) & 0xFF] ^\n U3[(tt >> 8) & 0xFF] ^\n U4[tt & 0xFF]);\n }\n }\n }\n get key() { return __classPrivateFieldGet(this, _AES_key, \"f\").slice(); }\n encrypt(plaintext) {\n if (plaintext.length != 16) {\n throw new TypeError('invalid plaintext size (must be 16 bytes)');\n }\n const rounds = __classPrivateFieldGet(this, _AES_Ke, \"f\").length - 1;\n const a = [0, 0, 0, 0];\n // convert plaintext to (ints ^ key)\n let t = convertToInt32(plaintext);\n for (let i = 0; i < 4; i++) {\n t[i] ^= __classPrivateFieldGet(this, _AES_Ke, \"f\")[0][i];\n }\n // apply round transforms\n for (let r = 1; r < rounds; r++) {\n for (let i = 0; i < 4; i++) {\n a[i] = (T1[(t[i] >> 24) & 0xff] ^\n T2[(t[(i + 1) % 4] >> 16) & 0xff] ^\n T3[(t[(i + 2) % 4] >> 8) & 0xff] ^\n T4[t[(i + 3) % 4] & 0xff] ^\n __classPrivateFieldGet(this, _AES_Ke, \"f\")[r][i]);\n }\n t = a.slice();\n }\n // the last round is special\n const result = new Uint8Array(16);\n let tt = 0;\n for (let i = 0; i < 4; i++) {\n tt = __classPrivateFieldGet(this, _AES_Ke, \"f\")[rounds][i];\n result[4 * i] = (S[(t[i] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\n result[4 * i + 1] = (S[(t[(i + 1) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\n result[4 * i + 2] = (S[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff;\n result[4 * i + 3] = (S[t[(i + 3) % 4] & 0xff] ^ tt) & 0xff;\n }\n return result;\n }\n decrypt(ciphertext) {\n if (ciphertext.length != 16) {\n throw new TypeError('invalid ciphertext size (must be 16 bytes)');\n }\n const rounds = __classPrivateFieldGet(this, _AES_Kd, \"f\").length - 1;\n const a = [0, 0, 0, 0];\n // convert plaintext to (ints ^ key)\n let t = convertToInt32(ciphertext);\n for (let i = 0; i < 4; i++) {\n t[i] ^= __classPrivateFieldGet(this, _AES_Kd, \"f\")[0][i];\n }\n // apply round transforms\n for (let r = 1; r < rounds; r++) {\n for (let i = 0; i < 4; i++) {\n a[i] = (T5[(t[i] >> 24) & 0xff] ^\n T6[(t[(i + 3) % 4] >> 16) & 0xff] ^\n T7[(t[(i + 2) % 4] >> 8) & 0xff] ^\n T8[t[(i + 1) % 4] & 0xff] ^\n __classPrivateFieldGet(this, _AES_Kd, \"f\")[r][i]);\n }\n t = a.slice();\n }\n // the last round is special\n const result = new Uint8Array(16);\n let tt = 0;\n for (let i = 0; i < 4; i++) {\n tt = __classPrivateFieldGet(this, _AES_Kd, \"f\")[rounds][i];\n result[4 * i] = (Si[(t[i] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\n result[4 * i + 1] = (Si[(t[(i + 3) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\n result[4 * i + 2] = (Si[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff;\n result[4 * i + 3] = (Si[t[(i + 1) % 4] & 0xff] ^ tt) & 0xff;\n }\n return result;\n }\n}\n_AES_key = new WeakMap(), _AES_Kd = new WeakMap(), _AES_Ke = new WeakMap();\n//# sourceMappingURL=aes.js.map","import { AES } from \"./aes.js\";\nexport class ModeOfOperation {\n constructor(name, key, cls) {\n if (cls && !(this instanceof cls)) {\n throw new Error(`${name} must be instantiated with \"new\"`);\n }\n Object.defineProperties(this, {\n aes: { enumerable: true, value: new AES(key) },\n name: { enumerable: true, value: name }\n });\n }\n}\n//# sourceMappingURL=mode.js.map","// Cipher Block Chaining\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _CBC_iv, _CBC_lastBlock;\nimport { ModeOfOperation } from \"./mode.js\";\nexport class CBC extends ModeOfOperation {\n constructor(key, iv) {\n super(\"ECC\", key, CBC);\n _CBC_iv.set(this, void 0);\n _CBC_lastBlock.set(this, void 0);\n if (iv) {\n if (iv.length % 16) {\n throw new TypeError(\"invalid iv size (must be 16 bytes)\");\n }\n __classPrivateFieldSet(this, _CBC_iv, new Uint8Array(iv), \"f\");\n }\n else {\n __classPrivateFieldSet(this, _CBC_iv, new Uint8Array(16), \"f\");\n }\n __classPrivateFieldSet(this, _CBC_lastBlock, this.iv, \"f\");\n }\n get iv() { return new Uint8Array(__classPrivateFieldGet(this, _CBC_iv, \"f\")); }\n encrypt(plaintext) {\n if (plaintext.length % 16) {\n throw new TypeError(\"invalid plaintext size (must be multiple of 16 bytes)\");\n }\n const ciphertext = new Uint8Array(plaintext.length);\n for (let i = 0; i < plaintext.length; i += 16) {\n for (let j = 0; j < 16; j++) {\n __classPrivateFieldGet(this, _CBC_lastBlock, \"f\")[j] ^= plaintext[i + j];\n }\n __classPrivateFieldSet(this, _CBC_lastBlock, this.aes.encrypt(__classPrivateFieldGet(this, _CBC_lastBlock, \"f\")), \"f\");\n ciphertext.set(__classPrivateFieldGet(this, _CBC_lastBlock, \"f\"), i);\n }\n return ciphertext;\n }\n decrypt(ciphertext) {\n if (ciphertext.length % 16) {\n throw new TypeError(\"invalid ciphertext size (must be multiple of 16 bytes)\");\n }\n const plaintext = new Uint8Array(ciphertext.length);\n for (let i = 0; i < ciphertext.length; i += 16) {\n const block = this.aes.decrypt(ciphertext.subarray(i, i + 16));\n for (let j = 0; j < 16; j++) {\n plaintext[i + j] = block[j] ^ __classPrivateFieldGet(this, _CBC_lastBlock, \"f\")[j];\n __classPrivateFieldGet(this, _CBC_lastBlock, \"f\")[j] = ciphertext[i + j];\n }\n }\n return plaintext;\n }\n}\n_CBC_iv = new WeakMap(), _CBC_lastBlock = new WeakMap();\n//# sourceMappingURL=mode-cbc.js.map","// Cipher Feedback\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _CFB_instances, _CFB_iv, _CFB_shiftRegister, _CFB_shift;\nimport { ModeOfOperation } from \"./mode.js\";\nexport class CFB extends ModeOfOperation {\n constructor(key, iv, segmentSize = 8) {\n super(\"CFB\", key, CFB);\n _CFB_instances.add(this);\n _CFB_iv.set(this, void 0);\n _CFB_shiftRegister.set(this, void 0);\n // This library currently only handles byte-aligned segmentSize\n if (!Number.isInteger(segmentSize) || (segmentSize % 8)) {\n throw new TypeError(\"invalid segmentSize\");\n }\n Object.defineProperties(this, {\n segmentSize: { enumerable: true, value: segmentSize }\n });\n if (iv) {\n if (iv.length % 16) {\n throw new TypeError(\"invalid iv size (must be 16 bytes)\");\n }\n __classPrivateFieldSet(this, _CFB_iv, new Uint8Array(iv), \"f\");\n }\n else {\n __classPrivateFieldSet(this, _CFB_iv, new Uint8Array(16), \"f\");\n }\n __classPrivateFieldSet(this, _CFB_shiftRegister, this.iv, \"f\");\n }\n get iv() { return new Uint8Array(__classPrivateFieldGet(this, _CFB_iv, \"f\")); }\n encrypt(plaintext) {\n if (8 * plaintext.length % this.segmentSize) {\n throw new TypeError(\"invalid plaintext size (must be multiple of segmentSize bytes)\");\n }\n const segmentSize = this.segmentSize / 8;\n const ciphertext = new Uint8Array(plaintext);\n for (let i = 0; i < ciphertext.length; i += segmentSize) {\n const xorSegment = this.aes.encrypt(__classPrivateFieldGet(this, _CFB_shiftRegister, \"f\"));\n for (let j = 0; j < segmentSize; j++) {\n ciphertext[i + j] ^= xorSegment[j];\n }\n __classPrivateFieldGet(this, _CFB_instances, \"m\", _CFB_shift).call(this, ciphertext.subarray(i));\n }\n return ciphertext;\n }\n decrypt(ciphertext) {\n if (8 * ciphertext.length % this.segmentSize) {\n throw new TypeError(\"invalid ciphertext size (must be multiple of segmentSize bytes)\");\n }\n const segmentSize = this.segmentSize / 8;\n const plaintext = new Uint8Array(ciphertext);\n for (let i = 0; i < plaintext.length; i += segmentSize) {\n const xorSegment = this.aes.encrypt(__classPrivateFieldGet(this, _CFB_shiftRegister, \"f\"));\n for (let j = 0; j < segmentSize; j++) {\n plaintext[i + j] ^= xorSegment[j];\n }\n __classPrivateFieldGet(this, _CFB_instances, \"m\", _CFB_shift).call(this, ciphertext.subarray(i));\n }\n return plaintext;\n }\n}\n_CFB_iv = new WeakMap(), _CFB_shiftRegister = new WeakMap(), _CFB_instances = new WeakSet(), _CFB_shift = function _CFB_shift(data) {\n const segmentSize = this.segmentSize / 8;\n // Shift the register\n __classPrivateFieldGet(this, _CFB_shiftRegister, \"f\").set(__classPrivateFieldGet(this, _CFB_shiftRegister, \"f\").subarray(segmentSize));\n __classPrivateFieldGet(this, _CFB_shiftRegister, \"f\").set(data.subarray(0, segmentSize), 16 - segmentSize);\n};\n//# sourceMappingURL=mode-cfb.js.map","// Counter Mode\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _CTR_remaining, _CTR_remainingIndex, _CTR_counter;\nimport { ModeOfOperation } from \"./mode.js\";\nexport class CTR extends ModeOfOperation {\n constructor(key, initialValue) {\n super(\"CTR\", key, CTR);\n // Remaining bytes for the one-time pad\n _CTR_remaining.set(this, void 0);\n _CTR_remainingIndex.set(this, void 0);\n // The current counter\n _CTR_counter.set(this, void 0);\n __classPrivateFieldSet(this, _CTR_counter, new Uint8Array(16), \"f\");\n __classPrivateFieldGet(this, _CTR_counter, \"f\").fill(0);\n __classPrivateFieldSet(this, _CTR_remaining, __classPrivateFieldGet(this, _CTR_counter, \"f\"), \"f\"); // This will be discarded immediately\n __classPrivateFieldSet(this, _CTR_remainingIndex, 16, \"f\");\n if (initialValue == null) {\n initialValue = 1;\n }\n if (typeof (initialValue) === \"number\") {\n this.setCounterValue(initialValue);\n }\n else {\n this.setCounterBytes(initialValue);\n }\n }\n get counter() { return new Uint8Array(__classPrivateFieldGet(this, _CTR_counter, \"f\")); }\n setCounterValue(value) {\n if (!Number.isInteger(value) || value < 0 || value > Number.MAX_SAFE_INTEGER) {\n throw new TypeError(\"invalid counter initial integer value\");\n }\n for (let index = 15; index >= 0; --index) {\n __classPrivateFieldGet(this, _CTR_counter, \"f\")[index] = value % 256;\n value = Math.floor(value / 256);\n }\n }\n setCounterBytes(value) {\n if (value.length !== 16) {\n throw new TypeError(\"invalid counter initial Uint8Array value length\");\n }\n __classPrivateFieldGet(this, _CTR_counter, \"f\").set(value);\n }\n increment() {\n for (let i = 15; i >= 0; i--) {\n if (__classPrivateFieldGet(this, _CTR_counter, \"f\")[i] === 255) {\n __classPrivateFieldGet(this, _CTR_counter, \"f\")[i] = 0;\n }\n else {\n __classPrivateFieldGet(this, _CTR_counter, \"f\")[i]++;\n break;\n }\n }\n }\n encrypt(plaintext) {\n var _a, _b;\n const crypttext = new Uint8Array(plaintext);\n for (let i = 0; i < crypttext.length; i++) {\n if (__classPrivateFieldGet(this, _CTR_remainingIndex, \"f\") === 16) {\n __classPrivateFieldSet(this, _CTR_remaining, this.aes.encrypt(__classPrivateFieldGet(this, _CTR_counter, \"f\")), \"f\");\n __classPrivateFieldSet(this, _CTR_remainingIndex, 0, \"f\");\n this.increment();\n }\n crypttext[i] ^= __classPrivateFieldGet(this, _CTR_remaining, \"f\")[__classPrivateFieldSet(this, _CTR_remainingIndex, (_b = __classPrivateFieldGet(this, _CTR_remainingIndex, \"f\"), _a = _b++, _b), \"f\"), _a];\n }\n return crypttext;\n }\n decrypt(ciphertext) {\n return this.encrypt(ciphertext);\n }\n}\n_CTR_remaining = new WeakMap(), _CTR_remainingIndex = new WeakMap(), _CTR_counter = new WeakMap();\n//# sourceMappingURL=mode-ctr.js.map","import { arrayify, hexlify } from \"@ethersproject/bytes\";\nimport { toUtf8Bytes, UnicodeNormalizationForm } from '@ethersproject/strings';\nimport { logger } from \"./logger.js\";\nexport function looseArrayify(hexString) {\n if (typeof (hexString) === 'string' && hexString.substring(0, 2) !== '0x') {\n hexString = '0x' + hexString;\n }\n return arrayify(hexString);\n}\nexport function zpad(value, length) {\n value = String(value);\n while (value.length < length) {\n value = '0' + value;\n }\n return value;\n}\nexport function getPassword(password) {\n if (typeof (password) === 'string') {\n return toUtf8Bytes(password, UnicodeNormalizationForm.NFKC);\n }\n return arrayify(password);\n}\nexport function spelunk(object, _path) {\n const match = _path.match(/^([a-z0-9$_.-]*)(:([a-z]+))?(!)?$/i);\n if (match == null) {\n return logger.throwArgumentError(\"invalid path\", \"path\", _path);\n }\n const path = match[1];\n const type = match[3];\n const reqd = (match[4] === \"!\");\n let cur = object;\n for (const comp of path.toLowerCase().split('.')) {\n // Search for a child object with a case-insensitive matching key\n if (Array.isArray(cur)) {\n if (!comp.match(/^[0-9]+$/)) {\n break;\n }\n cur = cur[parseInt(comp)];\n }\n else if (typeof (cur) === \"object\") {\n let found = null;\n for (const key in cur) {\n if (key.toLowerCase() === comp) {\n found = cur[key];\n break;\n }\n }\n cur = found;\n }\n else {\n cur = null;\n }\n if (cur == null) {\n break;\n }\n }\n if (reqd && cur == null) {\n logger.throwArgumentError(\"missing required value\", \"path\", path);\n }\n if (type && cur != null) {\n if (type === \"int\") {\n if (typeof (cur) === \"string\" && cur.match(/^-?[0-9]+$/)) {\n return parseInt(cur);\n }\n else if (Number.isSafeInteger(cur)) {\n return cur;\n }\n }\n if (type === \"number\") {\n if (typeof (cur) === \"string\" && cur.match(/^-?[0-9.]*$/)) {\n return parseFloat(cur);\n }\n }\n if (type === \"data\") {\n if (typeof (cur) === \"string\") {\n return looseArrayify(cur);\n }\n }\n if (type === \"array\" && Array.isArray(cur)) {\n return cur;\n }\n if (type === typeof (cur)) {\n return cur;\n }\n logger.throwArgumentError(`wrong type found for ${type} `, \"path\", path);\n }\n return cur;\n}\n/*\nexport function follow(object: any, path: string): null | string {\n let currentChild = object;\n\n for (const comp of path.toLowerCase().split('/')) {\n\n // Search for a child object with a case-insensitive matching key\n let matchingChild = null;\n for (const key in currentChild) {\n if (key.toLowerCase() === comp) {\n matchingChild = currentChild[key];\n break;\n }\n }\n\n if (matchingChild === null) { return null; }\n\n currentChild = matchingChild;\n }\n\n return currentChild;\n}\n\n// \"path/to/something:type!\"\nexport function followRequired(data: any, path: string): string {\n const value = follow(data, path);\n if (value != null) { return value; }\n return logger.throwArgumentError(\"invalid value\", `data:${ path }`,\n JSON.stringify(data));\n}\n*/\n// See: https://www.ietf.org/rfc/rfc4122.txt (Section 4.4)\nexport function uuidV4(randomBytes) {\n const bytes = logger.getBytes(randomBytes, \"randomBytes\");\n // Section: 4.1.3:\n // - time_hi_and_version[12:16] = 0b0100\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n // Section 4.4\n // - clock_seq_hi_and_reserved[6] = 0b0\n // - clock_seq_hi_and_reserved[7] = 0b1\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const value = hexlify(bytes);\n return [\n value.substring(2, 10),\n value.substring(10, 14),\n value.substring(14, 18),\n value.substring(18, 22),\n value.substring(22, 34),\n ].join(\"-\");\n}\n//# sourceMappingURL=utils.js.map","import { CBC, pkcs7Strip } from \"aes-js\";\nimport { getAddress } from \"@ethersproject/address\";\nimport { arrayify } from \"@ethersproject/bytes\";\nimport { pbkdf2 } from \"@ethersproject/crypto\";\nimport { id } from \"@ethersproject/hash\";\nimport { logger } from \"./logger.js\";\nimport { getPassword, looseArrayify, spelunk } from \"./utils.js\";\nexport function isCrowdsaleJson(json) {\n try {\n const data = JSON.parse(json);\n if (data.encseed) {\n return true;\n }\n }\n catch (error) { }\n return false;\n}\n// See: https://github.com/ethereum/pyethsaletool\nexport function decryptCrowdsaleJson(json, _password) {\n const data = JSON.parse(json);\n const password = getPassword(_password);\n // Ethereum Address\n const address = getAddress(spelunk(data, \"ethaddr:string!\"));\n // Encrypted Seed\n const encseed = looseArrayify(spelunk(data, \"encseed:string!\"));\n if (!encseed || (encseed.length % 16) !== 0) {\n logger.throwArgumentError(\"invalid encseed\", \"json\", json);\n }\n const key = arrayify(pbkdf2(password, password, 2000, 32, \"sha256\")).slice(0, 16);\n const iv = encseed.slice(0, 16);\n const encryptedSeed = encseed.slice(16);\n // Decrypt the seed\n const aesCbc = new CBC(key, iv);\n const seed = pkcs7Strip(arrayify(aesCbc.decrypt(encryptedSeed)));\n // This wallet format is weird... Convert the binary encoded hex to a string.\n let seedHex = \"\";\n for (let i = 0; i < seed.length; i++) {\n seedHex += String.fromCharCode(seed[i]);\n }\n return { address, privateKey: id(seedHex) };\n}\n//# sourceMappingURL=json-crowdsale.js.map","export function pkcs7Pad(data) {\n const padder = 16 - (data.length % 16);\n const result = new Uint8Array(data.length + padder);\n result.set(data);\n for (let i = data.length; i < result.length; i++) {\n result[i] = padder;\n }\n return result;\n}\nexport function pkcs7Strip(data) {\n if (data.length < 16) {\n throw new TypeError('PKCS#7 invalid length');\n }\n const padder = data[data.length - 1];\n if (padder > 16) {\n throw new TypeError('PKCS#7 padding byte out of range');\n }\n const length = data.length - padder;\n for (let i = 0; i < padder; i++) {\n if (data[length + i] !== padder) {\n throw new TypeError('PKCS#7 invalid padding byte');\n }\n }\n return new Uint8Array(data.subarray(0, length));\n}\n//# sourceMappingURL=padding.js.map","// Output Feedback\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _OFB_iv, _OFB_lastPrecipher, _OFB_lastPrecipherIndex;\nimport { ModeOfOperation } from \"./mode.js\";\nexport class OFB extends ModeOfOperation {\n constructor(key, iv) {\n super(\"OFB\", key, OFB);\n _OFB_iv.set(this, void 0);\n _OFB_lastPrecipher.set(this, void 0);\n _OFB_lastPrecipherIndex.set(this, void 0);\n if (iv) {\n if (iv.length % 16) {\n throw new TypeError(\"invalid iv size (must be 16 bytes)\");\n }\n __classPrivateFieldSet(this, _OFB_iv, new Uint8Array(iv), \"f\");\n }\n else {\n __classPrivateFieldSet(this, _OFB_iv, new Uint8Array(16), \"f\");\n }\n __classPrivateFieldSet(this, _OFB_lastPrecipher, this.iv, \"f\");\n __classPrivateFieldSet(this, _OFB_lastPrecipherIndex, 16, \"f\");\n }\n get iv() { return new Uint8Array(__classPrivateFieldGet(this, _OFB_iv, \"f\")); }\n encrypt(plaintext) {\n var _a, _b;\n if (plaintext.length % 16) {\n throw new TypeError(\"invalid plaintext size (must be multiple of 16 bytes)\");\n }\n const ciphertext = new Uint8Array(plaintext);\n for (let i = 0; i < ciphertext.length; i++) {\n if (__classPrivateFieldGet(this, _OFB_lastPrecipherIndex, \"f\") === 16) {\n __classPrivateFieldSet(this, _OFB_lastPrecipher, this.aes.encrypt(__classPrivateFieldGet(this, _OFB_lastPrecipher, \"f\")), \"f\");\n __classPrivateFieldSet(this, _OFB_lastPrecipherIndex, 0, \"f\");\n }\n ciphertext[i] ^= __classPrivateFieldGet(this, _OFB_lastPrecipher, \"f\")[__classPrivateFieldSet(this, _OFB_lastPrecipherIndex, (_b = __classPrivateFieldGet(this, _OFB_lastPrecipherIndex, \"f\"), _a = _b++, _b), \"f\"), _a];\n }\n return ciphertext;\n }\n decrypt(ciphertext) {\n if (ciphertext.length % 16) {\n throw new TypeError(\"invalid ciphertext size (must be multiple of 16 bytes)\");\n }\n return this.encrypt(ciphertext);\n }\n}\n_OFB_iv = new WeakMap(), _OFB_lastPrecipher = new WeakMap(), _OFB_lastPrecipherIndex = new WeakMap();\n//# sourceMappingURL=mode-ofb.js.map","import { CTR } from \"aes-js\";\nimport { getAddress } from \"@ethersproject/address\";\nimport { arrayify, concat, hexlify } from \"@ethersproject/bytes\";\nimport { keccak256, pbkdf2, randomBytes, scrypt, scryptSync } from \"@ethersproject/crypto\";\nimport { computeAddress } from \"./address.js\";\nimport { logger } from \"./logger.js\";\nimport { getPassword, spelunk, uuidV4, zpad } from \"./utils.js\";\nimport { version } from \"./_version.js\";\nconst defaultPath = \"m/44'/60'/0'/0/0\";\nexport function isKeystoreJson(json) {\n try {\n const data = JSON.parse(json);\n const version = ((data.version != null) ? parseInt(data.version) : 0);\n if (version === 3) {\n return true;\n }\n }\n catch (error) { }\n return false;\n}\nfunction decrypt(data, key, ciphertext) {\n const cipher = spelunk(data, \"crypto.cipher:string\");\n if (cipher === \"aes-128-ctr\") {\n const iv = spelunk(data, \"crypto.cipherparams.iv:data!\");\n const aesCtr = new CTR(key, iv);\n return hexlify(aesCtr.decrypt(ciphertext));\n }\n return logger.throwError(\"unsupported cipher\", \"UNSUPPORTED_OPERATION\", {\n operation: \"decrypt\"\n });\n}\nfunction getAccount(data, _key) {\n const key = logger.getBytes(_key);\n const ciphertext = spelunk(data, \"crypto.ciphertext:data!\");\n const computedMAC = hexlify(keccak256(concat([key.slice(16, 32), ciphertext]))).substring(2);\n if (computedMAC !== spelunk(data, \"crypto.mac:string!\").toLowerCase()) {\n return logger.throwArgumentError(\"incorrect password\", \"password\", \"[ REDACTED ]\");\n }\n const privateKey = decrypt(data, key.slice(0, 16), ciphertext);\n const address = computeAddress(privateKey);\n if (data.address) {\n let check = data.address.toLowerCase();\n if (check.substring(0, 2) !== \"0x\") {\n check = \"0x\" + check;\n }\n if (getAddress(check) !== address) {\n logger.throwArgumentError(\"keystore address/privateKey mismatch\", \"address\", data.address);\n }\n }\n const account = { address, privateKey };\n // Version 0.1 x-ethers metadata must contain an encrypted mnemonic phrase\n const version = spelunk(data, \"x-ethers.version:string\");\n if (version === \"0.1\") {\n const mnemonicKey = key.slice(32, 64);\n const mnemonicCiphertext = spelunk(data, \"x-ethers.mnemonicCiphertext:data!\");\n const mnemonicIv = spelunk(data, \"x-ethers.mnemonicCounter:data!\");\n const mnemonicAesCtr = new CTR(mnemonicKey, mnemonicIv);\n account.mnemonic = {\n path: (spelunk(data, \"x-ethers.path:string\") || defaultPath),\n locale: (spelunk(data, \"x-ethers.locale:string\") || \"en\"),\n entropy: hexlify(arrayify(mnemonicAesCtr.decrypt(mnemonicCiphertext)))\n };\n }\n return account;\n}\nfunction getKdfParams(data) {\n const kdf = spelunk(data, \"crypto.kdf:string\");\n if (kdf && typeof (kdf) === \"string\") {\n const throwError = function (name, value) {\n return logger.throwArgumentError(\"invalid key-derivation function parameters\", name, value);\n };\n if (kdf.toLowerCase() === \"scrypt\") {\n const salt = spelunk(data, \"crypto.kdfparams.salt:data!\");\n const N = spelunk(data, \"crypto.kdfparams.n:int!\");\n const r = spelunk(data, \"crypto.kdfparams.r:int!\");\n const p = spelunk(data, \"crypto.kdfparams.p:int!\");\n // Check for all required parameters\n if (!N || !r || !p) {\n return throwError(\"kdf\", kdf);\n }\n // Make sure N is a power of 2\n if ((N & (N - 1)) !== 0) {\n return throwError(\"N\", N);\n }\n const dkLen = spelunk(data, \"crypto.kdfparams.dklen:int!\");\n if (dkLen !== 32) {\n return throwError(\"dklen\", dkLen);\n }\n return { name: \"scrypt\", salt, N, r, p, dkLen: 64 };\n }\n else if (kdf.toLowerCase() === \"pbkdf2\") {\n const salt = spelunk(data, \"crypto.kdfparams.salt:data!\");\n const prf = spelunk(data, \"crypto.kdfparams.prf:string!\");\n const algorithm = prf.split(\"-\").pop();\n if (algorithm !== \"sha256\" && algorithm !== \"sha512\") {\n return throwError(\"prf\", prf);\n }\n const count = spelunk(data, \"crypto.kdfparams.c:int!\");\n const dkLen = spelunk(data, \"crypto.kdfparams.dklen:int!\");\n if (dkLen !== 32) {\n throwError(\"dklen\", dkLen);\n }\n return { name: \"pbkdf2\", salt, count, dkLen, algorithm };\n }\n }\n return logger.throwArgumentError(\"unsupported key-derivation function\", \"kdf\", kdf);\n}\nexport function decryptKeystoreJsonSync(json, _password) {\n const data = JSON.parse(json);\n const password = getPassword(_password);\n const params = getKdfParams(data);\n if (params.name === \"pbkdf2\") {\n const { salt, count, dkLen, algorithm } = params;\n const key = pbkdf2(password, salt, count, dkLen, algorithm);\n return getAccount(data, key);\n }\n else if (params.name === \"scrypt\") {\n const { salt, N, r, p, dkLen } = params;\n const key = scryptSync(password, salt, N, r, p, dkLen);\n return getAccount(data, key);\n }\n throw new Error(\"unreachable\");\n}\nfunction stall(duration) {\n return new Promise((resolve) => { setTimeout(() => { resolve(); }, duration); });\n}\nexport async function decryptKeystoreJson(json, _password, progress) {\n const data = JSON.parse(json);\n const password = getPassword(_password);\n const params = getKdfParams(data);\n if (params.name === \"pbkdf2\") {\n if (progress) {\n progress(0);\n await stall(0);\n }\n const { salt, count, dkLen, algorithm } = params;\n const key = pbkdf2(password, salt, count, dkLen, algorithm);\n if (progress) {\n progress(1);\n await stall(0);\n }\n return getAccount(data, key);\n }\n else if (params.name === \"scrypt\") {\n const { salt, N, r, p, dkLen } = params;\n const key = await scrypt(password, salt, N, r, p, dkLen, progress);\n return getAccount(data, key);\n }\n throw new Error(\"unreachable\");\n}\nexport async function encryptKeystoreJson(account, password, options, progressCallback) {\n // Check the address matches the private key\n //if (getAddress(account.address) !== computeAddress(account.privateKey)) {\n // throw new Error(\"address/privateKey mismatch\");\n //}\n // Check the mnemonic (if any) matches the private key\n /*\n if (hasMnemonic(account)) {\n const mnemonic = account.mnemonic;\n const node = HDNode.fromMnemonic(mnemonic.phrase, null, mnemonic.locale).derivePath(mnemonic.path || defaultPath);\n\n if (node.privateKey != account.privateKey) {\n throw new Error(\"mnemonic mismatch\");\n }\n }\n */\n // The options are optional, so adjust the call as needed\n if (typeof (options) === \"function\" && !progressCallback) {\n progressCallback = options;\n options = {};\n }\n if (!options) {\n options = {};\n }\n const privateKey = logger.getBytes(account.privateKey, \"privateKey\");\n const passwordBytes = getPassword(password);\n /*\n let mnemonic: null | Mnemonic = null;\n let entropy: Uint8Array = null\n let path: string = null;\n let locale: string = null;\n if (hasMnemonic(account)) {\n const srcMnemonic = account.mnemonic;\n entropy = arrayify(mnemonicToEntropy(srcMnemonic.phrase, srcMnemonic.locale || \"en\"));\n path = srcMnemonic.path || defaultPath;\n locale = srcMnemonic.locale || \"en\";\n mnemonic = Mnemonic.from(\n }\n */\n // Check/generate the salt\n const salt = (options.salt != null) ? logger.getBytes(options.salt, \"options.slat\") : randomBytes(32);\n // Override initialization vector\n const iv = (options.iv != null) ? logger.getBytes(options.iv, \"options.iv\") : randomBytes(16);\n if (iv.length !== 16) {\n logger.throwArgumentError(\"invalid options.iv\", \"options.iv\", options.iv);\n }\n // Override the uuid\n const uuidRandom = (options.uuid != null) ? logger.getBytes(options.uuid, \"options.uuid\") : randomBytes(16);\n if (uuidRandom.length !== 16) {\n logger.throwArgumentError(\"invalid options.uuid\", \"options.uuid\", options.iv);\n }\n if (uuidRandom.length !== 16) {\n throw new Error(\"invalid uuid\");\n }\n // Override the scrypt password-based key derivation function parameters\n let N = (1 << 17), r = 8, p = 1;\n if (options.scrypt) {\n if (options.scrypt.N) {\n N = options.scrypt.N;\n }\n if (options.scrypt.r) {\n r = options.scrypt.r;\n }\n if (options.scrypt.p) {\n p = options.scrypt.p;\n }\n }\n // We take 64 bytes:\n // - 32 bytes As normal for the Web3 secret storage (derivedKey, macPrefix)\n // - 32 bytes AES key to encrypt mnemonic with (required here to be Ethers Wallet)\n const _key = await scrypt(passwordBytes, salt, N, r, p, 64, progressCallback);\n const key = arrayify(_key);\n // This will be used to encrypt the wallet (as per Web3 secret storage)\n const derivedKey = key.slice(0, 16);\n const macPrefix = key.slice(16, 32);\n // Encrypt the private key\n const aesCtr = new CTR(derivedKey, iv);\n const ciphertext = arrayify(aesCtr.encrypt(privateKey));\n // Compute the message authentication code, used to check the password\n const mac = keccak256(concat([macPrefix, ciphertext]));\n // See: https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition\n const data = {\n address: account.address.substring(2).toLowerCase(),\n id: uuidV4(uuidRandom),\n version: 3,\n Crypto: {\n cipher: \"aes-128-ctr\",\n cipherparams: {\n iv: hexlify(iv).substring(2),\n },\n ciphertext: hexlify(ciphertext).substring(2),\n kdf: \"scrypt\",\n kdfparams: {\n salt: hexlify(salt).substring(2),\n n: N,\n dklen: 32,\n p: p,\n r: r\n },\n mac: mac.substring(2)\n }\n };\n // If we have a mnemonic, encrypt it into the JSON wallet\n if (account.mnemonic) {\n const client = (options.client != null) ? options.client : `ethers/${version}`;\n const path = account.mnemonic.path || defaultPath;\n const locale = account.mnemonic.locale || \"en\";\n const mnemonicKey = key.slice(32, 64);\n const entropy = logger.getBytes(account.mnemonic.entropy, \"account.mnemonic.entropy\");\n const mnemonicIv = randomBytes(16);\n const mnemonicAesCtr = new CTR(mnemonicKey, mnemonicIv);\n const mnemonicCiphertext = arrayify(mnemonicAesCtr.encrypt(entropy));\n const now = new Date();\n const timestamp = (now.getUTCFullYear() + \"-\" +\n zpad(now.getUTCMonth() + 1, 2) + \"-\" +\n zpad(now.getUTCDate(), 2) + \"T\" +\n zpad(now.getUTCHours(), 2) + \"-\" +\n zpad(now.getUTCMinutes(), 2) + \"-\" +\n zpad(now.getUTCSeconds(), 2) + \".0Z\");\n const gethFilename = (\"UTC--\" + timestamp + \"--\" + data.address);\n data[\"x-ethers\"] = {\n client, gethFilename, path, locale,\n mnemonicCounter: hexlify(mnemonicIv).substring(2),\n mnemonicCiphertext: hexlify(mnemonicCiphertext).substring(2),\n version: \"0.1\"\n };\n }\n return JSON.stringify(data);\n}\n//# sourceMappingURL=json-keystore.js.map","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Wallet_mnemonic;\nimport { isHexString } from \"@ethersproject/bytes\";\nimport { randomBytes } from \"@ethersproject/crypto\";\nimport { SigningKey } from \"@ethersproject/signing-key\";\nimport { computeAddress } from \"./address.js\";\nimport { BaseWallet } from \"./base-wallet.js\";\nimport { HDNodeWallet } from \"./hdwallet.js\";\nimport { decryptCrowdsaleJson, isCrowdsaleJson } from \"./json-crowdsale.js\";\nimport { decryptKeystoreJson, decryptKeystoreJsonSync, isKeystoreJson } from \"./json-keystore.js\";\nimport { logger } from \"./logger.js\";\nimport { Mnemonic } from \"./mnemonic.js\";\nfunction tryWallet(value) {\n try {\n if (!value || !value.signingKey) {\n return null;\n }\n const key = trySigningKey(value.signingKey);\n if (key == null || computeAddress(key.publicKey) !== value.address) {\n return null;\n }\n if (value.mnemonic) {\n const wallet = HDNodeWallet.fromMnemonic(value.mnemonic);\n if (wallet.privateKey !== key.privateKey) {\n return null;\n }\n }\n return value;\n }\n catch (e) {\n console.log(e);\n }\n return null;\n}\n// Try using value as mnemonic to derive the defaultPath HDodeWallet\nfunction tryMnemonic(value) {\n try {\n if (value == null || typeof (value.phrase) !== \"string\" ||\n typeof (value.password) !== \"string\" ||\n value.wordlist == null) {\n return null;\n }\n return HDNodeWallet.fromPhrase(value.phrase, value.password, null, value.wordlist);\n }\n catch (error) {\n console.log(error);\n }\n return null;\n}\nfunction trySigningKey(value) {\n try {\n if (!value || !isHexString(value.privateKey, 32)) {\n return null;\n }\n const key = value.privateKey;\n if (SigningKey.computePublicKey(key) !== value.publicKey) {\n return null;\n }\n return new SigningKey(key);\n }\n catch (e) {\n console.log(e);\n }\n return null;\n}\nfunction stall(duration) {\n return new Promise((resolve) => { setTimeout(() => { resolve(); }, duration); });\n}\nexport class Wallet extends BaseWallet {\n constructor(key, provider) {\n let signingKey = null;\n let mnemonic = null;\n // A normal private key\n if (typeof (key) === \"string\") {\n signingKey = new SigningKey(key);\n }\n // Try Wallet\n if (signingKey == null) {\n const wallet = tryWallet(key);\n if (wallet) {\n signingKey = wallet.signingKey;\n mnemonic = wallet.mnemonic || null;\n }\n }\n // Try Mnemonic, with the defaultPath wallet\n if (signingKey == null) {\n const wallet = tryMnemonic(key);\n if (wallet) {\n signingKey = wallet.signingKey;\n mnemonic = wallet.mnemonic || null;\n }\n }\n // A signing key\n if (signingKey == null) {\n signingKey = trySigningKey(key);\n }\n if (signingKey == null) {\n logger.throwArgumentError(\"invalid key\", \"key\", \"[ REDACTED ]\");\n }\n super(signingKey, provider);\n _Wallet_mnemonic.set(this, void 0);\n __classPrivateFieldSet(this, _Wallet_mnemonic, mnemonic, \"f\");\n }\n // Store this in a getter to reduce visibility in console.log\n get mnemonic() { return __classPrivateFieldGet(this, _Wallet_mnemonic, \"f\"); }\n connect(provider) {\n return new Wallet(this, provider);\n }\n async encrypt(password, options, progressCallback) {\n throw new Error(\"TODO\");\n }\n encryptSync(password, options) {\n throw new Error(\"TODO\");\n }\n static async fromEncryptedJson(json, password, progress) {\n let account = null;\n if (isKeystoreJson(json)) {\n account = await decryptKeystoreJson(json, password, progress);\n }\n else if (isCrowdsaleJson(json)) {\n if (progress) {\n progress(0);\n await stall(0);\n }\n account = decryptCrowdsaleJson(json, password);\n if (progress) {\n progress(1);\n await stall(0);\n }\n }\n else {\n return logger.throwArgumentError(\"invalid JSON wallet\", \"json\", \"[ REDACTED ]\");\n }\n const wallet = new Wallet(account.privateKey);\n if (wallet.address !== account.address) {\n logger.throwArgumentError(\"address/privateKey mismatch\", \"json\", \"[ REDACTED ]\");\n }\n // @TODO: mnemonic\n return wallet;\n }\n static fromEncryptedJsonSync(json, password) {\n let account = null;\n if (isKeystoreJson(json)) {\n account = decryptKeystoreJsonSync(json, password);\n }\n else if (isCrowdsaleJson(json)) {\n account = decryptCrowdsaleJson(json, password);\n }\n else {\n return logger.throwArgumentError(\"invalid JSON wallet\", \"json\", \"[ REDACTED ]\");\n }\n const wallet = new Wallet(account.privateKey);\n if (wallet.address !== account.address) {\n logger.throwArgumentError(\"address/privateKey mismatch\", \"json\", \"[ REDACTED ]\");\n }\n // @TODO: mnemonic\n return wallet;\n }\n static createRandom(provider, password, wordlist) {\n return new Wallet(Mnemonic.fromEntropy(randomBytes(16), password, wordlist), provider);\n }\n static fromMnemonic(mnemonic, provider) {\n return new Wallet(mnemonic, provider);\n }\n static fromPhrase(phrase, provider, password = \"\", wordlist) {\n return new Wallet(Mnemonic.fromPhrase(phrase, password, wordlist), provider);\n }\n}\n_Wallet_mnemonic = new WeakMap();\n//# sourceMappingURL=wallet.js.map","export const version = \"ethers@6.0.0-beta.1\";\n//# sourceMappingURL=_version.js.map"],"names":["async","resolveProperties","value","keys","Object","Promise","all","map","k","resolve","reduce","accum","v","index","checkType","type","types","split","t","trim","i","length","Error","defineProperties","target","values","defaults","key","fallback","undefined","defineProperty","enumerable","writable","_EventPayload_listener","__classPrivateFieldSet","this","receiver","state","kind","f","TypeError","has","call","set","__classPrivateFieldGet","get","EventPayload","constructor","emitter","listener","filter","off","getStore","store","setStore","isFrozen","isError","error","code","isCallException","WeakMap","_Logger_instances","_Logger_assertIntRange","_Logger_getBytes","_Logger_log","LogLevel","LogLevels","debug","default","info","warning","_logLevel","_globalLogger","_normalizeForms","form","normalize","check","String","fromCharCode","push","defineReadOnly","object","name","maxValue","ErrorConstructors","INVALID_ARGUMENT","NUMERIC_FAULT","RangeError","BUFFER_OVERRUN","Logger","version","add","makeError","message","details","JSON","stringify","join","throwError","throwArgumentError","argument","assert","condition","assertArgument","assertIntegerArgument","lower","upper","Number","isInteger","assertSafeUint53","operation","fault","assertNormalize","indexOf","assertPrivate","givenGuard","guard","className","method","assertArgumentCount","count","expectedCount","assertInt53","assertUint53","assertInteger","min","max","getBytes","getBytesCopy","getNumber","BigInt","e","getBigInt","args","DEBUG","INFO","warn","WARNING","static","logLevel","level","toLowerCase","globalLogger","WeakSet","minValue","isNaN","Math","floor","copy","Uint8Array","match","result","offset","parseInt","substring","console","log","apply","logger","_TokenString_instances","_TokenString_offset","_TokenString_tokens","_TokenString_subTokenString","_ParamType_instances","_ParamType_walkAsync","FormatType","setify","items","Set","forEach","freeze","_kwVisib","KwVisib","_kwTypes","KwTypes","_kwModifiers","KwModifiers","Keywords","SimpleTokens","regexWhitespace","RegExp","regexNumber","regexIdentifier","regexType","TokenString","tokens","slice","clone","reset","popKeyword","allowed","top","peek","text","pop","popType","popParen","popParams","link","linkNext","peekKeyword","peekType","_a","toString","token","lex","brackets","commas","cur","depth","linkBack","suffix","allowSingle","included","consumeName","keyword","consumeKeywords","keywords","consumeParams","allowIndexed","ParamType","fromTokens","consumeGas","consumeEoi","from","to","assign","regexArrayType","verifyBasicType","size","_guard","internal","Symbol","for","ParamTypeInternal","baseType","indexed","components","arrayLength","arrayChildren","format","sighash","json","isTuple","c","parse","isArray","comp","full","isIndexable","walk","process","Array","promises","obj","isParamType","arrayMatch","comps","bracket","FragmentType","setValue","childType","param","then","Fragment","inputs","fromString","fromObject","ConstructorFragment","ErrorFragment","EventFragment","FunctionFragment","StructFragment","NamedFragment","super","joinParams","params","p","input","anonymous","event","payable","gas","stateMutability","outputs","function","constant","o","mutability","modifiers","consumeMutability","struct","nibbles","BN_0","toBigInt","_value","toNumber","toHex","_width","width","toArray","hex","BN_1","fromTwos","toTwos","mask","_bits","bits","_FixedNumber_instances","_FixedNumber_value","_FixedNumber_checkFormat","_constructorGuard","NegativeOne","throwFault","zeros","getMultiplier","decimals","formatFixed","_decimals","multiplier","multiplierStr","negative","fraction","parseFixed","whole","wei","FixedFormat","constructorGuard","signed","_multiplier","defaultValue","FixedNumber","_isFixedNumber","addUnsafe","other","a","b","fromValue","subUnsafe","mulUnsafe","divUnsafe","hasFraction","isNegative","ONE","toFormat","ceiling","round","factor","bump","BUMP","isZero","toHexString","toUnsafeFloat","parseFloat","fixedFormat","numeric","decimal","fromBytes","Alphabet","Lookup","getAlpha","letter","BN_58","encodeBase58","decodeBase58","isHexString","isBytesLike","BN_8","BN_255","arrayify","data","unshift","_noCopyArrayify","decodeBase64","textData","Buffer","encodeBase64","HexCharacters","hexlify","bytes","quantity","concat","datas","d","dataLength","dataSlice","start","end","buffer","stripZerosLeft","zeroPad","left","fill","zeroPadLeft","zeroPadRight","_Result_instances","_Result_indices","_Result_throwError","_Writer_instances","_Writer_data","_Writer_dataLength","_Writer_writeData","_Reader_instances","_Reader_data","_Reader_offset","_Reader_coerceFunc","_Reader_peekBytes","WordSize","Padding","passProperties","Result","Map","Proxy","prop","item","Reflect","getValue","wrapped","Coder","localName","dynamic","_throwError","Writer","appendWriter","writer","writeBytes","paddingOffset","writeValue","writeUpdatableValue","Reader","coerceFunc","allowLoose","coerce","consumed","subReader","readBytes","loose","readValue","readIndex","alignedLength","ceil","u32","arr","Uint32Array","byteOffset","byteLength","createView","DataView","rotr","word","shift","padStart","nextTick","nodeRequire","module","require","bind","setImmediate","setTimeout","asyncLoop","iters","tick","cb","ts","Date","now","diff","toBytes","str","TextEncoder","encode","utf8ToBytes","assertNumber","n","isSafeInteger","assertHash","hash","create","outputLen","blockLen","Hash","_cloneInto","checkOpts","def","_opts","prototype","wrapConstructor","hashConstructor","hashC","update","digest","tmp","HMAC","_key","finished","destroyed","iHash","pad","oHash","buf","digestInto","out","destroy","getPrototypeOf","hmac","pbkdf2","password","salt","opts","dkLen","DK","PRF","PRFSalt","_password","_salt","asyncTick","pbkdf2Init","prfW","view","u","ti","pos","Ti","subarray","setInt32","ui","pbkdf2Output","SHA2","padOffset","isLE","len","take","dataView","roundClean","setBigUint64","_32n","_u32_max","wh","wl","h","l","setUint32","oview","res","Chi","Maj","SHA256_K","IV","SHA256_W","SHA256","A","B","C","D","E","F","G","H","getUint32","W15","W2","s0","s1","T1","T2","sha256","U32_MASK64","fromBig","le","lst","Ah","Al","shrSH","s","shrSL","rotrSH","rotrSL","rotrBH","rotrBL","Bh","Bl","add3L","Cl","add3H","low","Ch","add4L","Dl","add4H","Dh","add5L","El","add5H","Eh","SHA512_Kh","SHA512_Kl","u64.split","SHA512_W_H","SHA512_W_L","SHA512","Fh","Fl","Gh","Gl","Hh","Hl","W15h","W15l","s0h","u64.rotrSH","u64.shrSH","s0l","u64.rotrSL","u64.shrSL","W2h","W2l","s1h","u64.rotrBH","s1l","u64.rotrBL","SUMl","u64.add4L","SUMh","u64.add4H","sigma1h","sigma1l","CHIh","T1ll","u64.add5L","T1h","u64.add5H","T1l","sigma0h","sigma0l","MAJh","MAJl","u64.add","All","u64.add3L","u64.add3H","SHA512_256","SHA384","sha512","anyGlobal","self","window","global","getGlobal","crypto","msCrypto","createHash","algo","locked","_computeHmac","algorithm","_algo","createHmac","__computeHmac","computeHmac","_data","_","lock","register","func","SHA3_PI","SHA3_ROTL","_SHA3_IOTA","_0n","_1n","_2n","_7n","_256n","_0x71n","R","x","y","j","SHA3_IOTA_H","SHA3_IOTA_L","rotlH","u64.rotlBH","u64.rotlSH","rotlL","u64.rotlBL","u64.rotlSL","Keccak","enableXOF","rounds","posOut","state32","keccak","idx1","idx0","B0","B1","Th","Tl","curH","curL","PI","keccakP","finish","writeInto","xofInto","xof","gen","keccak_256","genShake","hashCons","msg","wrapConstructorWithOpts","_keccak256","__keccak256","keccak256","Rho","Id","Pi","idxL","idxR","shifts","shiftsL","idx","shiftsR","Kl","Kr","rotl","group","z","BUF","RIPEMD160","h0","h1","h2","h3","h4","al","ar","bl","br","cl","cr","dl","dr","el","er","rGroup","hbl","hbr","rl","rr","sl","sr","tl","tr","ripemd160","_ripemd160","noble_ripemd160","__ripemd160","_pbkdf2","iterations","keylen","pbkdf2Sync","__pbkdf2","_randomBytes","getRandomValues","crypto_random","__randomBytes","randomBytes","XorAndSalsa","prev","pi","ii","oi","y00","y01","y02","y03","y04","y05","y06","y07","y08","y09","y10","y11","y12","y13","y14","y15","x00","x01","x02","x03","x04","x05","x06","x07","x08","x09","x10","x11","x12","x13","x14","x15","BlockMix","r","head","tail","scryptInit","maxmem","N","onProgress","blockSize","blockSize32","memUsed","B32","V","blockMixCb","totalBlockMix","callbackPer","blockMixCnt","scryptOutput","lockedSync","lockedAsync","_scryptAsync","passwd","_nobleAsync","_scryptSync","_nobleSync","__scryptAsync","__scryptSync","scrypt","_passwd","progress","scryptSync","_sha256","_sha512","__sha256","__sha512","locked256","locked512","BN_36","getChecksumAddress","address","chars","expanded","charCodeAt","hashed","toUpperCase","ibanLookup","ibanChecksum","block","checksum","Base36","getAddress","fromBase36","getIcapAddress","base36","arrayifyInteger","_encode","payload","child","encodeRlp","hexlifyByte","unarrayifyInteger","_decodeChildren","childOffset","decoded","_decode","checkOffset","lengthLength","decodeRlp","getCreateAddress","tx","nonceHex","nonce","getCreate2Address","_from","_initCodeHash","initCodeHash","isAddressable","isAddress","resolveAddress","resolver","resolveName","_Typed_options","_gaurd","Typed","_typedSymbol","gaurd","options","isBigInt","isData","isString","tupleName","isTyped","AddressCoder","dereference","decode","reader","AnonymousCoder","coder","pack","coders","arrayValues","unique","staticWriter","dynamicWriter","updateFuncs","dynamicOffset","updateFunc","baseOffset","unpack","baseReader","offsetReader","fromItems","ArrayCoder","defaultChild","BooleanCoder","DynamicBytesCoder","BytesCoder","FixedBytesCoder","Empty","NullCoder","BN_MAX_UINT256","NumberCoder","maxUintValue","bounds","UnicodeNormalizationForm","Utf8ErrorReason","ignoreFunc","reason","output","badCodepoint","BAD_PREFIX","UNEXPECTED_CONTINUE","OVERRUN","exports","Utf8ErrorFuncs","ignore","replace","OVERLONG","getUtf8CodePoints","_bytes","onError","extraLength","overlongMask","nextChar","MISSING_CONTINUE","OUT_OF_RANGE","UTF16_SURROGATE","toUtf8Bytes","current","c2","pair","escapeChar","_toEscapedUtf8String","codePoint","_toUtf8String","codePoints","toUtf8String","toUtf8CodePoints","formatBytes32String","parseBytes32String","createTable","_func","lo","createRangeTable","hi","matchMap","ranges","range","Table_A_1_ranges","Table_B_1_flags","Table_B_2_ranges","Table_B_2_lut_abs","Table_B_2_lut_rel","Table_B_2_complex","Table_C_ranges","nameprep","codes","codesTableB2","codepoint","_nameprepTableB2","NFKC","StringCoder","TupleCoder","uniqueNames","_AbiCoder_instances","_AbiCoder_getCoder","paramTypeBytes","paramTypeNumber","defaultAbiCoder","getDefaultValue","id","Zeros","Partition","isValidName","namehash","partition","dnsEncode","messagePrefix","hashMessage","_TypedDataEncoder_instances","_TypedDataEncoder_types","_TypedDataEncoder_fullTypes","_TypedDataEncoder_encoderCache","_TypedDataEncoder_getEncoder","padding","BN__1","hexTrue","hexFalse","domainFieldTypes","chainId","verifyingContract","domainFieldNames","checkString","domainChecks","getBaseEncoder","boundsUpper","boundsLower","hexPadRight","encodeType","fields","TypedDataEncoder","links","parents","subtypes","field","primaryTypes","primaryType","checkCircular","found","subtype","delete","st","sort","getEncoder","encoder","encodeData","hashStruct","_visit","callback","visit","domain","domainFields","EIP712Domain","hashDomain","ensCache","domainValues","domainTypes","typesWithDomain","subEncoder","encodedType","_Interface_instances","_Interface_errors","_Interface_events","_Interface_functions","_Interface_abiCoder","_Interface_getFunction","_Interface_getEvent","LogDescription","fragment","topic","signature","TransactionDescription","selector","ErrorDescription","Indexed","_isIndexed","PanicReasons","BuiltinErrors","Interface","fragments","abi","getAbiCoder","bucket","deploy","getFunctionName","getFunction","getEventName","getEvent","getError","getSelector","matching","getEventTopic","_decodeParams","_encodeParams","encodeDeploy","decodeErrorResult","encodeErrorResult","decodeFunctionData","encodeFunctionData","decodeFunctionResult","errorArgs","errorName","errorSignature","builtin","transaction","encodeFunctionResult","functionFragment","encodeFilterTopics","eventFragment","topics","encodeTopic","encodeEventLog","dataTypes","dataValues","decodeEventLog","eventTopic","nonIndexed","resultIndexed","resultNonIndexed","nonIndexedIndex","indexedIndex","parseTransaction","parseLog","parseError","hexData","forceUnique","lastValue","valueLength","allowOptions","splice","lastArg","matchStr","m","_FetchResponse_props","_FetchResponse_error","FetchResponse","statusCode","statusMessage","headers","body","request","bodyText","response","bodyJson","iterator","next","done","makeServerError","throwThrottleError","stall","throttle","getHeader","hasBody","ok","assertOk","getUrl","req","timeout","protocol","url","credentials","allowInsecureAuthentication","init","Headers","resp","fetch","arrayBuffer","status","statusText","_FetchRequest_props","FetchRequest","allowInsecure","gzip","bodyType","allowGzip","setHeader","clearHeaders","setCredentials","username","redirect","location","delay","duration","getTime","lockGateways","fetchData","connection","conn","attempts","throttleLimit","slotInterval","throttleSlotInterval","retryFunc","throttleRetry","preflightRequest","processResponse","t0","retryAfter","trunc","random","pow","setGateway","gateway","setIpfsGateway","setArGateway","_EnsResolver_supports2544","_EnsResolver_getResolver","HashZero","parseBytes","parseString","numPad","padded","bytesPad","encodeBytes","byteCount","getIpfsLink","MulticoinProviderPlugin","validate","proivder","supportsCoinType","coinType","matcherIpfs","matchers","EnsResolver","provider","catch","parameters","addrData","enableCcipRead","supportsWildcard","_fetch","getNetwork","formatter","callAddress","coinPlugin","plugin","plugins","encodeAddress","keyBytes","calldata","hexBytes","ipfs","scheme","swarm","_getAvatar","linkage","avatar","getText","owner","addr","tokenId","tokenOwner","balance","metadataUrl","metadata","imageUrl","image","currentName","network","ensPlugin","getPlugin","_Signature_props","BN_2","BN_27","BN_28","BN_35","BN_MASK_255","Zero","Signature","networkV","legacyChainId","getChainId","vs","yParity","serialized","toJSON","_type","bv","_v","sig","getNormalizedV","_3n","_8n","POW_2_256","CURVE","P","Gx","Gy","beta","weistrass","x2","mod","x3","USE_ENDOMORPHISM","JacobianPoint","Point","points","toInv","nums","scratch","inverted","invert","acc","num","reduceRight","invertBatch","toAffine","toAffineBatch","fromAffine","equals","X1","Y1","Z1","X2","Y2","Z2","Z1Z1","Z2Z2","U1","U2","S1","S2","negate","double","X3","Y3","Z3","ZERO","HH","HHH","subtract","multiplyUnsafe","scalar","normalizeScalar","P0","k1neg","k1","k2neg","k2","splitScalarEndo","k1p","k2p","precomputeWindow","W","windows","base","wNAF","affinePoint","BASE","_WINDOW_SIZE","precomputes","pointPrecomputes","normalizeZ","windowSize","maxNumber","shiftBy","wbits","pr","cached","abs","multiply","point","fake","f1p","f2p","invZ","iz1","iz2","iz3","ax","ay","_setWindowSize","isShort","bytesToNumber","isValidFieldElement","_6n","_11n","_22n","_23n","_44n","_88n","b2","b3","b6","pow2","b9","b11","b22","b44","b88","b176","b220","b223","t1","t2","sqrtMod","isYOdd","assertValidity","ensureBytes","header","fromCompressedHex","fromUncompressedHex","privateKey","normalizePrivateKey","msgHash","recovery","delta","truncateHash","fromDER","fromCompact","normalizeSignature","prefix","fromHex","numTo32bStr","rinv","u1","u2","Q","multiplyAndAddUnsafe","toRawBytes","isCompressed","hexToBytes","toHexX","toRawX","aP","bQ","sum","sliceDER","parseDERInt","bytesToHex","isUint8a","hexToNumber","sBytes","rBytesLeft","parseDERSignature","isWithinCurveOrder","hasHighS","HALF","normalizeS","toDERRawBytes","toDERHex","sHex","numberToHexUnpadded","rHex","rLen","sLen","toCompactRawBytes","toCompactHex","concatBytes","arrays","every","hexes","uint8a","array","hexByte","byte","power","number","modulo","divNearest","POW_2_128","a1","b1","a2","c1","HmacDrbg","counter","utils","hmacSha256","hmacSync","hmacSha256Sync","incr","seed","reseedSync","generateSync","kmdToSig","kBytes","q","isPub","getSharedSecret","privateA","publicB","publicKey","bits2int","bits2octets","z1","z2","int2octets","signSync","privKey","extraEntropy","seedArgs","initSigArgs","drbg","recSig","canonical","der","recovered","finalizeSig","node","web","isValidPrivateKey","hashToPrivateKey","numTo32b","bytesLength","randomPrivateKey","subtle","messages","ckey","importKey","sign","sha256Sync","precompute","_SigningKey_privateKey","SigningKey","computePublicKey","compressedPublicKey","sigDer","recid","secp256k1.signSync","secp256k1.Signature","computeShardSecret","pubKey","secp256k1.getSharedSecret","compressed","fromPrivateKey","secp256k1.getPublicKey","pub","secp256k1.Point","fromSignature","secp256k1.recoverPublicKey","p0","p1","pub0","pub1","accessSetify","storageKeys","storageKey","accessListify","localeCompare","_Transaction_props","formatNumber","formatAccessList","_serializeLegacy","gasPrice","gasLimit","legacy","getChainIdV","_serializeEip1559","maxPriorityFeePerGas","maxFeePerGas","accessList","_serializeEip2930","Transaction","typeName","unsignedHash","unsignedSerialized","fromPublicKey","isSigned","inferTypes","hasGasPrice","hasFee","hasAccessList","_parseEip1559","_Block_transactions","_TransactionReceipt_logs","toJson","FeeData","Block","dummyProvider","transactions","timestamp","parentHash","difficulty","gasUsed","miner","extraData","baseFeePerGas","date","getTransaction","isMined","isLondon","orphanedEvent","orphan","Log","transactionHash","blockHash","blockNumber","removed","transactionIndex","getBlock","getTransactionReceipt","removedEvent","TransactionReceipt","logs","contractAddress","logsBloom","cumulativeGasUsed","effectiveGasPrice","byzantium","root","fee","getBlockNumber","createRemovedTransactionFilter","reorderedEvent","createReorderedTransactionFilter","TransactionResponse","confirms","waitForTransaction","isLegacy","isBerlin","fail","blockTag","position","signedTx","blockHashOrBlockTag","_Formatter_format","_Formatter_baseBlock","Formatter","bigNumber","uint256","arrayOf","fromBlock","allowNull","toBlock","transactionRequest","transactionResponse","blockWithTransactions","fromTransaction","boolean","receipt","filterLog","allowFalsish","ifFalse","ifNull","_hexstring","dataOrLength","altNames","srcKey","altKey","nv","storageSlot","NetworkPlugin","GasCostPlugin","effectiveBlock","costs","props","nullish","EnsPlugin","targetNetwork","MaxPriorityFeePlugin","priorityFee","_Network_props","Networks","defaultFormatter","Network","_chainId","attachPlugin","getPlugins","basename","computeIntrinsicGas","txBase","txCreate","txDataZero","txDataNonzero","txAccessListAddress","txAccessListStorageKey","networkFunc","custom","ensAddress","ensNetwork","nameOrChainId","existing","_PollingBlockSubscriber_instances","_PollingBlockSubscriber_provider","_PollingBlockSubscriber_poller","_PollingBlockSubscriber_interval","_PollingBlockSubscriber_blockNumber","_PollingBlockSubscriber_poll","_OnBlockSubscriber_provider","_OnBlockSubscriber_poll","_PollingOrphanSubscriber_filter","_PollingTransactionSubscriber_hash","_PollingEventSubscriber_instances","_PollingEventSubscriber_provider","_PollingEventSubscriber_filter","_PollingEventSubscriber_poller","_PollingEventSubscriber_blockNumber","_PollingEventSubscriber_poll","PollingBlockSubscriber","pollingInterval","stop","clearTimeout","pause","dropWhilePaused","resume","emit","OnBlockSubscriber","_poll","on","PollingOrphanSubscriber","PollingTransactionSubscriber","PollingEventSubscriber","getLogs","_AbstractProvider_instances","_AbstractProvider_subs","_AbstractProvider_plugins","_AbstractProvider_pausedState","_AbstractProvider_networkPromise","_AbstractProvider_anyNetwork","_AbstractProvider_performCache","_AbstractProvider_nextTimer","_AbstractProvider_timers","_AbstractProvider_disableCcipRead","_AbstractProvider_perform","_AbstractProvider_call","_AbstractProvider_getBlock","_AbstractProvider_hasSub","_AbstractProvider_getSub","getTag","UnmanagedSubscriber","concisify","getSubscription","_event","tag","addresses","addAddress","AbstractProvider","_network","disableCcipRead","urls","sender","errorMessages","href","errorMessage","_wrapTransaction","_detectNetwork","detectNetwork","networkPromise","expected","actual","priorityFeePlugin","getPriorityFee","_request","_tx","_getTransaction","_getBlockTag","_address","_blockTag","_position","lookup","addBlockTag","_filter","_getFilter","_getProvider","fromName","getResolver","getAvatar","reject","timer","once","_clearTimeout","timerId","_setTimeout","_b","paused","time","_forEachSubscriber","sub","subscriber","_getSubscriber","_recoverSubscriber","oldSub","newSub","started","listeners","total","removeAllListeners","_parseString","_parseBytes","perform","_perform","attempt","txSender","ccipArgs","urlsOffset","urlsLength","urlsData","parseOffchainLookup","ccipResult","ccipReadFetch","includeTransactions","emitArgs","subscription","addressableMap","nameMap","empty","_AbstractSigner_instances","_AbstractSigner_checkProvider","_AbstractSigner_fromify","_VoidSigner_instances","_VoidSigner_throwUnsupported","_WrappedSigner_signer","AbstractSigner","getBalanceOf","getTransactionCountOf","estimateGas","getTransactionCount","txObj","populateTransaction","broadcastTransaction","signTransaction","actions","VoidSigner","connect","WrappedSigner","signer","sendTransaction","signMessage","signTypedData","shown","showThrottleMessage","service","_FilterIdSubscriber_instances","_FilterIdSubscriber_provider","_FilterIdSubscriber_filterIdPromise","_FilterIdSubscriber_poller","_FilterIdSubscriber_network","_FilterIdSubscriber_poll","_FilterIdSubscriber_teardown","_FilterIdEventSubscriber_event","FilterIdSubscriber","_subscribe","_emitResults","_recover","filterId","send","filterIdPromise","FilterIdEventSubscriber","results","FilterIdPendingSubscriber","_JsonRpcApiProvider_nextId","_JsonRpcApiProvider_options","_JsonRpcProvider_connect","_JsonRpcProvider_pollingInterval","Primitive","deepCopy","getLowerCase","defaultOptions","polling","batchMaxSize","batchStallTime","JsonRpcSigner","getFeeData","_to","hexTx","getRpcTransaction","sendUncheckedTransaction","checkTx","_message","populated","resolveNames","getPayload","JsonRpcApiProvider","_getOptions","_setOptions","prepareRequest","jsonrpc","accounts","account","dstKey","getRpcRequest","signedTransaction","getRpcError","spelunkData","_spelunkMessage","spelunkMessage","feeData","JsonRpcProvider","isPollable","StaticJsonRpcProvider","defaultApiKey","AnkrProvider","apiKey","getConnection","getHost","isCommunityResource","AlchemyProvider","CloudflareProvider","EtherscanPluginId","EtherscanPlugin","baseUrl","communityApiKey","EtherscanProvider","getBaseUrl","query","getPostUrl","getPostData","apikey","post","_getTransactionPostData","maxFeePerGs","_checkError","action","txhash","postData","ethusd","defaultProjectId","InfuraProvider","projectId","projectSecret","defaultAppIds","homestead","ropsten","rinkeby","goerli","normalizeApiKey","_appId","applicationSecretKey","loadBalancer","community","applicationId","PocketProvider","_secretKey","_loadBalancer","_FallbackProvider_instances","_FallbackProvider_configs","_FallbackProvider_initialSyncPromise","_FallbackProvider_getNextConfig","_FallbackProvider_addRunner","_FallbackProvider_initialSync","_FallbackProvider_checkQuorum","_FallbackProvider_waitForQuorum","defaultConfig","stallTimeout","priority","weight","defaultState","requests","lateResponses","errorResponses","outOfSync","unsupportedEvents","rollingDuration","score","_updateNumber","_totalTime","checkQuorum","quorum","tally","normal","bestResult","bestWeight","FallbackProvider","providers","eventQuorum","eventWorkers","running","runner","configs","allConfigs","shuffle","config","didBump","staller","dt","initialSync","waitForSync","mid","getMedian","interesting","newRunners","race","_WebSocket","WebSocket","_SocketSubscriber_provider","_SocketSubscriber_filter","_SocketSubscriber_filterId","_SocketSubscriber_paused","_SocketSubscriber_emitPromise","_SocketEventSubscriber_logFilter","_SocketEventSubscriber_formatter","_SocketProvider_callbacks","_SocketProvider_ready","_SocketProvider_subs","_SocketProvider_pending","SocketSubscriber","_register","_handleMessage","emitPromise","_emit","SocketBlockSubscriber","SocketPendingSubscriber","SocketEventSubscriber","logFilter","SocketProvider","pending","promise","_write","_WebSocketProvider_websocket","WebSocketProvider","websocket","onopen","_start","onmessage","_processMessage","registerEth","etherscan","injectCommonNetworks","_Network","IpcSocketProvider","_ContractTransactionReceipt_interface","_ContractTransactionResponse_interface","EventLog","iface","interface","eventName","eventSignature","ContractTransactionReceipt","ContractTransactionResponse","wait","ContractEventPayload","contract","_log","_PreparedTopicFilter_filter","canResolve","PreparedTopicFilter","getRunner","resolvedArgs","walkAsync","getTopicFilter","feature","copyOverrides","arg","overrides","bigIntKeys","numberKeys","enableCcipReadEnabled","customData","copyRequest","WrappedMethod","Function","_WrappedMethodBase","_contract","thisArg","getFragment","staticCall","_runner","resolveArgs","staticCallResult","WrappedEvent","_WrappedEventBase","internalValues","getInternal","getSubTag","hasSub","subs","getSub","runnerOff","lastEmit","resultPromise","passArgs","BaseContract","_deployTx","addrPromise","deployTx","filters","_prop","deploymentTransaction","Contract","_ContractBase","computeAddress","subsChrs","Word","unfold","words","sep","initial","decodeOwl","clumps","leftover","semi","Wordlist","locale","mnemonic","_WordlistOwl_instances","_WordlistOwl_data","_WordlistOwl_checksum","_WordlistOwl_words","_WordlistOwl_loadWords","WordlistOwl","_decodeWords","getWord","getWordIndex","langEn","wordlists","en","_WordlistOwlA_accent","WordlistOwlA","accent","_accent","accents","posOffset","positions","flood","decodeBits","charCode","regex","decodeOwlA","getUpperMask","mnemonicToEntropy","wordlist","entropy","bit","entropyBits","checksumMask","entropyToMnemonic","indices","remainingBits","checksumBits","Mnemonic","phrase","computeSeed","NFKD","_entropy","_BaseWallet_signingKey","BaseWallet","signingKey","btx","_HDNodeWallet_fromSeed","_HDNodeWalletManager_root","defaultPath","MasterSecret","HardenedBit","zpad","encodeBase58Check","ser_I","chainCode","I","IL","IR","derivePath","path","component","deriveChild","HDNodeWallet","parentFingerprint","fingerprint","extendedKey","hasPath","neuter","HDNodeVoidWallet","_index","ki","fromPhrase","fromEntropy","_seed","Ki","_addPoints","HDNodeWalletManager","getSigner","getAccountPath","_AES_key","_AES_Kd","_AES_Ke","numberOfRounds","rcon","S","Si","T3","T4","T5","T6","T7","T8","U3","U4","convertToInt32","AES","roundKeyCount","KC","tk","tt","rconpointer","encrypt","plaintext","decrypt","ciphertext","ModeOfOperation","cls","aes","_CBC_iv","_CBC_lastBlock","CBC","iv","_CTR_remaining","_CTR_remainingIndex","_CTR_counter","CTR","initialValue","setCounterValue","setCounterBytes","MAX_SAFE_INTEGER","increment","crypttext","looseArrayify","hexString","getPassword","spelunk","_path","reqd","isCrowdsaleJson","encseed","decryptCrowdsaleJson","encryptedSeed","padder","pkcs7Strip","seedHex","isKeystoreJson","getAccount","mnemonicKey","mnemonicCiphertext","mnemonicIv","mnemonicAesCtr","getKdfParams","kdf","prf","_Wallet_mnemonic","trySigningKey","Wallet","wallet","fromMnemonic","tryWallet","tryMnemonic","progressCallback","encryptSync","decryptKeystoreJson","decryptKeystoreJsonSync"],"mappings":"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M,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,EAAM,IAAM,GAAM,IAAM,GAAM,IAAM,EAAM,IAAM,EAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,EAAM,IAAM,GAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,IAAM,EAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,GAAM,IAAM,GAAM,IAAM,EAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,GAAM,GAAM,GAAM,EAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,EAAM,IAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,EAAM,IAAM,GAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,IAC//CC,GAAK,CAAC,GAAM,EAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,EAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,EAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,EAAM,IAAM,IAAM,GAAM,EAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,GAAM,EAAM,IAAM,IAAM,IAAM,EAAM,EAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,EAAM,IAAM,GAAM,IAAM,GAAM,GAAM,GAAM,GAAM,IAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,GAAM,EAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,GAAM,GAAM,GAAM,GAAM,KAEhgDhkD,GAAK,CAAC,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,EAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAC1/FC,GAAK,CAAC,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,EAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,SAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAC1/FgkD,GAAK,CAAC,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,SAAY,WAAY,UAAY,WAAY,UAAY,WAAY,SAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,EAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAC1/FC,GAAK,CAAC,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,SAAY,WAAY,UAAY,WAAY,UAAY,WAAY,SAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,EAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAE1/FC,GAAK,CAAC,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,EAAY,UAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/FC,GAAK,CAAC,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,EAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,SAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/FC,GAAK,CAAC,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,SAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,EAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/FC,GAAK,CAAC,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,SAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,WAAY,SAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,SAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,EAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,YAE1/Fx1B,GAAK,CAAC,EAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/FC,GAAK,CAAC,EAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,SAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,SAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/Fw1B,GAAK,CAAC,EAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,UAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,UAAY,UAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,UAAY,UAAY,WAAY,UAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/FC,GAAK,CAAC,EAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,W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"} \ No newline at end of file diff --git a/packages/ethers/package.json b/packages/ethers/package.json new file mode 100644 index 000000000..b55dee5c4 --- /dev/null +++ b/packages/ethers/package.json @@ -0,0 +1,39 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/address": "^6.0.0-beta.1", + "@ethersproject/bytes": "^6.0.0-beta.1", + "@ethersproject/logger": "^6.0.0-beta.1", + "@ethersproject/math": "^6.0.0-beta.1", + "@ethersproject/properties": "^6.0.0-beta.1", + "@ethersproject/signing-key": "^6.0.0-beta.1", + "@ethersproject/transactions": "^6.0.0-beta.1", + "@ethersproject/wallet": "^6.0.0-beta.1" + }, + "description": "Ethereum Providers for ethers.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "ethers" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "ethers", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/ethers", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/ethers/src.ts/_version.ts b/packages/ethers/src.ts/_version.ts new file mode 100644 index 000000000..2c9965d52 --- /dev/null +++ b/packages/ethers/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "ethers@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/ethers/src.ts/ethers.ts b/packages/ethers/src.ts/ethers.ts new file mode 100644 index 000000000..4532ed175 --- /dev/null +++ b/packages/ethers/src.ts/ethers.ts @@ -0,0 +1,208 @@ + +export { + Interface +} from "@ethersproject/abi"; + +export { + getAddress, getIcapAddress, + getCreateAddress, getCreate2Address, + isAddressable, isAddress, resolveAddress +} from "@ethersproject/address"; + +export { + arrayify, + decodeBase64, encodeBase64, + isHexString, isBytesLike, + concat, dataLength, dataSlice, stripZerosLeft, + hexlify, quantity, + zeroPadLeft, zeroPadRight +} from "@ethersproject/bytes"; + +export { + BaseContract, Contract, + ContractEventPayload, ContractTransactionReceipt, ContractTransactionResponse, + EventLog +} from "@ethersproject/contract"; + +export { + computeHmac, + + keccak256, + ripemd160, + sha256, sha512, + + pbkdf2, + scrypt, scryptSync, + + randomBytes, + lock, +} from "@ethersproject/crypto"; + +export { + id, + isValidName, namehash, dnsEncode, + messagePrefix, hashMessage, + TypedDataEncoder +} from "@ethersproject/hash"; + +export { + FixedFormat, FixedNumber, formatFixed, parseFixed, + fromTwos, toTwos, mask, + toArray, toBigInt, toHex, toNumber, + decodeBase58, encodeBase58 +} from "@ethersproject/math"; + +export { + defineProperties, resolveProperties, + getStore, setStore +} from "@ethersproject/properties"; + + + + + +export { + getDefaultProvider, + + AbstractProvider, UnmanagedSubscriber, + + AbstractSigner, + VoidSigner, + WrappedSigner, + + showThrottleMessage, + + EnsResolver, + + Formatter, + + NetworkPlugin, + GasCostPlugin, + EnsPlugin, + //LayerOneConnectionPlugin, + MaxPriorityFeePlugin, + //PriceOraclePlugin, + + Network, + + Block, + FeeData, + Log, + TransactionReceipt, + TransactionResponse, + + dummyProvider, + + FallbackProvider, + + JsonRpcProvider, + JsonRpcSigner, + StaticJsonRpcProvider, + + AlchemyProvider, + AnkrProvider, + CloudflareProvider, + EtherscanProvider, + InfuraProvider, + PocketProvider, + + IpcSocketProvider, + SocketProvider, + WebSocketProvider, + +} from "@ethersproject/providers"; + +export type { + ProviderPlugin, Subscriber, Subscription, + + CommunityResourcable, + + AvatarLinkageType, AvatarLinkage, AvatarResult, + + FormatFunc, + + Networkish, + GasCostParameters, + + BlockTag, + CallRequest, TransactionRequest, PreparedRequest, + EventFilter, Filter, FilterByBlockHash, OrphanFilter, ProviderEvent, + Provider, + + Signer, +} from "@ethersproject/providers"; + + +export { encodeRlp, decodeRlp } from "@ethersproject/rlp"; + +export { Signature, SigningKey } from "@ethersproject/signing-key"; + +export { + formatBytes32String, parseBytes32String, + + nameprep, + + _toEscapedUtf8String, + toUtf8Bytes, toUtf8CodePoints, toUtf8String, + + UnicodeNormalizationForm, + Utf8ErrorFuncs, Utf8ErrorReason +} from "@ethersproject/strings"; + +export { Transaction } from "@ethersproject/transactions"; + +export { + computeAddress, + + defaultPath, + + getAccountPath, + + HDNodeWallet, HDNodeVoidWallet, + HDNodeWalletManager, + + Mnemonic, + + Wallet +} from "@ethersproject/wallet"; + +export { fetchData, FetchRequest, FetchResponse } from "@ethersproject/web"; + +export { + Wordlist, WordlistOwl, WordlistOwlA, + + wordlists +} from "@ethersproject/wordlists"; + +export { version } from "./_version.js"; + + +export type { Addressable, NameResolver } from "@ethersproject/address" +export type { BytesLike, Hexable } from "@ethersproject/bytes"; +export type { + ConstantContractMethod, ContractEvent, ContractEventArgs, ContractEventName, + ContractInterface, ContractMethod, ContractMethodArgs, ContractRunner, + ContractTransaction, DeferredTopicFilter, Overrides +} from "@ethersproject/contract"; +export type { ProgressCallback } from "@ethersproject/crypto"; +export type { TypedDataDomain, TypedDataField } from "@ethersproject/hash"; +export type { + EventEmitterable, Listener, + Frozen, Freezable +} from "@ethersproject/properties"; +export type { RlpStructuredData } from "@ethersproject/rlp"; +export type { SignatureLike } from "@ethersproject/signing-key"; +export type { Utf8ErrorFunc } from "@ethersproject/strings"; +export type { + AccessList, AccessListish, + SignedTransaction, TransactionLike +} from "@ethersproject/transactions"; +export type { + ConnectionInfo, + PreflightRequestFunc, ProcessResponseFunc, + ThrottleRetryFunc +} from "@ethersproject/web"; + + + + diff --git a/packages/ethers/src.ts/index.ts b/packages/ethers/src.ts/index.ts new file mode 100644 index 000000000..ed55f588c --- /dev/null +++ b/packages/ethers/src.ts/index.ts @@ -0,0 +1,6 @@ + +// import { ethers } from "ethers"; +export * as ethers from "./ethers.js"; + +// import { toUtf8String, etc } from "ethers"; +export * from "./ethers.js"; diff --git a/packages/ethers/tsconfig.json b/packages/ethers/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/ethers/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/hash/LICENSE.md b/packages/hash/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/hash/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/hash/package.json b/packages/hash/package.json new file mode 100644 index 000000000..994794708 --- /dev/null +++ b/packages/hash/package.json @@ -0,0 +1,38 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/address": "^6.0.0-beta.1", + "@ethersproject/bytes": "^6.0.0-beta.1", + "@ethersproject/crypto": "^6.0.0-beta.1", + "@ethersproject/logger": "^6.0.0-beta.1", + "@ethersproject/math": "^6.0.0-beta.1", + "@ethersproject/properties": "^6.0.0-beta.1", + "@ethersproject/strings": "^6.0.0-beta.1" + }, + "description": "Hash utilities for ethers.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "ethers" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/hash", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/hash", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/hash/src.ts/_version.ts b/packages/hash/src.ts/_version.ts new file mode 100644 index 000000000..35489f044 --- /dev/null +++ b/packages/hash/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/hash@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/hash/src.ts/id.ts b/packages/hash/src.ts/id.ts new file mode 100644 index 000000000..e444e5e49 --- /dev/null +++ b/packages/hash/src.ts/id.ts @@ -0,0 +1,6 @@ +import { keccak256 } from "@ethersproject/crypto"; +import { toUtf8Bytes } from "@ethersproject/strings"; + +export function id(value: string): string { + return keccak256(toUtf8Bytes(value)); +} diff --git a/packages/hash/src.ts/index.ts b/packages/hash/src.ts/index.ts new file mode 100644 index 000000000..be937ed84 --- /dev/null +++ b/packages/hash/src.ts/index.ts @@ -0,0 +1,6 @@ +export { id } from "./id.js" +export { isValidName, namehash, dnsEncode } from "./namehash.js"; +export { messagePrefix, hashMessage } from "./message.js"; +export { TypedDataEncoder } from "./typed-data.js"; + +export type { TypedDataDomain, TypedDataField } from "./typed-data.js"; diff --git a/packages/hash/src.ts/logger.ts b/packages/hash/src.ts/logger.ts new file mode 100644 index 000000000..6fde778de --- /dev/null +++ b/packages/hash/src.ts/logger.ts @@ -0,0 +1,3 @@ +import { Logger } from "@ethersproject/logger"; +import { version } from "./_version.js"; +export const logger = new Logger(version); diff --git a/packages/hash/src.ts/message.ts b/packages/hash/src.ts/message.ts new file mode 100644 index 000000000..1eb274612 --- /dev/null +++ b/packages/hash/src.ts/message.ts @@ -0,0 +1,15 @@ +import { concat } from "@ethersproject/bytes"; +import { keccak256 } from "@ethersproject/crypto"; +import { toUtf8Bytes } from "@ethersproject/strings"; + + +export const messagePrefix = "\x19Ethereum Signed Message:\n"; + +export function hashMessage(message: Uint8Array | string): string { + if (typeof(message) === "string") { message = toUtf8Bytes(message); } + return keccak256(concat([ + toUtf8Bytes(messagePrefix), + toUtf8Bytes(String(message.length)), + message + ])); +} diff --git a/packages/hash/src.ts/namehash.ts b/packages/hash/src.ts/namehash.ts new file mode 100644 index 000000000..2c2ae8d9f --- /dev/null +++ b/packages/hash/src.ts/namehash.ts @@ -0,0 +1,68 @@ +import { concat, hexlify } from "@ethersproject/bytes"; +import { keccak256 } from "@ethersproject/crypto"; +import { nameprep, toUtf8Bytes } from "@ethersproject/strings"; + +import { logger } from "./logger.js"; + + +const Zeros = new Uint8Array(32); +Zeros.fill(0); + +const Partition = new RegExp("^((.*)\\.)?([^.]+)$"); + +export function isValidName(name: string): boolean { + try { + const comps = name.split("."); + for (let i = 0; i < comps.length; i++) { + if (nameprep(comps[i]).length === 0) { + throw new Error("empty") + } + } + return true; + } catch (error) { } + return false; +} + +export function namehash(name: string): string { + if (typeof(name) !== "string") { + logger.throwArgumentError("invalid ENS name; not a string", "name", name); + } + + let current = name; + let result: string | Uint8Array = Zeros; + while (current.length) { + const partition = current.match(Partition); + if (partition == null || partition[2] === "") { + return logger.throwArgumentError("invalid ENS name; missing component", "name", name); + } + const label = toUtf8Bytes(nameprep(partition[3])); + result = keccak256(concat([result, keccak256(label)])); + + current = partition[2] || ""; + } + + return hexlify(result); +} + +export function dnsEncode(name: string): string { + if (typeof(name) !== "string") { + logger.throwArgumentError("invalid DNS name; not a string", "name", name); + } + + if (name === "") { return "0x00"; } + + // @TODO: should we enforce the 255 octet limit? + + return concat(name.split(".").map((comp) => { + if (comp === "") { + logger.throwArgumentError("invalid DNS name; missing component", "name", name); + } + + // We jam in an _ prefix to fill in with the length later + // Note: Nameprep throws if the component is over 63 bytes + const bytes = toUtf8Bytes("_" + nameprep(comp)); + + bytes[0] = bytes.length - 1; + return bytes; + })) + "00"; +} diff --git a/packages/hash/src.ts/tests/test-hash.ts b/packages/hash/src.ts/tests/test-hash.ts new file mode 100644 index 000000000..6a4f53171 --- /dev/null +++ b/packages/hash/src.ts/tests/test-hash.ts @@ -0,0 +1,110 @@ +import assert from "assert"; +import { loadTests } from "./utils.js" +import type { TestCaseNamehash } from "./types.js"; + + +import { dnsEncode, isValidName, namehash } from "../index.js"; + + +describe("Tests Namehash", function() { + const tests = loadTests("namehash"); + for (const test of tests) { + it(`hashes ENS names: ${ JSON.stringify(test.ensName) }`, function() { + const actual = namehash(test.ensName); + + assert.equal(actual, test.namehash, "namehash"); + + // The empty string is not a valid ENS name + if (test.ensName) { + assert.ok(isValidName(test.ensName), "isValidName"); + } + }); + } +}); + +describe("Tests Bad ENS Names", function() { + const badTests: Array<{ ensName: any, prefix: string }> = [ + { ensName: ".", prefix: "missing component" }, + { ensName:"..", prefix: "missing component" }, + { ensName:"ricmoo..eth", prefix: "missing component" }, + { ensName:"ricmoo...eth", prefix: "missing component" }, + { ensName:".foo", prefix: "missing component" }, + { ensName:"foo.", prefix: "missing component" }, + { ensName: 1234, prefix: "not a string" }, + { ensName: true, prefix: "not a string" }, + ]; + + // The empty string is not a valid name, but has a valid namehash + // (the zero hash) as it is the base case for recursion + it("empty ENS name", function() { + assert.ok(!isValidName(""), "!isValidName"); + }); + + for (const { ensName, prefix } of badTests) { + it(`fails on bad ENS name: ${ JSON.stringify(ensName) }`, function() { + assert.ok(!isValidName(ensName), "!isValidName"); + assert.throws(() => { + const result = namehash(ensName); + console.log(result); + }, (error) => { + const errorPrefix = `invalid ENS name; ${ prefix }`; + return (error.code === "INVALID_ARGUMENT" && + error.argument === "name" && error.value === ensName && + error.message.substring(0, errorPrefix.length) === errorPrefix); + }); + }); + } +}); + +describe("Tests DNS Encoding", function() { + const tests: Array<{ ensName: string, dnsEncoded: string}> = [ + { ensName: "", dnsEncoded: "0x00" }, + { ensName: "ricmoo.eth", dnsEncoded: "0x067269636d6f6f0365746800" }, + ]; + + for (const { ensName, dnsEncoded } of tests) { + it(`computes the DNS Encoding: ${ JSON.stringify(ensName) }`, function() { + assert.equal(dnsEncode(ensName), dnsEncoded, "dnsEncoded"); + }); + } +}); + +describe("Tests DNS Names", function() { + const badTests: Array<{ ensName: any, prefix: string}> = [ + { ensName: ".", prefix: "invalid DNS name; missing component" }, + { ensName: "foo..bar", prefix: "invalid DNS name; missing component" }, + { ensName: ".foo", prefix: "invalid DNS name; missing component" }, + { ensName: "foo.", prefix: "invalid DNS name; missing component" }, + { ensName: 1234, prefix: "invalid DNS name; not a string" }, + { ensName: true, prefix: "invalid DNS name; not a string" }, + ]; + + for (const { ensName, prefix } of badTests) { + it(`fails on bad DNS name: ${ JSON.stringify(ensName) }`, function() { + assert.throws(() => { + const result = dnsEncode(ensName); + console.log(result); + }, (error) => { + return (error.code === "INVALID_ARGUMENT" && + error.argument === "name" && error.value === ensName && + error.message.substring(0, prefix.length) === prefix); + }); + }); + } + + { + const ensName = "foobar012345678901234567890123456789012345678901234567890123456789"; + const prefix = "too long"; + it(`fails on bad DNS name: ${ JSON.stringify(ensName) }`, function() { + assert.throws(() => { + const result = dnsEncode(ensName); + console.log(result); + }, (error) => { + return (error.code === "INVALID_ARGUMENT" && + error.argument === "value" && error.value === ensName && + error.message.substring(0, prefix.length) === prefix); + }); + }); + } + +}); diff --git a/packages/hash/src.ts/tests/test-typed-data.ts b/packages/hash/src.ts/tests/test-typed-data.ts new file mode 100644 index 000000000..bf9a6ab50 --- /dev/null +++ b/packages/hash/src.ts/tests/test-typed-data.ts @@ -0,0 +1,20 @@ +import assert from "assert"; +import { loadTests } from "./utils.js"; +import type { TestCaseTypedData } from "./types.js"; + +import { TypedDataEncoder } from "../index.js"; + + +describe("Tests Typed Data (EIP-712)", function() { + const tests = loadTests("typed-data"); + for (const test of tests) { + it(`tests encoding typed-data: ${ test.name }`, function() { + const encoder = TypedDataEncoder.from(test.types); + assert.equal(encoder.primaryType, test.primaryType, "primaryType"); + assert.equal(encoder.encode(test.data), test.encoded, "encoded"); + + assert.equal(TypedDataEncoder.getPrimaryType(test.types), test.primaryType, "primaryType"); + assert.equal(TypedDataEncoder.hash(test.domain, test.types, test.data), test.digest, "digest"); + }); + } +}); diff --git a/packages/hash/src.ts/tests/types.ts b/packages/hash/src.ts/tests/types.ts new file mode 100644 index 000000000..18be09d5e --- /dev/null +++ b/packages/hash/src.ts/tests/types.ts @@ -0,0 +1,69 @@ + +export interface TestCaseHash { + name: string; + data: string; + sha256: string; + sha512: string; + ripemd160: string; + keccak256: string; +} + +export interface TestCaseNamehash { + name: string; + ensName: string; + namehash: string; +} + +export interface TestCasePbkdf { + name: string; + password: string; + salt: string; + dkLen: number; + pbkdf2: { + iterations: number; + algorithm: string; + key: string; + }, + scrypt: { + N: number; + r: number; + p: number; + key: string; + } +} + +export interface TestCaseHmac { + name: string; + data: string; + key: string; + algorithm: "sha256" | "sha512"; + hmac: string; +} + +export interface TestCaseTypedDataDomain { + name?: string; + version?: string; + chainId?: number; + verifyingContract?: string; + salt?: string; +} + +export interface TestCaseTypedDataType { + name: string; + type: string; +} + +export interface TestCaseTypedData { + name: string; + + domain: TestCaseTypedDataDomain; + primaryType: string; + types: Record> + data: any; + + encoded: string; + digest: string; + + privateKey?: string; + signature?: string; +} diff --git a/packages/hash/src.ts/tests/utils.ts b/packages/hash/src.ts/tests/utils.ts new file mode 100644 index 000000000..0b1da525d --- /dev/null +++ b/packages/hash/src.ts/tests/utils.ts @@ -0,0 +1,25 @@ + +import fs from "fs" +import path from "path"; +import zlib from 'zlib'; + +// Find the package root (based on the nyc output/ folder) +const root = (function() { + let root = process.cwd(); + + while (true) { + if (fs.existsSync(path.join(root, "output"))) { return root; } + const parent = path.join(root, ".."); + if (parent === root) { break; } + root = parent; + } + + throw new Error("could not find root"); +})(); + +// Load the tests +export function loadTests(tag: string): Array { + const filename = path.resolve(root, "testcases", tag + ".json.gz"); + return JSON.parse(zlib.gunzipSync(fs.readFileSync(filename)).toString()); +} + diff --git a/packages/hash/src.ts/typed-data.ts b/packages/hash/src.ts/typed-data.ts new file mode 100644 index 000000000..c64685057 --- /dev/null +++ b/packages/hash/src.ts/typed-data.ts @@ -0,0 +1,520 @@ +//import { TypedDataDomain, TypedDataField } from "@ethersproject/providerabstract-signer"; +import { getAddress } from "@ethersproject/address"; +import { arrayify, concat, hexlify, zeroPadLeft, isHexString } from "@ethersproject/bytes"; +import { keccak256 } from "@ethersproject/crypto"; +import { defineProperties } from "@ethersproject/properties"; +import { mask, toHex, toTwos } from "@ethersproject/math"; + +import { id } from "./id.js"; +import { logger } from "./logger.js"; + +import type { BigNumberish, BytesLike } from "@ethersproject/logger"; + + +const padding = new Uint8Array(32); +padding.fill(0); + +const BN__1 = BigInt(-1); +const BN_0 = BigInt(0); +const BN_1 = BigInt(1); +const BN_MAX_UINT256 = BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); + +export interface TypedDataDomain { + name?: string; + version?: string; + chainId?: BigNumberish; + verifyingContract?: string; + salt?: BytesLike; +}; + +export interface TypedDataField { + name: string; + type: string; +}; + +function hexPadRight(value: BytesLike) { + const bytes = arrayify(value); + const padOffset = bytes.length % 32 + if (padOffset) { + return concat([ bytes, padding.slice(padOffset) ]); + } + return hexlify(bytes); +} + +const hexTrue = toHex(BN_1, 32); +const hexFalse = toHex(BN_0, 32); + +const domainFieldTypes: Record = { + name: "string", + version: "string", + chainId: "uint256", + verifyingContract: "address", + salt: "bytes32" +}; + +const domainFieldNames: Array = [ + "name", "version", "chainId", "verifyingContract", "salt" +]; + +function checkString(key: string): (value: any) => string { + return function (value: any){ + if (typeof(value) !== "string") { + logger.throwArgumentError(`invalid domain value for ${ JSON.stringify(key) }`, `domain.${ key }`, value); + } + return value; + } +} + +const domainChecks: Record any> = { + name: checkString("name"), + version: checkString("version"), + chainId: function(value: any) { + return logger.getBigInt(value, "domain.chainId"); + }, + verifyingContract: function(value: any) { + try { + return getAddress(value).toLowerCase(); + } catch (error) { } + return logger.throwArgumentError(`invalid domain value "verifyingContract"`, "domain.verifyingContract", value); + }, + salt: function(value: any) { + const bytes = logger.getBytes(value, "domain.salt"); + if (bytes.length !== 32) { + logger.throwArgumentError(`invalid domain value "salt"`, "domain.salt", value); + } + return hexlify(bytes); + } +} + +function getBaseEncoder(type: string): null | ((value: any) => string) { + // intXX and uintXX + { + const match = type.match(/^(u?)int(\d*)$/); + if (match) { + const signed = (match[1] === ""); + + const width = parseInt(match[2] || "256"); + if (width % 8 !== 0 || width > 256 || (match[2] && match[2] !== String(width))) { + logger.throwArgumentError("invalid numeric width", "type", type); + } + + const boundsUpper = mask(BN_MAX_UINT256, signed ? (width - 1): width); + const boundsLower = signed ? ((boundsUpper + BN_1) * BN__1): BN_0; + + return function(_value: BigNumberish) { + const value = logger.getBigInt(_value, "value"); + + if (value < boundsLower || value > boundsUpper) { + logger.throwArgumentError(`value out-of-bounds for ${ type }`, "value", value); + } + + return toHex(toTwos(value, 256), 32); + }; + } + } + + // bytesXX + { + const match = type.match(/^bytes(\d+)$/); + if (match) { + const width = parseInt(match[1]); + if (width === 0 || width > 32 || match[1] !== String(width)) { + logger.throwArgumentError("invalid bytes width", "type", type); + } + + return function(value: BytesLike) { + const bytes = arrayify(value); + if (bytes.length !== width) { + logger.throwArgumentError(`invalid length for ${ type }`, "value", value); + } + return hexPadRight(value); + }; + } + } + + switch (type) { + case "address": return function(value: string) { + return zeroPadLeft(getAddress(value), 32); + }; + case "bool": return function(value: boolean) { + return ((!value) ? hexFalse: hexTrue); + }; + case "bytes": return function(value: BytesLike) { + return keccak256(value); + }; + case "string": return function(value: string) { + return id(value); + }; + } + + return null; +} + +function encodeType(name: string, fields: Array): string { + return `${ name }(${ fields.map(({ name, type }) => (type + " " + name)).join(",") })`; +} + +export class TypedDataEncoder { + readonly primaryType!: string; + + readonly #types: string; + get types(): Record> { + return JSON.parse(this.#types); + } + + readonly #fullTypes: Map + + readonly #encoderCache: Map string>; + + constructor(types: Record>) { + this.#types = JSON.stringify(types); + this.#fullTypes = new Map(); + this.#encoderCache = new Map(); + + // Link struct types to their direct child structs + const links: Map> = new Map(); + + // Link structs to structs which contain them as a child + const parents: Map> = new Map(); + + // Link all subtypes within a given struct + const subtypes: Map> = new Map(); + + Object.keys(types).forEach((type) => { + links.set(type, new Set()); + parents.set(type, [ ]); + subtypes.set(type, new Set()); + }); + + for (const name in types) { + const uniqueNames: Set = new Set(); + + for (const field of types[name]) { + + // Check each field has a unique name + if (uniqueNames.has(field.name)) { + logger.throwArgumentError(`duplicate variable name ${ JSON.stringify(field.name) } in ${ JSON.stringify(name) }`, "types", types); + } + uniqueNames.add(field.name); + + // Get the base type (drop any array specifiers) + const baseType = ((field.type.match(/^([^\x5b]*)(\x5b|$)/)))[1] || null; + if (baseType === name) { + logger.throwArgumentError(`circular type reference to ${ JSON.stringify(baseType) }`, "types", types); + } + + // Is this a base encoding type? + const encoder = getBaseEncoder(baseType); + if (encoder) { continue; } + + if (!parents.has(baseType)) { + logger.throwArgumentError(`unknown type ${ JSON.stringify(baseType) }`, "types", types); + } + + // Add linkage + (parents.get(baseType) as Array).push(name); + (links.get(name) as Set).add(baseType); + } + } + + // Deduce the primary type + const primaryTypes = Array.from(parents.keys()).filter((n) => ((parents.get(n) as Array).length === 0)); + + if (primaryTypes.length === 0) { + logger.throwArgumentError("missing primary type", "types", types); + } else if (primaryTypes.length > 1) { + logger.throwArgumentError(`ambiguous primary types or unused types: ${ primaryTypes.map((t) => (JSON.stringify(t))).join(", ") }`, "types", types); + } + + defineProperties(this, { primaryType: primaryTypes[0] }); + + // Check for circular type references + function checkCircular(type: string, found: Set) { + if (found.has(type)) { + logger.throwArgumentError(`circular type reference to ${ JSON.stringify(type) }`, "types", types); + } + + found.add(type); + + for (const child of (links.get(type) as Set)) { + if (!parents.has(child)) { continue; } + + // Recursively check children + checkCircular(child, found); + + // Mark all ancestors as having this decendant + for (const subtype of found) { + (subtypes.get(subtype) as Set).add(child); + } + } + + found.delete(type); + } + checkCircular(this.primaryType, new Set()); + + // Compute each fully describe type + for (const [ name, set ] of subtypes) { + const st = Array.from(set); + st.sort(); + this.#fullTypes.set(name, encodeType(name, types[name]) + st.map((t) => encodeType(t, types[t])).join("")); + } + } + + getEncoder(type: string): (value: any) => string { + let encoder = this.#encoderCache.get(type); + if (!encoder) { + encoder = this.#getEncoder(type); + this.#encoderCache.set(type, encoder); + } + return encoder; + } + + #getEncoder(type: string): (value: any) => string { + + // Basic encoder type (address, bool, uint256, etc) + { + const encoder = getBaseEncoder(type); + if (encoder) { return encoder; } + } + + // Array + const match = type.match(/^(.*)(\x5b(\d*)\x5d)$/); + if (match) { + const subtype = match[1]; + const subEncoder = this.getEncoder(subtype); + const length = parseInt(match[3]); + return (value: Array) => { + if (length >= 0 && value.length !== length) { + logger.throwArgumentError("array length mismatch; expected length ${ arrayLength }", "value", value); + } + + let result = value.map(subEncoder); + if (this.#fullTypes.has(subtype)) { + result = result.map(keccak256); + } + + return keccak256(concat(result)); + }; + } + + // Struct + const fields = this.types[type]; + if (fields) { + const encodedType = id(this.#fullTypes.get(type) as string); + return (value: Record) => { + const values = fields.map(({ name, type }) => { + const result = this.getEncoder(type)(value[name]); + if (this.#fullTypes.has(type)) { return keccak256(result); } + return result; + }); + values.unshift(encodedType); + return concat(values); + } + } + + return logger.throwArgumentError(`unknown type: ${ type }`, "type", type); + } + + encodeType(name: string): string { + const result = this.#fullTypes.get(name); + if (!result) { + return logger.throwArgumentError(`unknown type: ${ JSON.stringify(name) }`, "name", name); + } + return result; + } + + encodeData(type: string, value: any): string { + return this.getEncoder(type)(value); + } + + hashStruct(name: string, value: Record): string { + return keccak256(this.encodeData(name, value)); + } + + encode(value: Record): string { + return this.encodeData(this.primaryType, value); + } + + hash(value: Record): string { + return this.hashStruct(this.primaryType, value); + } + + _visit(type: string, value: any, callback: (type: string, data: any) => any): any { + // Basic encoder type (address, bool, uint256, etc) + { + const encoder = getBaseEncoder(type); + if (encoder) { return callback(type, value); } + } + + // Array + const match = type.match(/^(.*)(\x5b(\d*)\x5d)$/); + if (match) { + const subtype = match[1]; + const length = parseInt(match[3]); + if (length >= 0 && value.length !== length) { + logger.throwArgumentError("array length mismatch; expected length ${ arrayLength }", "value", value); + } + return value.map((v: any) => this._visit(subtype, v, callback)); + } + + // Struct + const fields = this.types[type]; + if (fields) { + return fields.reduce((accum, { name, type }) => { + accum[name] = this._visit(type, value[name], callback); + return accum; + }, >{}); + } + + return logger.throwArgumentError(`unknown type: ${ type }`, "type", type); + } + + visit(value: Record, callback: (type: string, data: any) => any): any { + return this._visit(this.primaryType, value, callback); + } + + static from(types: Record>): TypedDataEncoder { + return new TypedDataEncoder(types); + } + + static getPrimaryType(types: Record>): string { + return TypedDataEncoder.from(types).primaryType; + } + + static hashStruct(name: string, types: Record>, value: Record): string { + return TypedDataEncoder.from(types).hashStruct(name, value); + } + + static hashDomain(domain: TypedDataDomain): string { + const domainFields: Array = [ ]; + for (const name in domain) { + const type = domainFieldTypes[name]; + if (!type) { + logger.throwArgumentError(`invalid typed-data domain key: ${ JSON.stringify(name) }`, "domain", domain); + } + domainFields.push({ name, type }); + } + + domainFields.sort((a, b) => { + return domainFieldNames.indexOf(a.name) - domainFieldNames.indexOf(b.name); + }); + + return TypedDataEncoder.hashStruct("EIP712Domain", { EIP712Domain: domainFields }, domain); + } + + static encode(domain: TypedDataDomain, types: Record>, value: Record): string { + return concat([ + "0x1901", + TypedDataEncoder.hashDomain(domain), + TypedDataEncoder.from(types).hash(value) + ]); + } + + static hash(domain: TypedDataDomain, types: Record>, value: Record): string { + return keccak256(TypedDataEncoder.encode(domain, types, value)); + } + + // Replaces all address types with ENS names with their looked up address + static async resolveNames(domain: TypedDataDomain, types: Record>, value: Record, resolveName: (name: string) => Promise): Promise<{ domain: TypedDataDomain, value: any }> { + // Make a copy to isolate it from the object passed in + domain = Object.assign({ }, domain); + + // Look up all ENS names + const ensCache: Record = { }; + + // Do we need to look up the domain's verifyingContract? + if (domain.verifyingContract && !isHexString(domain.verifyingContract, 20)) { + ensCache[domain.verifyingContract] = "0x"; + } + + // We are going to use the encoder to visit all the base values + const encoder = TypedDataEncoder.from(types); + + // Get a list of all the addresses + encoder.visit(value, (type: string, value: any) => { + if (type === "address" && !isHexString(value, 20)) { + ensCache[value] = "0x"; + } + return value; + }); + + // Lookup each name + for (const name in ensCache) { + ensCache[name] = await resolveName(name); + } + + // Replace the domain verifyingContract if needed + if (domain.verifyingContract && ensCache[domain.verifyingContract]) { + domain.verifyingContract = ensCache[domain.verifyingContract]; + } + + // Replace all ENS names with their address + value = encoder.visit(value, (type: string, value: any) => { + if (type === "address" && ensCache[value]) { return ensCache[value]; } + return value; + }); + + return { domain, value }; + } + + static getPayload(domain: TypedDataDomain, types: Record>, value: Record): any { + // Validate the domain fields + TypedDataEncoder.hashDomain(domain); + + // Derive the EIP712Domain Struct reference type + const domainValues: Record = { }; + const domainTypes: Array<{ name: string, type:string }> = [ ]; + + domainFieldNames.forEach((name) => { + const value = (domain)[name]; + if (value == null) { return; } + domainValues[name] = domainChecks[name](value); + domainTypes.push({ name, type: domainFieldTypes[name] }); + }); + + const encoder = TypedDataEncoder.from(types); + + const typesWithDomain = Object.assign({ }, types); + if (typesWithDomain.EIP712Domain) { + logger.throwArgumentError("types must not contain EIP712Domain type", "types.EIP712Domain", types); + } else { + typesWithDomain.EIP712Domain = domainTypes; + } + + // Validate the data structures and types + encoder.encode(value); + + return { + types: typesWithDomain, + domain: domainValues, + primaryType: encoder.primaryType, + message: encoder.visit(value, (type: string, value: any) => { + + // bytes + if (type.match(/^bytes(\d*)/)) { + return hexlify(logger.getBytes(value)); + } + + // uint or int + if (type.match(/^u?int/)) { + return logger.getBigInt(value).toString(); + } + + switch (type) { + case "address": + return value.toLowerCase(); + case "bool": + return !!value; + case "string": + if (typeof(value) !== "string") { + logger.throwArgumentError(`invalid string`, "value", value); + } + return value; + } + + return logger.throwArgumentError("unsupported type", "type", type); + }) + }; + } +} + diff --git a/packages/hash/tsconfig.json b/packages/hash/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/hash/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/logger/.npmignore b/packages/logger/.npmignore new file mode 100644 index 000000000..03a92044c --- /dev/null +++ b/packages/logger/.npmignore @@ -0,0 +1,3 @@ +/src.ts/tests/** +/lib/tests/** +tsconfig.tsbuildinfo diff --git a/packages/logger/LICENSE.md b/packages/logger/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/logger/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/logger/package.json b/packages/logger/package.json new file mode 100644 index 000000000..4298d5151 --- /dev/null +++ b/packages/logger/package.json @@ -0,0 +1,36 @@ +{ + "author": "Richard Moore ", + "dependencies": {}, + "description": "Logger utility functions for ethers.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "ethers" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/logger", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/logger", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "reticulate": { + "typeDependencies": { + "@ethersproject/providers": "~6.0.0-beta.1", + "@ethersproject/transactions": "~6.0.0-beta.1" + } + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/logger/src.ts/_version.ts b/packages/logger/src.ts/_version.ts new file mode 100644 index 000000000..56f7e679e --- /dev/null +++ b/packages/logger/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/logger@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/logger/src.ts/errors.ts b/packages/logger/src.ts/errors.ts new file mode 100644 index 000000000..219209dde --- /dev/null +++ b/packages/logger/src.ts/errors.ts @@ -0,0 +1,277 @@ + +//export type TransactionReceipt { +//} + +export type ErrorSignature = { + r: string; + s: string; + yParity: 0 | 1; + networkV: bigint; +}; + +export type ErrorAccessList = Array<{ address: string, storageKeys: Array }>; + +/* +export interface ErrorTransaction { + type?: number; + + to?: string; + from?: string; + + nonce?: number; + + gasLimit?: bigint; + gasPrice?: bigint; + + maxPriorityFeePerGas?: bigint; + maxFeePerGas?: bigint; + + data?: string; + value?: bigint; + chainId?: bigint; + + hash?: string; + + signature?: ErrorSignature; + + accessList?: ErrorAccessList; +} +*/ + +export interface ErrorFetchRequestWithBody extends ErrorFetchRequest { + body: Readonly; +} + +export interface ErrorFetchRequest { + url: string; + method: string; + headers: Readonly>; + getHeader(key: string): string; + body: null | Readonly; + hasBody(): this is ErrorFetchRequestWithBody; +} + + +export interface ErrorFetchResponseWithBody extends ErrorFetchResponse { + body: Readonly; +} + +export interface ErrorFetchResponse { + statusCode: number; + statusMessage: string; + headers: Readonly>; + getHeader(key: string): string; + body: null | Readonly; + hasBody(): this is ErrorFetchResponseWithBody; +} + + +export type ErrorCode = + + // Generic Errors + "UNKNOWN_ERROR" | "NOT_IMPLEMENTED" | "UNSUPPORTED_OPERATION" | + "NETWORK_ERROR" | "SERVER_ERROR" | "TIMEOUT" | "BAD_DATA" | + + // Operational Errors + "BUFFER_OVERRUN" | "NUMERIC_FAULT" | + + // Argument Errors + "INVALID_ARGUMENT" | "MISSING_ARGUMENT" | "UNEXPECTED_ARGUMENT" | + "VALUE_MISMATCH" | + + // Blockchain Errors + "CALL_EXCEPTION" | "INSUFFICIENT_FUNDS" | "NONCE_EXPIRED" | + "REPLACEMENT_UNDERPRICED" | "TRANSACTION_REPLACED" | + "UNPREDICTABLE_GAS_LIMIT" | + "UNCONFIGURED_NAME" | "OFFCHAIN_FAULT" +; + +export interface EthersError extends Error { + code: ErrorCode; +// recover?: (...args: Array) => any; + info?: Record; + error?: Error; +} + +// Generic Errors + +export interface UnknownError extends EthersError<"UNKNOWN_ERROR"> { + [ key: string ]: any; +} + +export interface NotImplementedError extends EthersError<"NOT_IMPLEMENTED"> { + operation: string; +} + +export interface UnsupportedOperationError extends EthersError<"UNSUPPORTED_OPERATION"> { + operation: string; +} + +export interface NetworkError extends EthersError<"NETWORK_ERROR"> { + event: string; +} + +export interface ServerError extends EthersError<"SERVER_ERROR"> { + request: ErrorFetchRequest | string; + response?: ErrorFetchResponse; +} + +export interface TimeoutError extends EthersError<"TIMEOUT"> { + operation: string; + request: ErrorFetchRequest; +} + +export interface BadDataError extends EthersError<"BAD_DATA"> { + value: any; +} + + +// Operational Errors + +export interface BufferOverrunError extends EthersError<"BUFFER_OVERRUN"> { + buffer: Uint8Array; + length: number; + offset: number; +} + +export interface NumericFaultError extends EthersError<"NUMERIC_FAULT"> { + operation: string; + fault: string; + value: any; +} + + +// Argument Errors + +export interface InvalidArgumentError extends EthersError<"INVALID_ARGUMENT"> { + argument: string; + value: any; + info?: Record +} + +export interface MissingArgumentError extends EthersError<"MISSING_ARGUMENT"> { + count: number; + expectedCount: number; +} + +export interface UnexpectedArgumentError extends EthersError<"UNEXPECTED_ARGUMENT"> { + count: number; + expectedCount: number; +} + +//export interface ValueMismatchError extends EthersError { +// count: number; +// expectedCount: number; +//} + + +// Blockchain Errors + +export interface CallExceptionError extends EthersError<"CALL_EXCEPTION"> { + // The revert data + data: string; + + // The transaction that triggered the exception + transaction?: any; + + // The Contract, method and args used during invocation + method?: string; + signature?: string; + args?: ReadonlyArray; + + // The Solidity custom revert error + errorSignature?: string; + errorName?: string; + errorArgs?: ReadonlyArray; + reason?: string; +} + +//export interface ContractCallExceptionError extends CallExceptionError { + // The transaction call +// transaction: any;//ErrorTransaction; +//} + +export interface InsufficientFundsError extends EthersError<"INSUFFICIENT_FUNDS"> { + transaction: any;//ErrorTransaction; +} + +export interface NonceExpiredError extends EthersError<"NONCE_EXPIRED"> { + transaction: any; //ErrorTransaction; +} + +export interface OffchainFaultError extends EthersError<"OFFCHAIN_FAULT"> { + transaction?: any; + reason: string; +} + +export interface ReplacementUnderpricedError extends EthersError<"REPLACEMENT_UNDERPRICED"> { + transaction: any; //ErrorTransaction; +} + +export interface TransactionReplacedError extends EthersError<"TRANSACTION_REPLACED"> { + cancelled: boolean; + reason: "repriced" | "cancelled" | "replaced"; + hash: string; + replacement: any; //TransactionResponse; + receipt: any; //TransactionReceipt; +} + +export interface UnconfiguredNameError extends EthersError<"UNCONFIGURED_NAME"> { + value: string; +} + +export interface UnpredictableGasLimitError extends EthersError<"UNPREDICTABLE_GAS_LIMIT"> { + transaction: any; //ErrorTransaction; +} + + +// Coding; converts an ErrorCode its Typed Error + +export type CodedEthersError = + T extends "UNKNOWN_ERROR" ? UnknownError: + T extends "NOT_IMPLEMENTED" ? NotImplementedError: + T extends "UNSUPPORTED_OPERATION" ? UnsupportedOperationError: + T extends "NETWORK_ERROR" ? NetworkError: + T extends "SERVER_ERROR" ? ServerError: + T extends "TIMEOUT" ? TimeoutError: + T extends "BAD_DATA" ? BadDataError: + + T extends "BUFFER_OVERRUN" ? BufferOverrunError: + T extends "NUMERIC_FAULT" ? NumericFaultError: + + T extends "INVALID_ARGUMENT" ? InvalidArgumentError: + T extends "MISSING_ARGUMENT" ? MissingArgumentError: + T extends "UNEXPECTED_ARGUMENT" ? UnexpectedArgumentError: + + T extends "CALL_EXCEPTION" ? CallExceptionError: + T extends "INSUFFICIENT_FUNDS" ? InsufficientFundsError: + T extends "NONCE_EXPIRED" ? NonceExpiredError: + T extends "OFFCHAIN_FAULT" ? OffchainFaultError: + T extends "REPLACEMENT_UNDERPRICED" ? ReplacementUnderpricedError: + T extends "TRANSACTION_REPLACED" ? TransactionReplacedError: + T extends "UNCONFIGURED_NAME" ? UnconfiguredNameError: + T extends "UNPREDICTABLE_GAS_LIMIT" ? UnpredictableGasLimitError: + + never; + +/** + * try { + * // code.... + * } catch (e) { + * if (isError(e, errors.CALL_EXCEPTION)) { + * console.log(e.data); + * } + * } + */ +export function isError>(error: any, code: K): error is T { + return (error && (error).code === code); +} + +export function isCallException(error: any): error is CallExceptionError { + return isError(error, "CALL_EXCEPTION"); +} +/* +export function isContractCallException(error: any): error is ContractCallExceptionError { + return isError(error, "CALL_EXCEPTION") && (error).method; +} +*/ diff --git a/packages/logger/src.ts/index.ts b/packages/logger/src.ts/index.ts new file mode 100644 index 000000000..be9305a4c --- /dev/null +++ b/packages/logger/src.ts/index.ts @@ -0,0 +1,41 @@ +export { + ErrorCode, + + isError, + isCallException, +// isContractCallException +} from "./errors.js"; + +export { Logger } from "./logger.js"; + +// Types + +export type { + EthersError, + UnknownError, + NotImplementedError, + UnsupportedOperationError, + NetworkError, + ServerError, + TimeoutError, + BufferOverrunError, + NumericFaultError, + InvalidArgumentError, + MissingArgumentError, + UnexpectedArgumentError, + CallExceptionError, + //ContractCallExceptionError, + InsufficientFundsError, + NonceExpiredError, + ReplacementUnderpricedError, + TransactionReplacedError, + UnconfiguredNameError, + UnpredictableGasLimitError, + CodedEthersError +} from "./errors.js"; + +export type { + BytesLike, + BigNumberish, + Numeric +} from "./logger.js"; diff --git a/packages/logger/src.ts/logger.ts b/packages/logger/src.ts/logger.ts new file mode 100644 index 000000000..d415b9af0 --- /dev/null +++ b/packages/logger/src.ts/logger.ts @@ -0,0 +1,400 @@ +import { ErrorCode } from "./errors.js"; + +import type { CodedEthersError } from "./errors.js"; + +import { version } from "./_version.js"; + +export type BytesLike = string | Uint8Array; +export type BigNumberish = string | number | bigint; +export type Numeric = number | bigint; + + +export type ErrorInfo = Omit; + +export enum LogLevel { + DEBUG = "DEBUG", + INFO = "INFO", + WARNING = "WARNING", + ERROR = "ERROR", + OFF = "OFF" +}; + +const LogLevels: Record = { debug: 1, "default": 2, info: 2, warning: 3, error: 4, off: 5 }; + +let _logLevel = LogLevels["default"]; +let _globalLogger: null | Logger = null; + +const _normalizeForms = ["NFD", "NFC", "NFKD", "NFKC"].reduce((accum, form) => { + try { + // General test for normalize + /* c8 ignore start */ + if ("test".normalize(form) !== "test") { throw new Error("bad"); }; + /* c8 ignore stop */ + + if (form === "NFD") { + const check = String.fromCharCode(0xe9).normalize("NFD"); + const expected = String.fromCharCode(0x65, 0x0301) + /* c8 ignore start */ + if (check !== expected) { throw new Error("broken") } + /* c8 ignore stop */ + } + + accum.push(form); + } catch(error) { } + + return accum; +}, >[]); + +function defineReadOnly(object: T, name: P, value: T[P]): void { + Object.defineProperty(object, name, { + enumerable: true, writable: false, value, + }); +} +/* +enum Censor { + OFF = 0, + ON = 1, + PERMANENT = 2 +}; +let _censor = Censor.OFF; +*/ + +// IEEE 754 support 53-bits of mantissa +const maxValue = 0x1fffffffffffff; + +// The type of error to use for various error codes +const ErrorConstructors: Record): Error }> = { }; +ErrorConstructors.INVALID_ARGUMENT = TypeError; +ErrorConstructors.NUMERIC_FAULT = RangeError; +ErrorConstructors.BUFFER_OVERRUN = RangeError; + +export class Logger { + readonly version!: string; + + //static readonly Errors = ErrorCode; + static readonly LogLevels = LogLevel; + + constructor(version?: string) { + defineReadOnly(this, "version", version || "_"); + } + + makeError>(message: string, code: K, info?: ErrorInfo): T { + // Errors are being censored + //if (_censor === Censor.ON || _censor === Censor.PERMANENT) { + // return this.makeError("censored error", code, { }); + //} + + { + const details: Array = []; + if (info) { + for (const key in info) { + const value = (info[>key]); + try { + details.push(key + "=" + JSON.stringify(value)); + } catch (error) { + details.push(key + "=[could not serialize object]"); + } + } + } + details.push(`code=${ code }`); + details.push(`version=${ this.version }`); + + if (details.length) { + message += " (" + details.join(", ") + ")"; + } + } + + const create = ErrorConstructors[code] || Error; + const error = (new create(message)); + defineReadOnly(error, "code", code); + if (info) { + for (const key in info) { + defineReadOnly(error, key, (info[>key])); + } + } + return error; + } + + throwError>(message: string, code: K, info?: ErrorInfo): never { + throw this.makeError(message, code, info); + } + + throwArgumentError(message: string, name: string, value: any): never { + return this.throwError(message, "INVALID_ARGUMENT", { + argument: name, + value: value + }); + } + + assert>(condition: any, message: string, code: K, info?: ErrorInfo): void { + if (!!condition) { return; } + this.throwError(message, code || "UNKNOWN_ERROR", info); + } + + assertArgument(condition: any, message: string, name: string, value: any): void { + return this.assert(condition, message, "INVALID_ARGUMENT", { + argument: name, + value + }); + } + + assertIntegerArgument(name: string, value: any, lower?: number, upper?: number) { + let message: null | string = null; + if (typeof(value) !== "number") { + message = "expected a number"; + } else if (!Number.isInteger(value)) { + message = "invalid integer"; + } else if ((lower != null && value < lower) || (upper != null && value > upper)) { + message = "value is out of range"; + } + + if (message) { + this.throwArgumentError(message, name, value); + } + } + + assertSafeUint53(value: number, message?: string): void { + this.assertArgument((typeof(value) === "number"), "invalid number", "value", value); + + if (message == null) { message = "value not safe"; } + const operation = "assertSafeInteger"; + + this.assert((value >= 0 && value < 0x1fffffffffffff), message, "NUMERIC_FAULT", { + operation, fault: "out-of-safe-range", value + }); + + this.assert((value % 1) === 0, message, "NUMERIC_FAULT", { + operation, fault: "non-integer", value + }); + } + + assertNormalize(form: string): void { + if (_normalizeForms.indexOf(form) === -1) { + this.throwError("platform missing String.prototype.normalize", "UNSUPPORTED_OPERATION", { + operation: "String.prototype.normalize", info: { form } + }); + } + } + + assertPrivate(givenGuard: any, guard: any, className = ""): void { + if (givenGuard !== guard) { + let method = className, operation = "new"; + if (className) { + method += "."; + operation += " " + className; + } + this.throwError(`private constructor; use ${ method }from* methods`, "UNSUPPORTED_OPERATION", { + operation + }); + } + } + + assertArgumentCount(count: number, expectedCount: number, message: string = ""): void { + if (message) { message = ": " + message; } + + this.assert((count >= expectedCount), "missing arguemnt" + message, "MISSING_ARGUMENT", { + count: count, + expectedCount: expectedCount + }); + + this.assert((count >= expectedCount), "too many arguemnts" + message, "UNEXPECTED_ARGUMENT", { + count: count, + expectedCount: expectedCount + }); + } +/* + See: #2860 + assertNew(target: any, kind: any): void { + this.assert((target !== Object && target != null), "cannot use constructor as function; use new operator", "UNSUPPORTED_OPERATION", { + operation: `${ JSON.stringify(kind.name) }(...)` + }); + } +*/ + /* + assertAbstract(target: any, kind: any): void { + this.assert((target !== kind), `cannot instantiate abstract class ${ JSON.stringify(kind.name) } directly; use ${ JSON.stringify(target.name) } `, ErrorCode.UNSUPPORTED_OPERATION, { + operation: "new" + }); + + this.assert(target !== Object && target != null, "missing new", ErrorCode.MISSING_NEW, { + name: kind.name + }); + } + */ + #assertIntRange(name: string, value: number, operation: string, minValue: number): void { + if (typeof(value) !== "number" || isNaN(value)) { + this.throwArgumentError(`invalid ${ name }`, "INVALID_ARGUMENT", { + name: "value", value + }); + } + + let message: string = `invalid ${ name } value`; + let fault: null | string = null; + + if (isNaN(value)) { + fault = "not-a-number"; + } else if (value < minValue || value > maxValue) { + message = `unsafe ${ name } value`; + fault = "overflow"; + } else if (Math.floor(value) !== value) { + fault = "underflow"; + } + + if (fault) { + this.throwError(message, "NUMERIC_FAULT", { + operation, fault, value + }); + } + } + + assertInt53(value: number, operation?: string): void { + this.#assertIntRange("Int53", value, operation || "unknown", -maxValue); + } + + assertUint53(value: number, operation?: string): void { + this.#assertIntRange("Int53", value, operation || "unknown", 0); + } + + assertInteger(value: number, operation: string = "unknown", min: number = 0, max: number = maxValue): void { + //this.#assertIntRange("Int53", value, operation || "unknown", 0); + } + + #getBytes(value: BytesLike, name?: string, copy?: boolean): Uint8Array { + if (value instanceof Uint8Array) { + if (copy) { return new Uint8Array(value); } + return value; + } + + if (typeof(value) === "string" && value.match(/^0x([0-9a-f][0-9a-f])*$/i)) { + const result = new Uint8Array((value.length - 2) / 2); + let offset = 2; + for (let i = 0; i < result.length; i++) { + result[i] = parseInt(value.substring(offset, offset + 2), 16); + offset += 2; + } + return result; + } + + return this.throwArgumentError("invalid BytesLike value", name || "value", value); + } + + getBytes(value: BytesLike, name?: string): Uint8Array { + return this.#getBytes(value, name, false); + } + + getBytesCopy(value: BytesLike, name?: string): Uint8Array { + return this.#getBytes(value, name, true); + } + + getNumber(value: BigNumberish, name?: string): number { + switch (typeof(value)) { + case "bigint": + if (value < -maxValue || value > maxValue) { + this.throwArgumentError("overflow", name || "value", value); + } + return Number(value); + case "number": + if (!Number.isInteger(value)) { + this.throwArgumentError("underflow", name || "value", value); + } else if (value < -maxValue || value > maxValue) { + this.throwArgumentError("overflow", name || "value", value); + } + return value; + case "string": + try { + return this.getNumber(BigInt(value), name); + } catch(e: any) { + this.throwArgumentError(`invalid numeric string: ${ e.message }`, name || "value", value); + } + } + return this.throwArgumentError("invalid numeric value", name || "value", value); + } + + getBigInt(value: BigNumberish, name?: string): bigint { + switch (typeof(value)) { + case "bigint": return value; + case "number": + if (!Number.isInteger(value)) { + this.throwArgumentError("underflow", name || "value", value); + } else if (value < -maxValue || value > maxValue) { + this.throwArgumentError("overflow", name || "value", value); + } + return BigInt(value); + case "string": + try { + return BigInt(value); + } catch(e: any) { + this.throwArgumentError(`invalid BigNumberish string: ${ e.message }`, name || "value", value); + } + } + return this.throwArgumentError("invalid BigNumberish value", name || "value", value); + } + + #log(logLevel: LogLevel, args: Array): void { + const level = logLevel.toLowerCase(); + if (LogLevels[level] == null) { + this.throwArgumentError("invalid log level name", "logLevel", logLevel); + } + if (_logLevel > LogLevels[level]) { return; } + console.log.apply(console, args); + } + + debug(...args: Array): void { + this.#log(LogLevel.DEBUG, args); + } + + info(...args: Array): void { + this.#log(LogLevel.INFO, args); + } + + warn(...args: Array): void { + this.#log(LogLevel.WARNING, args); + } + + static globalLogger(): Logger { + if (!_globalLogger) { _globalLogger = new Logger(version); } + return _globalLogger; + } + + static setLogLevel(logLevel: LogLevel): void { + const level = LogLevels[logLevel.toLowerCase()]; + if (level == null) { + Logger.globalLogger().warn("invalid log level - " + logLevel); + return; + } + _logLevel = level; + } + /* + // @TODO: Should I get rid of censorship? + static setCensorship(censorship: boolean, permanent?: boolean): void { + // Do not allow permanently disabling censorship + Logger.globalLogger().assert((censorship || !permanent), "cannot permanently disable censorship", ErrorCode.UNSUPPORTED_OPERATION, { + operation: "setCensorship" + }); + + // New target censorship + let censor = Censor.OFF; + if (censorship) { + censor = (permanent ? Censor.PERMANENT: Censor.ON); + } + + // No change, no need to do anything + if (censor === _censor) { return; } + + // Do not allow changing state is permanent is set + this.globalLogger().assert(_censor !== Censor.PERMANENT, "error censorship is permanently enabled", ErrorCode.UNSUPPORTED_OPERATION, { + operation: "setCensorship" + }); + + _censor = censor + } + */ +} + +//const l = new Logger(); +//l.makeError("foo", Logger.Errors.NUMERIC_FAULT, { fault: "foo", operation: "bar", value: 3 }); +//l.makeError("foo", Logger.Errors.UNPREDICTABLE_GAS_LIMIT, { transaction: null }); +//l.makeError("foo", ErrorCode.NUMERIC_FAULT, { fault: "foo", operation: "bar" }); +//l.makeError("foo", ErrorCode.NUMERIC_FAULT, { fault: "foo", operation: "bar", gii: "5" }); + +//console.log(LogLevel); diff --git a/packages/logger/src.ts/tests/test-logger.ts b/packages/logger/src.ts/tests/test-logger.ts new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/packages/logger/src.ts/tests/test-logger.ts @@ -0,0 +1 @@ + diff --git a/packages/logger/tsconfig.json b/packages/logger/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/logger/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/math/.npmignore b/packages/math/.npmignore new file mode 100644 index 000000000..03a92044c --- /dev/null +++ b/packages/math/.npmignore @@ -0,0 +1,3 @@ +/src.ts/tests/** +/lib/tests/** +tsconfig.tsbuildinfo diff --git a/packages/math/LICENSE.md b/packages/math/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/math/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/math/package.json b/packages/math/package.json new file mode 100644 index 000000000..a1d556e48 --- /dev/null +++ b/packages/math/package.json @@ -0,0 +1,35 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/bytes": "^6.0.0-beta.1", + "@ethersproject/logger": "^6.0.0-beta.1" + }, + "description": "Ethers math utilities and operations.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "bignumber", + "math", + "bn" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/math", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/math", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/math/src.ts/_version.ts b/packages/math/src.ts/_version.ts new file mode 100644 index 000000000..4d9ab4dee --- /dev/null +++ b/packages/math/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/math@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/math/src.ts/base58.ts b/packages/math/src.ts/base58.ts new file mode 100644 index 000000000..ac20cf978 --- /dev/null +++ b/packages/math/src.ts/base58.ts @@ -0,0 +1,47 @@ + +import { toBigInt, toHex } from "./convert.js"; +import { logger } from "./logger.js"; + +import type { BytesLike } from "@ethersproject/logger"; + + +const Alphabet = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; +let Lookup: null | Record = null; + +function getAlpha(letter: string): bigint { + if (Lookup == null) { + Lookup = { }; + for (let i = 0; i < Alphabet.length; i++) { + Lookup[Alphabet[i]] = BigInt(i); + } + } + const result = Lookup[letter]; + if (result == null) { + logger.throwArgumentError(`invalid base58 value`, "letter", letter); + } + return result; +} + + +const BN_0 = BigInt(0); +const BN_58 = BigInt(58); + +export function encodeBase58(_value: BytesLike): string { + let value = toBigInt(logger.getBytes(_value)); + let result = ""; + while (value) { + result = Alphabet[Number(value % BN_58)] + result; + value /= BN_58; + } + return result; +} + +export function decodeBase58(value: string): string { + let result = BN_0; + for (let i = 0; i < value.length; i++) { + result *= BN_58; + result += getAlpha(value[i]); + } + return toHex(result); +} + diff --git a/packages/math/src.ts/convert.ts b/packages/math/src.ts/convert.ts new file mode 100644 index 000000000..4f1d2ed80 --- /dev/null +++ b/packages/math/src.ts/convert.ts @@ -0,0 +1,73 @@ +import { logger } from "./logger.js"; + +import type { BigNumberish, Numeric } from "@ethersproject/logger"; + + +// IEEE 754 support 53-bits of mantissa +const maxValue = 0x1fffffffffffff; + +const nibbles = "0123456789abcdef"; + +const BN_0 = BigInt(0); + + +// Converts a value to a BigInt, including big endian data +export function toBigInt(_value: BigNumberish | Uint8Array): bigint { + if (_value instanceof Uint8Array) { + let result = "0x0"; + for (const v of _value) { + result += nibbles[v >> 4]; + result += nibbles[v & 0x0f]; + } + return BigInt(result); + } + return logger.getBigInt(_value, "value"); +} + +export function toNumber(_value: BigNumberish | Uint8Array): number { + const value = toBigInt(_value); + if (value < -maxValue || value > maxValue) { + logger.throwArgumentError("overflow", "value", _value); + } + return Number(value); +} + +// Converts value to hex, optionally padding on the left to width bytes +export function toHex(_value: BigNumberish, _width?: Numeric): string { + const value = logger.getBigInt(_value, "value"); + if (value < 0) { throw new Error("cannot convert negative value to hex"); } + + let result = value.toString(16); + + if (_width == null) { + // Ensure the value is of even length + if (result.length % 2) { result = "0" + result; } + } else { + const width = logger.getNumber(_width, "width"); + if (width * 2 < result.length) { throw new Error(`value ${ value } exceeds width ${ width }`); } + + // Pad the value to the required width + while (result.length < (width * 2)) { result = "0" + result; } + + } + + return "0x" + result; +} + +export function toArray(_value: BigNumberish): Uint8Array { + const value = logger.getBigInt(_value, "value"); + if (value < 0) { throw new Error("cannot convert negative value to hex"); } + + if (value === BN_0) { return new Uint8Array([ ]); } + + let hex = value.toString(16); + if (hex.length % 2) { hex = "0" + hex; } + + const result = new Uint8Array(hex.length / 2); + for (let i = 0; i < result.length; i++) { + const offset = i * 2; + result[i] = parseInt(hex.substring(offset, offset + 2), 16); + } + + return result; +} diff --git a/packages/math/src.ts/fixednumber.ts b/packages/math/src.ts/fixednumber.ts new file mode 100644 index 000000000..5a217b1af --- /dev/null +++ b/packages/math/src.ts/fixednumber.ts @@ -0,0 +1,397 @@ + +import { toBigInt, toHex } from "./convert.js"; +import { logger } from "./logger.js"; +import { fromTwos, toTwos } from "./maths.js"; + +import type { BigNumberish, BytesLike, Numeric } from "@ethersproject/logger"; + + +const _constructorGuard = { }; + +//const Zero = BigInt(0); +const NegativeOne = BigInt(-1); + +function throwFault(message: string, fault: string, operation: string, value?: any): never { + const params: any = { fault: fault, operation: operation }; + if (value !== undefined) { params.value = value; } + return logger.throwError(message, "NUMERIC_FAULT", params); +} + +// Constant to pull zeros from for multipliers +let zeros = "0"; +while (zeros.length < 256) { zeros += zeros; } + +// Returns a string "1" followed by decimal "0"s +function getMultiplier(decimals: number): bigint { + + if (typeof(decimals) !== "number" || decimals < 0 || decimals > 256 || decimals % 1 ) { + logger.throwArgumentError("invalid decimal length", "decimals", decimals); + } + + return BigInt("1" + zeros.substring(0, decimals)); +} + +export function formatFixed(_value: BigNumberish, _decimals = 0): string { + let value = logger.getBigInt(_value, "value"); + const decimals = logger.getNumber(_decimals, "decimals"); + + const multiplier = getMultiplier(decimals); + const multiplierStr = String(multiplier); + + const negative = (value < 0); + if (negative) { value *= NegativeOne; } + + let fraction = String(value % multiplier); + + // Make sure there are enough place-holders + while (fraction.length < multiplierStr.length - 1) { fraction = "0" + fraction; } + + // Strip training 0 + while (fraction.length > 1 && fraction.substring(fraction.length - 1) === "0") { + fraction = fraction.substring(0, fraction.length - 1); + } + + let result = String(value / multiplier); + if (multiplierStr.length !== 1) { result += "." + fraction; } + + if (negative) { result = "-" + result; } + + return result; +} + +export function parseFixed(value: string, _decimals: Numeric = 0): bigint { + const decimals = logger.getNumber(_decimals, "decimals"); + + const multiplier = getMultiplier(decimals); + + if (typeof(value) !== "string" || !value.match(/^-?[0-9.]+$/)) { + logger.throwArgumentError("invalid decimal value", "value", value); + } + + // Is it negative? + const negative = (value.substring(0, 1) === "-"); + if (negative) { value = value.substring(1); } + + if (value === ".") { + logger.throwArgumentError("missing value", "value", value); + } + + // Split it into a whole and fractional part + const comps = value.split("."); + if (comps.length > 2) { + logger.throwArgumentError("too many decimal points", "value", value); + } + + let whole = (comps[0] || "0"), fraction = (comps[1] || "0"); + + // Trim trialing zeros + while (fraction[fraction.length - 1] === "0") { + fraction = fraction.substring(0, fraction.length - 1); + } + + // Check the fraction doesn't exceed our decimals size + if (fraction.length > String(multiplier).length - 1) { + throwFault("fractional component exceeds decimals", "underflow", "parseFixed"); + } + + // If decimals is 0, we have an empty string for fraction + if (fraction === "") { fraction = "0"; } + + // Fully pad the string with zeros to get to wei + while (fraction.length < String(multiplier).length - 1) { fraction += "0"; } + + const wholeValue = BigInt(whole); + const fractionValue = BigInt(fraction); + + let wei = (wholeValue * multiplier) + fractionValue; + + if (negative) { wei *= NegativeOne; } + + return wei; +} + + +export class FixedFormat { + readonly signed: boolean; + readonly width: number; + readonly decimals: number; + readonly name: string; + + readonly _multiplier: bigint; + + constructor(constructorGuard: any, signed: boolean, width: number, decimals: number) { + if (constructorGuard !== _constructorGuard) { + logger.throwError("cannot use FixedFormat constructor; use FixedFormat.from", "UNSUPPORTED_OPERATION", { + operation: "new FixedFormat" + }); + } + + this.signed = signed; + this.width = width; + this.decimals = decimals; + + this.name = (signed ? "": "u") + "fixed" + String(width) + "x" + String(decimals); + + this._multiplier = getMultiplier(decimals); + + Object.freeze(this); + } + + static from(value: any): FixedFormat { + if (value instanceof FixedFormat) { return value; } + + if (typeof(value) === "number") { + value = `fixed128x${value}` + } + + let signed = true; + let width = 128; + let decimals = 18; + + if (typeof(value) === "string") { + if (value === "fixed") { + // defaults... + } else if (value === "ufixed") { + signed = false; + } else { + const match = value.match(/^(u?)fixed([0-9]+)x([0-9]+)$/); + if (!match) { + return logger.throwArgumentError("invalid fixed format", "format", value); + } + signed = (match[1] !== "u"); + width = parseInt(match[2]); + decimals = parseInt(match[3]); + } + } else if (value) { + const check = (key: string, type: string, defaultValue: any): any => { + if (value[key] == null) { return defaultValue; } + if (typeof(value[key]) !== type) { + logger.throwArgumentError("invalid fixed format (" + key + " not " + type +")", "format." + key, value[key]); + } + return value[key]; + } + signed = check("signed", "boolean", signed); + width = check("width", "number", width); + decimals = check("decimals", "number", decimals); + } + + if (width % 8) { + logger.throwArgumentError("invalid fixed format width (not byte aligned)", "format.width", width); + } + + if (decimals > 80) { + logger.throwArgumentError("invalid fixed format (decimals too large)", "format.decimals", decimals); + } + + return new FixedFormat(_constructorGuard, signed, width, decimals); + } +} + +export class FixedNumber { + readonly format: FixedFormat; + + readonly _isFixedNumber: boolean; + + //#hex: string; + #value: string; + + constructor(constructorGuard: any, hex: string, value: string, format?: FixedFormat) { + if (constructorGuard !== _constructorGuard) { + logger.throwError("cannot use FixedNumber constructor; use FixedNumber.from", "UNSUPPORTED_OPERATION", { + operation: "new FixedFormat" + }); + } + + this.format = FixedFormat.from(format); + //this.#hex = hex; + this.#value = value; + + this._isFixedNumber = true; + + Object.freeze(this); + } + + #checkFormat(other: FixedNumber): void { + if (this.format.name !== other.format.name) { + logger.throwArgumentError("incompatible format; use fixedNumber.toFormat", "other", other); + } + } + + addUnsafe(other: FixedNumber): FixedNumber { + this.#checkFormat(other); + const a = parseFixed(this.#value, this.format.decimals); + const b = parseFixed(other.#value, other.format.decimals); + return FixedNumber.fromValue(a + b, this.format.decimals, this.format); + } + + subUnsafe(other: FixedNumber): FixedNumber { + this.#checkFormat(other); + const a = parseFixed(this.#value, this.format.decimals); + const b = parseFixed(other.#value, other.format.decimals); + return FixedNumber.fromValue(a - b, this.format.decimals, this.format); + } + + mulUnsafe(other: FixedNumber): FixedNumber { + this.#checkFormat(other); + const a = parseFixed(this.#value, this.format.decimals); + const b = parseFixed(other.#value, other.format.decimals); + return FixedNumber.fromValue((a * b) / this.format._multiplier, this.format.decimals, this.format); + } + + divUnsafe(other: FixedNumber): FixedNumber { + this.#checkFormat(other); + const a = parseFixed(this.#value, this.format.decimals); + const b = parseFixed(other.#value, other.format.decimals); + return FixedNumber.fromValue((a * this.format._multiplier) / b, this.format.decimals, this.format); + } + + floor(): FixedNumber { + const comps = this.toString().split("."); + if (comps.length === 1) { comps.push("0"); } + + let result = FixedNumber.from(comps[0], this.format); + + const hasFraction = !comps[1].match(/^(0*)$/); + if (this.isNegative() && hasFraction) { + result = result.subUnsafe(ONE.toFormat(result.format)); + } + + return result; + } + + ceiling(): FixedNumber { + const comps = this.toString().split("."); + if (comps.length === 1) { comps.push("0"); } + + let result = FixedNumber.from(comps[0], this.format); + + const hasFraction = !comps[1].match(/^(0*)$/); + if (!this.isNegative() && hasFraction) { + result = result.addUnsafe(ONE.toFormat(result.format)); + } + + return result; + } + + // @TODO: Support other rounding algorithms + round(decimals?: number): FixedNumber { + if (decimals == null) { decimals = 0; } + + // If we are already in range, we're done + const comps = this.toString().split("."); + if (comps.length === 1) { comps.push("0"); } + + if (decimals < 0 || decimals > 80 || (decimals % 1)) { + logger.throwArgumentError("invalid decimal count", "decimals", decimals); + } + + if (comps[1].length <= decimals) { return this; } + + const factor = FixedNumber.from("1" + zeros.substring(0, decimals), this.format); + const bump = BUMP.toFormat(this.format); + + return this.mulUnsafe(factor).addUnsafe(bump).floor().divUnsafe(factor); + } + + isZero(): boolean { + return (this.#value === "0.0" || this.#value === "0"); + } + + isNegative(): boolean { + return (this.#value[0] === "-"); + } + + toString(): string { return this.#value; } + + toHexString(_width: Numeric): string { + throw new Error("TODO"); + /* + return toHex(); + if (width == null) { return this.#hex; } + + const width = logger.getNumeric(_width); + if (width % 8) { logger.throwArgumentError("invalid byte width", "width", width); } + + const hex = BigNumber.from(this.#hex).fromTwos(this.format.width).toTwos(width).toHexString(); + return zeroPadLeft(hex, width / 8); + */ + } + + toUnsafeFloat(): number { return parseFloat(this.toString()); } + + toFormat(format: FixedFormat | string): FixedNumber { + return FixedNumber.fromString(this.#value, format); + } + + + static fromValue(value: BigNumberish, decimals = 0, format: FixedFormat | string | number = "fixed"): FixedNumber { + return FixedNumber.fromString(formatFixed(value, decimals), FixedFormat.from(format)); + } + + + static fromString(value: string, format: FixedFormat | string | number = "fixed"): FixedNumber { + const fixedFormat = FixedFormat.from(format); + const numeric = parseFixed(value, fixedFormat.decimals); + + if (!fixedFormat.signed && numeric < 0) { + throwFault("unsigned value cannot be negative", "overflow", "value", value); + } + + const hex = (function() { + if (fixedFormat.signed) { + return toHex(toTwos(numeric, fixedFormat.width)); + } + return toHex(numeric, fixedFormat.width / 8); + })(); + + const decimal = formatFixed(numeric, fixedFormat.decimals); + + return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat); + } + + static fromBytes(_value: BytesLike, format: FixedFormat | string | number = "fixed"): FixedNumber { + const value = logger.getBytes(_value, "value"); + const fixedFormat = FixedFormat.from(format); + + if (value.length > fixedFormat.width / 8) { + throw new Error("overflow"); + } + + let numeric = toBigInt(value); + if (fixedFormat.signed) { numeric = fromTwos(numeric, fixedFormat.width); } + + const hex = toHex(toTwos(numeric, (fixedFormat.signed ? 0: 1) + fixedFormat.width)); + const decimal = formatFixed(numeric, fixedFormat.decimals); + + return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat); + } + + static from(value: any, format?: FixedFormat | string | number) { + if (typeof(value) === "string") { + return FixedNumber.fromString(value, format); + } + + if (value instanceof Uint8Array) { + return FixedNumber.fromBytes(value, format); + } + + try { + return FixedNumber.fromValue(value, 0, format); + } catch (error: any) { + // Allow NUMERIC_FAULT to bubble up + if (error.code !== "INVALID_ARGUMENT") { + throw error; + } + } + + return logger.throwArgumentError("invalid FixedNumber value", "value", value); + } + + static isFixedNumber(value: any): value is FixedNumber { + return !!(value && value._isFixedNumber); + } +} + +const ONE = FixedNumber.from(1); +const BUMP = FixedNumber.from("0.5"); + diff --git a/packages/math/src.ts/index.ts b/packages/math/src.ts/index.ts new file mode 100644 index 000000000..2073af8c5 --- /dev/null +++ b/packages/math/src.ts/index.ts @@ -0,0 +1,5 @@ + +export { FixedFormat, FixedNumber, formatFixed, parseFixed } from "./fixednumber.js"; +export { fromTwos, toTwos, mask } from "./maths.js"; +export { toArray, toBigInt, toHex, toNumber } from "./convert.js"; +export { decodeBase58, encodeBase58 } from "./base58.js"; diff --git a/packages/math/src.ts/logger.ts b/packages/math/src.ts/logger.ts new file mode 100644 index 000000000..f7860a559 --- /dev/null +++ b/packages/math/src.ts/logger.ts @@ -0,0 +1,4 @@ + +import { Logger } from "@ethersproject/logger"; +import { version } from "./_version.js"; +export const logger = new Logger(version); diff --git a/packages/math/src.ts/maths.ts b/packages/math/src.ts/maths.ts new file mode 100644 index 000000000..0f647b514 --- /dev/null +++ b/packages/math/src.ts/maths.ts @@ -0,0 +1,42 @@ + +import { logger } from "./logger.js"; + +import type { BigNumberish, Numeric } from "@ethersproject/logger"; + + + +const BN_0 = BigInt(0); +const BN_1 = BigInt(1); + +// Convert a value from a twos-compliment value +export function fromTwos(_value: BigNumberish, _width: Numeric): bigint { + const value = logger.getBigInt(_value, "value"); + const width = BigInt(logger.getNumber(_width, "width")); + + // Top bit set; treat as a negative value + if (value >> (width - BN_1)) { + const mask = (BN_1 << width) - BN_1; + return -(((~value) & mask) + BN_1); + } + + return value; +} + +// Convert value to a twos-compliment value +export function toTwos(_value: BigNumberish, _width: Numeric): bigint { + const value = logger.getBigInt(_value, "value"); + const width = BigInt(logger.getNumber(_width, "width")); + + if (value < BN_0) { + const mask = (BN_1 << width) - BN_1; + return ((~(-value)) & mask) + BN_1; + } + + return value; +} + +export function mask(_value: BigNumberish, _bits: Numeric): bigint { + const value = logger.getBigInt(_value, "value"); + const bits = logger.getBigInt(_bits, "bits"); + return value & ((BN_1 << bits) - BN_1); +} diff --git a/packages/math/tsconfig.json b/packages/math/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/math/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/properties/.npmignore b/packages/properties/.npmignore new file mode 100644 index 000000000..03a92044c --- /dev/null +++ b/packages/properties/.npmignore @@ -0,0 +1,3 @@ +/src.ts/tests/** +/lib/tests/** +tsconfig.tsbuildinfo diff --git a/packages/properties/LICENSE.md b/packages/properties/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/properties/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/properties/package.json b/packages/properties/package.json new file mode 100644 index 000000000..93d6a74fc --- /dev/null +++ b/packages/properties/package.json @@ -0,0 +1,32 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/logger": "^6.0.0-beta.1" + }, + "description": "Properties utility functions for ethers.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "ethers" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/properties", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/properties", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/properties/src.ts/_version.ts b/packages/properties/src.ts/_version.ts new file mode 100644 index 000000000..4933907d0 --- /dev/null +++ b/packages/properties/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/properties@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/properties/src.ts/copy.ts b/packages/properties/src.ts/copy.ts new file mode 100644 index 000000000..6c3ed1f7e --- /dev/null +++ b/packages/properties/src.ts/copy.ts @@ -0,0 +1,68 @@ +/* +const immutable = Symbol.for("_ethersInternalImmutable"); +const valueImmutable = "immutable"; + +export function markImmutable(value: any): void { + value[immutable] = valueImmutable; +} + +export function unmarkImmutable(value: any): void { + value[immutable] = ""; +} + +class WrappedAddress { + #promise: Promise; + + constructor(promise: Promise) { + this.#promise = promise; + } + + async getAddress(): Promise { + return this.#promise; + } +} + +const primitives = "bigint,boolean,function,number,string,symbol".split(/,/); +function _deepCopy(value: any): any { + // null or something primitive and therefore immutable + if (value == null) { return null; } + if (primitives.indexOf(typeof(value)) >= 0) { return value; } + + if (typeof(value) === "object") { + // We internally marked this object as safe enough + if (immutable in value && value[immutable] === valueImmutable) { + return value; + } + + // Promises are safe enough + if ("then" in value && typeof(value.then) === "function") { + return value; + } + + // The result of the getAddress is what we are after + if ("getAddress" in value && typeof(value.getAddress) === "function") { + return new WrappedAddress(value.getAddress()); + } + + // Copy all the array elements + if (Array.isArray(value)) { + return value.map((v) => _deepCopy(v)); + } + + // Create a copy of the object + const result: Record = { }; + for (const key in result) { + result[key] = value[key]; + } + } + + throw new Error("failure to copy"); +} + +// Deep copy is used by overrides and situations where we need a copy +// of a generic object that won't change by normal usage. It is not +// generally useful outside the scope of this library. +export function deepCopy(value: T): T { + return _deepCopy(value); +} +*/ diff --git a/packages/properties/src.ts/events.ts b/packages/properties/src.ts/events.ts new file mode 100644 index 000000000..6c2a57e9f --- /dev/null +++ b/packages/properties/src.ts/events.ts @@ -0,0 +1,36 @@ +import { defineProperties } from "./properties.js"; + +export type Listener = (...args: Array) => void; + +export interface EventEmitterable { + on(event: T, listener: Listener): Promise; + once(event: T, listener: Listener): Promise; + emit(event: T, ...args: Array): Promise; + listenerCount(event?: T): Promise; + listeners(event?: T): Promise>; + off(event: T, listener?: Listener): Promise; + removeAllListeners(event?: T): Promise; + + // Alias for "on" + addListener(event: T, listener: Listener): Promise; + + // Alias for "off" + removeListener(event: T, listener: Listener): Promise; +} + +export class EventPayload { + readonly filter!: T; + + readonly emitter!: EventEmitterable; + readonly #listener: null | Listener; + + constructor(emitter: EventEmitterable, listener: null | Listener, filter: T) { + this.#listener = listener; + defineProperties>(this, { emitter, filter }); + } + + async removeListener(): Promise { + if (this.#listener == null) { return; } + await this.emitter.off(this.filter, this.#listener); + } +} diff --git a/packages/properties/src.ts/freezable.ts b/packages/properties/src.ts/freezable.ts new file mode 100644 index 000000000..43c3da5ee --- /dev/null +++ b/packages/properties/src.ts/freezable.ts @@ -0,0 +1,12 @@ + +export interface Freezable { + clone(): T; + freeze(): Frozen; + isFrozen(): boolean; +} + +export type Frozen = Readonly<{ + [ P in keyof T ]: T[P] extends (...args: Array) => any ? T[P]: + T[P] extends Freezable ? Frozen: + Readonly; +}>; diff --git a/packages/properties/src.ts/index.ts b/packages/properties/src.ts/index.ts new file mode 100644 index 000000000..d4365b08c --- /dev/null +++ b/packages/properties/src.ts/index.ts @@ -0,0 +1,7 @@ +//export { deepCopy, markImmutable, unmarkImmutable } from "./copy.js"; +export { EventPayload } from "./events.js"; +export { defineProperties, resolveProperties} from "./properties.js"; +export { getStore, setStore } from "./storage.js"; + +export type { EventEmitterable, Listener } from "./events.js"; +export type { Frozen, Freezable } from "./freezable.js"; diff --git a/packages/properties/src.ts/promise.ts b/packages/properties/src.ts/promise.ts new file mode 100644 index 000000000..c178e3299 --- /dev/null +++ b/packages/properties/src.ts/promise.ts @@ -0,0 +1,5 @@ +/* +export async function resolveProperties(props: Record>): Promise> { + throw new Error(); +} +*/ diff --git a/packages/properties/src.ts/properties.ts b/packages/properties/src.ts/properties.ts new file mode 100644 index 000000000..5dd0994dc --- /dev/null +++ b/packages/properties/src.ts/properties.ts @@ -0,0 +1,229 @@ +//import type { BigNumber, BigNumberish } from "./big-number"; +//import type { Bytes, BytesLike } from "./bytes"; +//import type { Signature, SignatureLike } from "./signature"; +/* +export type Loose = T extends BigNumber ? BigNumberish: + T extends number ? BigNumberish: + T extends Bytes ? BytesLike: + T extends Signature ? SignatureLike: + T; +export type LooseObject = { [P in keyof T]?: Loose; }; +*/ + +//export type Deferrable = T | Promise; +/* +export type DeferrableObject = { + [ P in keyof T ]: Deferrable +}; +*/ +/* +export type Frozen = Readonly<{ + [ P in keyof T ]: T[P] extends Freezable ? Frozen: T[P]; +}>; + +export interface Freezable { + clone(): T; + freeze(): Frozen; + isFrozen(): boolean; +} +*/ +/* +const _data: WeakMap = new WeakMap(); + +export class Data implements Freezable { + #props: { + data: Uint8Array + }; + + [ index: number ]: number; + + constructor(lengthOrData: number | Uint8Array) { + if (typeof(lengthOrData) === "number") { + _data[this] = new Uint8Array(lengthOrData); + } else { + _data[this] = lengthOrData; + } + + return new Proxy(this, { + get: (target, prop, receiver) => { + const index = parseInt(String(prop)); + if (String(index) !== prop) { return Reflect.get(target, prop, receiver); } + + const data = _data[this]; + if (index < 0 || index > data.length || index % 1) { + throw new Error(""); + } + return data[index]; + }, + + set: (target, prop, value, receiver) => { + const index = parseInt(String(prop)); + if (String(index) !== prop) { return false; } + + if (value < 0 || value > 255 || value % 1) { return false; } + + const data = _data[this]; + if (index < 0 || index > data.length || index % 1) { + return false; + } + + data[index] = value; + + return true; + }, + }); + } + + toString(): string { + return this.slice().toString(); + } + + slice(): Uint8Array { + return _data.get(this).slice(); + } + + clone(): Data { + return new Data(this.slice()); + } + + freeze(): Frozen { + //Object.freeze(this.#props); + return this; + } + + isFrozen(): boolean { + return Object.isFrozen(this.#props); + } +} +const d = new Data(4); +console.log(d.toString()); +d[0] = 45; +console.log(d.toString()); +*/ +/* +export type DeferrableObject = { + [ P in keyof T ]: Deferrable +}; +*/ + +export async function resolveProperties(value: { [ P in keyof T ]: T[P] | Promise}): Promise { + const keys = Object.keys(value); + const results = await Promise.all(keys.map((k) => Promise.resolve(value[k]))); + return results.reduce((accum: any, v, index) => { + accum[keys[index]] = v; + return accum; + }, <{ [ P in keyof T]: T[P] }>{ }); +} + +export function defineReadOnly(object: T, name: P, value: T[P]): void { + Object.defineProperty(object, name, { + enumerable: true, + value: value, + writable: false, + }); +} +/* +export function getStore(store: T, key: P): T[P] { + return store[key]; +} + +export function setStore(store: T, key: P, value: T[P]): void { + if (Object.isFrozen(store)) { + throw new Error("frozen object is immuatable; cannot set " + key); + } + store[key] = value; +} +*/ +export interface CancellablePromise extends Promise { + cancel(): Promise; +} +/* +export type IsCancelled = () => Promise; + +export function createPromise(resolve: (isCancelled: IsCancelled, (result: T) => void) => void, reject: (error: Error) => void, isCancelled: IsCancelled): CancellablePromise { + let cancelled = false; + + const promise = new Promise((resolve, reject) => { + + }); + + (>promise).cancel = function() { + cancelled = true; + }; + + return (>promise); +} +*/ +/* +export class A implements Freezable { + foo: number; + constructor(foo: number) { + this.foo = foo; + } + freeze(): Frozen { + Object.freeze(this); + return this; + } + clone(): A { + return new A(this.foo); + } +} + +export class B implements Freezable { + a: A; + constructor(a: A) { + this.a = a; + } + freeze(): Frozen { + this.a.freeze(); + Object.freeze(this); + return this; + } + clone(): B { + return new B(this.a); + } +} + +export function test() { + const a = new A(123); + const b = new B(a); + b.a = new A(234); + const b2 = b.freeze(); + b2.a.foo = 123; // = a; +} +*/ + +function checkType(value: any, type: string): void { + const types = type.split("|").map(t => t.trim()); + for (let i = 0; i < types.length; i++) { + switch (type) { + case "any": + return; + case "boolean": + case "number": + case "string": + if (typeof(value) === type) { return; } + } + } + throw new Error("invalid value for type"); +} + +export function defineProperties( + target: T, + values: { [ K in keyof T ]?: undefined | T[K] }, + types?: { [ K in keyof T ]?: string }, + defaults?: { [ K in keyof T ]?: T[K] }): void { + + for (let key in values) { + let value = values[key]; + + const fallback = (defaults ? defaults[key]: undefined); + if (fallback !== undefined) { + value = fallback; + } else { + const type = (types ? types[key]: null); + if (type) { checkType(value, type); } + } + Object.defineProperty(target, key, { enumerable: true, value, writable: false }); + } +} diff --git a/packages/properties/src.ts/storage.ts b/packages/properties/src.ts/storage.ts new file mode 100644 index 000000000..fec807071 --- /dev/null +++ b/packages/properties/src.ts/storage.ts @@ -0,0 +1,10 @@ +export function getStore(store: T, key: P): T[P] { + return store[key]; +} + +export function setStore(store: T, key: P, value: T[P]): void { + if (Object.isFrozen(store)) { + throw new Error("frozen object is immuatable; cannot set " + key); + } + store[key] = value; +} diff --git a/packages/properties/tsconfig.json b/packages/properties/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/properties/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/providers/.env b/packages/providers/.env new file mode 100644 index 000000000..4343b4656 --- /dev/null +++ b/packages/providers/.env @@ -0,0 +1,4 @@ +{ + "privateKey": "", + "test-server-secret": "0x62ba8656ec75098813a0" +} diff --git a/packages/providers/.npmignore b/packages/providers/.npmignore new file mode 100644 index 000000000..03a92044c --- /dev/null +++ b/packages/providers/.npmignore @@ -0,0 +1,3 @@ +/src.ts/tests/** +/lib/tests/** +tsconfig.tsbuildinfo diff --git a/packages/providers/LICENSE.md b/packages/providers/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/providers/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/providers/package.json b/packages/providers/package.json new file mode 100644 index 000000000..f6c383755 --- /dev/null +++ b/packages/providers/package.json @@ -0,0 +1,56 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/address": "^6.0.0-beta.1", + "@ethersproject/bytes": "^6.0.0-beta.1", + "@ethersproject/hash": "^6.0.0-beta.1", + "@ethersproject/logger": "^6.0.0-beta.1", + "@ethersproject/math": "^6.0.0-beta.1", + "@ethersproject/properties": "^6.0.0-beta.1", + "@ethersproject/signing-key": "^6.0.0-beta.1", + "@ethersproject/transactions": "^6.0.0-beta.1", + "@ethersproject/web": "^6.0.0-beta.1", + "ws": "8.5.0" + }, + "dummy": { + "@ethersproject/abstract-provider": "^6.0.0-beta.1", + "@ethersproject/abstract-signer": "^6.0.0-beta.1", + "@ethersproject/basex": "^6.0.0-beta.1", + "@ethersproject/constants": "^6.0.0-beta.1", + "@ethersproject/hash": "^6.0.0-beta.1", + "@ethersproject/networks": "^6.0.0-beta.1", + "@ethersproject/random": "^6.0.0-beta.1", + "@ethersproject/properties": "^6.0.0-beta.1", + "@ethersproject/rlp": "^6.0.0-beta.1", + "@ethersproject/sha2": "^6.0.0-beta.1", + "@ethersproject/strings": "^6.0.0-beta.1", + "@ethersproject/transactions": "^6.0.0-beta.1", + "@ethersproject/web": "^5.4.0" + }, + "description": "Ethereum Providers for ethers.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "ethers" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/providers", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/providers", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/providers/src.ts/_version.ts b/packages/providers/src.ts/_version.ts new file mode 100644 index 000000000..ad3cce9d8 --- /dev/null +++ b/packages/providers/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/providers@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/providers/src.ts/abstract-provider.ts b/packages/providers/src.ts/abstract-provider.ts new file mode 100644 index 000000000..91cf31341 --- /dev/null +++ b/packages/providers/src.ts/abstract-provider.ts @@ -0,0 +1,1240 @@ +// @TODO +// Event coalescence +// When we register an event with an async value (e.g. address is a Signer +// or ENS name), we need to add it immeidately for the Event API, but also +// need time to resolve the address. Upon resolving the address, we need to +// migrate the listener to the static event. We also need to maintain a map +// of Signer/ENS name to address so we can sync respond to listenerCount. + +import { resolveAddress } from "@ethersproject/address"; +import { concat, dataLength, dataSlice, hexlify, isHexString } from "@ethersproject/bytes"; +import { isCallException } from "@ethersproject/logger"; +import { toArray } from "@ethersproject/math"; +import { defineProperties, EventPayload, resolveProperties } from "@ethersproject/properties"; +import { toUtf8String } from "@ethersproject/strings"; +import { fetchData, FetchRequest } from "@ethersproject/web"; + +import { EnsResolver } from "./ens-resolver.js"; +import { logger } from "./logger.js"; +import { Network } from "./network.js"; +import { Block, FeeData, Log, TransactionReceipt, TransactionResponse } from "./provider.js"; +import { + PollingBlockSubscriber, PollingEventSubscriber, PollingOrphanSubscriber, PollingTransactionSubscriber +} from "./subscriber-polling.js"; + +import type { Addressable } from "@ethersproject/address"; +import type { BigNumberish, BytesLike } from "@ethersproject/logger"; +import type { Frozen, Listener } from "@ethersproject/properties"; +import type { AccessList } from "@ethersproject/transactions"; + +import type { Networkish } from "./network.js"; +import type { MaxPriorityFeePlugin } from "./plugins-network.js"; +import type { + BlockTag, CallRequest, EventFilter, Filter, FilterByBlockHash, + LogParams, OrphanFilter, Provider, ProviderEvent, TransactionRequest, +} from "./provider.js"; + + +// Constants +const BN_2 = BigInt(2); + +const MAX_CCIP_REDIRECTS = 10; + + +function getTag(prefix: string, value: any): string { + return prefix + ":" + JSON.stringify(value, (k, v) => { + if (typeof(v) === "bigint") { return `bigint:${ v.toString() }`} + if (typeof(v) === "string") { return v.toLowerCase(); } + + // Sort object keys + if (typeof(v) === "object" && !Array.isArray(v)) { + const keys = Object.keys(v); + keys.sort(); + return keys.reduce((accum, key) => { + accum[key] = v[key]; + return accum; + }, { }); + } + + return v; + }); +} + +// Only sub-classes overriding the _getSubscription method will care about this +export type Subscription = { + type: "block" | "close" | "debug" | "network" | "pending", + tag: string +} | { + type: "transaction", + tag: string, + hash: string +} | { + type: "event", + tag: string, + filter: EventFilter +} | { + type: "orphan", + tag: string, + filter: OrphanFilter +}; + +export interface Subscriber { + start(): void; + stop(): void; + + pause(dropWhilePaused?: boolean): void; + resume(): void; + + // Subscribers which use polling should implement this to allow + // Providers the ability to update underlying polling intervals + // If not supported, accessing this property should return undefined + pollingInterval?: number; +} + +export class UnmanagedSubscriber implements Subscriber { + name!: string; + + constructor(name: string) { defineProperties(this, { name }); } + + start(): void { } + stop(): void { } + + pause(dropWhilePaused?: boolean): void { } + resume(): void { } +} + +type Sub = { + tag: string; + nameMap: Map + addressableMap: WeakMap; + listeners: Array<{ listener: Listener, once: boolean }>; + started: boolean; + subscriber: Subscriber; +}; + +function copy(value: T): T { + return JSON.parse(JSON.stringify(value)); +} + +function concisify(items: Array): Array { + items = Array.from((new Set(items)).values()) + items.sort(); + return items; +} + +// Normalize a ProviderEvent into a Subscription +// @TODO: Make events sync if possible; like block +//function getSyncSubscription(_event: ProviderEvent): Subscription { +//} + +async function getSubscription(_event: ProviderEvent, provider: AbstractProvider): Promise { + if (_event == null) { throw new Error("invalid event"); } + + // Normalize topic array info an EventFilter + if (Array.isArray(_event)) { _event = { topics: _event }; } + + if (typeof(_event) === "string") { + switch (_event) { + case "block": case "pending": case "debug": case "network": { + return { type: _event, tag: _event }; + } + } + } + + if (isHexString(_event, 32)) { + const hash = _event.toLowerCase(); + return { type: "transaction", tag: getTag("tx", { hash }), hash }; + } + + if ((_event).orphan) { + const event = _event; + // @TODO: Should lowercase and whatnot things here instead of copy... + return { type: "orphan", tag: getTag("orphan", event), filter: copy(event) }; + } + + if (((_event).address || (_event).topics)) { + const event = _event; + + const filter: any = { + topics: ((event.topics || []).map((t) => { + if (t == null) { return null; } + if (Array.isArray(t)) { + return concisify(t.map((t) => t.toLowerCase())); + } + return t.toLowerCase(); + })) + }; + + if (event.address) { + const addresses: Array = [ ]; + const promises: Array> = [ ]; + + const addAddress = (addr: string | Addressable) => { + if (isHexString(addr)) { + addresses.push(addr); + } else { + promises.push((async () => { + addresses.push(await resolveAddress(addr, provider)); + })()); + } + } + + + if (Array.isArray(event.address)) { + event.address.forEach(addAddress); + } else { + addAddress(event.address); + } + if (promises.length) { await Promise.all(promises); } + filter.address = concisify(addresses.map((a) => a.toLowerCase())); + } + + return { filter, tag: getTag("event", filter), type: "event" }; + } + + return logger.throwArgumentError("unknown ProviderEvent", "event", _event); +} + +function getTime(): number { return (new Date()).getTime(); } + +export interface ProviderPlugin { + readonly name: string; + validate(provider: Provider): ProviderPlugin; +} + +export type PerformActionFilter = { + address?: string | Array; + topics?: Array>; + fromBlock?: BlockTag; + toBlock?: BlockTag; + blockHash?: string; +}; + +export type PerformActionTransaction = { + type?: number; + + to?: string; + from?: string; + + nonce?: number; + + gasLimit?: bigint; + gasPrice?: bigint; + + maxPriorityFeePerGas?: bigint; + maxFeePerGas?: bigint; + + data?: string; + value?: bigint; + chainId?: bigint; + + accessList?: AccessList; +}; + +export function copyRequest(tx: T): T { + // @TODO: copy the copy from contracts and use it from this + return tx; +} + +export type PerformActionRequest = { + method: "call", + transaction: PerformActionTransaction, blockTag: BlockTag +} | { + method: "chainId" +} | { + method: "estimateGas", + transaction: PerformActionTransaction +} | { + method: "getBalance", + address: string, blockTag: BlockTag +} | { + method: "getBlock", + blockTag: BlockTag, includeTransactions: boolean +} | { + method: "getBlock", + blockHash: string, includeTransactions: boolean +} | { + method: "getBlockNumber" +} | { + method: "getCode", + address: string, blockTag: BlockTag +} | { + method: "getGasPrice" +} | { + method: "getLogs", + filter: PerformActionFilter +} | { + method: "getStorageAt", + address: string, position: bigint, blockTag: BlockTag +} | { + method: "getTransaction", + hash: string +} | { + method: "getTransactionCount", + address: string, blockTag: BlockTag +} | { + method: "getTransactionReceipt", + hash: string +} | { + method: "sendTransaction", // @TODO: rename to broadcast + signedTransaction: string +}; + + +type CcipArgs = { + sender: string; + urls: Array; + calldata: string; + selector: string; + extraData: string; + errorArgs: Array +}; + + + +export class AbstractProvider implements Provider { + + #subs: Map; + #plugins: Map; + + // null=unpaused, true=paused+dropWhilePaused, false=paused + #pausedState: null | boolean; + + #networkPromise: null | Promise>; + readonly #anyNetwork: boolean; + + #performCache: Map>; + + #nextTimer: number; + #timers: Map void, time: number }>; + + #disableCcipRead: boolean; + + // @TODO: This should be a () => Promise so network can be + // done when needed; or rely entirely on _detectNetwork? + constructor(_network?: "any" | Networkish) { + if (_network === "any") { + this.#anyNetwork = true; + this.#networkPromise = null; + } else if (_network) { + const network = Network.from(_network); + this.#anyNetwork = false; + this.#networkPromise = Promise.resolve(network); + setTimeout(() => { this.emit("network", network, null); }, 0); + } else { + this.#anyNetwork = false; + this.#networkPromise = null; + } + + //this.#approxNumber = -2; + //this.#approxNumberT0 = 0; + this.#performCache = new Map(); + + this.#subs = new Map(); + this.#plugins = new Map(); + this.#pausedState = null; + + this.#nextTimer = 0; + this.#timers = new Map(); + + this.#disableCcipRead = false; + } + + get plugins(): Array { + return Array.from(this.#plugins.values()); + } + + attachPlugin(plugin: ProviderPlugin): this { + if (this.#plugins.get(plugin.name)) { + throw new Error(`cannot replace existing plugin: ${ plugin.name } `); + } + this.#plugins.set(plugin.name, plugin.validate(this)); + return this; + } + + getPlugin(name: string): null | T { + return (this.#plugins.get(name)) || null; + } + + set disableCcipRead(value: boolean) { this.#disableCcipRead = !!value; } + get disableCcipRead(): boolean { return this.#disableCcipRead; } + + // Shares multiple identical requests made during the same 250ms + async #perform(req: PerformActionRequest): Promise { + // Create a tag + const tag = getTag(req.method, req); + + let perform = this.#performCache.get(tag); + if (!perform) { + perform = this._perform(req); + this.#performCache.set(tag, perform); + + setTimeout(() => { + if (this.#performCache.get(tag) === perform) { + this.#performCache.delete(tag); + } + }, 250); + } + + return await perform; + } + + async ccipReadFetch(tx: PerformActionTransaction, calldata: string, urls: Array): Promise { + if (this.disableCcipRead || urls.length === 0 || tx.to == null) { return null; } + + const sender = tx.to.toLowerCase(); + const data = calldata.toLowerCase(); + + const errorMessages: Array = [ ]; + + for (let i = 0; i < urls.length; i++) { + const url = urls[i]; + + // URL expansion + const href = url.replace("{sender}", sender).replace("{data}", data); + + // If no {data} is present, use POST; otherwise GET + //const json: string | null = (url.indexOf("{data}") >= 0) ? null: JSON.stringify({ data, sender }); + + //const result = await fetchJson({ url: href, errorPassThrough: true }, json, (value, response) => { + // value.status = response.statusCode; + // return value; + //}); + const request = new FetchRequest(href); + if (url.indexOf("{data}") === -1) { + request.body = { data, sender }; + } + + let errorMessage = "unknown error"; + + const resp = await fetchData(request); + try { + const result = resp.bodyJson; + if (result.data) { return result.data; } + if (result.message) { errorMessage = result.message; } + } catch (error) { } + + // 4xx indicates the result is not present; stop + if (resp.statusCode >= 400 && resp.statusCode < 500) { + return logger.throwError(`response not found during CCIP fetch: ${ errorMessage }`, "OFFCHAIN_FAULT", { + reason: "404_MISSING_RESOURCE", + transaction: tx, info: { url, errorMessage } + }); + } + + // 5xx indicates server issue; try the next url + errorMessages.push(errorMessage); + } + + return logger.throwError(`error encountered during CCIP fetch: ${ errorMessages.map((m) => JSON.stringify(m)).join(", ") }`, "OFFCHAIN_FAULT", { + reason: "500_SERVER_ERROR", + transaction: tx, info: { urls, errorMessages } + }); + } + + _wrapTransaction(tx: TransactionResponse, hash: string, blockNumber: number): TransactionResponse { + return tx; + } + + _detectNetwork(): Promise> { + return logger.throwError("sub-classes must implement this", "UNSUPPORTED_OPERATION", { + operation: "_detectNetwork" + }); + } + + async _perform(req: PerformActionRequest): Promise { + return logger.throwError(`unsupported method: ${ req.method }`, "UNSUPPORTED_OPERATION", { + operation: req.method, + info: req + }); + } + + // State + async getBlockNumber() { + return logger.getNumber(await this.#perform({ method: "getBlockNumber" }), "%response"); + } + + async _getAddress(address: string | Addressable): Promise { + if (typeof(address) === "string") { return address; } + return await address.getAddress(); + } + + async _getBlockTag(blockTag?: BlockTag): Promise { + const network = await this.getNetwork(); + + if (typeof(blockTag) === "number" && Number.isSafeInteger(blockTag) && blockTag < 0) { + //let blockNumber = await this._getApproxBlockNumber(500); + let blockNumber = await this.getBlockNumber(); + blockNumber += blockTag; + if (blockNumber < 0) { blockNumber = 0; } + return network.formatter.blockTag(blockNumber) + } + + return network.formatter.blockTag(blockTag); + } + + async getNetwork(): Promise> { + + // No explicit network was set and this is our first time + if (this.#networkPromise == null) { + + // Detect the current network (shared with all calls) + const detectNetwork = this._detectNetwork().then((network) => { + this.emit("network", network, null); + return network; + }, (error) => { + // Reset the networkPromise on failure, so we will try again + if (this.#networkPromise === detectNetwork) { + this.#networkPromise = null; + } + throw error; + }); + + this.#networkPromise = detectNetwork; + return await detectNetwork; + } + + const networkPromise = this.#networkPromise; + + const [ expected, actual ] = await Promise.all([ + networkPromise, // Possibly an explicit Network + this._detectNetwork() // The actual connected network + ]); + + if (expected.chainId !== actual.chainId) { + if (this.#anyNetwork) { + // The "any" network can change, so notify listeners + this.emit("network", actual, expected); + + // Update the network if something else hasn't already changed it + if (this.#networkPromise === networkPromise) { + this.#networkPromise = Promise.resolve(actual); + } + } else { + // Otherwise, we do not allow changes to the underlying network + logger.throwError(`network changed: ${ expected.chainId } => ${ actual.chainId } `, "NETWORK_ERROR", { + event: "changed" + }); + } + } + + return expected.clone().freeze(); + } + + async getFeeData(): Promise { + const { block, gasPrice } = await resolveProperties({ + block: this.getBlock("latest"), + gasPrice: ((async () => { + try { + const gasPrice = await this.#perform({ method: "getGasPrice" }); + return logger.getBigInt(gasPrice, "%response"); + } catch (error) { } + return null + })()) + }); + + let maxFeePerGas = null, maxPriorityFeePerGas = null; + + if (block && block.baseFeePerGas) { + // We may want to compute this more accurately in the future, + // using the formula "check if the base fee is correct". + // See: https://eips.ethereum.org/EIPS/eip-1559 + maxPriorityFeePerGas = BigInt("1500000000"); + + // Allow a network to override their maximum priority fee per gas + const priorityFeePlugin = (await this.getNetwork()).getPlugin("org.ethers.plugins.max-priority-fee"); + if (priorityFeePlugin) { + maxPriorityFeePerGas = await priorityFeePlugin.getPriorityFee(this); + } + maxFeePerGas = (block.baseFeePerGas * BN_2) + maxPriorityFeePerGas; + } + + return new FeeData(gasPrice, maxFeePerGas, maxPriorityFeePerGas); + } + + async _getTransaction(_request: CallRequest): Promise { + const network = await this.getNetwork(); + + // Fill in any addresses + const request = Object.assign({}, _request, await resolveProperties({ + to: (_request.to ? resolveAddress(_request.to, this): undefined), + from: (_request.from ? resolveAddress(_request.from, this): undefined), + })); + + return network.formatter.transactionRequest(request); + } + + async estimateGas(_tx: TransactionRequest) { + const transaction = await this._getTransaction(_tx); + return logger.getBigInt(await this.#perform({ + method: "estimateGas", transaction + }), "%response"); + } + + async #call(tx: PerformActionTransaction, blockTag: string, attempt: number): Promise { + if (attempt >= MAX_CCIP_REDIRECTS) { + logger.throwError("CCIP read exceeded maximum redirections", "OFFCHAIN_FAULT", { + reason: "TOO_MANY_REDIRECTS", + transaction: Object.assign({ }, tx, { blockTag, enableCcipRead: true }) + }); + } + + const transaction = copyRequest(tx); + + try { + return hexlify(await this._perform({ method: "call", transaction, blockTag })); + + } catch (error) { + // CCIP Read OffchainLookup + if (!this.disableCcipRead && isCallException(error) && attempt >= 0 && blockTag === "latest" && transaction.to != null && dataSlice(error.data, 0, 4) === "0x556f1830") { + const data = error.data; + + const txSender = await resolveAddress(transaction.to, this); + + // Parse the CCIP Read Arguments + let ccipArgs: CcipArgs; + try { + ccipArgs = parseOffchainLookup(dataSlice(error.data, 4)); + } catch (error: any) { + return logger.throwError(error.message, "OFFCHAIN_FAULT", { + reason: "BAD_DATA", + transaction, info: { data } + }); + } + + // Check the sender of the OffchainLookup matches the transaction + if (ccipArgs.sender.toLowerCase() !== txSender.toLowerCase()) { + return logger.throwError("CCIP Read sender mismatch", "CALL_EXCEPTION", { + data, transaction, + errorSignature: "OffchainLookup(address,string[],bytes,bytes4,bytes)", + errorName: "OffchainLookup", + errorArgs: ccipArgs.errorArgs + }); + } + + const ccipResult = await this.ccipReadFetch(transaction, ccipArgs.calldata, ccipArgs.urls); + if (ccipResult == null) { + return logger.throwError("CCIP Read failed to fetch data", "OFFCHAIN_FAULT", { + reason: "FETCH_FAILED", + transaction, info: { data: error.data, errorArgs: ccipArgs.errorArgs } + }); + } + + return this.#call({ + to: txSender, + data: concat([ + ccipArgs.selector, encodeBytes([ ccipResult, ccipArgs.extraData ]) + ]), + }, blockTag, attempt + 1); + } + + throw error; + } + } + + async call(_tx: CallRequest) { + const { tx, blockTag } = await resolveProperties({ + tx: this._getTransaction(_tx), + blockTag: this._getBlockTag(_tx.blockTag) + }); + return this.#call(tx, blockTag, _tx.enableCcipRead ? 0: -1); + } + + // Account + async getBalanceOf(_address: string | Addressable, _blockTag?: BlockTag) { + const { address, blockTag} = await resolveProperties({ + address: resolveAddress(_address), + blockTag: this._getBlockTag(_blockTag) + }); + + return logger.getBigInt(await this.#perform({ + method: "getBalance", address, blockTag + }), "%response"); + } + + async getTransactionCountOf(_address: string | Addressable, _blockTag?: BlockTag) { + const { address, blockTag} = await resolveProperties({ + address: resolveAddress(_address), + blockTag: this._getBlockTag(_blockTag) + }); + + return logger.getNumber(await this.#perform({ + method: "getTransactionCount", address, blockTag + }), "%response"); + } + + async getCode(_address: string | Addressable, _blockTag?: BlockTag) { + const { address, blockTag} = await resolveProperties({ + address: resolveAddress(_address), + blockTag: this._getBlockTag(_blockTag) + }); + + return hexlify(await this.#perform({ + method: "getCode", address, blockTag + })); + } + + async getStorageAt(_address: string | Addressable, _position: BigNumberish, _blockTag?: BlockTag) { + const position = logger.getBigInt(_position); + const { address, blockTag} = await resolveProperties({ + address: resolveAddress(_address), + blockTag: this._getBlockTag(_blockTag) + }); + return hexlify(await this.#perform({ + method: "getStorageAt", address, position, blockTag + })); + } + + // Write + async broadcastTransaction(signedTx: string) { + throw new Error(); + return { }; + } + + async #getBlock(block: BlockTag | string, includeTransactions: boolean): Promise { + const format = (await this.getNetwork()).formatter; + + if (isHexString(block, 32)) { + return await this.#perform({ + method: "getBlock", blockHash: block, includeTransactions + }); + } + + return await this.#perform({ + method: "getBlock", blockTag: format.blockTag(block), includeTransactions + }); + } + + // Queries + async getBlock(block: BlockTag | string): Promise> { + const format = (await this.getNetwork()).formatter; + + const params = await this.#getBlock(block, false); + if (params == null) { return null; } + + return format.block(params, this); + } + + async getBlockWithTransactions(block: BlockTag | string): Promise> { + const format = (await this.getNetwork()).formatter; + + const params = this.#getBlock(block, true); + if (params == null) { return null; } + + return format.blockWithTransactions(params, this); + } + + async getTransaction(hash: string): Promise { + const format = (await this.getNetwork()).formatter; + const params = await this.#perform({ method: "getTransaction", hash }); + return format.transactionResponse(params, this); + } + + async getTransactionReceipt(hash: string): Promise { + const format = (await this.getNetwork()).formatter; + + const receipt = await this.#perform({ method: "getTransactionReceipt", hash }); + if (receipt == null) { return null; } + + // Some backends did not backfill the effectiveGasPrice into old transactions + // in the receipt, so we look it up manually and inject it. + if (receipt.gasPrice == null && receipt.effectiveGasPrice == null) { + const tx = await this.#perform({ method: "getTransaction", hash }); + receipt.effectiveGasPrice = tx.gasPrice; + } + + return format.receipt(receipt, this); + } + + async _getFilter(filter: Filter | FilterByBlockHash): Promise { + const lookup: { [K in keyof PerformActionFilter]: Promise } = { }; + + if (filter.address) { + if (Array.isArray(filter.address)) { + lookup.address = Promise.all(filter.address.map((a) => resolveAddress(a, this))); + } else { + lookup.address = resolveAddress(filter.address, this); + } + } + + const addBlockTag = (key: "fromBlock" | "toBlock") => { + if ((filter)[key] == null) { return; } + lookup[key] = this._getBlockTag((filter)[key]); + } + addBlockTag("fromBlock"); + addBlockTag("toBlock"); + + const result = await resolveProperties(lookup); + if (Array.isArray(result.address)) { result.address.sort(); } + + if ((filter).blockHash) { + if ((filter).fromBlock || (filter).toBlock) { + throw new Error("invalid filter"); + } + result.blockHash = (filter).blockHash; + } + + return result; + } + + // Bloom-filter Queries + async getLogs(_filter: Filter | FilterByBlockHash): Promise> { + const { network, filter } = await resolveProperties({ + network: this.getNetwork(), + filter: this._getFilter(_filter) + }); + + return (await this.#perform>({ method: "getLogs", filter })).map((l) => { + return network.formatter.log(l, this); + }); + } + + // ENS + _getProvider(chainId: number): AbstractProvider { + return logger.throwError("provider cannot connect to target network", "UNSUPPORTED_OPERATION", { + operation: "_getProvider()" + }); + } + + async getResolver(name: string): Promise { + return await EnsResolver.fromName(this, name); + } + + async getAvatar(name: string): Promise { + const resolver = await this.getResolver(name); + if (resolver) { return await resolver.getAvatar(); } + return null; + } + + async resolveName(name: string | Addressable): Promise{ + if (typeof(name) === "string") { + const resolver = await this.getResolver(name); + if (resolver) { return await resolver.getAddress(); } + } else { + const address = await name.getAddress(); + if (address == null) { + return logger.throwArgumentError("Addressable returned no address", "name", name); + } + return address; + } + return null; + } + + async lookupAddress(address: string): Promise { + throw new Error(); + //return "TODO"; + } + + async waitForTransaction(hash: string, confirms: number = 1, timeout?: number): Promise { + if (confirms === 0) { return this.getTransactionReceipt(hash); } + + return new Promise(async (resolve, reject) => { + let timer: null | NodeJS.Timer = null; + + const listener = (async (blockNumber: number) => { + try { + const receipt = await this.getTransactionReceipt(hash); + if (receipt != null) { + if (blockNumber - receipt.blockNumber + 1 >= confirms) { + resolve(receipt); + this.off("block", listener); + if (timer) { + clearTimeout(timer); + timer = null; + } + return; + } + } + } catch (error) { + console.log("EEE", error); + } + this.once("block", listener); + }); + + if (timeout != null) { + timer = setTimeout(() => { + if (timer == null) { return; } + timer = null; + this.off("block", listener); + reject(logger.makeError("timeout", "TIMEOUT", { })); + }, timeout); + } + + listener(await this.getBlockNumber()); + }); + } + + async waitForBlock(blockTag?: BlockTag): Promise> { + throw new Error(); + //return new Block({ }, this); + } + + _clearTimeout(timerId: number): void { + const timer = this.#timers.get(timerId); + if (!timer) { return; } + if (timer.timer) { clearTimeout(timer.timer); } + this.#timers.delete(timerId); + } + + _setTimeout(_func: () => void, timeout: number = 0): number { + const timerId = this.#nextTimer++; + const func = () => { + this.#timers.delete(timerId); + _func(); + }; + + if (this.paused) { + this.#timers.set(timerId, { timer: null, func, time: timeout }); + } else { + const timer = setTimeout(func, timeout); + this.#timers.set(timerId, { timer, func, time: getTime() }); + } + + return timerId; + } + + _forEachSubscriber(func: (s: Subscriber) => void): void { + for (const sub of this.#subs.values()) { + func(sub.subscriber); + } + } + + // Event API; sub-classes should override this; any supported + // event filter will have been munged into an EventFilter + _getSubscriber(sub: Subscription): Subscriber { + switch (sub.type) { + case "debug": + case "network": + return new UnmanagedSubscriber(sub.type); + case "block": + return new PollingBlockSubscriber(this); + case "event": + return new PollingEventSubscriber(this, sub.filter); + case "transaction": + return new PollingTransactionSubscriber(this, sub.hash); + case "orphan": + return new PollingOrphanSubscriber(this, sub.filter); + } + + throw new Error(`unsupported event: ${ sub.type }`); + } + + _recoverSubscriber(oldSub: Subscriber, newSub: Subscriber): void { + for (const sub of this.#subs.values()) { + if (sub.subscriber === oldSub) { + if (sub.started) { sub.subscriber.stop(); } + sub.subscriber = newSub; + if (sub.started) { newSub.start(); } + if (this.#pausedState != null) { newSub.pause(this.#pausedState); } + break; + } + } + } + + async #hasSub(event: ProviderEvent, emitArgs?: Array): Promise { + let sub = await getSubscription(event, this); + // This is a log that is removing an existing log; we actually want + // to emit an orphan event for the removed log + if (sub.type === "event" && emitArgs && emitArgs.length > 0 && emitArgs[0].removed === true) { + sub = await getSubscription({ orphan: "drop-log", log: emitArgs[0] }, this); + } + return this.#subs.get(sub.tag) || null; + } + + async #getSub(event: ProviderEvent): Promise { + const subscription = await getSubscription(event, this); + + // Prevent tampering with our tag in any subclass' _getSubscriber + const tag = subscription.tag; + + let sub = this.#subs.get(tag); + if (!sub) { + const subscriber = this._getSubscriber(subscription); + const addressableMap = new WeakMap(); + const nameMap = new Map(); + sub = { subscriber, tag, addressableMap, nameMap, started: false, listeners: [ ] }; + this.#subs.set(tag, sub); + } + return sub; + } + + async on(event: ProviderEvent, listener: Listener): Promise { + const sub = await this.#getSub(event); + sub.listeners.push({ listener, once: false }); + if (!sub.started) { + sub.subscriber.start(); + sub.started = true; + if (this.#pausedState != null) { sub.subscriber.pause(this.#pausedState); } + } + return this; + } + + async once(event: ProviderEvent, listener: Listener): Promise { + const sub = await this.#getSub(event); + sub.listeners.push({ listener, once: true }); + if (!sub.started) { + sub.subscriber.start(); + sub.started = true; + if (this.#pausedState != null) { sub.subscriber.pause(this.#pausedState); } + } + return this; + } + + async emit(event: ProviderEvent, ...args: Array): Promise { + const sub = await this.#hasSub(event, args); + if (!sub) { return false; }; + + const count = sub.listeners.length; + sub.listeners = sub.listeners.filter(({ listener, once }) => { + const payload = new EventPayload(this, (once ? null: listener), event); + setTimeout(() => { listener.call(this, ...args, payload); }, 0); + return !once; + }); + + return (count > 0); + } + + async listenerCount(event?: ProviderEvent): Promise { + if (event) { + const sub = await this.#hasSub(event); + if (!sub) { return 0; } + return sub.listeners.length; + } + + let total = 0; + for (const { listeners } of this.#subs.values()) { + total += listeners.length; + } + return total; + } + + async listeners(event?: ProviderEvent): Promise> { + if (event) { + const sub = await this.#hasSub(event); + if (!sub) { return [ ]; } + return sub.listeners.map(({ listener }) => listener); + } + let result: Array = [ ]; + for (const { listeners } of this.#subs.values()) { + result = result.concat(listeners.map(({ listener }) => listener)); + } + return result; + } + + async off(event: ProviderEvent, listener?: Listener): Promise { + const sub = await this.#hasSub(event); + if (!sub) { return this; } + + if (listener) { + const index = sub.listeners.map(({ listener }) => listener).indexOf(listener); + if (index >= 0) { sub.listeners.splice(index, 1); } + } + + if (!listener || sub.listeners.length === 0) { + if (sub.started) { sub.subscriber.stop(); } + this.#subs.delete(sub.tag); + } + + return this; + } + + async removeAllListeners(event?: ProviderEvent): Promise { + if (event) { + const { tag, started, subscriber } = await this.#getSub(event); + if (started) { subscriber.stop(); } + this.#subs.delete(tag); + } else { + for (const [ tag, { started, subscriber } ] of this.#subs) { + if (started) { subscriber.stop(); } + this.#subs.delete(tag); + } + } + return this; + } + + // Alias for "on" + async addListener(event: ProviderEvent, listener: Listener): Promise { + return await this.on(event, listener); + } + + // Alias for "off" + async removeListener(event: ProviderEvent, listener: Listener): Promise { + return this.off(event, listener); + } + + // Sub-classes should override this to shutdown any sockets, etc. + // but MUST call this super.shutdown. + async shutdown(): Promise { + // Stop all listeners + this.removeAllListeners(); + + // Shut down all tiemrs + for (const timerId of this.#timers.keys()) { + this._clearTimeout(timerId); + } + } + + get paused(): boolean { return (this.#pausedState != null); } + + pause(dropWhilePaused?: boolean): void { + if (this.#pausedState != null) { + if (this.#pausedState == !!dropWhilePaused) { return; } + return logger.throwError("cannot change pause type; resume first", "UNSUPPORTED_OPERATION", { + operation: "pause" + }); + } + + this._forEachSubscriber((s) => s.pause(dropWhilePaused)); + this.#pausedState = !!dropWhilePaused; + + for (const timer of this.#timers.values()) { + // Clear the timer + if (timer.timer) { clearTimeout(timer.timer); } + + // Remaining time needed for when we become unpaused + timer.time = getTime() - timer.time; + } + } + + resume(): void { + if (this.#pausedState == null) { return; } + + this._forEachSubscriber((s) => s.resume()); + this.#pausedState = null; + for (const timer of this.#timers.values()) { + // Remaining time when we were paused + let timeout = timer.time; + if (timeout < 0) { timeout = 0; } + + // Start time (in cause paused, so we con compute remaininf time) + timer.time = getTime(); + + // Start the timer + setTimeout(timer.func, timeout); + } + } +} + + +function _parseString(result: string, start: number): null | string { + try { + const bytes = _parseBytes(result, start); + if (bytes) { return toUtf8String(bytes); } + } catch(error) { } + return null; +} + +function _parseBytes(result: string, start: number): null | string { + if (result === "0x") { return null; } + try { + const offset = logger.getNumber(dataSlice(result, start, start + 32)); + const length = logger.getNumber(dataSlice(result, offset, offset + 32)); + + return dataSlice(result, offset + 32, offset + 32 + length); + } catch (error) { } + return null; +} + +function numPad(value: number): Uint8Array { + const result = toArray(value); + if (result.length > 32) { throw new Error("internal; should not happen"); } + + const padded = new Uint8Array(32); + padded.set(result, 32 - result.length); + return padded; +} + +function bytesPad(value: Uint8Array): Uint8Array { + if ((value.length % 32) === 0) { return value; } + + const result = new Uint8Array(Math.ceil(value.length / 32) * 32); + result.set(value); + return result; +} + +const empty = new Uint8Array([ ]); + +// ABI Encodes a series of (bytes, bytes, ...) +function encodeBytes(datas: Array) { + const result: Array = [ ]; + + let byteCount = 0; + + // Add place-holders for pointers as we add items + for (let i = 0; i < datas.length; i++) { + result.push(empty); + byteCount += 32; + } + + for (let i = 0; i < datas.length; i++) { + const data = logger.getBytes(datas[i]); + + // Update the bytes offset + result[i] = numPad(byteCount); + + // The length and padded value of data + result.push(numPad(data.length)); + result.push(bytesPad(data)); + byteCount += 32 + Math.ceil(data.length / 32) * 32; + } + + return concat(result); +} + +const zeros = "0x0000000000000000000000000000000000000000000000000000000000000000" +function parseOffchainLookup(data: string): CcipArgs { + const result: CcipArgs = { + sender: "", urls: [ ], calldata: "", selector: "", extraData: "", errorArgs: [ ] + }; + + if (dataLength(data) < 5 * 32) { + throw new Error("insufficient OffchainLookup data"); + } + + const sender = dataSlice(data, 0, 32); + if (dataSlice(sender, 0, 12) !== dataSlice(zeros, 0, 12)) { + throw new Error("corrupt OffchainLookup sender"); + } + result.sender = dataSlice(sender, 12); + + // Read the URLs from the response + try { + const urls: Array = []; + const urlsOffset = logger.getNumber(dataSlice(data, 32, 64)); + const urlsLength = logger.getNumber(dataSlice(data, urlsOffset, urlsOffset + 32)); + const urlsData = dataSlice(data, urlsOffset + 32); + for (let u = 0; u < urlsLength; u++) { + const url = _parseString(urlsData, u * 32); + if (url == null) { throw new Error("abort"); } + urls.push(url); + } + result.urls = urls; + } catch (error) { + throw new Error("corrupt OffchainLookup urls"); + } + + // Get the CCIP calldata to forward + try { + const calldata = _parseBytes(data, 64); + if (calldata == null) { throw new Error("abort"); } + result.calldata = calldata; + } catch (error) { throw new Error("corrupt OffchainLookup calldata"); } + + // Get the callbackSelector (bytes4) + if (dataSlice(data, 100, 128) !== dataSlice(zeros, 0, 28)) { + throw new Error("corrupt OffchainLookup callbaackSelector"); + } + result.selector = dataSlice(data, 96, 100); + + // Get the extra data to send back to the contract as context + try { + const extraData = _parseBytes(data, 128); + if (extraData == null) { throw new Error("abort"); } + result.extraData = extraData; + } catch (error) { throw new Error("corrupt OffchainLookup extraData"); } + + result.errorArgs = "sender,urls,calldata,selector,extraData".split(/,/).map((k) => (result)[k]) + + + return result; +} diff --git a/packages/providers/src.ts/abstract-signer.ts b/packages/providers/src.ts/abstract-signer.ts new file mode 100644 index 000000000..b7b623674 --- /dev/null +++ b/packages/providers/src.ts/abstract-signer.ts @@ -0,0 +1,198 @@ +import { defineProperties, resolveProperties } from "@ethersproject/properties"; +import { Transaction } from "@ethersproject/transactions"; + +import type { Addressable } from "@ethersproject/address"; +import type { TypedDataDomain, TypedDataField } from "@ethersproject/hash"; +import type { TransactionLike } from "@ethersproject/transactions"; + +import type { + BlockTag, CallRequest, Provider, TransactionRequest, TransactionResponse +} from "./provider.js"; +import type { Signer } from "./signer.js"; + +import { logger } from "./logger.js"; + + +export abstract class AbstractSigner implements Signer { + readonly provider!: null | Provider; + + constructor(provider?: null | Provider) { + defineProperties(this, { provider: (provider || null) }); + } + + abstract getAddress(): Promise; + abstract connect(provider: null | Provider): Signer; + + #checkProvider(operation: string): Provider { + if (this.provider) { return this.provider; } + return logger.throwError("missing provider", "UNSUPPORTED_OPERATION", { operation }); + } + + async getBalance(blockTag?: BlockTag): Promise { + return this.#checkProvider("getBalance").getBalanceOf(await this.getAddress(), blockTag); + } + + async getTransactionCount(blockTag?: BlockTag): Promise { + return this.#checkProvider("getTransactionCount").getTransactionCountOf(await this.getAddress(), blockTag); + } + + async #fromify(tx: TransactionRequest): Promise { + tx = Object.assign({ }, tx); + + const actions: Array> = [ ]; + + if (tx.from != null) { + const from = tx.from; + actions.push(Promise.all([ + this.getAddress(), + this.resolveName(from) + ]).then(([ address, from ]) => { + if (!from || address.toLowerCase() !== from.toLowerCase()) { + logger.throwArgumentError("transaction from mismatch", "tx.from", from); + } + tx.from = address; + })); + } + + await Promise.all(actions); + + return tx; + } + + async estimateGas(tx: CallRequest): Promise { + return this.#checkProvider("estimateGas").estimateGas(await this.#fromify(tx)); + } + + async call(tx: CallRequest): Promise { + return this.#checkProvider("call").call(await this.#fromify(tx)); + } + + async populateTransaction(tx: TransactionRequest): Promise> { + const provider = this.#checkProvider("populateTransaction"); + + //let pop: Deferrable = Object.assign({ }, tx); + let pop: any = Object.assign({ }, tx); + + if (pop.to != null) { + pop.to = provider.resolveName(pop.to).then((to) => { + if (to == null) { + return logger.throwArgumentError("transaction to ENS name not configured", "tx.to", pop.to); + } + return to; + }); + } + + if (pop.from != null) { + const from = pop.from; + pop.from = Promise.all([ + this.getAddress(), + this.resolveName(from) + ]).then(([ address, from ]) => { + if (!from || address.toLowerCase() !== from.toLowerCase()) { + return logger.throwArgumentError("transaction from mismatch", "tx.from", from); + } + return address; + }); + } + + if (pop.nonce == null) { + pop.nonce = this.getTransactionCount(); + } + + pop = resolveProperties(pop); + + if (pop.gasLimit == null) { + pop.gasLimit = provider.estimateGas(pop); + } + + pop = resolveProperties(pop); + + //@TODO: Copy logic from AbstractSigner in v5 + + return await resolveProperties(pop); + } + + async resolveName(name: string | Addressable): Promise { + const provider = this.#checkProvider("resolveName"); + return await provider.resolveName(name); + } + + async sendTransaction(tx: TransactionRequest): Promise { + const provider = this.#checkProvider("sendTransaction"); + + const txObj = Transaction.from(await this.populateTransaction(tx)); + return await provider.broadcastTransaction(await this.signTransaction(txObj)); + } + + abstract signTransaction(tx: TransactionRequest): Promise; + abstract signMessage(message: string | Uint8Array): Promise; + abstract signTypedData(domain: TypedDataDomain, types: Record>, value: Record): Promise; +} + +export class VoidSigner extends AbstractSigner { + readonly address!: string; + + constructor(address: string, provider?: null | Provider) { + super(provider); + defineProperties(this, { address }); + } + + async getAddress(): Promise { return this.address; } + + connect(provider: null | Provider): VoidSigner { + return new VoidSigner(this.address, provider); + } + + #throwUnsupported(suffix: string, operation: string): never { + return logger.throwError(`VoidSigner cannot sign ${ suffix }`, "UNSUPPORTED_OPERATION", { + operation + }); + } + + async signTransaction(tx: TransactionRequest): Promise { + this.#throwUnsupported("transactions", "signTransaction"); + } + + async signMessage(message: string | Uint8Array): Promise { + this.#throwUnsupported("messages", "signMessage"); + } + + async signTypedData(domain: TypedDataDomain, types: Record>, value: Record): Promise { + this.#throwUnsupported("typed-data", "signTypedData"); + } +} + +export class WrappedSigner extends AbstractSigner { + #signer: Signer; + + //get provider(): null | Provider { return this.#signer.provider; } + + constructor(signer: Signer) { + super(signer.provider); + this.#signer = signer; + } + + async getAddress(): Promise { + return await this.#signer.getAddress(); + } + + connect(provider: null | Provider): WrappedSigner { + return new WrappedSigner(this.#signer.connect(provider)); + } + + async signTransaction(tx: TransactionRequest): Promise { + return await this.#signer.signTransaction(tx); + } + + async sendTransaction(tx: TransactionRequest): Promise { + return await this.#signer.sendTransaction(tx); + } + + async signMessage(message: string | Uint8Array): Promise { + return await this.#signer.signMessage(message); + } + + async signTypedData(domain: TypedDataDomain, types: Record>, value: Record): Promise { + return await this.#signer.signTypedData(domain, types, value); + } +} diff --git a/packages/providers/src.ts/common-networks.ts b/packages/providers/src.ts/common-networks.ts new file mode 100644 index 000000000..3aafcb7de --- /dev/null +++ b/packages/providers/src.ts/common-networks.ts @@ -0,0 +1,98 @@ + +import { EnsPlugin, GasCostPlugin, MaxPriorityFeePlugin } from "./plugins-network.js"; +import { EtherscanPlugin } from "./provider-etherscan.js"; + +import { Network as _Network } from "./network.js"; + +type Options = { + ensNetwork?: number; + priorityFee?: number + altNames?: Array; + etherscan?: { url: string, apiKey: string }; +}; + +// See: https://chainlist.org +function injectCommonNetworks(Network: typeof _Network): typeof _Network { + + /// Register popular Ethereum networks + function registerEth(name: string, chainId: number, options: Options): void { + const func = function() { + const network = new Network(name, chainId); + + // We use 0 to disable ENS + if (options.ensNetwork != null) { + network.attachPlugin(new EnsPlugin(null, options.ensNetwork)); + } + + if (options.priorityFee) { + network.attachPlugin(new MaxPriorityFeePlugin(options.priorityFee)); + } + + if (options.etherscan) { + const { url, apiKey } = options.etherscan; + network.attachPlugin(new EtherscanPlugin(url, apiKey)); + } + + network.attachPlugin(new GasCostPlugin()); + + return network; + }; + + // Register the network by name and chain ID + Network.register(name, func); + Network.register(chainId, func); + + if (options.altNames) { + options.altNames.forEach((name) => { + Network.register(name, func); + }); + } + } + + registerEth("homestead", 1, { ensNetwork: 1, altNames: [ "mainnet" ] }); + registerEth("ropsten", 3, { ensNetwork: 3 }); + registerEth("rinkeby", 4, { ensNetwork: 4 }); + registerEth("goerli", 5, { ensNetwork: 5 }); + registerEth("kovan", 42, { ensNetwork: 42 }); + + registerEth("classic", 61, { }); + registerEth("classicKotti", 6, { }); + + registerEth("xdai", 100, { ensNetwork: 1 }); + + // Polygon has a 35 gwei maxPriorityFee requirement + registerEth("matic", 137, { + ensNetwork: 1, + priorityFee: 35000000000, + etherscan: { + apiKey: "W6T8DJW654GNTQ34EFEYYP3EZD9DD27CT7", + url: "https:/\/api.polygonscan.com/" + } + }); + registerEth("maticMumbai", 80001, { + priorityFee: 35000000000, + etherscan: { + apiKey: "W6T8DJW654GNTQ34EFEYYP3EZD9DD27CT7", + url: "https:/\/api-testnet.polygonscan.com/" + } + }); + + registerEth("bnb", 56, { + ensNetwork: 1, + etherscan: { + apiKey: "EVTS3CU31AATZV72YQ55TPGXGMVIFUQ9M9", + url: "http:/\/api.bscscan.com" + } + }); + registerEth("bnbt", 97, { + etherscan: { + apiKey: "EVTS3CU31AATZV72YQ55TPGXGMVIFUQ9M9", + url: "http:/\/api-testnet.bscscan.com" + } + }); + + return Network; +} + +const Network = injectCommonNetworks(_Network); +export { Network } diff --git a/packages/providers/src.ts/community.ts b/packages/providers/src.ts/community.ts new file mode 100644 index 000000000..dddd1a21a --- /dev/null +++ b/packages/providers/src.ts/community.ts @@ -0,0 +1,24 @@ + +export interface CommunityResourcable { + isCommunityResource(): boolean; +} + +// Show the throttle message only once +const shown: Set = new Set(); +export function showThrottleMessage(service: string) { + if (shown.has(service)) { return; } + shown.add(service); + + console.log("========= NOTICE =========") + console.log(`Request-Rate Exceeded for ${ service } (this message will not be repeated)`); + console.log(""); + console.log("The default API keys for each service are provided as a highly-throttled,"); + console.log("community resource for low-traffic projects and early prototyping."); + console.log(""); + console.log("While your application will continue to function, we highly recommended"); + console.log("signing up for your own API keys to improve performance, increase your"); + console.log("request rate/limit and enable other perks, such as metrics and advanced APIs."); + console.log(""); + console.log("For more details: https:/\/docs.ethers.io/api-keys/"); + console.log("=========================="); +} diff --git a/packages/providers/src.ts/default-provider.ts b/packages/providers/src.ts/default-provider.ts new file mode 100644 index 000000000..a6be873cc --- /dev/null +++ b/packages/providers/src.ts/default-provider.ts @@ -0,0 +1,89 @@ + +import { AnkrProvider } from "./provider-ankr.js"; +import { AlchemyProvider } from "./provider-alchemy.js"; +import { CloudflareProvider } from "./provider-cloudflare.js"; +import { EtherscanProvider } from "./provider-etherscan.js"; +import { InfuraProvider } from "./provider-infura.js"; +import { PocketProvider } from "./provider-pocket.js"; + +import { FallbackProvider } from "./provider-fallback.js"; +import { JsonRpcProvider } from "./provider-jsonrpc.js"; +import { WebSocketProvider } from "./provider-websocket.js"; + +import type { AbstractProvider } from "./abstract-provider.js"; +import type { Networkish } from "./network.js"; +import { WebSocketLike } from "./provider-websocket.js"; + +function isWebSocketLike(value: any): value is WebSocketLike { + return (value && typeof(value.send) === "function" && + typeof(value.close) === "function"); +} + +export function getDefaultProvider(network: string | Networkish | WebSocketLike, options?: any): AbstractProvider { + if (options == null) { options = { }; } + + if (typeof(network) === "string" && network.match(/^https?:/)) { + return new JsonRpcProvider(network); + } + + if (typeof(network) === "string" && network.match(/^wss?:/) || isWebSocketLike(network)) { + return new WebSocketProvider(network); + } + + const providers: Array = [ ]; + + if (options.alchemy !== "-") { + try { + providers.push(new AlchemyProvider(network, options.alchemy)); + } catch (error) { console.log(error); } + } + + if (options.ankr !== "-") { + try { + providers.push(new AnkrProvider(network, options.ankr)); + } catch (error) { console.log(error); } + } + + if (options.cloudflare !== "-") { + try { + providers.push(new CloudflareProvider(network)); + } catch (error) { console.log(error); } + } + + if (options.etherscan !== "-") { + try { + providers.push(new EtherscanProvider(network, options.etherscan)); + } catch (error) { console.log(error); } + } + + if (options.infura !== "-") { + try { + let projectId = options.infura; + let projectSecret: undefined | string = undefined; + if (typeof(projectId) === "object") { + projectSecret = projectId.projectSecret; + projectId = projectId.projectId; + } + providers.push(new InfuraProvider(network, projectId, projectSecret)); + } catch (error) { console.log(error); } + } + + if (options.pocket !== "-") { + try { + let appId = options.pocket; + let secretKey: undefined | string = undefined; + let loadBalancer: undefined | boolean = undefined; + if (typeof(appId) === "object") { + loadBalancer = !!appId.loadBalancer; + secretKey = appId.secretKey; + appId = appId.appId; + } + providers.push(new PocketProvider(network, appId, secretKey, loadBalancer)); + } catch (error) { console.log(error); } + } + + if (providers.length === 0) { throw new Error("TODO"); } + if (providers.length === 1) { return providers[0]; } + + return new FallbackProvider(providers); +} diff --git a/packages/providers/src.ts/ens-resolver.ts b/packages/providers/src.ts/ens-resolver.ts new file mode 100644 index 000000000..2ddc5c47c --- /dev/null +++ b/packages/providers/src.ts/ens-resolver.ts @@ -0,0 +1,536 @@ +import { concat, dataSlice, hexlify, zeroPadLeft } from "@ethersproject/bytes"; +import { dnsEncode, namehash } from "@ethersproject/hash"; +import { defineProperties } from "@ethersproject/properties"; +import { encodeBase58, toArray, toNumber } from "@ethersproject/math"; +import { toUtf8Bytes, toUtf8String } from "@ethersproject/strings"; +import { fetchData } from "@ethersproject/web"; + +import { logger } from "./logger.js"; + +import type { BigNumberish, BytesLike, EthersError } from "@ethersproject/logger"; + +import type { AbstractProvider, ProviderPlugin } from "./abstract-provider.js"; +import type { EnsPlugin } from "./plugins-network.js"; +import type { CallRequest, Provider } from "./provider.js"; + +const BN_1 = BigInt(1); + +const Empty = new Uint8Array([ ]); +const HashZero = "0x0000000000000000000000000000000000000000000000000000000000000000"; + +function parseBytes(result: string, start: number): null | string { + if (result === "0x") { return null; } + + const offset = toNumber(dataSlice(result, start, start + 32)); + const length = toNumber(dataSlice(result, offset, offset + 32)); + + return dataSlice(result, offset + 32, offset + 32 + length); +} + +function parseString(result: string, start: number): null | string { + try { + const bytes = parseBytes(result, start); + if (bytes != null) { return toUtf8String(bytes); } + } catch(error) { } + return null; +} + +function numPad(value: BigNumberish): Uint8Array { + const result = toArray(value); + if (result.length > 32) { throw new Error("internal; should not happen"); } + + const padded = new Uint8Array(32); + padded.set(result, 32 - result.length); + return padded; +} + +function bytesPad(value: Uint8Array): Uint8Array { + if ((value.length % 32) === 0) { return value; } + + const result = new Uint8Array(Math.ceil(value.length / 32) * 32); + result.set(value); + return result; +} + +// ABI Encodes a series of (bytes, bytes, ...) +function encodeBytes(datas: Array) { + const result: Array = [ ]; + + let byteCount = 0; + + // Add place-holders for pointers as we add items + for (let i = 0; i < datas.length; i++) { + result.push(Empty); + byteCount += 32; + } + + for (let i = 0; i < datas.length; i++) { + const data = logger.getBytes(datas[i]); + + // Update the bytes offset + result[i] = numPad(byteCount); + + // The length and padded value of data + result.push(numPad(data.length)); + result.push(bytesPad(data)); + byteCount += 32 + Math.ceil(data.length / 32) * 32; + } + + return concat(result); +} + +// @TODO: This should use the fetch-data:ipfs gateway +// Trim off the ipfs:// prefix and return the default gateway URL +function getIpfsLink(link: string): string { + if (link.match(/^ipfs:\/\/ipfs\//i)) { + link = link.substring(12); + } else if (link.match(/^ipfs:\/\//i)) { + link = link.substring(7); + } else { + logger.throwArgumentError("unsupported IPFS format", "link", link); + } + + return `https:/\/gateway.ipfs.io/ipfs/${ link }`; +} + +export type AvatarLinkageType = "name" | "avatar" | "!avatar" | "url" | "data" | "ipfs" | + "erc721" | "erc1155" | "!erc721-caip" | "!erc1155-caip" | + "!owner" | "owner" | "!balance" | "balance" | + "metadata-url-base" | "metadata-url-expanded" | "metadata-url" | "!metadata-url" | + "!metadata" | "metadata" | + "!imageUrl" | "imageUrl-ipfs" | "imageUrl" | "!imageUrl-ipfs"; + +export interface AvatarLinkage { + type: AvatarLinkageType; + value: string; +}; + +export interface AvatarResult { + linkage: Array; + url: null | string; +}; + +export abstract class MulticoinProviderPlugin implements ProviderPlugin { + readonly name!: string; + + constructor(name: string) { + defineProperties(this, { name }); + } + + validate(proivder: Provider): ProviderPlugin { + return this; + } + + supportsCoinType(coinType: number): boolean { + return false; + } + + async encodeAddress(coinType: number, address: string): Promise { + throw new Error("unsupported coin"); + } + + async decodeAddress(coinType: number, data: BytesLike): Promise { + throw new Error("unsupported coin"); + } +} + +const BasicMulticoinPluginId = "org.ethers.provider-prugins.basicmulticoin"; + +export class BasicMulticoinProviderPlugin extends MulticoinProviderPlugin { + constructor() { + super(BasicMulticoinPluginId); + } +} + +const matcherIpfs = new RegExp("^(ipfs):/\/(.*)$", "i"); +const matchers = [ + new RegExp("^(https):/\/(.*)$", "i"), + new RegExp("^(data):(.*)$", "i"), + matcherIpfs, + new RegExp("^eip155:[0-9]+/(erc[0-9]+):(.*)$", "i"), +]; + +export class EnsResolver { + provider!: AbstractProvider; + address!: string; + + name!: string; + + // For EIP-2544 names, the ancestor that provided the resolver + #supports2544: null | Promise; + + constructor(provider: AbstractProvider, address: string, name: string) { + defineProperties(this, { provider, address, name }); + this.#supports2544 = null; + } + + async supportsWildcard(): Promise { + if (!this.#supports2544) { + // supportsInterface(bytes4 = selector("resolve(bytes,bytes)")) + this.#supports2544 = this.provider.call({ + to: this.address, + data: "0x01ffc9a79061b92300000000000000000000000000000000000000000000000000000000" + }).then((result) => { + return (logger.getBigInt(result) === BN_1); + }).catch((error) => { + if (error.code === "CALL_EXCEPTION") { return false; } + // Rethrow the error: link is down, etc. Let future attempts retry. + this.#supports2544 = null; + throw error; + }); + } + + return await this.#supports2544; + } + + async _fetch(selector: string, parameters: BytesLike = "0x"): Promise { + + // e.g. keccak256("addr(bytes32,uint256)") + const addrData = concat([ selector, namehash(this.name), parameters ]); + const tx: CallRequest = { + to: this.address, + enableCcipRead: true, + data: addrData + }; + + // Wildcard support; use EIP-2544 to resolve the request + let wrapped = false; + if (await this.supportsWildcard()) { + wrapped = true; + + // selector("resolve(bytes,bytes)") + tx.data = concat([ "0x9061b923", encodeBytes([ dnsEncode(this.name), addrData ]) ]); + } + + try { + let data = await this.provider.call(tx); + if ((logger.getBytes(data).length % 32) === 4) { + return logger.throwError("resolver threw error", "CALL_EXCEPTION", { + transaction: tx, data + }); + } + if (wrapped) { return parseBytes(data, 0); } + return data; + } catch (error: any) { + if ((error as EthersError).code !== "CALL_EXCEPTION") { throw error; } + } + + return null; + } + + async getAddress(coinType: number = 60): Promise { + if (coinType === 60) { + try { + // keccak256("addr(bytes32)") + const result = await this._fetch("0x3b3b57de"); + + // No address + if (result === "0x" || result === HashZero) { return null; } + + const network = await this.provider.getNetwork(); + return network.formatter.callAddress(result); + } catch (error: any) { + if ((error as EthersError).code === "CALL_EXCEPTION") { return null; } + throw error; + } + } + + let coinPlugin: null | MulticoinProviderPlugin = null; + for (const plugin of this.provider.plugins) { + if (!(plugin instanceof MulticoinProviderPlugin)) { continue; } + if (plugin.supportsCoinType(coinType)) { + coinPlugin = plugin; + break; + } + } + + if (coinPlugin == null) { return null; } + + // keccak256("addr(bytes32,uint256") + const data = parseBytes((await this._fetch("0xf1cb7e06", numPad(coinType))) || "0x", 0); + + // No address + if (data == null || data === "0x") { return null; } + + // Compute the address + const address = await coinPlugin.encodeAddress(coinType, data); + + if (address != null) { return address; } + + return logger.throwError(`invalid coin data`, "UNSUPPORTED_OPERATION", { + operation: `getAddress(${ coinType })`, + info: { coinType, data } + }); + } + + async getText(key: string): Promise { + // The key encoded as parameter to fetchBytes + let keyBytes = toUtf8Bytes(key); + + // The nodehash consumes the first slot, so the string pointer targets + // offset 64, with the length at offset 64 and data starting at offset 96 + const calldata = logger.getBytes(concat([ numPad(64), numPad(keyBytes.length), keyBytes ])); + + const hexBytes = parseBytes((await this._fetch("0x59d1d43c", bytesPad(calldata))) || "0x", 0); + if (hexBytes == null || hexBytes === "0x") { return null; } + + return toUtf8String(hexBytes); + } + + async getContentHash(): Promise { + // keccak256("contenthash()") + const hexBytes = parseBytes((await this._fetch("0xbc1c58d1")) || "0x", 0); + + // No contenthash + if (hexBytes == null || hexBytes === "0x") { return null; } + + // IPFS (CID: 1, Type: 70=DAG-PB, 72=libp2p-key) + const ipfs = hexBytes.match(/^0x(e3010170|e5010172)(([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f]*))$/); + if (ipfs) { + const scheme = (ipfs[1] === "e3010170") ? "ipfs": "ipns"; + const length = parseInt(ipfs[4], 16); + if (ipfs[5].length === length * 2) { + return `${ scheme }:/\/${ encodeBase58("0x" + ipfs[2])}`; + } + } + + // Swarm (CID: 1, Type: swarm-manifest; hash/length hard-coded to keccak256/32) + const swarm = hexBytes.match(/^0xe40101fa011b20([0-9a-f]*)$/) + if (swarm && swarm[1].length === 64) { + return `bzz:/\/${ swarm[1] }`; + } + + return logger.throwError(`invalid or unsupported content hash data`, "UNSUPPORTED_OPERATION", { + operation: "getContentHash()", + info: { data: hexBytes } + }); + } + + async getAvatar(): Promise { + return (await this._getAvatar()).url; + } + + async _getAvatar(): Promise { + const linkage: Array = [ { type: "name", value: this.name } ]; + try { + // test data for ricmoo.eth + //const avatar = "eip155:1/erc721:0x265385c7f4132228A0d54EB1A9e7460b91c0cC68/29233"; + const avatar = await this.getText("avatar"); + if (avatar == null) { + linkage.push({ type: "!avatar", value: "" }); + throw new Error("!avatar"); + } + linkage.push({ type: "avatar", value: avatar }); + + for (let i = 0; i < matchers.length; i++) { + const match = avatar.match(matchers[i]); + if (match == null) { continue; } + + const scheme = match[1].toLowerCase(); + + switch (scheme) { + case "https": + case "data": + linkage.push({ type: "url", value: avatar }); + return { linkage, url: avatar }; + case "ipfs": { + const url = getIpfsLink(avatar); + linkage.push({ type: "ipfs", value: avatar }); + linkage.push({ type: "url", value: url }); + return { linkage, url }; + } + + case "erc721": + case "erc1155": { + // Depending on the ERC type, use tokenURI(uint256) or url(uint256) + const selector = (scheme === "erc721") ? "0xc87b56dd": "0x0e89341c"; + linkage.push({ type: scheme, value: avatar }); + + // The owner of this name + const owner = await this.getAddress(); + if (owner == null) { + linkage.push({ type: "!owner", value: "" }); + throw new Error("!owner"); + } + + const comps = (match[2] || "").split("/"); + if (comps.length !== 2) { + linkage.push({ type: `!${ scheme }caip`, value: (match[2] || "") }); + throw new Error("!caip"); + } + + const formatter = (await this.provider.getNetwork()).formatter; + + const addr = formatter.address(comps[0]); + const tokenId = numPad(comps[1]); + + // Check that this account owns the token + if (scheme === "erc721") { + // ownerOf(uint256 tokenId) + const tokenOwner = formatter.callAddress(await this.provider.call({ + to: addr, data: concat([ "0x6352211e", tokenId ]) + })); + if (owner !== tokenOwner) { + linkage.push({ type: "!owner", value: tokenOwner }); + throw new Error("!owner"); + } + linkage.push({ type: "owner", value: tokenOwner }); + + } else if (scheme === "erc1155") { + // balanceOf(address owner, uint256 tokenId) + const balance = logger.getBigInt(await this.provider.call({ + to: addr, data: concat([ "0x00fdd58e", zeroPadLeft(owner, 32), tokenId ]) + })); + if (!balance) { + linkage.push({ type: "!balance", value: "0" }); + throw new Error("!balance"); + } + linkage.push({ type: "balance", value: balance.toString() }); + } + + // Call the token contract for the metadata URL + const tx = { + to: comps[0], + data: concat([ selector, tokenId ]) + }; + + let metadataUrl = parseString(await this.provider.call(tx), 0); + if (metadataUrl == null) { + linkage.push({ type: "!metadata-url", value: "" }); + throw new Error("!metadata-url"); + } + + linkage.push({ type: "metadata-url-base", value: metadataUrl }); + + // ERC-1155 allows a generic {id} in the URL + if (scheme === "erc1155") { + metadataUrl = metadataUrl.replace("{id}", hexlify(tokenId).substring(2)); + linkage.push({ type: "metadata-url-expanded", value: metadataUrl }); + } + + // Transform IPFS metadata links + if (metadataUrl.match(/^ipfs:/i)) { + metadataUrl = getIpfsLink(metadataUrl); + } + linkage.push({ type: "metadata-url", value: metadataUrl }); + + // Get the token metadata + let metadata: any = { }; + const response = await fetchData(metadataUrl); + response.assertOk(); + + try { + metadata = response.bodyJson; + } catch (error) { + try { + linkage.push({ type: "!metadata", value: response.bodyText }); + } catch (error) { + const bytes = response.body; + if (bytes) { + linkage.push({ type: "!metadata", value: hexlify(bytes) }); + } + throw error; + } + throw error; + } + + if (!metadata) { + linkage.push({ type: "!metadata", value: "" }); + throw new Error("!metadata"); + } + + linkage.push({ type: "metadata", value: JSON.stringify(metadata) }); + + // Pull the image URL out + let imageUrl = metadata.image; + if (typeof(imageUrl) !== "string") { + linkage.push({ type: "!imageUrl", value: "" }); + throw new Error("!imageUrl"); + } + + if (imageUrl.match(/^(https:\/\/|data:)/i)) { + // Allow + } else { + // Transform IPFS link to gateway + const ipfs = imageUrl.match(matcherIpfs); + if (ipfs == null) { + linkage.push({ type: "!imageUrl-ipfs", value: imageUrl }); + throw new Error("!imageUrl-ipfs"); + } + + linkage.push({ type: "imageUrl-ipfs", value: imageUrl }); + imageUrl = getIpfsLink(imageUrl); + } + + linkage.push({ type: "url", value: imageUrl }); + + return { linkage, url: imageUrl }; + } + } + } + } catch (error) { console.log("EE", error); } + + return { linkage, url: null }; + } + + static async #getResolver(provider: Provider, name: string): Promise { + const network = await provider.getNetwork(); + + const ensPlugin = network.getPlugin("org.ethers.plugins.ens"); + + // No ENS... + if (!ensPlugin) { + return logger.throwError("network does not support ENS", "UNSUPPORTED_OPERATION", { + operation: "getResolver", info: { network: network.name } + }); + } + + try { + // keccak256("resolver(bytes32)") + const addrData = await provider.call({ + to: ensPlugin.address, + data: concat([ "0x0178b8bf", namehash(name) ]), + enableCcipRead: true + }); + + const addr = network.formatter.callAddress(addrData); + if (addr === dataSlice(HashZero, 0, 20)) { return null; } + return addr; + + } catch (error) { + // ENS registry cannot throw errors on resolver(bytes32), + // so probably a link error + throw error; + } + + return null; + } + + static async fromName(provider: AbstractProvider, name: string): Promise { + + let currentName = name; + while (true) { + if (currentName === "" || currentName === ".") { return null; } + + // Optimization since the eth node cannot change and does + // not have a wildcar resolver + if (name !== "eth" && currentName === "eth") { return null; } + + // Check the current node for a resolver + const addr = await EnsResolver.#getResolver(provider, currentName); + + // Found a resolver! + if (addr != null) { + const resolver = new EnsResolver(provider, addr, name); + + // Legacy resolver found, using EIP-2544 so it isn't safe to use + if (currentName !== name && !(await resolver.supportsWildcard())) { return null; } + + return resolver; + } + + // Get the parent node + currentName = currentName.split(".").slice(1).join("."); + } + } +} diff --git a/packages/providers/src.ts/formatter.ts b/packages/providers/src.ts/formatter.ts new file mode 100644 index 000000000..1473df826 --- /dev/null +++ b/packages/providers/src.ts/formatter.ts @@ -0,0 +1,447 @@ +// Belongs to Networks; requires abstract-provider +// provider requires abstract-provider and network + +/** + * Formatter + * + * This is responsibile for converting much of the various + * loose network values into a concrete ethers-ready value. + * + * For example, converting addresses to checksum addresses, + * validating a hash is 32 bytes, and so on. + * + * By sub-classing this class and providing it in a custom + * Network object this allows exotic (non-Ethereum) networks + * to be fairly simple to adapt to ethers. + */ + +import { getAddress, getCreateAddress } from "@ethersproject/address"; +import { dataLength, dataSlice, isHexString, quantity } from "@ethersproject/bytes"; +import { toHex } from "@ethersproject/math"; +import { Signature } from "@ethersproject/signing-key"; +import { accessListify } from "@ethersproject/transactions"; + +import { Block, Log, TransactionReceipt, TransactionResponse } from "./provider.js"; +import { logger } from "./logger.js"; + +import type { AccessList } from "@ethersproject/transactions"; + +import type { PerformActionTransaction } from "./abstract-provider.js"; +import type { Filter, Provider } from "./provider.js"; + + +const BN_MAX_UINT256 = BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); + +export type FormatFunc = (value: any) => any; + +//export type AccessListSet = { address: string, storageKeys: Array }; +//export type AccessList = Array; + +//export type AccessListish = AccessList | +// Array<[ string, Array ]> | +// Record>; + +function stringify(value: any): string { + if (typeof(value) !== "string") { throw new Error("invalid string"); } + return value; +} + +export class Formatter { + #format: { + address: FormatFunc, + bigNumber: FormatFunc, + blockTag: FormatFunc, + data: FormatFunc, + filter: FormatFunc, + hash: FormatFunc, + number: FormatFunc, + topics: FormatFunc, + transactionRequest: FormatFunc, + transactionResponse: FormatFunc, + uint256: FormatFunc, + }; + + #baseBlock: FormatFunc; + + constructor() { + const address = this.address.bind(this); + const bigNumber = this.bigNumber.bind(this); + const blockTag = this.blockTag.bind(this); + const data = this.data.bind(this); + const hash = this.hash.bind(this); + const number = this.number.bind(this); + const uint256 = this.uint256.bind(this); + + const topics = this.arrayOf(hash); + + this.#format = { + address, + bigNumber, + blockTag, + data, + hash, + number, + uint256, + + topics, + + filter: this.object({ + fromBlock: this.allowNull(blockTag, undefined), + toBlock: this.allowNull(blockTag, undefined), + blockHash: this.allowNull(hash, undefined), + address: this.allowNull(address, undefined), + topics: this.allowNull(topics, undefined) + }), + + transactionRequest: this.object({ + from: this.allowNull(address), + type: this.allowNull(number), + to: this.allowNull(address), + nonce: this.allowNull(number), + gasLimit: this.allowNull(uint256), + gasPrice: this.allowNull(uint256), + maxFeePerGas: this.allowNull(uint256), + maxPriorityFeePerGas: this.allowNull(uint256), + data: this.allowNull(data), + value: this.allowNull(uint256), + }), + + transactionResponse: this.object({ + hash: hash, + index: number, + + type: this.allowNull(number, 0), + + // These can be null for pending blocks + blockHash: this.allowNull(hash), + blockNumber: this.allowNull(number), + + // For Legacy transactions, this comes from the v + chainId: this.allowNull(number), + + from: address, + to: this.address, + + gasLimit: bigNumber, + + gasPrice: this.allowNull(bigNumber), + maxFeePerGas: this.allowNull(bigNumber), + maxPriorityFeePerGas: this.allowNull(bigNumber), + + value: bigNumber, + data: data, + nonce: number, + r: hash, + s: hash, + v: number, + accessList: this.allowNull(this.accessList) + }, { + index: [ "transactionIndex" ] + }), + }; + + this.#baseBlock = this.object({ + number: number, + hash: this.allowNull(hash, null), + timestamp: number, + + parentHash: hash, + + nonce: this.allowNull(stringify, "0x0000000000000000"), + difficulty: bigNumber, + + gasLimit: bigNumber, + gasUsed: bigNumber, + miner: this.allowNull(address, "0x0000000000000000000000000000000000000000"), + extraData: stringify, + + baseFeePerGas: this.allowNull(bigNumber), + }); + + } + + // An address + address(value: any): string { + return getAddress(value); + } + + // An address from a call result; may be zero-padded + callAddress(value: any): string { + if (dataLength(value) !== 32 || dataSlice(value, 0, 12) !== "0x000000000000000000000000") { + logger.throwArgumentError("invalid call address", "value", value); + } + return this.address(dataSlice(value, 12)); + } + + // An address from a transaction (e.g. { from: string, nonce: number }) + contractAddress(value: any): string { + return getCreateAddress({ + from: this.address(value.from), + nonce: logger.getNumber(value.nonce, "value.nonce") + }); + } + + // Block Tag + blockTag(value?: any): string { + if (value == null) { return "latest"; } + + switch (value) { + case "earliest": + return "0x0"; + case "latest": case "pending": + return value; + } + + if (typeof(value) === "number" || (isHexString(value) && dataLength(value) < 32)) { + return quantity(value); + } + + return logger.throwArgumentError("invalid blockTag", "value", value); + } + + // Block objects + block(value: any, provider?: Provider): Block { + const params = this.#baseBlock(value); + params.transactions = value.transactions.map((t: any) => this.hash(t)); + return new Block(params, provider); + } + blockWithTransactions(value: any, provider?: Provider): Block { + throw new Error(); + } + + // Transactions + transactionRequest(value: any, provider?: Provider): PerformActionTransaction { + return this.#format.transactionRequest(value); + } + + transactionResponse(value: any, provider?: Provider): TransactionResponse { + value = Object.assign({ }, value); + + // @TODO: Use the remap feature + if (value.data == null && value.input != null) { value.data = value.input; } + if (value.gasLimit == null && value.gas) { value.gasLimit = value.gas; } + + value = this.#format.transactionResponse(value); + + const sig = Signature.fromTransaction(value.r, value.s, value.v); + value.signature = sig; + if (value.chainId == null) { value.chainId = sig.legacyChainId; } + + return new TransactionResponse(value, provider); + } + + // Receipts + log(value: any, provider?: Provider): Log { + const log = this.object({ + address: this.address, + blockHash: this.hash, + blockNumber: this.number, + data: this.data, + index: this.number, + removed: this.boolean, + topics: this.topics, + transactionHash: this.hash, + transactionIndex: this.number, + }, { + index: [ "logIndex" ] + })(value); + return new Log(log, provider); + } + + receipt(value: any, provider?: Provider): TransactionReceipt { + const receipt = this.object({ + blockHash: this.hash, + blockNumber: this.number, + contractAddress: this.allowNull(this.address), + cumulativeGasUsed: this.bigNumber, + from: this.address, + gasUsed: this.bigNumber, + logs: this.arrayOf((v: any) => (this.log(v, provider))), + logsBloom: this.data, + root: this.allowNull(this.data), + status: this.allowNull(this.number), + to: this.address, + gasPrice: this.allowNull(this.bigNumber), + hash: this.hash, + index: this.number, + type: this.allowNull(this.number, 0), + }, { + hash: [ "transactionHash" ], + gasPrice: [ "effectiveGasPrice" ], + index: [ "transactionIndex" ] + })(value); + + // RSK incorrectly implemented EIP-658, so we munge things a bit here for it + if (receipt.root != null) { + if (receipt.root.length <= 4) { + // Could be 0x00, 0x0, 0x01 or 0x1 + const value = parseInt(receipt.root); + if (value === 0 || value === 1) { + // Make sure if both are specified, they match + if (receipt.status != null && receipt.status !== value) { + return logger.throwError("alt-root-status/status mismatch", "BAD_DATA", { + value: { root: receipt.root, status: receipt.status } + }); + } + receipt.status = value; + delete receipt.root; + } else { + return logger.throwError("invalid alt-root-status", "BAD_DATA", { + value: receipt.root + }); + } + } else if (!isHexString(receipt.root, 32)) { + // Must be a valid bytes32 + return logger.throwError("invalid receipt root hash", "BAD_DATA", { + value: receipt.root + }); + } + } + + //receipt.byzantium = (receipt.root == null); + + return new TransactionReceipt(receipt, provider); + } + + // Fitlers + topics(value: any): Array { + return this.#format.topics(value); + } + + filter(value: any): Filter { + return this.#format.filter(value); + } + + filterLog(value: any): any { + console.log("ME", value); + return null; + } + + // Converts a serialized transaction to a TransactionResponse + transaction(value: any): TransactionResponse { + throw new Error(); + } + + // Useful utility formatters functions, which if need be use the + // methods within the formatter to ensure internal compatibility + + // Access List; converts an AccessListish to an AccessList + accessList(value: any): AccessList { + return accessListify(value); + } + + // Converts falsish values to a specific value, otherwise use the formatter. Calls preserve `this`. + allowFalsish(format: FormatFunc, ifFalse: any): FormatFunc { + return ((value: any) => { + if (!value) { return ifFalse; } + return format.call(this, value); + }); + } + + // Allows null, optionally replacing it with a default value. Calls preserve `this`. + allowNull(format: FormatFunc, ifNull?: any): FormatFunc { + return ((value: any) => { + if (value == null) { return ifNull; } + return format.call(this, value); + }); + } + + // Requires an Array satisfying the formatter. Calls preserves `this`. + arrayOf(format: FormatFunc): FormatFunc { + return ((array: any) => { + if (!Array.isArray(array)) { throw new Error("not an array"); } + return array.map((i) => format.call(this, i)); + }); + } + + // Requires a value which is a value BigNumber + bigNumber(value: any): bigint { + return logger.getBigInt(value, "value"); + } + + uint256(value: any): bigint { + const result = this.bigNumber(value); + if (result < 0 || result > BN_MAX_UINT256) { + logger.throwArgumentError("invalid uint256", "value", value); + } + return result; + } + + // Requires a value which is a value boolean or string equivalent + boolean(value: any): boolean { + switch (value) { + case true: case "true": + return true; + case false: case "false": + return false; + } + return logger.throwArgumentError(`invalid boolean; ${ JSON.stringify(value) }`, "value", value); + } + + // Requires a value which is a valid hexstring. If dataOrLength is true, + // the length must be even (i.e. a datahexstring) or if it is a number, + // specifies teh number of bytes value must represent + _hexstring(dataOrLength?: boolean | number): FormatFunc { + if (dataOrLength == null) { dataOrLength = false; } + return (function(value: any) { + if (isHexString(value, dataOrLength)) { + return value.toLowerCase(); + } + throw new Error("bad hexstring"); + }); + } + + data(value: string): string { + if (dataLength(value) == null) { + logger.throwArgumentError("", "value", value); + } + return value; + } + + // Requires a network-native hash + hash(value: any): string { + if (dataLength(value) !== 32) { + logger.throwArgumentError("", "value", value); + } + return this.#format.data(value); + } + + // Requires a valid number, within the IEEE 754 safe range + number(value: any): number { + return logger.getNumber(value); + } + + // Requires an object which matches a fleet of other formatters + // Any FormatFunc may return `undefined` to have the value omitted + // from the result object. Calls preserve `this`. + object(format: Record, altNames?: Record>): FormatFunc { + return ((value: any) => { + const result: any = { }; + for (const key in format) { + let srcKey = key; + if (altNames && key in altNames && !(srcKey in value)) { + for (const altKey of altNames[key]) { + if (altKey in value) { + srcKey = altKey; + break; + } + } + } + + try { + const nv = format[key].call(this, value[srcKey]); + if (nv !== undefined) { result[key] = nv; } + } catch (error) { + const message = (error instanceof Error) ? error.message: "not-an-error"; + logger.throwError(`invalid value for value.${ key } (${ message })`, "BAD_DATA", { value }) + } + } + return result; + }); + } + + // Requires a value which matches a network-native storage slot + storageSlot(value: any): string { + return toHex(logger.getBigInt(value), 32); + } +} diff --git a/packages/providers/src.ts/index.ts b/packages/providers/src.ts/index.ts new file mode 100644 index 000000000..bab210850 --- /dev/null +++ b/packages/providers/src.ts/index.ts @@ -0,0 +1,87 @@ +export { + AbstractProvider, UnmanagedSubscriber +} from "./abstract-provider.js"; + +export { + AbstractSigner, + VoidSigner, + WrappedSigner +} from "./abstract-signer.js"; + +export { + showThrottleMessage +} from "./community.js"; + +export { getDefaultProvider } from "./default-provider.js"; + +export { EnsResolver } from "./ens-resolver.js"; + +export { Formatter } from "./formatter.js"; + +export { Network } from "./common-networks.js"; + +export { + NetworkPlugin, + GasCostPlugin, + EnsPlugin, + //LayerOneConnectionPlugin, + MaxPriorityFeePlugin, + //PriceOraclePlugin, +} from "./plugins-network.js"; + +export { + Block, + FeeData, + Log, + TransactionReceipt, + TransactionResponse, + + dummyProvider, + + copyRequest, + //resolveTransactionRequest, +} from "./provider.js"; + +export { FallbackProvider } from "./provider-fallback.js"; +export { JsonRpcProvider, JsonRpcSigner, StaticJsonRpcProvider } from "./provider-jsonrpc.js" + +export { AlchemyProvider } from "./provider-alchemy.js"; +export { AnkrProvider } from "./provider-ankr.js"; +export { CloudflareProvider } from "./provider-cloudflare.js"; +export { EtherscanProvider } from "./provider-etherscan.js"; +export { InfuraProvider } from "./provider-infura.js"; +export { PocketProvider } from "./provider-pocket.js"; + +import { IpcSocketProvider } from "./provider-ipcsocket.js"; /*-browser*/ +export { IpcSocketProvider }; +export { SocketProvider } from "./provider-socket.js"; +export { WebSocketProvider } from "./provider-websocket.js"; + + + +export type { + ProviderPlugin, Subscriber, Subscription +} from "./abstract-provider.js" + +export type { + CommunityResourcable +} from "./community.js"; + +export type { + AvatarLinkageType, AvatarLinkage, AvatarResult +} from "./ens-resolver.js"; + +export type { FormatFunc } from "./formatter.js"; + +export type { Networkish } from "./network.js"; + +export type { GasCostParameters } from "./plugins-network.js"; + +export type { + BlockTag, + CallRequest, TransactionRequest, PreparedRequest, + EventFilter, Filter, FilterByBlockHash, OrphanFilter, ProviderEvent, TopicFilter, + Provider, +} from "./provider.js"; + +export type { Signer } from "./signer.js"; diff --git a/packages/providers/src.ts/logger.ts b/packages/providers/src.ts/logger.ts new file mode 100644 index 000000000..cdf258d2c --- /dev/null +++ b/packages/providers/src.ts/logger.ts @@ -0,0 +1,4 @@ +import { Logger } from "@ethersproject/logger"; + +import { version } from "./_version.js"; +export const logger = new Logger(version); diff --git a/packages/providers/src.ts/network.ts b/packages/providers/src.ts/network.ts new file mode 100644 index 000000000..3ffcc533f --- /dev/null +++ b/packages/providers/src.ts/network.ts @@ -0,0 +1,230 @@ +import { getStore, setStore } from "@ethersproject/properties"; + +import { Formatter } from "./formatter.js"; +import { logger } from "./logger.js"; +import { EnsPlugin, GasCostPlugin } from "./plugins-network.js"; + +import type { BigNumberish } from "@ethersproject/logger"; +import type { Freezable, Frozen } from "@ethersproject/properties"; +import type { TransactionLike } from "@ethersproject/transactions"; + +import type { NetworkPlugin } from "./plugins-network.js"; + + +export type Networkish = Network | number | bigint | string | { + name?: string, + chainId?: number, + //layerOneConnection?: Provider, + ensAddress?: string, + ensNetwork?: number +}; + + + + +/* * * * +// Networks which operation against an L2 can use this plugin to +// specify how to access L1, for the purpose of resolving ENS, +// for example. +export class LayerOneConnectionPlugin extends NetworkPlugin { + readonly provider!: Provider; +// @TODO: Rename to ChainAccess and allow for connecting to any chain + constructor(provider: Provider) { + super("org.ethers.plugins.layer-one-connection"); + defineProperties(this, { provider }); + } + + clone(): LayerOneConnectionPlugin { + return new LayerOneConnectionPlugin(this.provider); + } +} +*/ + +/* * * * +export class PriceOraclePlugin extends NetworkPlugin { + readonly address!: string; + + constructor(address: string) { + super("org.ethers.plugins.price-oracle"); + defineProperties(this, { address }); + } + + clone(): PriceOraclePlugin { + return new PriceOraclePlugin(this.address); + } +} +*/ + +// Networks or clients with a higher need for security (such as clients +// that may automatically make CCIP requests without user interaction) +// can use this plugin to anonymize requests or intercept CCIP requests +// to notify and/or receive authorization from the user +/* * * * +export type FetchDataFunc = (req: Frozen) => Promise; +export class CcipPreflightPlugin extends NetworkPlugin { + readonly fetchData!: FetchDataFunc; + + constructor(fetchData: FetchDataFunc) { + super("org.ethers.plugins.ccip-preflight"); + defineProperties(this, { fetchData }); + } + + clone(): CcipPreflightPlugin { + return new CcipPreflightPlugin(this.fetchData); + } +} +*/ + +const Networks: Map Network> = new Map(); + +const defaultFormatter = new Formatter(); + +export class Network implements Freezable { + #props: { + name: string, + chainId: bigint, + + formatter: Formatter, + + plugins: Map + }; + + constructor(name: string, _chainId: BigNumberish, formatter?: Formatter) { + const chainId = logger.getBigInt(_chainId); + if (formatter == null) { formatter = defaultFormatter; } + const plugins = new Map(); + this.#props = { name, chainId, formatter, plugins }; + } + + toJSON(): any { + return { name: this.name, chainId: this.chainId }; + } + + get name(): string { return getStore(this.#props, "name"); } + set name(value: string) { setStore(this.#props, "name", value); } + + get chainId(): bigint { return getStore(this.#props, "chainId"); } + set chainId(value: BigNumberish) { setStore(this.#props, "chainId", logger.getBigInt(value, "chainId")); } + + get formatter(): Formatter { return getStore(this.#props, "formatter"); } + set formatter(value: Formatter) { setStore(this.#props, "formatter", value); } + + get plugins(): Array { + return Array.from(this.#props.plugins.values()); + } + + attachPlugin(plugin: NetworkPlugin): this { + if (this.isFrozen()) { throw new Error("frozen"); } + if (this.#props.plugins.get(plugin.name)) { + throw new Error(`cannot replace existing plugin: ${ plugin.name } `); + } + this.#props.plugins.set(plugin.name, plugin.validate(this)); + return this; + } + + getPlugin(name: string): null | T { + return (this.#props.plugins.get(name)) || null; + } + + // Gets a list of Plugins which match basename, ignoring any fragment + getPlugins(basename: string): Array { + return >(this.plugins.filter((p) => (p.name.split("#")[0] === basename))); + } + + clone(): Network { + const clone = new Network(this.name, this.chainId, this.formatter); + this.plugins.forEach((plugin) => { + clone.attachPlugin(plugin.clone()); + }); + return clone; + } + + freeze(): Frozen { + Object.freeze(this.#props); + return this; + } + + isFrozen(): boolean { + return Object.isFrozen(this.#props); + } + + computeIntrinsicGas(tx: TransactionLike): number { + const costs = this.getPlugin("org.ethers.gas-cost") || (new GasCostPlugin()); + + let gas = costs.txBase; + if (tx.to == null) { gas += costs.txCreate; } + if (tx.data) { + for (let i = 2; i < tx.data.length; i += 2) { + if (tx.data.substring(i, i + 2) === "00") { + gas += costs.txDataZero; + } else { + gas += costs.txDataNonzero; + } + } + } + + if (tx.accessList) { + const accessList = this.formatter.accessList(tx.accessList); + for (const addr in accessList) { + gas += costs.txAccessListAddress + costs.txAccessListStorageKey * accessList[addr].storageKeys.length; + } + } + + return gas; + } + + static from(network?: Networkish): Network { + // Default network + if (network == null) { return Network.from("homestead"); } + + // Canonical name or chain ID + if (typeof(network) === "number") { network = BigInt(network); } + if (typeof(network) === "string" || typeof(network) === "bigint") { + const networkFunc = Networks.get(network); + if (networkFunc) { return networkFunc(); } + if (typeof(network) === "bigint") { + return new Network("unknown", network); + } + + logger.throwArgumentError("unknown network", "network", network); + } + + // Clonable with network-like abilities + if (typeof((network).clone) === "function") { + const clone = (network).clone(); + //if (typeof(network.name) !== "string" || typeof(network.chainId) !== "number") { + //} + return clone; + } + + // Networkish + if (typeof(network) === "object") { + if (typeof(network.name) !== "string" || typeof(network.chainId) !== "number") { + logger.throwArgumentError("invalid network object name or chainId", "network", network); + } + + const custom = new Network((network.name), (network.chainId)); + + if ((network).ensAddress || (network).ensNetwork != null) { + custom.attachPlugin(new EnsPlugin((network).ensAddress, (network).ensNetwork)); + } + + //if ((network).layerOneConnection) { + // custom.attachPlugin(new LayerOneConnectionPlugin((network).layerOneConnection)); + //} + + return custom; + } + + return logger.throwArgumentError("invalid network", "network", network); + } + + static register(nameOrChainId: string | number | bigint, networkFunc: () => Network): void { + if (typeof(nameOrChainId) === "number") { nameOrChainId = BigInt(nameOrChainId); } + const existing = Networks.get(nameOrChainId); + if (existing) { + logger.throwArgumentError(`conflicting network for ${ JSON.stringify(existing.name) }`, "nameOrChainId", nameOrChainId); + } + Networks.set(nameOrChainId, networkFunc); + } +} diff --git a/packages/providers/src.ts/pagination.ts b/packages/providers/src.ts/pagination.ts new file mode 100644 index 000000000..022688c03 --- /dev/null +++ b/packages/providers/src.ts/pagination.ts @@ -0,0 +1,8 @@ +export interface PaginationResult extends Array { + next(): Promise>; + + // The total number of results available or null if unknown + totalResults: null | number; + + done: boolean; +} diff --git a/packages/providers/src.ts/plugins-network.ts b/packages/providers/src.ts/plugins-network.ts new file mode 100644 index 000000000..ecc63093c --- /dev/null +++ b/packages/providers/src.ts/plugins-network.ts @@ -0,0 +1,124 @@ +import { defineProperties } from "@ethersproject/properties"; + +import { logger } from "./logger.js"; + +import { BigNumberish } from "@ethersproject/logger"; + +import type { Network } from "./network.js"; +import type { Provider } from "./provider.js"; + + +const EnsAddress = "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"; + +export class NetworkPlugin { + readonly name!: string; + + constructor(name: string) { + defineProperties(this, { name }); + } + + clone(): NetworkPlugin { + return new NetworkPlugin(this.name); + } + + validate(network: Network): NetworkPlugin { + return this; + } +} + +// Networks can use this plugin to override calculations for the +// intrinsic gas cost of a transaction for networks that differ +// from the latest hardfork on Ethereum mainnet. +export type GasCostParameters = { + txBase?: number; + txCreate?: number; + txDataZero?: number; + txDataNonzero?: number; + txAccessListStorageKey?: number; + txAccessListAddress?: number; +}; + +export class GasCostPlugin extends NetworkPlugin { + readonly effectiveBlock!: number; + + readonly txBase!: number; + readonly txCreate!: number; + readonly txDataZero!: number; + readonly txDataNonzero!: number; + readonly txAccessListStorageKey!: number; + readonly txAccessListAddress!: number; + + constructor(effectiveBlock: number = 0, costs?: GasCostParameters) { + super(`org.ethers.plugins.gas-cost#${ (effectiveBlock || 0) }`); + + const props: Record = { effectiveBlock }; + function set(name: keyof GasCostParameters, nullish: number): void { + let value = (costs || { })[name]; + if (value == null) { value = nullish; } + if (typeof(value) !== "number") { + logger.throwArgumentError(`invalud value for ${ name }`, "costs", costs); + } + props[name] = value; + } + + set("txBase", 21000); + set("txCreate", 32000); + set("txDataZero", 4); + set("txDataNonzero", 16); + set("txAccessListStorageKey", 1900); + set("txAccessListAddress", 2400); + + defineProperties(this, props); + } + + clone(): GasCostPlugin { + return new GasCostPlugin(this.effectiveBlock, this); + } +} + +// Networks shoudl use this plugin to specify the contract address +// and network necessary to resolve ENS names. +export class EnsPlugin extends NetworkPlugin { + + // The ENS contract address + readonly address!: string; + + // The network ID that the ENS contract lives on + readonly targetNetwork!: number; + + constructor(address?: null | string, targetNetwork?: null | number) { + super("org.ethers.plugins.ens"); + defineProperties(this, { + address: (address || EnsAddress), + targetNetwork: ((targetNetwork == null) ? 1: targetNetwork) + }); + } + + clone(): EnsPlugin { + return new EnsPlugin(this.address, this.targetNetwork); + } + + validate(network: Network): this { + network.formatter.address(this.address); + return this; + } +} + +export class MaxPriorityFeePlugin extends NetworkPlugin { + readonly priorityFee!: bigint; + + constructor(priorityFee: BigNumberish) { + super("org.ethers.plugins.max-priority-fee"); + defineProperties(this, { + priorityFee: logger.getBigInt(priorityFee) + }); + } + + async getPriorityFee(provider: Provider): Promise { + return this.priorityFee; + } + + clone(): MaxPriorityFeePlugin { + return new MaxPriorityFeePlugin(this.priorityFee); + } +} diff --git a/packages/providers/src.ts/provider-alchemy.ts b/packages/providers/src.ts/provider-alchemy.ts new file mode 100644 index 000000000..225e82478 --- /dev/null +++ b/packages/providers/src.ts/provider-alchemy.ts @@ -0,0 +1,82 @@ + +import { defineProperties } from "@ethersproject/properties"; +import { FetchRequest } from "@ethersproject/web"; + +import { showThrottleMessage } from "./community.js"; +import { logger } from "./logger.js"; +import { Network } from "./network.js"; +import { StaticJsonRpcProvider } from "./provider-jsonrpc.js"; + +import type { ConnectionInfo, ThrottleRetryFunc } from "@ethersproject/web"; + +import type { AbstractProvider } from "./abstract-provider.js"; +import type { CommunityResourcable } from "./community.js"; +import type { Networkish } from "./network.js"; + + +const defaultApiKey = "_gg7wSSi0KMBsdKnGVfHDueq6xMB9EkC" + +function getHost(name: string): string { + switch(name) { + case "homestead": + return "eth-mainnet.alchemyapi.io"; + case "ropsten": + return "eth-ropsten.alchemyapi.io"; + case "rinkeby": + return "eth-rinkeby.alchemyapi.io"; + case "goerli": + return "eth-goerli.alchemyapi.io"; + case "kovan": + return "eth-kovan.alchemyapi.io"; + case "matic": + return "polygon-mainnet.g.alchemy.com"; + case "maticmum": + return "polygon-mumbai.g.alchemy.com"; + case "arbitrum": + return "arb-mainnet.g.alchemy.com"; + case "arbitrum-rinkeby": + return "arb-rinkeby.g.alchemy.com"; + case "optimism": + return "opt-mainnet.g.alchemy.com"; + case "optimism-kovan": + return "opt-kovan.g.alchemy.com"; + } + + return logger.throwArgumentError("unsupported network", "network", name); +} + +export class AlchemyProvider extends StaticJsonRpcProvider implements CommunityResourcable { + readonly apiKey!: string; + + constructor(_network: Networkish = "homestead", apiKey?: null | string) { + const network = Network.from(_network); + if (apiKey == null) { apiKey = defaultApiKey; } + super(AlchemyProvider.getConnection(network, apiKey), network); + defineProperties(this, { apiKey }); + } + + _getProvider(chainId: number): AbstractProvider { + try { + return new AlchemyProvider(chainId, this.apiKey); + } catch (error) { } + return super._getProvider(chainId); + } + + isCommunityResource(): boolean { + return (this.apiKey === defaultApiKey); + } + + static getConnection(network: Network, apiKey?: string): ConnectionInfo { + if (apiKey == null) { apiKey = defaultApiKey; } + + const request = new FetchRequest(`https:/\/${ getHost(network.name) }/v2/${ apiKey }`); + request.allowGzip = true; + + const throttleRetry: ThrottleRetryFunc = async (request, response, attempt) => { + if (apiKey === defaultApiKey) { showThrottleMessage("alchemy"); } + return true; + } + + return { request, throttleRetry }; + } +} diff --git a/packages/providers/src.ts/provider-ankr.ts b/packages/providers/src.ts/provider-ankr.ts new file mode 100644 index 000000000..362b722de --- /dev/null +++ b/packages/providers/src.ts/provider-ankr.ts @@ -0,0 +1,71 @@ +import { defineProperties } from "@ethersproject/properties"; +import { FetchRequest } from "@ethersproject/web"; + +import { AbstractProvider } from "./abstract-provider.js"; +import { showThrottleMessage } from "./community.js"; +import { logger } from "./logger.js"; +import { Network } from "./network.js"; +import { StaticJsonRpcProvider } from "./provider-jsonrpc.js"; + +import type { ConnectionInfo, ThrottleRetryFunc } from "@ethersproject/web"; + +import type { CommunityResourcable } from "./community.js"; +import type { Networkish } from "./network.js"; + + +const defaultApiKey = "9f7d929b018cdffb338517efa06f58359e86ff1ffd350bc889738523659e7972"; + +function getHost(name: string): string { + switch (name) { + case "homestead": + return "rpc.ankr.com/eth"; + case "matic": + return "rpc.ankr.com/polygon"; + case "arbitrum": + return "rpc.ankr.com/arbitrum"; + } + return logger.throwArgumentError("unsupported network", "network", name); +} + + +export class AnkrProvider extends StaticJsonRpcProvider implements CommunityResourcable { + readonly apiKey!: string; + + constructor(_network: Networkish = "homestead", apiKey?: null | string) { + const network = Network.from(_network); + if (apiKey == null) { apiKey = defaultApiKey; } + + const connection = AnkrProvider.getConnection(network, apiKey); + super(connection, network); + + defineProperties(this, { apiKey }); + + // Ankr does not support filterId, so we force polling + super._setOptions({ polling: true }); + } + + _getProvider(chainId: number): AbstractProvider { + try { + return new AnkrProvider(chainId, this.apiKey); + } catch (error) { } + return super._getProvider(chainId); + } + + static getConnection(network: Network, apiKey?: null | string): ConnectionInfo { + if (apiKey == null) { apiKey = defaultApiKey; } + + const request = new FetchRequest(`https:/\/${ getHost(network.name) }/${ apiKey }`); + request.allowGzip = true; + + const throttleRetry: ThrottleRetryFunc = async (request, response, attempt) => { + if (apiKey === defaultApiKey) { showThrottleMessage("AnkrProvider"); } + return true; + }; + + return { request, throttleRetry }; + } + + isCommunityResource(): boolean { + return (this.apiKey === defaultApiKey); + } +} diff --git a/packages/providers/src.ts/provider-cloudflare.ts b/packages/providers/src.ts/provider-cloudflare.ts new file mode 100644 index 000000000..56a5b2465 --- /dev/null +++ b/packages/providers/src.ts/provider-cloudflare.ts @@ -0,0 +1,17 @@ + +import { logger } from "./logger.js"; +import { Network } from "./network.js"; +import { StaticJsonRpcProvider } from "./provider-jsonrpc.js"; + +import type { Networkish } from "./network.js"; + + +export class CloudflareProvider extends StaticJsonRpcProvider { + constructor(_network: Networkish = "homestead") { + const network = Network.from(_network); + if (network.name !== "homestead") { + return logger.throwArgumentError("unsupported network", "network", _network); + } + super("https:/\/cloudflare-eth.com/", network); + } +} diff --git a/packages/providers/src.ts/provider-etherscan.ts b/packages/providers/src.ts/provider-etherscan.ts new file mode 100644 index 000000000..24794a5d8 --- /dev/null +++ b/packages/providers/src.ts/provider-etherscan.ts @@ -0,0 +1,511 @@ +import { hexlify, isHexString, quantity } from "@ethersproject/bytes"; +import { isError } from "@ethersproject/logger"; +import { defineProperties } from "@ethersproject/properties"; +import { toUtf8String } from "@ethersproject/strings"; +import { fetchData, FetchRequest } from "@ethersproject/web"; + +if (false) { console.log(isHexString, isError); } // @TODO + +import { AbstractProvider } from "./abstract-provider.js"; +import { Network } from "./network.js"; +import { NetworkPlugin } from "./plugins-network.js"; + +import type { ConnectionInfo } from "@ethersproject/web"; + +import { PerformActionRequest } from "./abstract-provider.js"; +import type { Networkish } from "./network.js"; +//import type { } from "./pagination"; +import type { TransactionRequest } from "./provider"; + +import { logger } from "./logger.js"; + + +const defaultApiKey = "9D13ZE7XSBTJ94N9BNJ2MA33VMAY2YPIRB"; + + + +const EtherscanPluginId = "org.ethers.plugins.etherscan"; +export class EtherscanPlugin extends NetworkPlugin { + readonly baseUrl!: string; + readonly communityApiKey!: string; + + constructor(baseUrl: string, communityApiKey: string) { + super(EtherscanPluginId); + //if (communityApiKey == null) { communityApiKey = null; } + defineProperties(this, { baseUrl, communityApiKey }); + } + + clone(): EtherscanPlugin { + return new EtherscanPlugin(this.baseUrl, this.communityApiKey); + } +} + + +export class EtherscanProvider extends AbstractProvider { + readonly network!: Network; + readonly apiKey!: string; + + constructor(_network?: Networkish, apiKey?: string) { + super(); + + const network = Network.from(_network); + if (apiKey == null) { + const plugin = network.getPlugin(EtherscanPluginId); + if (plugin) { + apiKey = plugin.communityApiKey; + } else { + apiKey = defaultApiKey; + } + } + + defineProperties(this, { apiKey, network }); + + // Test that the network is supported by Etherscan + this.getBaseUrl(); + } + + getBaseUrl(): string { + const plugin = this.network.getPlugin(EtherscanPluginId); + if (plugin) { return plugin.baseUrl; } + + switch(this.network.name) { + case "homestead": + return "https:/\/api.etherscan.io"; + case "ropsten": + return "https:/\/api-ropsten.etherscan.io"; + case "rinkeby": + return "https:/\/api-rinkeby.etherscan.io"; + case "kovan": + return "https:/\/api-kovan.etherscan.io"; + case "goerli": + return "https:/\/api-goerli.etherscan.io"; + default: + } + + return logger.throwArgumentError("unsupported network", "network", this.network); + } + + getUrl(module: string, params: Record): string { + const query = Object.keys(params).reduce((accum, key) => { + const value = params[key]; + if (value != null) { + accum += `&${ key }=${ value }` + } + return accum + }, ""); + const apiKey = ((this.apiKey) ? `&apikey=${ this.apiKey }`: ""); + return `${ this.getBaseUrl() }/api?module=${ module }${ query }${ apiKey }`; + } + + getPostUrl(): string { + return `${ this.getBaseUrl() }/api`; + } + + getPostData(module: string, params: Record): Record { + params.module = module; + params.apikey = this.apiKey; + return params; + } + + async detectNetwork(): Promise { + return this.network; + } + + async fetch(module: string, params: Record, post?: boolean): Promise { + const url = (post ? this.getPostUrl(): this.getUrl(module, params)); + const payload = (post ? this.getPostData(module, params): null); + + /* + this.emit("debug", { + action: "request", + request: url, + provider: this + }); + */ + const request = new FetchRequest(url); + + const connection: ConnectionInfo = { + request, + throttleSlotInterval: 1000, + processResponse: async (request, response) => { + const result = response.hasBody() ? JSON.parse(toUtf8String(response.body)): { }; + const throttle = ((typeof(result.result) === "string") ? result.result: "").toLowerCase().indexOf("rate limit") >= 0; + if (module === "proxy") { + // This JSON response indicates we are being throttled + if (result && result.status == 0 && result.message == "NOTOK" && throttle) { + response.throwThrottleError(result.result); + } + } else { + if (throttle) { + response.throwThrottleError(result.result); + } + } + return response; + }, + }; + + if (payload) { + request.setHeader("content-type", "application/x-www-form-urlencoded; charset=UTF-8"); + request.body = Object.keys(payload).map((k) => `${ k }=${ payload[k] }`).join("&"); + } + + const response = await fetchData(connection); + response.assertOk(); + + if (!response.hasBody()) { + throw new Error(); + } + + /* + this.emit("debug", { + action: "response", + request: url, + response: deepCopy(result), + provider: this + }); + */ + + const result = JSON.parse(toUtf8String(response.body)); + + if (module === "proxy") { + if (result.jsonrpc != "2.0") { + // @TODO: not any + const error: any = new Error("invalid response"); + error.result = JSON.stringify(result); + throw error; + } + + if (result.error) { + // @TODO: not any + const error: any = new Error(result.error.message || "unknown error"); + if (result.error.code) { error.code = result.error.code; } + if (result.error.data) { error.data = result.error.data; } + throw error; + } + + return result.result; + + } else { + // getLogs, getHistory have weird success responses + if (result.status == 0 && (result.message === "No records found" || result.message === "No transactions found")) { + return result.result; + } + + if (result.status != 1 || result.message != "OK") { + const error: any = new Error("invalid response"); + error.result = JSON.stringify(result); + // if ((result.result || "").toLowerCase().indexOf("rate limit") >= 0) { + // error.throttleRetry = true; + // } + throw error; + } + + return result.result; + } + } + + // The transaction has already been sanitized by the calls in Provider + _getTransactionPostData(transaction: TransactionRequest): Record { + const result: Record = { }; + for (let key in transaction) { + if ((transaction)[key] == null) { continue; } + let value = (transaction)[key]; + if (key === "type" && value === 0) { continue; } + + // Quantity-types require no leading zero, unless 0 + if (({ type: true, gasLimit: true, gasPrice: true, maxFeePerGs: true, maxPriorityFeePerGas: true, nonce: true, value: true })[key]) { + value = quantity(hexlify(value)); + } else if (key === "accessList") { + value = "[" + this.network.formatter.accessList(value).map((set) => { + return `{address:"${ set.address }",storageKeys:["${ set.storageKeys.join('","') }"]}`; + }).join(",") + "]"; + } else { + value = hexlify(value); + } + result[key] = value; + } + return result; + } + + + _checkError(req: PerformActionRequest, error: Error, transaction: any): never { + /* + let body = ""; + if (isError(error, Logger.Errors.SERVER_ERROR) && error.response && error.response.hasBody()) { + body = toUtf8String(error.response.body); + } + console.log(body); + + // Undo the "convenience" some nodes are attempting to prevent backwards + // incompatibility; maybe for v6 consider forwarding reverts as errors + if (method === "call" && body) { + + // Etherscan keeps changing their string + if (body.match(/reverted/i) || body.match(/VM execution error/i)) { + + // Etherscan prefixes the data like "Reverted 0x1234" + let data = e.data; + if (data) { data = "0x" + data.replace(/^.*0x/i, ""); } + if (!isHexString(data)) { data = "0x"; } + + logger.throwError("call exception", Logger.Errors.CALL_EXCEPTION, { + error, data + }); + } + } + + // Get the message from any nested error structure + let message = error.message; + if (isError(error, Logger.Errors.SERVER_ERROR)) { + if (error.error && typeof(error.error.message) === "string") { + message = error.error.message; + } else if (typeof(error.body) === "string") { + message = error.body; + } else if (typeof(error.responseText) === "string") { + message = error.responseText; + } + } + message = (message || "").toLowerCase(); + + // "Insufficient funds. The account you tried to send transaction from + // does not have enough funds. Required 21464000000000 and got: 0" + if (message.match(/insufficient funds/)) { + logger.throwError("insufficient funds for intrinsic transaction cost", Logger.Errors.INSUFFICIENT_FUNDS, { + error, transaction, info: { method } + }); + } + + // "Transaction with the same hash was already imported." + if (message.match(/same hash was already imported|transaction nonce is too low|nonce too low/)) { + logger.throwError("nonce has already been used", Logger.Errors.NONCE_EXPIRED, { + error, transaction, info: { method } + }); + } + + // "Transaction gas price is too low. There is another transaction with + // same nonce in the queue. Try increasing the gas price or incrementing the nonce." + if (message.match(/another transaction with same nonce/)) { + logger.throwError("replacement fee too low", Logger.Errors.REPLACEMENT_UNDERPRICED, { + error, transaction, info: { method } + }); + } + + if (message.match(/execution failed due to an exception|execution reverted/)) { + logger.throwError("cannot estimate gas; transaction may fail or may require manual gas limit", Logger.Errors.UNPREDICTABLE_GAS_LIMIT, { + error, transaction, info: { method } + }); + } +*/ + throw error; + } + + async _detectNetwork(): Promise { + return this.network; + } + + async _perform(req: PerformActionRequest): Promise { + switch (req.method) { + case "chainId": + return this.network.chainId; + + case "getBlockNumber": + return this.fetch("proxy", { action: "eth_blockNumber" }); + + case "getGasPrice": + return this.fetch("proxy", { action: "eth_gasPrice" }); + + case "getBalance": + // Returns base-10 result + return this.fetch("account", { + action: "balance", + address: req.address, + tag: req.blockTag + }); + + case "getTransactionCount": + return this.fetch("proxy", { + action: "eth_getTransactionCount", + address: req.address, + tag: req.blockTag + }); + + case "getCode": + return this.fetch("proxy", { + action: "eth_getCode", + address: req.address, + tag: req.blockTag + }); + + case "getStorageAt": + return this.fetch("proxy", { + action: "eth_getStorageAt", + address: req.address, + position: req.position, + tag: req.blockTag + }); + + case "sendTransaction": + return this.fetch("proxy", { + action: "eth_sendRawTransaction", + hex: req.signedTransaction + }, true).catch((error) => { + return this._checkError(req, error, req.signedTransaction); + }); + + case "getBlock": + if ("blockTag" in req) { + return this.fetch("proxy", { + action: "eth_getBlockByNumber", + tag: req.blockTag, + boolean: (req.includeTransactions ? "true": "false") + }); + } + + return logger.throwError("getBlock by blockHash not supported by Etherscan", "UNSUPPORTED_OPERATION", { + operation: "getBlock(blockHash)" + }); + + case "getTransaction": + return this.fetch("proxy", { + action: "eth_getTransactionByHash", + txhash: req.hash + }); + + case "getTransactionReceipt": + return this.fetch("proxy", { + action: "eth_getTransactionReceipt", + txhash: req.hash + }); + + case "call": { + if (req.blockTag !== "latest") { + throw new Error("EtherscanProvider does not support blockTag for call"); + } + + const postData = this._getTransactionPostData(req.transaction); + postData.module = "proxy"; + postData.action = "eth_call"; + + try { + return await this.fetch("proxy", postData, true); + } catch (error) { + return this._checkError(req, error, req.transaction); + } + } + + case "estimateGas": { + const postData = this._getTransactionPostData(req.transaction); + postData.module = "proxy"; + postData.action = "eth_estimateGas"; + + try { + return await this.fetch("proxy", postData, true); + } catch (error) { + return this._checkError(req, error, req.transaction); + } + } +/* + case "getLogs": { + // Needs to complain if more than one address is passed in + const args: Record = { action: "getLogs" } + + if (params.filter.fromBlock) { + args.fromBlock = checkLogTag(params.filter.fromBlock); + } + + if (params.filter.toBlock) { + args.toBlock = checkLogTag(params.filter.toBlock); + } + + if (params.filter.address) { + args.address = params.filter.address; + } + + // @TODO: We can handle slightly more complicated logs using the logs API + if (params.filter.topics && params.filter.topics.length > 0) { + if (params.filter.topics.length > 1) { + logger.throwError("unsupported topic count", Logger.Errors.UNSUPPORTED_OPERATION, { topics: params.filter.topics }); + } + if (params.filter.topics.length === 1) { + const topic0 = params.filter.topics[0]; + if (typeof(topic0) !== "string" || topic0.length !== 66) { + logger.throwError("unsupported topic format", Logger.Errors.UNSUPPORTED_OPERATION, { topic0: topic0 }); + } + args.topic0 = topic0; + } + } + + const logs: Array = await this.fetch("logs", args); + + // Cache txHash => blockHash + let blocks: { [tag: string]: string } = {}; + + // Add any missing blockHash to the logs + for (let i = 0; i < logs.length; i++) { + const log = logs[i]; + if (log.blockHash != null) { continue; } + if (blocks[log.blockNumber] == null) { + const block = await this.getBlock(log.blockNumber); + if (block) { + blocks[log.blockNumber] = block.hash; + } + } + + log.blockHash = blocks[log.blockNumber]; + } + + return logs; + } +*/ + default: + break; + } + + return super._perform(req); + } + + async getNetwork(): Promise { + return this.network; + } + + async getEtherPrice(): Promise { + if (this.network.name !== "homestead") { return 0.0; } + return parseFloat((await this.fetch("stats", { action: "ethprice" })).ethusd); + } + + isCommunityResource(): boolean { + const plugin = this.network.getPlugin(EtherscanPluginId); + if (plugin) { return (plugin.communityApiKey === this.apiKey); } + + return (defaultApiKey === this.apiKey); + } +} +/* +(async function() { + const provider = new EtherscanProvider(); + console.log(provider); + console.log(await provider.getBlockNumber()); + / * + provider.on("block", (b) => { + console.log("BB", b); + }); + console.log(await provider.getTransactionReceipt("0xa5ded92f548e9f362192f9ab7e5b3fbc9b5a919a868e29247f177d49ce38de6e")); + + provider.once("0xa5ded92f548e9f362192f9ab7e5b3fbc9b5a919a868e29247f177d49ce38de6e", (tx) => { + console.log("TT", tx); + }); + * / + try { + console.log(await provider.getBlock(100)); + } catch (error) { + console.log(error); + } + + try { + console.log(await provider.getBlock(13821768)); + } catch (error) { + console.log(error); + } + +})(); +*/ diff --git a/packages/providers/src.ts/provider-fallback.ts b/packages/providers/src.ts/provider-fallback.ts new file mode 100644 index 000000000..b34527ba6 --- /dev/null +++ b/packages/providers/src.ts/provider-fallback.ts @@ -0,0 +1,492 @@ + +import { hexlify } from "@ethersproject/bytes"; + +import { AbstractProvider } from "./abstract-provider.js"; +import { logger } from "./logger.js"; +import { Network } from "./network.js" +import { shuffle } from "./shuffle.js"; + +import type { Frozen } from "@ethersproject/properties"; + +import type { PerformActionRequest, Subscriber, Subscription } from "./abstract-provider.js"; +import type { Networkish } from "./network.js" + +//const BN_0 = BigInt("0"); +const BN_1 = BigInt("1"); +const BN_2 = BigInt("2"); + +function stall(duration: number) { + return new Promise((resolve) => { setTimeout(resolve, duration); }); +} + +function getTime(): number { return (new Date()).getTime(); } + +export interface FallbackProviderConfig { + + // The provider + provider: AbstractProvider; + + // How long to wait for a response before getting impatient + // and ispatching the next provider + stallTimeout?: number; + + // Lower values are dispatched first + priority?: number; + + // How much this provider contributes to the quorum + weight?: number; +}; + +const defaultConfig = { stallTimeout: 400, priority: 1, weight: 1 }; + +// We track a bunch of extra stuff that might help debug problems or +// optimize infrastructure later on. +export interface FallbackProviderState extends Required { + + // The most recent blockNumber this provider has reported (-2 if none) + blockNumber: number; + + // The number of total requests ever sent to this provider + requests: number; + + // The number of responses that errored + errorResponses: number; + + // The number of responses that occured after the result resolved + lateResponses: number; + + // How many times syncing was required to catch up the expected block + outOfSync: number; + + // The number of requests which reported unsupported operation + unsupportedEvents: number; + + // A rolling average (5% current duration) for response time + rollingDuration: number; + + // The ratio of quorum-agreed results to total + score: number; +} + +interface Config extends FallbackProviderState { + _updateNumber: null | Promise; + _network: null | Frozen; + _totalTime: number; +} + +const defaultState = { + blockNumber: -2, requests: 0, lateResponses: 0, errorResponses: 0, + outOfSync: -1, unsupportedEvents: 0, rollingDuration: 0, score: 0, + _network: null, _updateNumber: null, _totalTime: 0 +}; + + +async function waitForSync(config: Config, blockNumber: number): Promise { + while (config.blockNumber < 0 || config.blockNumber < blockNumber) { + if (!config._updateNumber) { + config._updateNumber = (async () => { + const blockNumber = await config.provider.getBlockNumber(); + if (blockNumber > config.blockNumber) { + config.blockNumber = blockNumber; + } + config._updateNumber = null; + })(); + } + await config._updateNumber; + config.outOfSync++; + } +} + +export type FallbackProviderOptions = { + // How many providers must agree on a value before reporting + // back the response + quorum: number; + + // How many providers must have reported the same event + // for it to be emitted + eventQuorum: number; + + // How many providers to dispatch each event to simultaneously. + // Set this to 0 to use getLog polling, which implies eventQuorum + // is equal to quorum. + eventWorkers: number; +}; + +type RunningState = { + config: Config; + staller: null | Promise; + didBump: boolean; + perform: null | Promise; + done: boolean; + result: { result: any } | { error: Error } +} + +// Normalizes a result to a string that can be used to compare against +// other results using normal string equality +function normalize(network: Frozen, value: any, req: PerformActionRequest): string { + switch (req.method) { + case "chainId": + return logger.getBigInt(value).toString(); + case "getBlockNumber": + return logger.getNumber(value).toString(); + case "getGasPrice": + return logger.getBigInt(value).toString(); + case "getBalance": + return logger.getBigInt(value).toString(); + case "getTransactionCount": + return logger.getNumber(value).toString(); + case "getCode": + return hexlify(value); + case "getStorageAt": + return hexlify(value); + case "getBlock": + if (req.includeTransactions) { + return JSON.stringify(network.formatter.blockWithTransactions(value)); + } + return JSON.stringify(network.formatter.block(value)); + case "getTransaction": + return JSON.stringify(network.formatter.transactionResponse(value)); + case "getTransactionReceipt": + return JSON.stringify(network.formatter.receipt(value)); + case "call": + return hexlify(value); + case "estimateGas": + return logger.getBigInt(value).toString(); + case "getLogs": + return JSON.stringify(value.map((v: any) => network.formatter.log(v))); + } + + return logger.throwError("unsupported method", "UNSUPPORTED_OPERATION", { + operation: `_perform(${ JSON.stringify(req.method) })` + }); +} + +type TallyResult = { + result: any; + normal: string; + weight: number; +}; + +// This strategy picks the highest wieght result, as long as the weight is +// equal to or greater than quorum +function checkQuorum(quorum: number, results: Array): any { + const tally: Map = new Map(); + for (const { result, normal, weight } of results) { + const t = tally.get(normal) || { result, weight: 0 }; + t.weight += weight; + tally.set(normal, t); + } + + let bestWeight = 0; + let bestResult = undefined; + + for (const { weight, result } of tally.values()) { + if (weight >= quorum && weight > bestWeight) { + bestWeight = weight; + bestResult = result; + } + } + + return bestResult; +} + +/* +function getMean(results: Array): bigint { + const total = results.reduce((a, r) => (a + BigInt(r.result)), BN_0); + return total / BigInt(results.length); +} +*/ + +function getMedian(results: Array): bigint { + // Get the sorted values + const values = results.map((r) => BigInt(r.result)); + values.sort((a, b) => ((a < b) ? -1: (b > a) ? 1: 0)); + + const mid = values.length / 2; + + // Odd-length; take the middle value + if (values.length % 2) { return values[mid]; } + + // Even length; take the ceiling of the mean of the center two values + return (values[mid - 1] + values[mid] + BN_1) / BN_2; +} + +export class FallbackProvider extends AbstractProvider { + //readonly providerConfigs!: ReadonlyArray>>; + + readonly quorum: number; + readonly eventQuorum: number; + readonly eventWorkers: number; + + readonly #configs: Array; + + #initialSyncPromise: null | Promise; + + constructor(providers: Array, network?: Networkish) { + super(network); + this.#configs = providers.map((p) => { + if (p instanceof AbstractProvider) { + return Object.assign({ provider: p }, defaultConfig, defaultState ); + } else { + return Object.assign({ }, defaultConfig, p, defaultState ); + } + }); + this.#initialSyncPromise = null; + + this.quorum = 2; //Math.ceil(providers.length / 2); + this.eventQuorum = 1; + this.eventWorkers = 1; + + if (this.quorum > this.#configs.reduce((a, c) => (a + c.weight), 0)) { + logger.throwArgumentError("quorum exceed provider wieght", "quorum", this.quorum); + } + } + + async _detectNetwork() { + return Network.from(logger.getBigInt(await this._perform({ method: "chainId" }))).freeze(); + } + + _getSubscriber(sub: Subscription): Subscriber { + throw new Error("@TODO"); + } + + // Grab the next (random) config that is not already part of configs + #getNextConfig(configs: Array): null | Config { + // Shuffle the states, sorted by priority + const allConfigs = this.#configs.slice(); + shuffle(allConfigs); + allConfigs.sort((a, b) => (b.priority - a.priority)); + + for (const config of allConfigs) { + if (configs.indexOf(config) === -1) { return config; } + } + + return null; + } + + // Adds a new runner (if available) to running. + #addRunner(running: Set, req: PerformActionRequest): null | RunningState { + const config = this.#getNextConfig(Array.from(running).map((r) => r.config)); + if (config == null) { + return null; + } + + const result: any = { }; + + const runner: RunningState = { + config, result, didBump: false, done: false, + perform: null, staller: null + }; + + const now = getTime(); + + runner.perform = (async () => { + try { + config.requests++; + result.result = await config.provider._perform(req); + } catch (error) { + config.errorResponses++; + result.error = error; + } + + if (runner.done) { config.lateResponses++; } + + const dt = (getTime() - now); + config._totalTime += dt; + + config.rollingDuration = 0.95 * config.rollingDuration + 0.05 * dt; + + runner.perform = null; + })(); + + runner.staller = (async () => { + await stall(config.stallTimeout); + runner.staller = null; + })(); + + running.add(runner); + return runner; + } + + // Initializes the blockNumber and network for each runner and + // blocks until initialized + async #initialSync(): Promise { + let initialSync = this.#initialSyncPromise; + if (!initialSync) { + const promises: Array> = [ ]; + this.#configs.forEach((config) => { + promises.push(waitForSync(config, 0)); + promises.push((async () => { + config._network = await config.provider.getNetwork(); + })()); + }); + + this.#initialSyncPromise = initialSync = (async () => { + // Wait for all providers to have a block number and network + await Promise.all(promises); + + // Check all the networks match + let chainId: null | bigint = null; + for (const config of this.#configs) { + const network = >(config._network); + if (chainId == null) { + chainId = network.chainId; + } else if (network.chainId !== chainId) { + logger.throwError("cannot mix providers on different networks", "UNSUPPORTED_OPERATION", { + operation: "new FallbackProvider" + }); + } + } + })(); + } + + await initialSync + } + + + async #checkQuorum(running: Set, req: PerformActionRequest): Promise { + // Get all the result objects + const results: Array = [ ]; + for (const runner of running) { + if ("result" in runner.result) { + const result = runner.result.result; + results.push({ + result, + normal: normalize(>(runner.config._network), result, req), + weight: runner.config.weight + }); + } + } + + // Are there enough results to event meet quorum? + if (results.reduce((a, r) => (a + r.weight), 0) < this.quorum) { + return undefined; + } + + switch (req.method) { + case "getBlockNumber": { + throw new Error("TODO"); + } + + case "getGasPrice": + case "estimateGas": + return getMedian(results); + + case "getBlock": + // Pending blocks are mempool dependant and already + // quite untrustworthy + if ("blockTag" in req && req.blockTag === "pending") { + return results[0].result; + } + return checkQuorum(this.quorum, results); + + case "chainId": + case "getBalance": + case "getTransactionCount": + case "getCode": + case "getStorageAt": + case "getTransaction": + case "getTransactionReceipt": + case "getLogs": + return checkQuorum(this.quorum, results); + + case "call": + // @TODO: Check errors + return checkQuorum(this.quorum, results); + + case "sendTransaction": + throw new Error("TODO"); + } + + return logger.throwError("unsupported method", "UNSUPPORTED_OPERATION", { + operation: `_perform(${ JSON.stringify((req).method) })` + }); + } + + async #waitForQuorum(running: Set, req: PerformActionRequest): Promise { + if (running.size === 0) { throw new Error("no runners?!"); } + + // Any promises that are interesting to watch for; an expired stall + // or a successful perform + const interesting: Array> = [ ]; + + //const results: Array = [ ]; + //const errors: Array = [ ]; + let newRunners = 0; + for (const runner of running) { +// @TODO: use runner.perfom != null + /* + if ("result" in runner.result) { + results.push(runner.result.result); + } else if ("error" in runner.result) { + errors.push(runner.result.error); + } +*/ + // No responses, yet; keep an eye on it + if (runner.perform) { + interesting.push(runner.perform); + } + + // Still stalling... + if (runner.staller) { + interesting.push(runner.staller); + continue; + } + + // This runner has already triggered another runner + if (runner.didBump) { continue; } + + // Got a response (result or error) or stalled; kick off another runner + runner.didBump = true; + newRunners++; + } + + // Check for quorum + /* + console.log({ results, errors } ); + if (results.length >= this.quorum) { + return results[0]; + } + + if (errors.length >= this.quorum) { + return errors[0]; + } + */ + const value = await this.#checkQuorum(running, req); + if (value !== undefined) { + if (value instanceof Error) { throw value; } + return value; + } + + // Add any new runners, because a staller timed out or a result + // or error response came in. + for (let i = 0; i < newRunners; i++) { + this.#addRunner(running, req) + } + + if (interesting.length === 0) { + throw new Error("quorum not met"); +// return logger.throwError("failed to meet quorum", "", { +// }); + } + + // Wait for someone to either complete its perform or trigger a stall + await Promise.race(interesting); + + return await this.#waitForQuorum(running, req); + } + + async _perform(req: PerformActionRequest): Promise { + await this.#initialSync(); + + // Bootstrap enough to meet quorum + const running: Set = new Set(); + for (let i = 0; i < this.quorum; i++) { + this.#addRunner(running, req); + } + + const result = this.#waitForQuorum(running, req); + for (const runner of running) { runner.done = true; } + return result; + } +} diff --git a/packages/providers/src.ts/provider-infura.ts b/packages/providers/src.ts/provider-infura.ts new file mode 100644 index 000000000..bb5bed00e --- /dev/null +++ b/packages/providers/src.ts/provider-infura.ts @@ -0,0 +1,89 @@ +import { defineProperties } from "@ethersproject/properties"; +import { FetchRequest } from "@ethersproject/web"; + +import { showThrottleMessage } from "./community.js"; +import { logger } from "./logger.js"; +import { Network } from "./network.js"; +import { StaticJsonRpcProvider } from "./provider-jsonrpc.js"; + +import type { ConnectionInfo, ThrottleRetryFunc } from "@ethersproject/web"; + +import type { AbstractProvider } from "./abstract-provider.js"; +import type { CommunityResourcable } from "./community.js"; +import type { Networkish } from "./network.js"; + + +const defaultProjectId = "84842078b09946638c03157f83405213"; + +function getHost(name: string): string { + switch(name) { + case "homestead": + return "mainnet.infura.io"; + case "ropsten": + return "ropsten.infura.io"; + case "rinkeby": + return "rinkeby.infura.io"; + case "kovan": + return "kovan.infura.io"; + case "goerli": + return "goerli.infura.io"; + case "matic": + return "polygon-mainnet.infura.io"; + case "maticmum": + return "polygon-mumbai.infura.io"; + case "optimism": + return "optimism-mainnet.infura.io"; + case "optimism-kovan": + return "optimism-kovan.infura.io"; + case "arbitrum": + return "arbitrum-mainnet.infura.io"; + case "arbitrum-rinkeby": + return "arbitrum-rinkeby.infura.io"; + } + + return logger.throwArgumentError("unsupported network", "network", name); +} + + +export class InfuraProvider extends StaticJsonRpcProvider implements CommunityResourcable { + readonly projectId!: string; + readonly projectSecret!: null | string; + + constructor(_network: Networkish = "homestead", projectId?: null | string, projectSecret?: null | string) { + const network = Network.from(_network); + if (projectId == null) { projectId = defaultProjectId; } + if (projectSecret == null) { projectSecret = null; } + + const connection = InfuraProvider.getConnection(network, projectId, projectSecret); + super(connection, network); + + defineProperties(this, { projectId, projectSecret }); + } + + _getProvider(chainId: number): AbstractProvider { + try { + return new InfuraProvider(chainId, this.projectId, this.projectSecret); + } catch (error) { } + return super._getProvider(chainId); + } + + static getConnection(network: Network, projectId?: null | string, projectSecret?: null | string): ConnectionInfo { + if (projectId == null) { projectId = defaultProjectId; } + if (projectSecret == null) { projectSecret = null; } + + const request = new FetchRequest(`https:/\/${ getHost(network.name) }/v3/${ projectId }`); + request.allowGzip = true; + if (projectSecret) { request.setCredentials("", projectSecret); } + + const throttleRetry: ThrottleRetryFunc = async (request, response, attempt) => { + if (projectId === defaultProjectId) { showThrottleMessage("InfuraProvider"); } + return true; + }; + + return { request, throttleRetry }; + } + + isCommunityResource(): boolean { + return (this.projectId === defaultProjectId); + } +} diff --git a/packages/providers/src.ts/provider-ipcsocket-browser.ts b/packages/providers/src.ts/provider-ipcsocket-browser.ts new file mode 100644 index 000000000..4f11ba6a5 --- /dev/null +++ b/packages/providers/src.ts/provider-ipcsocket-browser.ts @@ -0,0 +1,3 @@ +const IpcSocketProvider = undefined; + +export { IpcSocketProvider }; diff --git a/packages/providers/src.ts/provider-ipcsocket.ts b/packages/providers/src.ts/provider-ipcsocket.ts new file mode 100644 index 000000000..3461d2a1a --- /dev/null +++ b/packages/providers/src.ts/provider-ipcsocket.ts @@ -0,0 +1,98 @@ + +import { connect } from "net"; +import { SocketProvider } from "./provider-socket.js"; + +import type { Socket } from "net"; +import type { Networkish } from "./network.js"; + + +// @TODO: Is this sufficient? Is this robust? Will newlines occur between +// all payloads and only between payloads? +function splitBuffer(data: Buffer): { messages: Array, remaining: Buffer } { + const messages: Array = [ ]; + + let lastStart = 0; + while (true) { + const nl = data.indexOf(10, lastStart); + if (nl === -1) { break; } + messages.push(data.subarray(lastStart, nl).toString().trim()); + lastStart = nl + 1; + } + + return { messages, remaining: data.subarray(lastStart) }; +} + +export class IpcSocketProvider extends SocketProvider { + #socket: Socket; + get socket(): Socket { return this.#socket; } + + constructor(path: string, network?: Networkish) { + super(network); + this.#socket = connect(path); + + this.socket.on("ready", () => { this._start(); }); + + let response = Buffer.alloc(0); + this.socket.on("data", (data) => { + response = Buffer.concat([ response, data ]); + const { messages, remaining } = splitBuffer(response); + messages.forEach((message) => { + this._processMessage(message); + }); + response = remaining; + }); + + this.socket.on("end", () => { + this.emit("close"); + this.socket.destroy(); + this.socket.end(); + }); + } + + stop(): void { + this.socket.destroy(); + this.socket.end(); + } + + async _write(message: string): Promise { + console.log(">>>", message); + this.socket.write(message); + } +} +/* + +import { defineProperties } from "@ethersproject/properties"; + +import { SocketLike, SocketProvider } from "./provider-socket.js"; + +import type { Socket } from "net"; + +export class SocketWrapper implements SocketLike { + #socket: Socket; + + constructor(path: string) { + this.#socket = connect(path); + } + + send(data: string): void { + this.#socket.write(data, () => { }); + } + + addEventListener(event: string, listener: (data: string) => void): void { + //this.#socket.on(event, (value: ) => { + //}); + } + + close(): void { + } +} + +export class IpcProvider extends SocketProvider { + readonly path!: string; + + constructor(path: string) { + super(new SocketWrapper(path)); + defineProperties(this, { path }); + } +} +*/ diff --git a/packages/providers/src.ts/provider-jsonrpc.ts b/packages/providers/src.ts/provider-jsonrpc.ts new file mode 100644 index 000000000..fa0ab82e6 --- /dev/null +++ b/packages/providers/src.ts/provider-jsonrpc.ts @@ -0,0 +1,747 @@ +// @TODO: +// - Add the batching API + +// https://playground.open-rpc.org/?schemaUrl=https://raw.githubusercontent.com/ethereum/eth1.0-apis/assembled-spec/openrpc.json&uiSchema%5BappBar%5D%5Bui:splitView%5D=true&uiSchema%5BappBar%5D%5Bui:input%5D=false&uiSchema%5BappBar%5D%5Bui:examplesDropdown%5D=false + +import { resolveAddress } from "@ethersproject/address"; +import { hexlify, isHexString, quantity } from "@ethersproject/bytes"; +import { defineProperties } from "@ethersproject/properties"; +import { TypedDataEncoder } from "@ethersproject/hash"; +import { toUtf8Bytes } from "@ethersproject/strings"; +import { accessListify } from "@ethersproject/transactions"; +import { fetchData, FetchRequest } from "@ethersproject/web"; + +import { AbstractProvider, UnmanagedSubscriber } from "./abstract-provider.js"; +import { Network } from "./network.js"; +import { FeeData } from "./provider.js"; +import { FilterIdEventSubscriber, FilterIdPendingSubscriber } from "./subscriber-filterid.js"; + +import type { Addressable } from "@ethersproject/address"; +import type { TypedDataDomain, TypedDataField } from "@ethersproject/hash"; +import type { Frozen } from "@ethersproject/properties"; +import type { ConnectionInfo } from "@ethersproject/web"; + +import type { PerformActionRequest, Subscriber, Subscription } from "./abstract-provider.js"; +import type { Networkish } from "./network.js"; +import type { BlockTag, Provider, TransactionRequest, TransactionResponse } from "./provider.js"; +import type { Signer } from "./signer.js"; + +import { logger } from "./logger.js"; + + +function copy(value: T): T { + return JSON.parse(JSON.stringify(value)); +} + +const Primitive = "bigint,boolean,function,number,string,symbol".split(/,/g); +//const Methods = "getAddress,then".split(/,/g); +function deepCopy(value: T): T { + if (value == null || Primitive.indexOf(typeof(value)) >= 0) { + return value; + } + + // Keep any Addressable + if (typeof((value).getAddress) === "function") { + return value; + } + + if (Array.isArray(value)) { return (value.map(deepCopy)); } + + if (typeof(value) === "object") { + return Object.keys(value).reduce((accum, key) => { + accum[key] = (value)[key]; + return accum; + }, { }); + } + + throw new Error(`should not happen: ${ value } (${ typeof(value) })`); +} + +function getLowerCase(value: string): string { + if (value) { return value.toLowerCase(); } + return value; +} + +interface Pollable { + pollingInterval: number; +} + +function isPollable(value: any): value is Pollable { + return (value && typeof(value.pollingInterval) === "number"); +} + +export type JsonRpcPayload = { + id: number; + method: string; + params: any; + jsonrpc: "2.0"; +}; + +export type JsonRpcResult = { + id: number; + result: any; +} | { + id: number; + error: { + code: number; + message?: string; + data?: any; + } +}; + +export type JsonRpcIncomingMessage = JsonRpcResult | { + method: string; + params: any; +}; + +export type JsonRpcOptions = { + polling?: boolean; + + batchStallTime?: number; + batchMaxSize?: number; + batchMaxCount?: number; +}; + +const defaultOptions = { + // Default to use filter ID (the FilterIdSubscriber will + // fallback onto polling if subscription fails) + polling: false, + + // Maximum batch size (in bytes) + batchMaxSize: (1 << 20), + + // How long to wait before dispatching a new batch + batchStallTime: 250, +} + +export interface JsonRpcTransactionRequest { + from?: string; + to?: string; + data?: string; + + chainId?: string; + type?: string; + gas?: string; + + gasPrice?: string; + maxFeePerGas?: string; + maxPriorityFeePerGas?: string; + + nonce?: string; + value?: string; + + accessList?: Array<{ address: string, storageKeys: Array }>; +} + +// @TODO: Unchecked Signers + +export class JsonRpcSigner implements Signer { + provider!: JsonRpcApiProvider; + address!: string; + + constructor(provider: JsonRpcApiProvider, address: string) { + defineProperties(this, { provider, address }); + } + + connect(provider: null | Provider): Signer { + return logger.throwError("cannot reconnect JsonRpcSigner", "UNSUPPORTED_OPERATION", { + operation: "signer.connect" + }); + } + + async getAddress(): Promise { + return this.address; + } + + async getNetwork(): Promise> { + return await this.provider.getNetwork(); + } + + async getFeeData(): Promise { + return await this.provider.getFeeData(); + } + + async estimateGas(tx: TransactionRequest): Promise { + return await this.provider.estimateGas(tx); + } + + async call(tx: TransactionRequest): Promise { + return await this.provider.call(tx); + } + + async resolveName(name: string | Addressable): Promise { + return await this.provider.resolveName(name); + } + + async getBalance(blockTag?: BlockTag): Promise { + return await this.provider.getBalanceOf(this.address); + } + + async getTransactionCount(blockTag?: BlockTag): Promise { + return await this.provider.getTransactionCountOf(this.address); + } + + // Returns just the hash of the transaction after sent, which is what + // the bare JSON-RPC API does; + async sendUncheckedTransaction(_tx: TransactionRequest): Promise { + const tx = deepCopy(_tx); + + const promises: Array> = []; + + // Make sure the from matches the sender + if (tx.from) { + const _from = tx.from; + promises.push((async () => { + const from = await resolveAddress(_from, this.provider); + if (from == null || from.toLowerCase() !== this.address.toLowerCase()) { + logger.throwArgumentError("from address mismatch", "transaction", _tx); + } + tx.from = from; + })()); + } else { + tx.from = this.address; + } + + // The JSON-RPC for eth_sendTransaction uses 90000 gas; if the user + // wishes to use this, it is easy to specify explicitly, otherwise + // we look it up for them. + if (tx.gasLimit == null) { + promises.push((async () => { + tx.gasLimit = await this.provider.estimateGas({ ...tx, from: this.address}); + })()); + } + + // The address may be an ENS name or Addressable + if (tx.to != null) { + const _to = tx.to; + promises.push((async () => { + tx.to = await resolveAddress(_to, this.provider); + })()); + } + + // Wait until all of our properties are filled in + if (promises.length) { await Promise.all(promises); } + + const hexTx = this.provider.getRpcTransaction(tx); + + return this.provider.send("eth_sendTransaction", [ hexTx ]); + } + + async sendTransaction(tx: TransactionRequest): Promise { + // This cannot be mined any earlier than any recent block + const blockNumber = await this.provider.getBlockNumber(); + + // Send the transaction + const hash = await this.sendUncheckedTransaction(tx); + + // Unfortunately, JSON-RPC only provides and opaque transaction hash + // for a response, and we need the actual transaction, so we poll + // for it; it should show up very quickly + return await (new Promise((resolve, reject) => { + const checkTx = async (duration: number) => { + // Try getting the transaction + const tx = await this.provider.getTransaction(hash); + if (tx != null) { + resolve(this.provider._wrapTransaction(tx, hash, blockNumber)); + return; + } + + // Wait another 4 seconds + this.provider._setTimeout(() => { checkTx(4000); }, duration); + }; + checkTx(1000); + })); + } + + async signTransaction(_tx: TransactionRequest): Promise { + const tx = deepCopy(_tx); + + // Make sure the from matches the sender + if (tx.from) { + const from = await resolveAddress(tx.from, this.provider); + if (from == null || from.toLowerCase() !== this.address.toLowerCase()) { + return logger.throwArgumentError("from address mismatch", "transaction", _tx); + } + tx.from = from; + } else { + tx.from = this.address; + } + + const hexTx = this.provider.getRpcTransaction(tx); + return await this.provider.send("eth_sign_Transaction", [ hexTx ]); + } + + + async signMessage(_message: string | Uint8Array): Promise { + const message = ((typeof(_message) === "string") ? toUtf8Bytes(_message): _message); + return await this.provider.send("personal_sign", [ + hexlify(message), this.address.toLowerCase() ]); + } + + async signTypedData(domain: TypedDataDomain, types: Record>, _value: Record): Promise { + const value = deepCopy(_value); + + // Populate any ENS names (in-place) + const populated = await TypedDataEncoder.resolveNames(domain, types, value, async (value: string) => { + const address = await resolveAddress(value); + if (address == null) { + return logger.throwArgumentError("TypedData does not support null address", "value", value); + } + return address; + }); + + return await this.provider.send("eth_signTypedData_v4", [ + this.address.toLowerCase(), + JSON.stringify(TypedDataEncoder.getPayload(populated.domain, types, populated.value)) + ]); + } + + async unlock(password: string): Promise { + return this.provider.send("personal_unlockAccount", [ + this.address.toLowerCase(), password, null ]); + } + + // https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign + async _legacySignMessage(_message: string | Uint8Array): Promise { + const message = ((typeof(_message) === "string") ? toUtf8Bytes(_message): _message); + return await this.provider.send("eth_sign", [ + this.address.toLowerCase(), hexlify(message) ]); + } +} + +export class JsonRpcApiProvider extends AbstractProvider { + #nextId: number; + + #options: JsonRpcOptions; + + constructor(network?: Networkish) { + super(network); + + this.#nextId = 1; + this.#options = Object.assign({ }, defaultOptions); + } + + _getOptions(key: K): JsonRpcOptions[K] { + return this.#options[key]; + } + + _setOptions(options: JsonRpcOptions): void { + // Validate all the options + for (const _key in options) { + const key = _key; + const value = options[key]; + if (typeof(value) !== typeof(this.#options[key])) { + return logger.throwArgumentError("invalid option value", `options.${ key }`, value); + } + } + + // Update the values + for (const _key in options) { + const key = _key; + this.#options[key] = (options[key]); + } + } + + prepareRequest(method: string, params: Array): JsonRpcPayload { + return { + method, params, id: (this.#nextId++), jsonrpc: "2.0" + }; + } + + // Sends the payload to the backend + //async sendPayload(payload: any): Promise { + // throw new Error("sub-class must implement this"); + //} + + async send(method: string, params: Array): Promise { + // @TODO: This should construct and queue the payload + throw new Error("sub-class must implement this"); + } + + async getSigner(address: number | string = 0): Promise { + const network = await this.getNetwork(); + + const accounts = await this.send>("eth_accounts", [ ]); + + // Account index + if (typeof(address) === "number") { + if (address > accounts.length) { throw new Error("no such account"); } + return new JsonRpcSigner(this, accounts[address]); + } + + // Account address + address = network.formatter.address(address); + for (const account of accounts) { + if (network.formatter.address(account) === account) { + return new JsonRpcSigner(this, account); + } + } + + throw new Error("invalid account"); + } + + // Sub-classes can override this; it detects the *actual* network we + // are connected to + async _detectNetwork(): Promise { + return Network.from(logger.getBigInt(await this._perform({ method: "chainId" }))); + } + + _getSubscriber(sub: Subscription): Subscriber { + // Pending Filters aren't availble via polling + if (sub.type === "pending") { return new FilterIdPendingSubscriber(this); } + + if (sub.type === "event") { + return new FilterIdEventSubscriber(this, sub.filter); + } + + // Orphaned Logs are handled automatically, by the filter, since + // logs with removed are emitted by it + if (sub.type === "orphan" && sub.filter.orphan === "drop-log") { + return new UnmanagedSubscriber("orphan"); + } + + return super._getSubscriber(sub); + } + + getRpcTransaction(tx: TransactionRequest): JsonRpcTransactionRequest { + const result: JsonRpcTransactionRequest = {}; + + // JSON-RPC now requires numeric values to be "quantity" values + ["chainId", "gasLimit", "gasPrice", "type", "maxFeePerGas", "maxPriorityFeePerGas", "nonce", "value"].forEach((key) => { + if ((tx)[key] == null) { return; } + let dstKey = key; + if (key === "gasLimit") { dstKey = "gas"; } + (result)[dstKey] = quantity((tx)[key]); + }); + + // Make sure addresses and data are lowercase + ["from", "to", "data"].forEach((key) => { + if ((tx)[key] == null) { return; } + (result)[key] = hexlify((tx)[key]); + }); + + // Normalize the access list object + if (tx.accessList) { + result["accessList"] = accessListify(tx.accessList); + } + + return result; + } + + getRpcRequest(req: PerformActionRequest): null | { method: string, args: Array } { + switch (req.method) { + case "chainId": + return { method: "eth_chainId", args: [ ] }; + + case "getBlockNumber": + return { method: "eth_blockNumber", args: [ ] }; + + case "getGasPrice": + return { method: "eth_gasPrice", args: [] }; + + case "getBalance": + return { + method: "eth_getBalance", + args: [ getLowerCase(req.address), req.blockTag ] + }; + + case "getTransactionCount": + return { + method: "eth_getTransactionCount", + args: [ getLowerCase(req.address), req.blockTag ] + }; + + case "getCode": + return { + method: "eth_getCode", + args: [ getLowerCase(req.address), req.blockTag ] + }; + + case "getStorageAt": + return { + method: "eth_getStorageAt", + args: [ + getLowerCase(req.address), + ("0x" + req.position.toString(16)), + req.blockTag + ] + }; + + case "sendTransaction": + return { + method: "eth_sendRawTransaction", + args: [ req.signedTransaction ] + }; + + case "getBlock": + if ("blockTag" in req) { + return { + method: "eth_getBlockByNumber", + args: [ req.blockTag, !!req.includeTransactions ] + }; + } else if ("blockHash" in req) { + return { + method: "eth_getBlockByHash", + args: [ req.blockHash, !!req.includeTransactions ] + }; + } + break; + + case "getTransaction": + return { + method: "eth_getTransactionByHash", + args: [ req.hash ] + }; + + case "getTransactionReceipt": + return { + method: "eth_getTransactionReceipt", + args: [ req.hash ] + }; + + case "call": + return { + method: "eth_call", + args: [ this.getRpcTransaction(req.transaction), req.blockTag ] + }; + + case "estimateGas": { + return { + method: "eth_estimateGas", + args: [ this.getRpcTransaction(req.transaction) ] + }; + } + + case "getLogs": + if (req.filter && req.filter.address != null) { + if (Array.isArray(req.filter.address)) { + req.filter.address = req.filter.address.map(getLowerCase); + } else { + req.filter.address = getLowerCase(req.filter.address); + } + } + return { method: "eth_getLogs", args: [ req.filter ] }; + } + + return null; + } + + getRpcError(method: string, args: Array, error: Error): Error { + if (method === "eth_call") { + const result = spelunkData(error); + if (result) { + // @TODO: Extract errorSignature, errorName, errorArgs, reason if + // it is Error(string) or Panic(uint25) + return logger.makeError("execution reverted during JSON-RPC call", "CALL_EXCEPTION", { + data: result.data, + transaction: args[0] + }); + } + + return logger.makeError("missing revert data during JSON-RPC call", "CALL_EXCEPTION", { + data: "0x", transaction: args[0], info: { error } + }); + } + + if (method === "eth_estimateGas") { + } + + const message = JSON.stringify(spelunkMessage(error)); + + if (message.match(/insufficient funds|base fee exceeds gas limit/)) { + return logger.makeError("insufficient funds for intrinsic transaction cost", "INSUFFICIENT_FUNDS", { + transaction: args[0] + }); + } + + if (message.match(/nonce/) && message.match(/too low/)) { + return logger.makeError("nonce has already been used", "NONCE_EXPIRED", { + transaction: args[0] + }); + } + + // "replacement transaction underpriced" + if (message.match(/replacement transaction/) && message.match(/underpriced/)) { + return logger.makeError("replacement fee too low", "REPLACEMENT_UNDERPRICED", { + transaction: args[0] + }); + } + + if (message.match(/only replay-protected/)) { + return logger.makeError("legacy pre-eip-155 transactions not supported", "UNSUPPORTED_OPERATION", { + operation: method, info: { transaction: args[0] } + }); + } + + if (method === "estimateGas" && message.match(/gas required exceeds allowance|always failing transaction|execution reverted/)) { + return logger.makeError("cannot estimate gas; transaction may fail or may require manual gas limit", "UNPREDICTABLE_GAS_LIMIT", { + transaction: args[0] + }); + } + + return error; + } + + async _perform(req: PerformActionRequest): Promise { + // Legacy networks do not like the type field being passed along (which + // is fair), so we delete type if it is 0 and a non-EIP-1559 network + if (req.method === "call" || req.method === "estimateGas") { + let tx = req.transaction; + if (tx && tx.type != null && logger.getBigInt(tx.type)) { + // If there are no EIP-1559 properties, it might be non-EIP-a559 + if (tx.maxFeePerGas == null && tx.maxPriorityFeePerGas == null) { + const feeData = await this.getFeeData(); + if (feeData.maxFeePerGas == null && feeData.maxPriorityFeePerGas == null) { + // Network doesn't know about EIP-1559 (and hence type) + req = Object.assign({ }, req, { + transaction: Object.assign({ }, tx, { type: undefined }) + }); + } + } + } + } + + const request = this.getRpcRequest(req); + + if (request != null) { + this.emit("debug", { type: "sendRequest", request }); + + try { + const result = await this.send(request.method, request.args); + //console.log("RR", result); + this.emit("debug", { type: "getResponse", result }); + return result; + } catch (error) { + this.emit("debug", { type: "getError", error }); + throw this.getRpcError(request.method, request.args, error); + } + } + + return super._perform(req); + } +} + +export class JsonRpcProvider extends JsonRpcApiProvider { + #connect: ConnectionInfo; + + #pollingInterval: number; + + constructor(url?: string | ConnectionInfo, network?: Networkish) { + if (url == null) { url = "http:/\/localhost:8545"; } + super(network); + + if (typeof(url) === "string") { + this.#connect = { request: new FetchRequest(url) }; + } else { + this.#connect = Object.assign({ }, url); + this.#connect.request = this.#connect.request.clone(); + } + + this.#pollingInterval = 4000; + } + + async send(method: string, params: Array): Promise { + params = copy>(params); + + // Configure a POST connection for the requested method + const connection = Object.assign({ }, this.#connect); + connection.request = connection.request.clone(); + connection.request.body = this.prepareRequest(method, params); + + const response = await fetchData(connection); + response.assertOk(); + + const result: JsonRpcResult = response.bodyJson; + if ("error" in result) { + return logger.throwError("error from JSON-RPC", "UNKNOWN_ERROR", { + result + }); + } + return result.result; + } + + get pollingInterval(): number { return this.#pollingInterval; } + set pollingInterval(value: number) { + if (!Number.isInteger(value) || value < 0) { throw new Error("invalid interval"); } + this.#pollingInterval = value; + this._forEachSubscriber((sub) => { + if (isPollable(sub)) { + sub.pollingInterval = this.#pollingInterval; + } + }); + } +} + +// This class should only be used when it is not possible for the +// underlying network to change, such as with INFURA. If you are +// using MetaMask or some other client which allows users to change +// their network DO NOT USE THIS. Bad things will happen. +export class StaticJsonRpcProvider extends JsonRpcProvider { + readonly network!: Network; + + constructor(url: string | ConnectionInfo, network?: Network) { + super(url, network); + defineProperties(this, { network }); + } + + async _detectNetwork(): Promise { + return this.network; + } +} + + +function spelunkData(value: any): null | { message: string, data: string } { + if (value == null) { return null; } + + // These *are* the droids we're looking for. + if (typeof(value.message) === "string" && value.message.match("reverted") && isHexString(value.data)) { + return { message: value.message, data: value.data }; + } + + // Spelunk further... + if (typeof(value) === "object") { + for (const key in value) { + const result = spelunkData(value[key]); + if (result) { return result; } + } + return null; + } + + // Might be a JSON string we can further descend... + if (typeof(value) === "string") { + try { + return spelunkData(JSON.parse(value)); + } catch (error) { } + } + + return null; +} + +function _spelunkMessage(value: any, result: Array): void { + if (value == null) { return; } + + // These *are* the droids we're looking for. + if (typeof(value.message) === "string") { + result.push(value.message); + } + + // Spelunk further... + if (typeof(value) === "object") { + for (const key in value) { + _spelunkMessage(value[key], result); + } + } + + // Might be a JSON string we can further descend... + if (typeof(value) === "string") { + try { + return _spelunkMessage(JSON.parse(value), result); + } catch (error) { } + } +} + +function spelunkMessage(value: any): Array { + const result: Array = [ ]; + _spelunkMessage(value, result); + return result; +} diff --git a/packages/providers/src.ts/provider-pocket.ts b/packages/providers/src.ts/provider-pocket.ts new file mode 100644 index 000000000..5426966d8 --- /dev/null +++ b/packages/providers/src.ts/provider-pocket.ts @@ -0,0 +1,97 @@ +import { defineProperties } from "@ethersproject/properties"; +import { FetchRequest } from "@ethersproject/web"; + +import { showThrottleMessage } from "./community.js"; +import { logger } from "./logger.js"; +import { Network } from "./network.js"; +import { StaticJsonRpcProvider } from "./provider-jsonrpc.js"; + +import type { ConnectionInfo, ThrottleRetryFunc } from "@ethersproject/web"; + +import type { CommunityResourcable } from "./community.js"; +import type { Networkish } from "./network.js"; + + + +// These are load-balancer-based application IDs +const defaultAppIds: Record = { + homestead: "6004bcd10040261633ade990", + ropsten: "6004bd4d0040261633ade991", + rinkeby: "6004bda20040261633ade994", + goerli: "6004bd860040261633ade992", +}; + +function getHost(name: string): string { + switch(name) { + case "homestead": + return "eth-mainnet.gateway.pokt.network"; + case "ropsten": + return "eth-ropsten.gateway.pokt.network"; + case "rinkeby": + return "eth-rinkeby.gateway.pokt.network"; + case "goerli": + return "eth-goerli.gateway.pokt.network"; + } + + return logger.throwArgumentError("unsupported network", "network", name); +} + +function normalizeApiKey(network: Network, _appId?: null | string, applicationSecretKey?: null | string, loadBalancer?: boolean): { applicationId: string, applicationSecretKey: null | string, loadBalancer: boolean, community: boolean } { + loadBalancer = !!loadBalancer; + + let community = false; + let applicationId = _appId; + if (applicationId == null) { + applicationId = defaultAppIds[network.name]; + if (applicationId == null) { + logger.throwArgumentError("network does not support default applicationId", "applicationId", _appId); + } + loadBalancer = true; + community = true; + } else if (applicationId === defaultAppIds[network.name]) { + loadBalancer = true; + community = true; + } + if (applicationSecretKey == null) { applicationSecretKey = null; } + + return { applicationId, applicationSecretKey, community, loadBalancer }; +} + +export class PocketProvider extends StaticJsonRpcProvider implements CommunityResourcable { + readonly applicationId!: string; + readonly applicationSecretKey!: null | string; + readonly loadBalancer!: boolean; + + constructor(_network: Networkish = "homestead", _appId?: null | string, _secretKey?: null | string, _loadBalancer?: boolean) { + const network = Network.from(_network); + const { applicationId, applicationSecretKey, loadBalancer } = normalizeApiKey(network, _appId, _secretKey, _loadBalancer); + + const connection = PocketProvider.getConnection(network, applicationId, applicationSecretKey, loadBalancer); + super(connection, network); + + defineProperties(this, { applicationId, applicationSecretKey, loadBalancer }); + } + + static getConnection(network: Network, _appId?: null | string, _secretKey?: null | string, _loadBalancer?: boolean): ConnectionInfo { + const { applicationId, applicationSecretKey, community, loadBalancer } = normalizeApiKey(network, _appId, _secretKey, _loadBalancer); + + let url = `https:/\/${ getHost(network.name) }/v1/`; + if (loadBalancer) { url += "lb/"; } + url += applicationId; + + const request = new FetchRequest(url); + request.allowGzip = true; + if (applicationSecretKey) { request.setCredentials("", applicationSecretKey); } + + const throttleRetry: ThrottleRetryFunc = async (request, response, attempt) => { + if (community) { showThrottleMessage("PocketProvider"); } + return true; + }; + + return { request, throttleRetry }; + } + + isCommunityResource(): boolean { + return (this.applicationId === defaultAppIds[this.network.name]); + } +} diff --git a/packages/providers/src.ts/provider-socket.ts b/packages/providers/src.ts/provider-socket.ts new file mode 100644 index 000000000..d69a3947b --- /dev/null +++ b/packages/providers/src.ts/provider-socket.ts @@ -0,0 +1,247 @@ +/** + * SocketProvider + * + * Generic long-lived socket provider. + * + * Sub-classing notes + * - a sub-class MUST call the `_start()` method once connected + * - a sub-class MUST override the `_write(string)` method + * - a sub-class MUST call `_processMessage(string)` for each message + */ + +import { UnmanagedSubscriber } from "./abstract-provider.js"; +import { logger } from "./logger.js"; +import { JsonRpcApiProvider } from "./provider-jsonrpc.js"; + +import type { Subscriber, Subscription } from "./abstract-provider.js"; +import type { Formatter } from "./formatter"; +import type { EventFilter } from "./provider.js"; +import type { JsonRpcIncomingMessage, JsonRpcPayload } from "./provider-jsonrpc.js"; +import type { Networkish } from "./network.js"; + +export class SocketSubscriber implements Subscriber { + #provider: SocketProvider; + + #filter: string; + get filter(): Array { return JSON.parse(this.#filter); } + + #filterId: null | Promise; + #paused: null | boolean; + + #emitPromise: null | Promise; + + constructor(provider: SocketProvider, filter: Array) { + this.#provider = provider; + this.#filter = JSON.stringify(filter); + this.#filterId = null; + this.#paused = null; + this.#emitPromise = null; + } + + start(): void { + this.#filterId = this.#provider.send("eth_subscribe", this.filter).then((filterId) => {; + this.#provider._register(filterId, this); + return filterId; + }); + } + + stop(): void { + (>(this.#filterId)).then((filterId) => { + this.#provider.send("eth_unsubscribe", [ filterId ]); + }); + this.#filterId = null; + } + + // @TODO: pause should trap the current blockNumber, unsub, and on resume use getLogs + // and resume + pause(dropWhilePaused?: boolean): void { + if (!dropWhilePaused) { + logger.throwError("preserve logs while paused not supported by SocketSubscriber yet", "UNSUPPORTED_OPERATION", { + operation: "pause(false)" + }); + } + this.#paused = !!dropWhilePaused; + } + + resume(): void { + this.#paused = null; + } + + _handleMessage(message: any): void { + if (this.#filterId == null) { return; } + if (this.#paused === null) { + let emitPromise: null | Promise = this.#emitPromise; + if (emitPromise == null) { + emitPromise = this._emit(this.#provider, message); + } else { + emitPromise = emitPromise.then(async () => { + await this._emit(this.#provider, message); + }); + } + this.#emitPromise = emitPromise.then(() => { + if (this.#emitPromise === emitPromise) { + this.#emitPromise = null; + } + }); + } + } + + async _emit(provider: SocketProvider, message: any): Promise { + throw new Error("sub-classes must implemente this; _emit"); + } +} + +export class SocketBlockSubscriber extends SocketSubscriber { + constructor(provider: SocketProvider) { + super(provider, [ "newHeads" ]); + } + + async _emit(provider: SocketProvider, message: any): Promise { + provider.emit("block", parseInt(message.number)); + } +} + +export class SocketPendingSubscriber extends SocketSubscriber { + constructor(provider: SocketProvider) { + super(provider, [ "newPendingTransactions" ]); + } + + async _emit(provider: SocketProvider, message: any): Promise { + provider.emit("pending", message); + } +} + +export class SocketEventSubscriber extends SocketSubscriber { + #logFilter: string; + get logFilter(): EventFilter { return JSON.parse(this.#logFilter); } + + #formatter: Promise>; + + constructor(provider: SocketProvider, filter: EventFilter) { + super(provider, [ "logs", filter ]); + this.#logFilter = JSON.stringify(filter); + this.#formatter = provider.getNetwork().then((network) => network.formatter); + } + + async _emit(provider: SocketProvider, message: any): Promise { + const formatter = await this.#formatter; + provider.emit(this.#logFilter, formatter.log(message, provider)); + } +} + +export class SocketProvider extends JsonRpcApiProvider { + #callbacks: Map void, reject: (e: Error) => void }>; + + #ready: boolean; + + // Maps each filterId to its subscriber + #subs: Map; + + // If any events come in before a subscriber has finished + // registering, queue them + #pending: Map>; + + constructor(network?: Networkish) { + super(network); + this.#callbacks = new Map(); + this.#ready = false; + this.#subs = new Map(); + this.#pending = new Map(); + } + + _getSubscriber(sub: Subscription): Subscriber { + switch (sub.type) { + case "close": + return new UnmanagedSubscriber("close"); + case "block": + return new SocketBlockSubscriber(this); + case "pending": + return new SocketPendingSubscriber(this); + case "event": + return new SocketEventSubscriber(this, sub.filter); + case "orphan": + // Handled auto-matically within AbstractProvider + // when the log.removed = true + if (sub.filter.orphan === "drop-log") { + return new UnmanagedSubscriber("drop-log"); + } + } + return super._getSubscriber(sub); + } + + _register(filterId: number | string, subscriber: SocketSubscriber): void { + this.#subs.set(filterId, subscriber); + const pending = this.#pending.get(filterId); + if (pending) { + for (const message of pending) { + subscriber._handleMessage(message); + } + this.#pending.delete(filterId); + } + } + + async send(method: string, params: Array): Promise { + const payload = this.prepareRequest(method, params); + + const promise = new Promise((resolve, reject) => { + this.#callbacks.set(payload.id, { payload, resolve, reject }); + }); + + if (this.#ready) { + await this._write(JSON.stringify(payload)); + } + + return await promise; + } + + // Sub-classes must call this once they are connected + async _start(): Promise { + if (this.#ready) { return; } + this.#ready = true; + for (const { payload } of this.#callbacks.values()) { + await this._write(JSON.stringify(payload)); + } + } + + // Sub-classes must call this for each message + async _processMessage(message: string): Promise { + const result: JsonRpcIncomingMessage = JSON.parse(message); + if ("id" in result) { + const promise = this.#callbacks.get(result.id); + if (!promise) { + console.log("Weird... Response for not a thing we sent"); + return; + } + this.#callbacks.delete(result.id); + + if ("error" in result) { + const { message, code, data } = result.error; + const error = logger.makeError(message || "unkonwn error", "SERVER_ERROR", { + request: `ws:${ JSON.stringify(promise.payload) }`, + info: { code, data } + }); + promise.reject(error); + } else { + promise.resolve(result.result); + } + + } else if (result.method === "eth_subscription") { + const filterId = result.params.subscription; + const subscriber = this.#subs.get(filterId); + if (subscriber) { + subscriber._handleMessage(result.params.result); + } else { + let pending = this.#pending.get(filterId); + if (pending == null) { + pending = [ ]; + this.#pending.set(filterId, pending); + } + pending.push(result.params.result); + } + } + } + + async _write(message: string): Promise { + throw new Error("sub-classes must override this"); + } +} diff --git a/packages/providers/src.ts/provider-websocket.ts b/packages/providers/src.ts/provider-websocket.ts new file mode 100644 index 000000000..26c848909 --- /dev/null +++ b/packages/providers/src.ts/provider-websocket.ts @@ -0,0 +1,45 @@ + +import { WebSocket } from "ws"; /*-browser*/ + +import { SocketProvider } from "./provider-socket.js"; + +import type { Networkish } from "./network.js"; + +export interface WebSocketLike { + onopen: null | ((...args: Array) => any); + onmessage: null | ((...args: Array) => any); + onerror: null | ((...args: Array) => any); + + readyState: number; + + send(payload: any): void; + close(code?: number, reason?: string): void; +} + +export class WebSocketProvider extends SocketProvider { + url!: string; + + #websocket: WebSocketLike; + get websocket(): WebSocketLike { return this.#websocket; } + + constructor(url: string | WebSocketLike, network?: Networkish) { + super(network); + if (typeof(url) === "string") { + this.#websocket = new WebSocket(url); + } else { + this.#websocket = url; + } + + this.websocket.onopen = () => { + this._start(); + }; + + this.websocket.onmessage = (message: { data: string }) => { + this._processMessage(message.data); + }; + } + + async _write(message: string): Promise { + this.websocket.send(message); + } +} diff --git a/packages/providers/src.ts/provider.ts b/packages/providers/src.ts/provider.ts new file mode 100644 index 000000000..0532d0a5f --- /dev/null +++ b/packages/providers/src.ts/provider.ts @@ -0,0 +1,1001 @@ +//import { resolveAddress } from "@ethersproject/address"; +import { hexlify } from "@ethersproject/bytes"; +import { defineProperties } from "@ethersproject/properties"; +import { accessListify } from "@ethersproject/transactions"; + +import { logger } from "./logger.js"; + +import type { Addressable, NameResolver } from "@ethersproject/address"; +import type { BigNumberish } from "@ethersproject/logger"; +import type { EventEmitterable, Frozen, Listener } from "@ethersproject/properties"; +import type { Signature } from "@ethersproject/signing-key"; +import type { AccessList, AccessListish, TransactionLike } from "@ethersproject/transactions"; + +import type { Network } from "./network.js"; + + +export type BlockTag = number | string; + +// ----------------------- + +function getValue(value: undefined | null | T): null | T { + if (value == null) { return null; } + return value; +} + +function toJson(value: null | bigint): null | string { + if (value == null) { return null; } + return value.toString(); +} + +// @TODO? implements Required +export class FeeData { + readonly gasPrice!: null | bigint; + readonly maxFeePerGas!: null | bigint; + readonly maxPriorityFeePerGas!: null | bigint; + + constructor(gasPrice?: null | bigint, maxFeePerGas?: null | bigint, maxPriorityFeePerGas?: null | bigint) { + defineProperties(this, { + gasPrice: getValue(gasPrice), + maxFeePerGas: getValue(maxFeePerGas), + maxPriorityFeePerGas: getValue(maxPriorityFeePerGas) + }); + } + + toJSON(): any { + const { + gasPrice, maxFeePerGas, maxPriorityFeePerGas + } = this; + return { + _type: "FeeData", + gasPrice: toJson(gasPrice), + maxFeePerGas: toJson(maxFeePerGas), + maxPriorityFeePerGas: toJson(maxPriorityFeePerGas), + }; + } +} + + + +export interface TransactionRequest { + type?: null | number; + + to?: null | string | Addressable; + from?: null | string | Addressable; + + nonce?: null | number; + + gasLimit?: null | BigNumberish; + gasPrice?: null | BigNumberish; + + maxPriorityFeePerGas?: null | BigNumberish; + maxFeePerGas?: null | BigNumberish; + + data?: null | string; + value?: null | BigNumberish; + chainId?: null | BigNumberish; + + accessList?: null | AccessListish; + + customData?: any; + + // Todo? + //gasMultiplier?: number; +}; + + +export interface CallRequest extends TransactionRequest { + blockTag?: BlockTag; + enableCcipRead?: boolean; +} + +export interface PreparedRequest { + type?: number; + + to?: string | Addressable; + from?: string | Addressable; + + nonce?: number; + + gasLimit?: bigint; + gasPrice?: bigint; + + maxPriorityFeePerGas?: bigint; + maxFeePerGas?: bigint; + + data?: string; + value?: bigint; + chainId?: bigint; + + accessList?: AccessList; + + customData?: any; + + blockTag?: BlockTag; + enableCcipRead?: boolean; +} + +export function copyRequest(req: CallRequest): PreparedRequest { + const result: any = { }; + + // These could be addresses, ENS names or Addressables + if (req.to) { result.to = req.to; } + if (req.from) { result.from = req.from; } + + if (req.data) { result.data = hexlify(req.data); } + + const bigIntKeys = "chainId,gasLimit,gasPrice,maxFeePerGas, maxPriorityFeePerGas,value".split(/,/); + for (const key in bigIntKeys) { + if (!(key in req) || (req)[key] == null) { continue; } + result[key] = logger.getBigInt((req)[key], `request.${ key }`); + } + + const numberKeys = "type,nonce".split(/,/); + for (const key in numberKeys) { + if (!(key in req) || (req)[key] == null) { continue; } + result[key] = logger.getNumber((req)[key], `request.${ key }`); + } + + if (req.accessList) { + result.accessList = accessListify(req.accessList); + } + + if ("blockTag" in req) { result.blockTag = req.blockTag; } + + if ("enableCcipRead" in req) { + result.enableCcipReadEnabled = !!req.enableCcipRead + } + + if ("customData" in req) { + result.customData = req.customData; + } + + return result; +} + +//Omit, "hash" | "signature">; +/* +export async function resolveTransactionRequest(tx: TransactionRequest, provider?: Provider): Promise { + // A pending transaction with items that may require resolving + const ptx: any = Object.assign({ }, tx); //await resolveProperties(await tx)); + //if (tx.hash != null || tx.signature != null) { + // throw new Error(); + // @TODO: Check for bad keys? + //} + // @TODO: Why does TS not think that to and from are reoslved and require the cast to string + if (ptx.to != null) { ptx.to = resolveAddress((ptx.to), provider); } + if (ptx.from != null) { ptx.from = resolveAddress((ptx.from), provider); } + return await resolveProperties(ptx); +} +*/ + +//function canConnect(value: any): value is T { +// return (value && typeof(value.connect) === "function"); +//} + + +////////////////////// +// Block + +export interface BlockParams { + hash?: null | string; + + number: number; + timestamp: number; + + parentHash: string; + + nonce: string; + difficulty: bigint; + + gasLimit: bigint; + gasUsed: bigint; + + miner: string; + extraData: string; + + baseFeePerGas: null | bigint; + + transactions: ReadonlyArray; +}; + +export interface MinedBlock extends Block { + readonly number: number; + readonly hash: string; + readonly timestamp: number; + readonly date: Date; + readonly miner: string; +} + +export interface LondonBlock extends Block { + readonly baseFeePerGas: bigint; +} + +export class Block implements BlockParams, Iterable { + readonly provider!: Provider; + + readonly number!: number; + readonly hash!: null | string; + readonly timestamp!: number; + + readonly parentHash!: string; + + readonly nonce!: string; + readonly difficulty!: bigint; + + readonly gasLimit!: bigint; + readonly gasUsed!: bigint; + + readonly miner!: string; + readonly extraData!: string; + + readonly baseFeePerGas!: null | bigint; + + readonly #transactions: ReadonlyArray; + + constructor(block: BlockParams, provider?: null | Provider) { + if (provider == null) { provider = dummyProvider; } + + this.#transactions = Object.freeze(block.transactions.map((tx) => { + if (typeof(tx) !== "string" && tx.provider !== provider) { + throw new Error("provider mismatch"); + } + return tx; + }));; + + defineProperties>(this, { + provider, + + hash: getValue(block.hash), + + number: block.number, + timestamp: block.timestamp, + + parentHash: block.parentHash, + + nonce: block.nonce, + difficulty: block.difficulty, + + gasLimit: block.gasLimit, + gasUsed: block.gasUsed, + miner: block.miner, + extraData: block.extraData, + + baseFeePerGas: getValue(block.baseFeePerGas) + }); + } + + get transactions(): ReadonlyArray { return this.#transactions; } + + //connect(provider: Provider): Block { + // return new Block(this, provider); + //} + + toJSON(): any { + const { + baseFeePerGas, difficulty, extraData, gasLimit, gasUsed, hash, + miner, nonce, number, parentHash, timestamp, transactions + } = this; + + return { + _type: "Block", + baseFeePerGas: toJson(baseFeePerGas), + difficulty: toJson(difficulty), + extraData, + gasLimit: toJson(gasLimit), + gasUsed: toJson(gasUsed), + hash, miner, nonce, number, parentHash, timestamp, + transactions, + }; + } + + [Symbol.iterator](): Iterator { + let index = 0; + return { + next: () => { + if (index < this.length) { + return { + value: this.transactions[index++], done: false + } + } + return { value: undefined, done: true }; + } + }; + } + + get length(): number { return this.transactions.length; } + + get date(): null | Date { + if (this.timestamp == null) { return null; } + return new Date(this.timestamp * 1000); + } + + async getTransaction(index: number): Promise { + const tx = this.transactions[index]; + if (tx == null) { throw new Error("no such tx"); } + if (typeof(tx) === "string") { + return (await this.provider.getTransaction(tx)); + } else { + return tx; + } + } + + isMined(): this is MinedBlock { return !!this.hash; } + isLondon(): this is LondonBlock { return !!this.baseFeePerGas; } + + orphanedEvent(): OrphanFilter { + if (!this.isMined()) { throw new Error(""); } + return createOrphanedBlockFilter(this); + } +} + +////////////////////// +// Log + +export interface LogParams { + transactionHash: string; + blockHash: string; + blockNumber: number; + + removed: boolean; + + address: string; + data: string; + + topics: ReadonlyArray; + + index: number; + transactionIndex: number; +} + +export class Log implements LogParams { + readonly provider: Provider; + + readonly transactionHash!: string; + readonly blockHash!: string; + readonly blockNumber!: number; + + readonly removed!: boolean; + + readonly address!: string; + readonly data!: string; + + readonly topics!: ReadonlyArray; + + readonly index!: number; + readonly transactionIndex!: number; + + + constructor(log: LogParams, provider?: null | Provider) { + if (provider == null) { provider = dummyProvider; } + this.provider = provider; + + const topics = Object.freeze(log.topics.slice()); + defineProperties(this, { + transactionHash: log.transactionHash, + blockHash: log.blockHash, + blockNumber: log.blockNumber, + + removed: log.removed, + + address: log.address, + data: log.data, + + topics, + + index: log.index, + transactionIndex: log.transactionIndex, + }); + } + + //connect(provider: Provider): Log { + // return new Log(this, provider); + //} + + toJSON(): any { + const { + address, blockHash, blockNumber, data, index, + removed, topics, transactionHash, transactionIndex + } = this; + + return { + _type: "log", + address, blockHash, blockNumber, data, index, + removed, topics, transactionHash, transactionIndex + }; + } + + async getBlock(): Promise> { + return >(await this.provider.getBlock(this.blockHash)); + } + + async getTransaction(): Promise { + return (await this.provider.getTransaction(this.transactionHash)); + } + + async getTransactionReceipt(): Promise { + return (await this.provider.getTransactionReceipt(this.transactionHash)); + } + + removedEvent(): OrphanFilter { + return createRemovedLogFilter(this); + } +} + + +////////////////////// +// Transaction Receipt + +export interface TransactionReceiptParams { + to: null | string; + from: string; + contractAddress: null | string; + + hash: string; + index: number; + + blockHash: string; + blockNumber: number; + + logsBloom: string; + logs: ReadonlyArray; + + gasUsed: bigint; + cumulativeGasUsed: bigint; + gasPrice?: null | bigint; + effectiveGasPrice?: null | bigint; + + byzantium: boolean; + status: null | number; + root: null | string; +} + +export interface LegacyTransactionReceipt { + byzantium: false; + status: null; + root: string; +} + +export interface ByzantiumTransactionReceipt { + byzantium: true; + status: number; + root: null; +} + +export class TransactionReceipt implements TransactionReceiptParams, Iterable { + readonly provider!: Provider; + + readonly to!: null | string; + readonly from!: string; + readonly contractAddress!: null | string; + + readonly hash!: string; + readonly index!: number; + + readonly blockHash!: string; + readonly blockNumber!: number; + + readonly logsBloom!: string; + + readonly gasUsed!: bigint; + readonly cumulativeGasUsed!: bigint; + readonly gasPrice!: bigint; + + readonly byzantium!: boolean; + readonly status!: null | number; + readonly root!: null | string; + + readonly #logs: ReadonlyArray; + + constructor(tx: TransactionReceiptParams, provider?: null | Provider) { + if (provider == null) { provider = dummyProvider; } + this.#logs = Object.freeze(tx.logs.map((log) => { + if (provider !== log.provider) { + //return log.connect(provider); + throw new Error("provider mismatch"); + } + return log; + })); + + defineProperties(this, { + provider, + + to: tx.to, + from: tx.from, + contractAddress: tx.contractAddress, + + hash: tx.hash, + index: tx.index, + + blockHash: tx.blockHash, + blockNumber: tx.blockNumber, + + logsBloom: tx.logsBloom, + + gasUsed: tx.gasUsed, + cumulativeGasUsed: tx.cumulativeGasUsed, + gasPrice: ((tx.effectiveGasPrice || tx.gasPrice) as bigint), + + byzantium: tx.byzantium, + status: tx.status, + root: tx.root + }); + } + + get logs(): ReadonlyArray { return this.#logs; } + + //connect(provider: Provider): TransactionReceipt { + // return new TransactionReceipt(this, provider); + //} + + toJSON(): any { + const { + to, from, contractAddress, hash, index, blockHash, blockNumber, logsBloom, + logs, byzantium, status, root + } = this; + + return { + _type: "TransactionReceipt", + blockHash, blockNumber, byzantium, contractAddress, + cumulativeGasUsed: toJson(this.cumulativeGasUsed), + from, + gasPrice: toJson(this.gasPrice), + gasUsed: toJson(this.gasUsed), + hash, index, logs, logsBloom, root, status, to + }; + } + + get length(): number { return this.logs.length; } + + [Symbol.iterator](): Iterator { + let index = 0; + return { + next: () => { + if (index < this.length) { + return { value: this.logs[index++], done: false } + } + return { value: undefined, done: true }; + } + }; + } + + get fee(): bigint { + return this.gasUsed * this.gasPrice; + } + + async getBlock(): Promise> { + const block = await this.provider.getBlock(this.blockHash); + if (block == null) { throw new Error("TODO"); } + return block; + } + + async getTransaction(): Promise { + const tx = await this.provider.getTransaction(this.hash); + if (tx == null) { throw new Error("TODO"); } + return tx; + } + + async confirmations(): Promise { + return (await this.provider.getBlockNumber()) - this.blockNumber + 1; + } + + removedEvent(): OrphanFilter { + return createRemovedTransactionFilter(this); + } + + reorderedEvent(other?: TransactionResponse): OrphanFilter { + if (other && !other.isMined()) { + return logger.throwError("unmined 'other' transction cannot be orphaned", "UNSUPPORTED_OPERATION", { + operation: "reorderedEvent(other)" }); + } + return createReorderedTransactionFilter(this, other); + } +} + + +////////////////////// +// Transaction Response + +export interface TransactionResponseParams { + blockNumber: null | number; + blockHash: null | string; + + hash: string; + index: number; + + type: number; + + to: null | string; + from: string; + + nonce: number; + + gasLimit: bigint; + + gasPrice: bigint; + + maxPriorityFeePerGas: null | bigint; + maxFeePerGas: null | bigint; + + data: string; + value: bigint; + chainId: bigint; + + signature: Signature; + + accessList: null | AccessList; +}; + +export interface MinedTransactionResponse extends TransactionResponse { + blockNumber: number; + blockHash: string; + date: Date; +} + +export interface LegacyTransactionResponse extends TransactionResponse { + accessList: null; + maxFeePerGas: null; + maxPriorityFeePerGas: null; +} + +export interface BerlinTransactionResponse extends TransactionResponse { + accessList: AccessList; + maxFeePerGas: null; + maxPriorityFeePerGas: null; +} + +export interface LondonTransactionResponse extends TransactionResponse { + accessList: AccessList; + maxFeePerGas: bigint; + maxPriorityFeePerGas: bigint; +} + +export class TransactionResponse implements TransactionLike, TransactionResponseParams { + readonly provider: Provider; + + readonly blockNumber: null | number; + readonly blockHash: null | string; + + readonly index!: number; + + readonly hash!: string; + + readonly type!: number; + + readonly to!: null | string; + readonly from!: string; + + readonly nonce!: number; + + readonly gasLimit!: bigint; + + readonly gasPrice!: bigint; + + readonly maxPriorityFeePerGas!: null | bigint; + readonly maxFeePerGas!: null | bigint; + + readonly data!: string; + readonly value!: bigint; + readonly chainId!: bigint; + + readonly signature!: Signature; + + readonly accessList!: null | AccessList; + + constructor(tx: TransactionResponseParams, provider?: null | Provider) { + if (provider == null) { provider = dummyProvider; } + this.provider = provider; + + this.blockNumber = (tx.blockNumber != null) ? tx.blockNumber: null; + this.blockHash = (tx.blockHash != null) ? tx.blockHash: null; + + this.hash = tx.hash; + this.index = tx.index; + + this.type = tx.type; + + this.from = tx.from; + this.to = tx.to || null; + + this.gasLimit = tx.gasLimit; + this.nonce = tx.nonce; + this.data = tx.data; + this.value = tx.value; + + this.gasPrice = tx.gasPrice; + this.maxPriorityFeePerGas = (tx.maxPriorityFeePerGas != null) ? tx.maxPriorityFeePerGas: null; + this.maxFeePerGas = (tx.maxFeePerGas != null) ? tx.maxFeePerGas: null; + + this.chainId = tx.chainId; + this.signature = tx.signature; + + this.accessList = (tx.accessList != null) ? tx.accessList: null; + } + + //connect(provider: Provider): TransactionResponse { + // return new TransactionResponse(this, provider); + //} + + toJSON(): any { + const { + blockNumber, blockHash, index, hash, type, to, from, nonce, + data, signature, accessList + } = this; + + return { + _type: "TransactionReceipt", + accessList, blockNumber, blockHash, + chainId: toJson(this.chainId), + data, from, + gasLimit: toJson(this.gasLimit), + gasPrice: toJson(this.gasPrice), + hash, + maxFeePerGas: toJson(this.maxFeePerGas), + maxPriorityFeePerGas: toJson(this.maxPriorityFeePerGas), + nonce, signature, to, index, type, + value: toJson(this.value), + }; + } + + async getBlock(): Promise> { + let blockNumber = this.blockNumber; + if (blockNumber == null) { + const tx = await this.getTransaction(); + if (tx) { blockNumber = tx.blockNumber; } + } + if (blockNumber == null) { return null; } + const block = this.provider.getBlock(blockNumber); + if (block == null) { throw new Error("TODO"); } + return block; + } + + async getTransaction(): Promise { + return this.provider.getTransaction(this.hash); + } + + async wait(confirms?: number): Promise { + return this.provider.waitForTransaction(this.hash, confirms); + } + + isMined(): this is MinedTransactionResponse { + return (this.blockHash != null); + } + + isLegacy(): this is LegacyTransactionResponse { + return (this.type === 0) + } + + isBerlin(): this is BerlinTransactionResponse { + return (this.type === 1); + } + + isLondon(): this is LondonTransactionResponse { + return (this.type === 2); + } + + removedEvent(): OrphanFilter { + if (!this.isMined()) { + return logger.throwError("unmined transaction canot be orphaned", "UNSUPPORTED_OPERATION", { + operation: "removeEvent()" }); + } + return createRemovedTransactionFilter(this); + } + + reorderedEvent(other?: TransactionResponse): OrphanFilter { + if (!this.isMined()) { + return logger.throwError("unmined transaction canot be orphaned", "UNSUPPORTED_OPERATION", { + operation: "removeEvent()" }); + } + if (other && !other.isMined()) { + return logger.throwError("unmined 'other' transaction canot be orphaned", "UNSUPPORTED_OPERATION", { + operation: "removeEvent()" }); + } + return createReorderedTransactionFilter(this, other); + } +} + + +////////////////////// +// OrphanFilter + +export type OrphanFilter = { + orphan: "drop-block", + hash: string, + number: number +} | { + orphan: "drop-transaction", + tx: { hash: string, blockHash: string, blockNumber: number }, + other?: { hash: string, blockHash: string, blockNumber: number } +} | { + orphan: "reorder-transaction", + tx: { hash: string, blockHash: string, blockNumber: number }, + other?: { hash: string, blockHash: string, blockNumber: number } +} | { + orphan: "drop-log", + log: { + transactionHash: string, + blockHash: string, + blockNumber: number, + address: string, + data: string, + topics: ReadonlyArray, + index: number + } +}; + +function createOrphanedBlockFilter(block: { hash: string, number: number }): OrphanFilter { + return { orphan: "drop-block", hash: block.hash, number: block.number }; +} + +function createReorderedTransactionFilter(tx: { hash: string, blockHash: string, blockNumber: number }, other?: { hash: string, blockHash: string, blockNumber: number }): OrphanFilter { + return { orphan: "reorder-transaction", tx, other }; +} + +function createRemovedTransactionFilter(tx: { hash: string, blockHash: string, blockNumber: number }): OrphanFilter { + return { orphan: "drop-transaction", tx }; +} + +function createRemovedLogFilter(log: { blockHash: string, transactionHash: string, blockNumber: number, address: string, data: string, topics: ReadonlyArray, index: number }): OrphanFilter { + return { orphan: "drop-log", log: { + transactionHash: log.transactionHash, + blockHash: log.blockHash, + blockNumber: log.blockNumber, + address: log.address, + data: log.data, + topics: Object.freeze(log.topics.slice()), + index: log.index + } }; +} + +////////////////////// +// EventFilter + +export type TopicFilter = Array>; + +// @TODO: +//export type DeferableTopicFilter = Array | Array>>; + +export interface EventFilter { + address?: string | Addressable | Array; + topics?: TopicFilter; +} + +export interface Filter extends EventFilter { + fromBlock?: BlockTag; + toBlock?: BlockTag; +} + +export interface FilterByBlockHash extends EventFilter { + blockHash?: string; +} + + +////////////////////// +// ProviderEvent + +export type ProviderEvent = string | Array> | EventFilter | OrphanFilter; + + +////////////////////// +// Provider + +export interface Provider extends EventEmitterable, NameResolver { + + // State + getBlockNumber(): Promise; + getNetwork(): Promise>; + getFeeData(): Promise; + + // Account + getBalanceOf(address: string | Addressable, blockTag?: BlockTag): Promise; + getTransactionCountOf(address: string | Addressable, blockTag?: BlockTag): Promise; + + getCode(address: string | Addressable, blockTag?: BlockTag): Promise + getStorageAt(address: string | Addressable, position: BigNumberish, blockTag?: BlockTag): Promise + + // Execution + estimateGas(tx: TransactionRequest): Promise; + // If call fails, throws CALL_EXCEPTION { data: string, error, errorString?, panicReason? } + call(tx: CallRequest): Promise + broadcastTransaction(signedTx: string): Promise; + + // Queries + getBlock(blockHashOrBlockTag: BlockTag | string): Promise>; + getBlockWithTransactions(blockHashOrBlockTag: BlockTag | string): Promise> + getTransaction(hash: string): Promise; + getTransactionReceipt(hash: string): Promise; + + // Bloom-filter Queries + getLogs(filter: Filter | FilterByBlockHash): Promise>; + + // ENS + resolveName(name: string | Addressable): Promise; + lookupAddress(address: string): Promise; + + waitForTransaction(hash: string, confirms?: number, timeout?: number): Promise; + waitForBlock(blockTag?: BlockTag): Promise>; +} + + +function fail(): T { + throw new Error("this provider should not be used"); +} + +class DummyProvider implements Provider { + async getNetwork() { return fail>(); } + async getFeeData() { return fail(); } + + async estimateGas(tx: TransactionRequest) { return fail(); } + async call(tx: CallRequest) { return fail(); } + + async resolveName(name: string | Addressable) { return fail(); } + + // State + async getBlockNumber() { return fail(); } + + // Account + async getBalanceOf(address: string | Addressable, blockTag?: BlockTag) { + return fail(); + } + async getTransactionCountOf(address: string | Addressable, blockTag?: BlockTag) { + return fail(); + } + + async getCode(address: string | Addressable, blockTag?: BlockTag) { + return fail(); + } + async getStorageAt(address: string | Addressable, position: BigNumberish, blockTag?: BlockTag) { + return fail(); + } + + // Write + async broadcastTransaction(signedTx: string) { return fail(); } + + // Queries + async getBlock(blockHashOrBlockTag: BlockTag | string){ + return fail>(); + } + async getBlockWithTransactions(blockHashOrBlockTag: BlockTag | string) { + return fail>(); + } + async getTransaction(hash: string) { + return fail(); + } + async getTransactionReceipt(hash: string) { + return fail(); + } + + // Bloom-filter Queries + async getLogs(filter: Filter | FilterByBlockHash) { + return fail>(); + } + + // ENS + async lookupAddress(address: string) { + return fail(); + } + + async waitForTransaction(hash: string, confirms?: number, timeout?: number) { + return fail(); + } + + async waitForBlock(blockTag?: BlockTag) { + return fail>(); + } + + // EventEmitterable + async on(event: ProviderEvent, listener: Listener): Promise { return fail(); } + async once(event: ProviderEvent, listener: Listener): Promise { return fail(); } + async emit(event: ProviderEvent, ...args: Array): Promise { return fail(); } + async listenerCount(event?: ProviderEvent): Promise { return fail(); } + async listeners(event?: ProviderEvent): Promise> { return fail(); } + async off(event: ProviderEvent, listener?: Listener): Promise { return fail(); } + async removeAllListeners(event?: ProviderEvent): Promise { return fail(); } + + async addListener(event: ProviderEvent, listener: Listener): Promise { return fail(); } + async removeListener(event: ProviderEvent, listener: Listener): Promise { return fail(); } +} + +// A singleton provider instance that can be used as a placeholder. This +// allows API that have a Provider added later to not require a null check. +export const dummyProvider: Provider = new DummyProvider(); diff --git a/packages/providers/src.ts/shuffle.ts b/packages/providers/src.ts/shuffle.ts new file mode 100644 index 000000000..f5da56a91 --- /dev/null +++ b/packages/providers/src.ts/shuffle.ts @@ -0,0 +1,9 @@ + +export function shuffle(array: Array): void { + for (let i = array.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + const tmp = array[i]; + array[i] = array[j]; + array[j] = tmp; + } +} diff --git a/packages/providers/src.ts/signer.ts b/packages/providers/src.ts/signer.ts new file mode 100644 index 000000000..fed84ee57 --- /dev/null +++ b/packages/providers/src.ts/signer.ts @@ -0,0 +1,22 @@ + +import type { Addressable, NameResolver } from "@ethersproject/address"; +import type { TypedDataDomain, TypedDataField } from "@ethersproject/hash"; + +import type { CallRequest, Provider, TransactionRequest, TransactionResponse } from "./provider.js"; + + +export interface Signer extends Addressable, NameResolver { + provider: null | Provider; + connect(provider: null | Provider): Signer; + + // Execution + estimateGas(tx: CallRequest): Promise; + call(tx: CallRequest): Promise; + resolveName(name: string | Addressable): Promise; + + // Signing + signTransaction(tx: TransactionRequest): Promise; + sendTransaction(tx: TransactionRequest): Promise; + signMessage(message: string | Uint8Array): Promise; + signTypedData(domain: TypedDataDomain, types: Record>, value: Record): Promise; +} diff --git a/packages/providers/src.ts/subscriber-connection.ts b/packages/providers/src.ts/subscriber-connection.ts new file mode 100644 index 000000000..33a4825a4 --- /dev/null +++ b/packages/providers/src.ts/subscriber-connection.ts @@ -0,0 +1,53 @@ + +import type { Subscriber } from "./abstract-provider.js"; +import { logger } from "./logger.js"; + + +//#TODO: Temp +import type { Provider } from "./provider.js"; +export interface ConnectionRpcProvider extends Provider { + //send(method: string, params: Array): Promise; + _subscribe(param: Array, processFunc: (result: any) => void): number; + _unsubscribe(filterId: number): void; +} + +export class BlockConnectionSubscriber implements Subscriber { + #provider: ConnectionRpcProvider; + #blockNumber: number; + + #filterId: null | number; + + constructor(provider: ConnectionRpcProvider) { + this.#provider = provider; + this.#blockNumber = -2; + this.#filterId = null; + } + + start(): void { + this.#filterId = this.#provider._subscribe([ "newHeads" ], (result: any) => { + const blockNumber = logger.getNumber(result.number); + const initial = (this.#blockNumber === -2) ? blockNumber: (this.#blockNumber + 1) + for (let b = initial; b <= blockNumber; b++) { + this.#provider.emit("block", b); + } + this.#blockNumber = blockNumber; + }); + } + + stop(): void { + if (this.#filterId != null) { + this.#provider._unsubscribe(this.#filterId); + this.#filterId = null; + } + } + + pause(dropWhilePaused?: boolean): void { + if (dropWhilePaused) { this.#blockNumber = -2; } + this.stop(); + } + + resume(): void { + this.start(); + } +} + diff --git a/packages/providers/src.ts/subscriber-filterid.ts b/packages/providers/src.ts/subscriber-filterid.ts new file mode 100644 index 000000000..00cc2a04e --- /dev/null +++ b/packages/providers/src.ts/subscriber-filterid.ts @@ -0,0 +1,133 @@ +import { PollingEventSubscriber } from "./subscriber-polling.js"; + +import type { Frozen } from "@ethersproject/properties"; + +import type { Subscriber } from "./abstract-provider.js"; +import type { Network } from "./network.js"; +import type { EventFilter, Provider } from "./provider.js"; +import type { JsonRpcApiProvider } from "./provider-jsonrpc.js"; + + +function copy(obj: any): any { + return JSON.parse(JSON.stringify(obj)); +} + +export class FilterIdSubscriber implements Subscriber { + #provider: JsonRpcApiProvider; + + #filterIdPromise: null | Promise; + #poller: (b: number) => Promise; + + #network: null | Frozen; + + constructor(provider: JsonRpcApiProvider) { + this.#provider = provider; + + this.#filterIdPromise = null; + this.#poller = this.#poll.bind(this); + + this.#network = null; + } + + _subscribe(provider: JsonRpcApiProvider): Promise { + throw new Error("subclasses must override this"); + } + + _emitResults(provider: Provider, result: Array): Promise { + throw new Error("subclasses must override this"); + } + + _recover(provider: Provider): Subscriber { + throw new Error("subclasses must override this"); + } + + async #poll(blockNumber: number): Promise { + try { + if (this.#filterIdPromise == null) { + this.#filterIdPromise = this._subscribe(this.#provider); + } + + const filterId = await this.#filterIdPromise; + if (filterId == null) { + this.#provider._recoverSubscriber(this, this._recover(this.#provider)); + return; + } + + const network = await this.#provider.getNetwork(); + if (!this.#network) { this.#network = network; } + + if ((this.#network as Network).chainId !== network.chainId) { + throw new Error("chaid changed"); + } + + const result = await this.#provider.send("eth_getFilterChanges", [ filterId ]); + await this._emitResults(this.#provider, result); + } catch (error) { console.log("@TODO", error); } + + this.#provider.once("block", this.#poller); + } + + #teardown(): void { + const filterIdPromise = this.#filterIdPromise; + if (filterIdPromise) { + this.#filterIdPromise = null; + filterIdPromise.then((filterId) => { + this.#provider.send("eth_uninstallFilter", [ filterId ]); + }); + } + } + + start(): void { this.#poll(-2); } + + stop(): void { + this.#teardown(); + this.#provider.off("block", this.#poller); + } + + pause(dropWhilePaused?: boolean): void { + if (dropWhilePaused){ this.#teardown(); } + this.#provider.off("block", this.#poller); + } + + resume(): void { this.start(); } +} + +export class FilterIdEventSubscriber extends FilterIdSubscriber { + #event: EventFilter; + + constructor(provider: JsonRpcApiProvider, filter: EventFilter) { + super(provider); + this.#event = copy(filter); + } + + _recover(provider: Provider): Subscriber { + return new PollingEventSubscriber(provider, this.#event); + } + + async _subscribe(provider: JsonRpcApiProvider): Promise { + const filterId = await provider.send("eth_newFilter", [ this.#event ]); + console.log("____SUB", filterId); + return filterId; + } + + async _emitResults(provider: JsonRpcApiProvider, results: Array): Promise { + const network = await provider.getNetwork(); + for (const result of results) { + const log = network.formatter.log(result, provider); + provider.emit(this.#event, log); + } + } +} + +export class FilterIdPendingSubscriber extends FilterIdSubscriber { + async _subscribe(provider: JsonRpcApiProvider): Promise { + return await provider.send("eth_newPendingTransactionFilter", [ ]); + } + + async _emitResults(provider: JsonRpcApiProvider, results: Array): Promise { + const network = await provider.getNetwork(); + for (const result of results) { + provider.emit("pending", network.formatter.hash(result)); + } + } +} diff --git a/packages/providers/src.ts/subscriber-hotswap.ts b/packages/providers/src.ts/subscriber-hotswap.ts new file mode 100644 index 000000000..7a897352d --- /dev/null +++ b/packages/providers/src.ts/subscriber-hotswap.ts @@ -0,0 +1,41 @@ +/* +import { Subscriber } from "./abstract-provider.js"; + +export class HotSwapSubscriber implements Subscriber { + #target?: Subscriber; + + _switchSubscriber(subscriber: Subscriber): void { + this.#target = subscriber; + } + + start(): void { + if (this.#target) { return this.#target.start(); } + return super.start(); + } + + stop(): void { + if (this.#target) { return this.#target.stop(); } + return super.stop(); + } + + pause(dropWhilePaused?: boolean): void { + if (this.#target) { return this.#target.pause(dropWhilePaused); } + return super.pause(dropWhilePaused); + } + + resume(): void { + if (this.#target) { return this.#target.resume(); } + return super.resume(); + } + + set pollingInterval(value: number) { + if (this.#target) { return this.#target.pollingInterval = value; } + return super.pollingInterval = value; + } + + get pollingInterval(): number { + if (this.#target) { return this.#target.pollingInterval; } + return super.pollingInterval; + } +} +*/ diff --git a/packages/providers/src.ts/subscriber-polling.ts b/packages/providers/src.ts/subscriber-polling.ts new file mode 100644 index 000000000..35f67da08 --- /dev/null +++ b/packages/providers/src.ts/subscriber-polling.ts @@ -0,0 +1,195 @@ +import { isHexString } from "@ethersproject/bytes"; + +import type { Subscriber } from "./abstract-provider.js"; +import type { EventFilter, OrphanFilter, Provider, ProviderEvent } from "./provider.js"; + +import { logger } from "./logger.js"; + +function copy(obj: any): any { + return JSON.parse(JSON.stringify(obj)); +} + +export function getPollingSubscriber(provider: Provider, event: ProviderEvent): Subscriber { + if (event === "block") { return new PollingBlockSubscriber(provider); } + if (isHexString(event, 32)) { return new PollingTransactionSubscriber(provider, event); } + + return logger.throwError("unsupported polling event", "UNSUPPORTED_OPERATION", { + operation: "getPollingSubscriber", info: { event } + }); +} + +// @TODO: refactor this + +export class PollingBlockSubscriber implements Subscriber{ + #provider: Provider; + #poller: null | NodeJS.Timer; + + #interval: number; + + // The most recent block we have scanned for events. The value -2 + // indicates we still need to fetch an initial block number + #blockNumber: number; + + constructor(provider: Provider) { + this.#provider = provider; + this.#poller = null; + this.#interval = 4000; + + this.#blockNumber = -2; + } + + get pollingInterval(): number { return this.#interval; } + set pollingInterval(value: number) { this.#interval = value; } + + async #poll(): Promise { + const blockNumber = await this.#provider.getBlockNumber(); + if (this.#blockNumber === -2) { + this.#blockNumber = blockNumber; + return; + } + + // @TODO: Put a cap on the maximum number of events per loop? + + if (blockNumber !== this.#blockNumber) { + for (let b = this.#blockNumber + 1; b <= blockNumber; b++) { + this.#provider.emit("block", b); + } + + this.#blockNumber = blockNumber; + } + + this.#poller = setTimeout(this.#poll.bind(this), this.#interval); + } + + start(): void { + if (this.#poller) { throw new Error("subscriber already running"); } + this.#poll(); + this.#poller = setTimeout(this.#poll.bind(this), this.#interval); + } + + stop(): void { + if (!this.#poller) { throw new Error("subscriber not running"); } + clearTimeout(this.#poller); + this.#poller = null; + } + + pause(dropWhilePaused?: boolean): void { + this.stop(); + if (dropWhilePaused) { this.#blockNumber = -2; } + } + + resume(): void { + this.start(); + } +} + +export class OnBlockSubscriber implements Subscriber { + #provider: Provider; + #poll: (b: number) => void; + + constructor(provider: Provider) { + this.#provider = provider; + this.#poll = (blockNumber: number) => { + this._poll(blockNumber, this.#provider); + } + } + + async _poll(blockNumber: number, provider: Provider): Promise { + throw new Error("sub-classes must override this"); + } + + start(): void { + this.#poll(-2); + this.#provider.on("block", this.#poll); + } + + stop(): void { + this.#provider.off("block", this.#poll); + } + + pause(dropWhilePaused?: boolean): void { this.stop(); } + resume(): void { this.start(); } +} + +export class PollingOrphanSubscriber extends OnBlockSubscriber { + #filter: OrphanFilter; + + constructor(provider: Provider, filter: OrphanFilter) { + super(provider); + this.#filter = copy(filter); + } + + async _poll(blockNumber: number, provider: Provider): Promise { + console.log(this.#filter); + throw new Error("@TODO"); + } +} + +export class PollingTransactionSubscriber extends OnBlockSubscriber { + #hash: string; + + constructor(provider: Provider, hash: string) { + super(provider); + this.#hash = hash; + } + + async _poll(blockNumber: number, provider: Provider): Promise { + const tx = await provider.getTransactionReceipt(this.#hash); + if (tx) { provider.emit(this.#hash, tx); } + } +} + +export class PollingEventSubscriber implements Subscriber { + #provider: Provider; + #filter: EventFilter; + #poller: (b: number) => void; + + // The most recent block we have scanned for events. The value -2 + // indicates we still need to fetch an initial block number + #blockNumber: number; + + constructor(provider: Provider, filter: EventFilter) { + this.#provider = provider; + this.#filter = copy(filter); + this.#poller = this.#poll.bind(this); + this.#blockNumber = -2; + } + + async #poll(blockNumber: number): Promise { + // The initial block hasn't been determined yet + if (this.#blockNumber === -2) { return; } + + const filter = copy(this.#filter); + filter.fromBlock = this.#blockNumber + 1; + filter.toBlock = blockNumber; + + this.#blockNumber = blockNumber; + const logs = await this.#provider.getLogs(filter); + + for (const log of logs) { + this.#provider.emit(this.#filter, log); + } + } + + start(): void { + if (this.#blockNumber === -2) { + this.#provider.getBlockNumber().then((blockNumber) => { + this.#blockNumber = blockNumber; + }); + } + this.#provider.on("block", this.#poller); + } + + stop(): void { + this.#provider.off("block", this.#poller); + } + + pause(dropWhilePaused?: boolean): void { + this.stop(); + if (dropWhilePaused) { this.#blockNumber = -2; } + } + + resume(): void { + this.start(); + } +} diff --git a/packages/providers/src.ts/subscriber.ts b/packages/providers/src.ts/subscriber.ts new file mode 100644 index 000000000..6b200387f --- /dev/null +++ b/packages/providers/src.ts/subscriber.ts @@ -0,0 +1,56 @@ + +/* +import { defineProperties } from "@ethersproject/properties"; +export type EventCommon = "block" | "debug" | "blockObject"; + +export type Event = EventCommon | string | { address?: string, topics: Array> } + +export type EventLike = Event | Array; + +export function getTag(eventName: Event): string { + if (typeof(eventName) === "string") { return eventName; } + + if (typeof(eventName) === "object") { + return (eventName.address || "*") + (eventName.topics || []).map((topic) => { + if (typeof(topic) === "string") { return topic; } + return topic.join("|"); + }).join("&"); + } + + throw new Error("FOO"); +} + +export function getEvent(tag: string): Event { +} + +let nextId = 1; + +export class Subscriber { + readonly id!: number; + readonly tag!: string; + + #paused: boolean; + #blockNumber: number; + + constructor(tag: string) { + this.#paused = false; + this.#blockNumber = -1; + defineProperties(this, { id: nextId++, tag }); + } + + get blockNumber(): number { + return this.#blockNumber; + } + _setBlockNumber(blockNumber: number): void { this.#blockNumber = blockNumber; } + + setup(): void { } + teardown(): void { } + + isPaused(): boolean { return this.#paused; } + pause(): void { this.#paused = true; } + resume(): void { this.#paused = false; } + + resubscribeInfo(): string { return this.tag; } + resubscribe(info: string): boolean { return true; } +} +*/ diff --git a/packages/providers/src.ts/tests/blockchain-data.ts b/packages/providers/src.ts/tests/blockchain-data.ts new file mode 100644 index 000000000..04cf5f92e --- /dev/null +++ b/packages/providers/src.ts/tests/blockchain-data.ts @@ -0,0 +1,306 @@ + +export interface TestCaseBlockchainAddress { + address: string; + code?: string; + name?: string; + balance?: bigint; + storage?: Record; +} + +export interface TestCaseBlockchainBlock { + hash: string; + parentHash: string; + number: number; + timestamp: number; + nonce: string; + difficulty: bigint; + gasLimit: bigint; + gasUsed: bigint; + miner: string; + extraData: string; + transactions: Array; + + baseFeePerGas?: bigint; +} + +export interface TestCaseBlockchainTransaction { + hash: string; + blockHash: string; + blockNumber: number; + index: number; + type: number; + from: string; + gasPrice?: bigint; + maxFeePerGas?: bigint; + maxPriorityFeePerGas?: bigint; + gasLimit: bigint; + to: null | string; + value: bigint; + nonce: number; + data: string; + signature: { + r: string; + s: string; + yParity: number; + v: number; + }; + creates: null | string; + chainId: number; + accessList?: Array<{ + address: string, + storageKeys: Array + }>; +} + +export interface TestCaseBlockchainLog { + address: string; + blockHash: string; + blockNumber: number; + data: string; + index: number; + topics: Array; + transactionHash: string; + transactionIndex: number; +} + +export interface TestCaseBlockchainReceipt { + blockHash: string; + blockNumber: number; + type: number; + contractAddress: null | string; + cumulativeGasUsed: bigint; + from: string; + gasUsed: bigint; + gasPrice: bigint; + logs: Array + logsBloom: string; + root: null | string; + status: null | number, + //byzantium: boolean; + to: string; + hash: string; + index: number; +} + +export interface TestCaseBlockchain { + addresses: Array; + blocks: Array; + transactions: Array; + receipts: Array +} + +const homestead: TestCaseBlockchain = { + addresses: [ + { + address: "0xAC1639CF97a3A46D431e6d1216f576622894cBB5", + balance: BigInt("4813414100000000"), + code: "0x" + }, + // Splitter contract + { + address: "0x3474627D4F63A678266BC17171D87f8570936622", + code: "0x606060405260e060020a60003504630b3ed5368114602e57806337b0574a14605257806356fa47f0146062575b005b602c6004356000546101009004600160a060020a03908116339091161460bb575b50565b60005460ff166060908152602090f35b602c60043560005460ff1615609657600160a060020a038116600034606082818181858883f193505050501515604f576002565b33600160a060020a0316600034606082818181858883f193505050501515604f576002565b600080546101009004600160a060020a03169082606082818181858883f193505050501515604f57600256", + storage: { + "0": "0x0000000000000000000000b2682160c482eb985ec9f3e364eec0a904c44c2300" + } + }, + { + address: "0x8ba1f109551bD432803012645Ac136ddd64DBA72", + name: "ricmoo.firefly.eth" + }, + ], + blocks: [ + { // Ancient Homestead Block + hash: "0x3d6122660cc824376f11ee842f83addc3525e2dd6756b9bcf0affa6aa88cf741", + parentHash: "0xb495a1d7e6663152ae92708da4843337b958146015a2802f4193a410044698c9", + number: 3, + timestamp: 1438270048, + nonce: "0x2e9344e0cbde83ce", + difficulty: BigInt(17154715646), + gasLimit: BigInt("0x1388"), + gasUsed: BigInt("0"), + miner: "0x5088D623ba0fcf0131E0897a91734A4D83596AA0", + extraData: "0x476574682f76312e302e302d66633739643332642f6c696e75782f676f312e34", + transactions: [ ] + }, + { // Modern London Block + number: 14413999, + hash: "0x6c79356d40ebb6ed63dc19f5d407f8f1c876047b59dc1a4598cce0e64dcabec5", + parentHash: "0xbf09b0e215f247a5066d19ece5b4c66960771d45fae62985e8d751fb1adcfe2f", + timestamp: 1647654576, + nonce: "0xb4bc9979af5369fe", + difficulty: BigInt("12841513359509721"), + gasLimit: BigInt("30087914"), + gasUsed: BigInt("2008910"), + miner: "0x2A20380DcA5bC24D052acfbf79ba23e988ad0050", + extraData: "0x706f6f6c696e2e636f6d21f7092f019bb92a76", + baseFeePerGas: BigInt("40911884304"), + transactions: [ + "0x1c3a398933db10634631f54b435c40c8805c13f12bbac7c3dab858ca44213fa2", + "0xd98947cbdd892cc7f679c903903e6d18a5c5afb19e94437beba79372ad71c347", + "0x4d66190deb55b5820cb0ce9adb972f646fa0f3e64eaeee674bbf3d054bf3d883", + "0x9db7bd5f4c91d6103c714bcbc35df3dc708daa668aaef7449b589dbd3be24dac", + "0x126a43ae4ade4b7fc5c8ac9ebd3dbcf7314f63c60f2804fb49aa25b5c7d80bb1", + "0x82a90aa4b3b1b7873b117c3ff1ca7165ae34b2fc0788cc0cbfd41805d588590d", + "0x7f694a6a9972457753ed3dec164f17272b1c8b1da4eab149df95e31a3e72f606", + "0xdce1cba1ff33f0c23881087d49de3b34fe84c8a6883f3edd75b04fc23e458aac", + "0xbe1c69f825279cebef42d1f0e07397dcddef7fb278b0195e295ede3e156836c4", + "0x1d2f007b3c0f894403973a30e5ffaa78589f873d963e9554c6bb1bd7a3127245", + "0x9c8c78191cf4ae9ae8eee1165153eabe24dbd8b9509b83d5f0caeea85251bb2f", + "0x42e956f4b3dd6535359b272a0d2dab995c364cb48baaf8d0a1981995f3f8c808", + "0xdc2c2e99393e24d5dc66e38665fa1d1ff007d92088ef3fd2549545fdbe862ef6", + "0xaad7be28fffd2e77e8e40bf57f2ac140aa8283ec93c7f3f61a82c79405602f53", + "0x4735f1421b7b30283e87e0799e82e54307d3e5ba14cd54ad8420b57577489a71", + "0x0b9d6aa23aa439b41e86595f2ad91f498adffa3e6e7cb26ac7d73252e59fd3de", + "0xcd93e19bd5d5c5a834fec613116fa01f46eddfd2faa20ef302271b874b9d812a", + "0x5bf1976574a637f5ac0b8bda1a792fa16cc7ce9624d32e9bd6bd9aa6a8f19d2f", + "0x2e778da4f66f10f7b681b605635c6599cdbeea167fc1c4396a097aef5d06de61", + "0xd5fd68eebc4c870ccda081786a74c75c250e9e2d8269b8935edb3adb11b80bb2", + "0x2aec42a11c1d8c1e5198d54aacbc6bebb09bcd5e78f6af81ea09d65c9064734a", + "0xbea2e364ea4959ec438d9ccc2d2f7120c7eaba3b177cc0d7df8ff65d866ef89f", + "0xf48bbb0f838353060da4126a555ce532abf497a9d1108001afffaac513a59ddf", + "0xf5664e4372cce62733a6610efb7701a4a0e552d81f8caa764d8474b3070c6617", + "0x9d3732ddbd20610008ff737da2f61120734a1cbfa864374bcbcf10051e6048cb", + "0xc4d0df5bc6fa51b34ac3c898866d779d4e51a6be4d13be1ec3084b7229b03b47", + "0x90c86ec98b8ad98049b4ee54cb3aa72c5ae743077b830e8a294aa5dc47a1fb18" + ] + } + ], + transactions: [ + { + hash: "0xccc90ab97a74c952fb3376c4a3efb566a58a10df62eb4d44a61e106fcf10ec61", + blockHash: "0x9653f180a5720f3634816eb945a6d722adee52cc47526f6357ac10adaf368135", + blockNumber: 4097745, + index: 18, + type: 0, + from: "0x32DEF047DeFd076DB21A2D759aff2A591c972248", + gasPrice: BigInt("0x4a817c800"), + gasLimit: BigInt("0x3d090"), + to: "0x6fC21092DA55B392b045eD78F4732bff3C580e2c", + value: BigInt("0x186cc6acd4b0000"), + nonce: 0, + data: "0xf2c298be000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000067269636d6f6f0000000000000000000000000000000000000000000000000000", + signature: { + r: "0x1e5605197a03e3f0a168f14749168dfeefc44c9228312dacbffdcbbb13263265", + s: "0x269c3e5b3558267ad91b0a887d51f9f10098771c67b82ea6cb74f29638754f54", + yParity: 1, + v: 38, + }, + creates: null, + chainId: 1 + }, + { + hash: "0x8ff41d0ba5d239acc8c123ff12451a2c15721c838f657e583d355999af4a4349", + blockHash: '0x9d4c3bef68e119841281105da96beb1c7252f357340d7a3355236b3332b197b0', + blockNumber: 12966000, + index: 185, + type: 2, + from: '0x5afFBa12E9332bbc0E221c8E7BEf7CB7cfB3F281', + to: '0x2258CcD34ae29E6B199b6CD64eb2aEF157df7CdE', + gasLimit: BigInt("21000"), + nonce: 2, + data: '0x', + value: BigInt("1100000000000000"), + gasPrice: BigInt("70578812137"), + maxPriorityFeePerGas: BigInt("1000000000"), + maxFeePerGas: BigInt("131115411100"), + chainId: 1, + signature: { + r: "0xdd26e5478d0aa84e334a0393d335ab24b83de8ecae9290305f15ab884ded246c", + s: "0x6494b4f61b0d9a5a82ecb86d72b301f859f404f0bec9682bbfff619903ecfbe2", + yParity: 1, + v: 1 + }, + creates: null, + accessList: [ ] + } + ], + receipts: [ + { + //byzantium: false, + blockHash: "0x36b4af7f0538559e581c8588f16477df0f676439ea67fe8d7a2ae4abb20e2566", + blockNumber: 0x3c92b5, + type: 0, + contractAddress: null, + cumulativeGasUsed: BigInt(0x1cca2e), + from: "0x18C6045651826824FEBBD39d8560584078d1b247", + gasUsed: BigInt(0x14bb7), + gasPrice: BigInt(4100000000), + logs: [ + { + address: "0x314159265dD8dbb310642f98f50C066173C1259b", + blockHash: "0x36b4af7f0538559e581c8588f16477df0f676439ea67fe8d7a2ae4abb20e2566", + blockNumber: 0x3c92b5, + data: "0x00000000000000000000000018c6045651826824febbd39d8560584078d1b247", + index: 0x1a, + topics: [ + "0xce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e82", + "0x93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae", + "0xf0106919d12469348e14ad6a051d0656227e1aba2fefed41737fdf78421b20e1" + ], + transactionHash: "0xc6fcb7d00d536e659a4559d2de29afa9e364094438fef3e72ba80728ce1cb616", + transactionIndex: 0x39, + }, + { + address: "0x6090A6e47849629b7245Dfa1Ca21D94cd15878Ef", + blockHash: "0x36b4af7f0538559e581c8588f16477df0f676439ea67fe8d7a2ae4abb20e2566", + blockNumber: 0x3c92b5, + data: "0x000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000595a32ce", + index: 0x1b, + topics: [ + "0x0f0c27adfd84b60b6f456b0e87cdccb1e5fb9603991588d87fa99f5b6b61e670", + "0xf0106919d12469348e14ad6a051d0656227e1aba2fefed41737fdf78421b20e1", + "0x00000000000000000000000018c6045651826824febbd39d8560584078d1b247" + ], + transactionHash: "0xc6fcb7d00d536e659a4559d2de29afa9e364094438fef3e72ba80728ce1cb616", + transactionIndex: 0x39, + } + ], + logsBloom: "0x00000000000000040000000000100000010000000000000040000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000200000010000000004000000000000000000000000000000000002000000000000000000000000400000000020000000000000000000000000000000000000004000000000000000000000000000000000000000000000000801000000000000000000000020000000000040000000040000000000000000002000000004000000000000000000000000000000000000000000000010000000000000000000000000000000000200000000000000000", + root: "0x9b550a9a640ce50331b64504ef87aaa7e2aaf97344acb6ff111f879b319d2590", + // Should be null for pre-byzantium, but some nodes have backfilled it + status: 1, + to: "0x6090A6e47849629b7245Dfa1Ca21D94cd15878Ef", + hash: "0xc6fcb7d00d536e659a4559d2de29afa9e364094438fef3e72ba80728ce1cb616", + index: 0x39 + }, + + // Byzantium block + { + //byzantium: true, + blockHash: "0x34e5a6cfbdbb84f7625df1de69d218ade4da72f4a2558064a156674e72e976c9", + blockNumber: 0x444f76, + type: 0, + contractAddress: null, + cumulativeGasUsed: BigInt(0x15bfe7), + from: "0x18C6045651826824FEBBD39d8560584078d1b247", + gasUsed: BigInt(0x1b968), + gasPrice: BigInt(1000000000), + logs: [ + { + address: "0xb90E64082D00437e65A76d4c8187596BC213480a", + blockHash: "0x34e5a6cfbdbb84f7625df1de69d218ade4da72f4a2558064a156674e72e976c9", + blockNumber: 0x444f76, + data: "0x", + index: 0x10, + topics: [ + "0x748d071d1992ee1bfe7a39058114d0a50d5798fe8eb3a9bfb4687f024629a2ce", + "0x5574aa58f7191ccab6de6cf75fe2ea0484f010b852fdd8c6b7ae151d6c2f4b83" + ], + transactionHash: "0x7f1c6a58dc880438236d0b0a4ae166e9e9a038dbea8ec074149bd8b176332cac", + transactionIndex: 0x1e, + } + ], + logsBloom: "0x00000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000200000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000800000000000000000800000000000000000000000000000000000000", + root: null, + status: 1, + to: "0xb90E64082D00437e65A76d4c8187596BC213480a", + hash: "0x7f1c6a58dc880438236d0b0a4ae166e9e9a038dbea8ec074149bd8b176332cac", + index: 0x1e + } + ] +}; + +export const BlockchainData: Record = { + homestead +}; diff --git a/packages/providers/src.ts/tests/create-provider.ts b/packages/providers/src.ts/tests/create-provider.ts new file mode 100644 index 000000000..f498c3f9a --- /dev/null +++ b/packages/providers/src.ts/tests/create-provider.ts @@ -0,0 +1,114 @@ + +import { + AlchemyProvider, + AnkrProvider, + CloudflareProvider, + EtherscanProvider, + InfuraProvider, + PocketProvider, + + FallbackProvider, +} from "../index.js"; + +import type { AbstractProvider } from "../index.js"; + +interface ProviderCreator { + name: string; + networks: Array; + create: (network: string) => null | AbstractProvider; +}; + +const allNetworks = [ "default", "homestead" ]; + +const ProviderCreators: Array = [ + { + name: "AlchemyProvider", + networks: allNetworks, + create: function(network: string) { + return new AlchemyProvider(network, "YrPw6SWb20vJDRFkhWq8aKnTQ8JRNRHM"); + } + }, + { + name: "AnkrProvider", + networks: [ "homestead", "matic", "arbitrum" ], + create: function(network: string) { + return new AnkrProvider(network); + } + }, + { + name: "CloudflareProvider", + networks: [ "default", "homestead" ], + create: function(network: string) { + return new CloudflareProvider(network); + } + }, + { + name: "EtherscanProvider", + networks: allNetworks, + create: function(network: string) { + return new EtherscanProvider(network, "FPFGK6JSW2UHJJ2666FG93KP7WC999MNW7"); + } + }, + { + name: "InfuraProvider", + networks: allNetworks, + create: function(network: string) { + return new InfuraProvider(network, "49a0efa3aaee4fd99797bfa94d8ce2f1"); + } + }, + { + name: "PocketProvider", + networks: allNetworks, + create: function(network: string) { + const apiKeys: Record = { + homestead: "6004bcd10040261633ade990", + ropsten: "6004bd4d0040261633ade991", + rinkeby: "6004bda20040261633ade994", + goerli: "6004bd860040261633ade992", + }; + return new PocketProvider(network, apiKeys[network]); + } + }, + + { + name: "FallbackProvider", + networks: allNetworks, + create: function(network: string) { + const providers: Array = []; + for (const creator of ProviderCreators) { + if (creator.name === "FallbackProvider") { continue; } + if (creator.networks.indexOf(network) >= 0) { + const provider = creator.create(network); + if (provider) { providers.push(provider); } + } + } + return new FallbackProvider(providers); + } + }, +]; + +export const providerNames = Object.freeze(ProviderCreators.map((c) => (c.name))); + +function getCreator(provider: string): null | ProviderCreator { + const creators = ProviderCreators.filter((c) => (c.name === provider)); + if (creators.length === 1) { return creators[0]; } + return null; +} + +export function getProviderNetworks(provider: string): Array { + const creator = getCreator(provider); + if (creator) { return creator.networks; } + return [ ]; +} + +export function getProvider(provider: string, network: string): null | AbstractProvider { + const creator = getCreator(provider); + if (creator) { return creator.create(network); } + return null; +} + +export function connect(network: string): AbstractProvider { + const provider = getProvider("InfuraProvider", network); + if (provider == null) { throw new Error(`could not connect to ${ network }`); } + return provider; +} diff --git a/packages/providers/src.ts/tests/test-avatar.ts b/packages/providers/src.ts/tests/test-avatar.ts new file mode 100644 index 000000000..5bf7768d8 --- /dev/null +++ b/packages/providers/src.ts/tests/test-avatar.ts @@ -0,0 +1,30 @@ +import assert from "assert"; + +import { connect } from "./create-provider.js"; + +describe("Resolve ENS avatar", function() { + [ + { title: "data", name: "data-avatar.tests.eth", value: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAMAAACeL25MAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyVpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDQ4OCwgMjAyMC8wNy8xMC0yMjowNjo1MyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIyLjAgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NUQ4NTEyNUIyOEIwMTFFQzg0NTBDNTU2RDk1NTA5NzgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NUQ4NTEyNUMyOEIwMTFFQzg0NTBDNTU2RDk1NTA5NzgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1RDg1MTI1OTI4QjAxMUVDODQ1MEM1NTZEOTU1MDk3OCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1RDg1MTI1QTI4QjAxMUVDODQ1MEM1NTZEOTU1MDk3OCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PkbM0uMAAAAGUExURQAA/wAAAHtivz4AAAAOSURBVHjaYmDABAABBgAAFAABaEkyYwAAAABJRU5ErkJggg==" }, + { title: "ipfs", name: "ipfs-avatar.tests.eth", value: "https:/\/gateway.ipfs.io/ipfs/QmQsQgpda6JAYkFoeVcj5iPbwV3xRcvaiXv3bhp1VuYUqw" }, + { title: "url", name: "url-avatar.tests.eth", value: "https:/\/ethers.org/static/logo.png" }, + ].forEach((test) => { + it(`Resolves avatar for ${ test.title }`, async function() { + this.timeout(60000); + const provider = connect("ropsten"); + const avatar = await provider.getAvatar(test.name); + assert.equal(test.value, avatar, "avatar url"); + }); + }); + + [ + { title: "ERC-1155", name: "nick.eth", value: "https:/\/lh3.googleusercontent.com/hKHZTZSTmcznonu8I6xcVZio1IF76fq0XmcxnvUykC-FGuVJ75UPdLDlKJsfgVXH9wOSmkyHw0C39VAYtsGyxT7WNybjQ6s3fM3macE" }, + { title: "ERC-721", name: "brantly.eth", value: "https:/\/api.wrappedpunks.com/images/punks/2430.png" } + ].forEach((test) => { + it(`Resolves avatar for ${ test.title }`, async function() { + this.timeout(60000); + const provider = connect("homestead"); + const avatar = await provider.getAvatar(test.name); + assert.equal(avatar, test.value, "avatar url"); + }); + }); +}); diff --git a/packages/providers/src.ts/tests/test-blockchain-data.ts b/packages/providers/src.ts/tests/test-blockchain-data.ts new file mode 100644 index 000000000..05e3b8861 --- /dev/null +++ b/packages/providers/src.ts/tests/test-blockchain-data.ts @@ -0,0 +1,238 @@ +import assert from "assert"; + +import { retryIt, stats } from "./utils.js"; + +import { providerNames, getProvider } from "./create-provider.js"; + +import { BlockchainData } from "./blockchain-data.js"; +import type { + TestCaseBlockchainBlock, + TestCaseBlockchainLog, + TestCaseBlockchainTransaction, + TestCaseBlockchainReceipt, +} from "./blockchain-data.js"; + + +function sumhash(hash: string): string { + return `${ hash.substring(0, 6) }..${ hash.substring(hash.length - 4) }`; +} + +function checkBlock(actual: any, test: TestCaseBlockchainBlock): void { + assert.equal(actual.hash, test.hash, "hash"); + assert.equal(actual.parentHash, test.parentHash, "parentHash"); + assert.equal(actual.number, test.number, "number"); + assert.equal(actual.timestamp, test.timestamp, "timestamp"); + assert.equal(actual.nonce, test.nonce, "nonce"); + assert.equal(actual.difficulty, test.difficulty, "difficulty"); + assert.equal(actual.gasLimit, test.gasLimit, "gasLimit"); + assert.equal(actual.gasUsed, test.gasUsed, "gasUsed"); + assert.equal(actual.miner, test.miner, "miner"); + assert.equal(actual.extraData, test.extraData, "extraData"); + + if (test.baseFeePerGas != null) { + assert.equal(actual.baseFeePerGas, test.baseFeePerGas, "baseFeePerGas"); + } + + assert.ok(!!actual.transactions, "hasTxs"); + assert.equal(actual.transactions.length, test.transactions.length, "txs.length"); + for (let i = 0; i < actual.transactions.length; i++) { + const atx = actual.transactions[i]; + const ttx = test.transactions[i]; + assert.equal(atx, ttx, `txs[${ i }]`); + } +} + +function checkTransaction(actual: any, test: TestCaseBlockchainTransaction): void { + assert.equal(actual.hash, test.hash, "hash"); + assert.equal(actual.blockHash, test.blockHash, "blockHash"); + assert.equal(actual.blockNumber, test.blockNumber, "blockNumber"); + assert.equal(actual.type, test.type, "type"); + assert.equal(actual.index, test.index, "index"); + assert.equal(actual.from, test.from, "from"); + assert.equal(actual.to, test.to, "to"); + + assert.equal(actual.gasLimit, test.gasLimit, "gasLimit"); + + assert.equal(actual.gasPrice, test.gasPrice, "gasPrice"); + if (test.type === 2) { + assert.equal(actual.maxFeePerGas, test.maxFeePerGas, "maxFeePerGas"); + assert.equal(actual.maxPriorityFeePerGas, test.maxPriorityFeePerGas, "maxPriorityFeePerGas"); + } else { + assert.equal(actual.maxFeePerGas, null, "maxFeePerGas:null"); + assert.equal(actual.maxPriorityFeePerGas, null, "maxPriorityFeePerGas:null"); + } + + assert.equal(actual.value, test.value, "value"); + assert.equal(actual.nonce, test.nonce, "nonce"); + assert.equal(actual.data, test.data, "data"); + + assert.equal(actual.creates, test.creates, "creates"); + assert.equal(actual.signature.r, test.signature.r, "signature.r"); + assert.equal(actual.signature.s, test.signature.s, "signature.s"); + assert.equal(actual.signature.networkV, test.signature.v, "signature.v"); +} + +function checkLog(actual: any, test: TestCaseBlockchainLog): void { + assert.equal(actual.address, test.address, "address"); + assert.equal(actual.blockHash, test.blockHash, "blockHash"); + assert.equal(actual.blockNumber, test.blockNumber, "blockNumber"); + assert.equal(actual.data, test.data, "data"); + assert.equal(actual.index, test.index, "logIndex"); + assert.equal(actual.topics.join(","), test.topics.join(","), "topics"); + assert.equal(actual.transactionHash, test.transactionHash, "transactionHash"); + assert.equal(actual.transactionIndex, test.transactionIndex, "transactionIndex"); +} + +function checkTransactionReceipt(actual: any, test: TestCaseBlockchainReceipt): void { + assert.equal(actual.hash, test.hash, "hash"); + assert.equal(actual.index, test.index, "index"); + + assert.equal(actual.to, test.to, "to"); + assert.equal(actual.from, test.from, "from"); + assert.equal(actual.contractAddress, test.contractAddress, "contractAddress"); + + assert.equal(actual.blockHash, test.blockHash, "blockHash"); + assert.equal(actual.blockNumber, test.blockNumber, "blockNumber"); + + assert.equal(actual.logsBloom, test.logsBloom, "logsBloom"); + + // @TODO: Logs + assert.ok(actual.logs != null, "logs != null"); + assert.equal(actual.logs.length, test.logs.length, "logs.length"); + for (let i = 0; i < actual.logs.length; i++) { + checkLog(actual.logs[i], test.logs[i]); + } + + assert.equal(actual.gasUsed, test.gasUsed, "gasUsed"); + assert.equal(actual.cumulativeGasUsed, test.cumulativeGasUsed, "cumulativeGasUsed"); + assert.equal(actual.gasPrice, test.gasPrice, "gasPrice"); + + // Some nodes add status to pre-byzantium nodes, so don't include it at all + if (actual.status != null) { + assert.equal(actual.status, test.status, `status: ${ actual.status } != ${ test.status }`); + } + + // Some nodes dropped root, event on pre-byzantium blocks + if (actual.root != null) { + assert.equal(actual.root, test.root, `root ${ actual.root } != ${ test.root }`); + } +} + +function stall(duration: number) { + return new Promise((resolve) => { + setTimeout(resolve, duration); + }); +} + +describe("Test Provider Methods", function() { + before(function() { + stats.start("Test Provider Methods"); + }); + + // Wait before each testcase so the backends don't throttle + // use as much + beforeEach(async function() { + await stall(1000); + }); + + after(function() { + stats.end(); + }); + + // Etherscan does not support this + const skipGetBlockByBlockHash = [ "EtherscanProvider" ]; + + for (const providerName of providerNames) { + for (const network in BlockchainData) { + const provider = getProvider(providerName, network); + if (provider == null || providerName === "CloudflareProvider") { + console.log(`Skipping ${providerName}:${ network }...`); + continue; + } + + const tests = BlockchainData[network]; + for (const test of tests.addresses) { + const address = test.address; + + if (test.balance != null) { + retryIt(`fetches address balance: ${ providerName }.${ network }.${ sumhash(address) }`, async function() { + assert.equal(await provider.getBalanceOf(address), test.balance, "balance"); + }); + } + + if (test.code != null) { + retryIt(`fetches address code: ${ providerName }.${ network }.${ sumhash(address) }`, async function() { + assert.equal(await provider.getCode(address), test.code, "code"); + }); + } + + if (test.name != null) { + retryIt(`fetches address reverse record: ${ providerName }.${ network }.${ sumhash(address) }`, async function() { + this.skip(); + assert.equal(await provider.lookupAddress(address), test.name, "name"); + }); + } + + if (test.storage != null) { + retryIt(`fetches address storage: ${ providerName }.${ network }.${ sumhash(address) }`, async function() { + for (const slot in test.storage) { + const value = test.storage[slot]; + assert.equal(await provider.getStorageAt(address, slot), value, `storage:${ slot }`); + } + }); + } + } + + for (const test of tests.blocks) { + retryIt(`fetches block by number: ${ providerName }.${ network }.${ test.number }`, async function() { + checkBlock(await provider.getBlock(test.number), test); + }); + + if (skipGetBlockByBlockHash.indexOf(providerName) === -1) { + retryIt(`fetches block by hash: ${ providerName }.${ network }.${ sumhash(test.hash) }`, async function() { + checkBlock(await provider.getBlock(test.hash), test); + }); + + } else { + retryIt(`throws unsupported operation for fetching block by hash: ${ providerName }.${ network }.${ sumhash(test.hash) }`, async function() { + await assert.rejects( + provider.getBlock(test.hash), + (error) => { + return (error.code === "UNSUPPORTED_OPERATION" && + error.operation === "getBlock(blockHash)"); + } + ); + }); + } + } + + for (const test of tests.transactions) { + retryIt(`fetches transaction: ${ providerName }.${ network }.${ sumhash(test.hash) }`, async function() { + checkTransaction(await provider.getTransaction(test.hash), test); + }); + } + + for (const test of tests.receipts) { + retryIt(`fetches transaction receipt: ${ providerName }.${ network }.${ sumhash(test.hash) }`, async function() { + checkTransactionReceipt(await provider.getTransactionReceipt(test.hash), test); + }); + } + } + + it(`fetches a pending block: ${ providerName }`, async function() { + this.timeout(15000); + + const provider = getProvider(providerName, "homestead"); + assert.ok(provider, "provider"); + + const block = await provider.getBlock("pending"); + assert.ok(!!block, "block"); + + assert.equal(block.hash, null, "hash"); + assert.ok(typeof(block.number) === "number", "number"); + assert.ok(typeof(block.timestamp) === "number", "timestamp"); + }); + } + +}); + diff --git a/packages/providers/src.ts/tests/test-ccip-read.ts b/packages/providers/src.ts/tests/test-ccip-read.ts new file mode 100644 index 000000000..68339a16f --- /dev/null +++ b/packages/providers/src.ts/tests/test-ccip-read.ts @@ -0,0 +1,177 @@ +import assert from "assert"; + +import { concat, dataLength } from "@ethersproject/bytes"; +import { keccak256 } from "@ethersproject/crypto"; +import { toArray } from "@ethersproject/math"; +import { isCallException, isError } from "@ethersproject/logger"; + +import { connect } from "./create-provider.js"; + +describe("Test CCIP execution", function() { + + // This matches the verify method in the Solidity contract against the + // processed data from the endpoint + const verify = function(sender: string, data: string, result: string): void { + const check = concat([ + toArray(dataLength(sender)), sender, + toArray(dataLength(data)), data + ]); + assert.equal(result, keccak256(check), "response is equal"); + } + + const address = "0xAe375B05A08204C809b3cA67C680765661998886"; + const calldata = "0x1234"; + + it("testGet passes under normal operation", async function() { + this.timeout(60000); + + const provider = connect("ropsten"); + + // testGet(bytes callData = "0x1234") + const tx = { + to: address, enableCcipRead: true, + data: "0xa5f3271e000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000" + } + + const result = await provider.call(tx); + verify(address, calldata, result); + }); + + it("testGet should fail with CCIP not explicitly enabled by overrides", async function() { + this.timeout(60000); + + const provider = connect("ropsten"); + + // testGet(bytes callData = "0x1234") + const tx = { + to: address, + data: "0xa5f3271e000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000" + } + + await assert.rejects(async function() { + const result = await provider.call(tx); + console.log(result); + }, (error: unknown) => { + const offchainErrorData = "0x556f1830000000000000000000000000ae375b05a08204c809b3ca67c68076566199888600000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000140b1494be100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004068747470733a2f2f6574686572732e7269636d6f6f2e776f726b6572732e6465762f746573742d636369702d726561642f7b73656e6465727d2f7b646174617d00000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d4d79206578747261206461746100000000000000000000000000000000000000"; + return (isCallException(error) && error.data === offchainErrorData); + }); + }); + + it("testGet should fail with CCIP explicitly disabled on provider", async function() { + this.timeout(60000); + + const provider = connect("ropsten"); + provider.disableCcipRead = true; + + // testGetFail(bytes callData = "0x1234") + const tx = { + to: address, enableCcipRead: true, + data: "0xa5f3271e000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000" + } + + await assert.rejects(async function() { + const result = await provider.call(tx); + console.log(result); + }, (error: unknown) => { + const offchainErrorData = "0x556f1830000000000000000000000000ae375b05a08204c809b3ca67c68076566199888600000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000140b1494be100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004068747470733a2f2f6574686572732e7269636d6f6f2e776f726b6572732e6465762f746573742d636369702d726561642f7b73656e6465727d2f7b646174617d00000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d4d79206578747261206461746100000000000000000000000000000000000000"; + return (isCallException(error) && error.data === offchainErrorData); + }); + }); + + it("testGetFail should fail if all URLs 5xx", async function() { + this.timeout(60000); + + const provider = connect("ropsten"); + + // testGetFail(bytes callData = "0x1234") + const tx = { + to: address, enableCcipRead: true, + data: "0x36f9cea6000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000" + } + + await assert.rejects(async function() { + const result = await provider.call(tx); + console.log(result); + }, (error: unknown) => { + const infoJson = '{"urls":["https:/\/ethers.ricmoo.workers.dev/status/500/{sender}/{data}"],"errorMessages":["hello world"]}'; + return (isError(error, "OFFCHAIN_FAULT") && error.reason === "500_SERVER_ERROR" && + JSON.stringify(error.info) === infoJson); + }); + }); + + it("testGetSenderFail should fail if sender does not match", async function() { + this.timeout(60000); + + const provider = connect("ropsten"); + + // testGetSenderFail(bytes callData = "0x1234") + const tx = { + to: address, enableCcipRead: true, + data: "0x64bff6d1000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000", + } + + await assert.rejects(async function() { + const result = await provider.call(tx); + console.log(result); + }, (error: unknown) => { + const errorArgsJson = '["0x0000000000000000000000000000000000000000",["https://ethers.ricmoo.workers.dev/test-ccip-read/{sender}/{data}"],"0x1234","0xb1494be1","0x4d792065787472612064617461"]'; + const offchainErrorData = "0x556f1830000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000140b1494be100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004068747470733a2f2f6574686572732e7269636d6f6f2e776f726b6572732e6465762f746573742d636369702d726561642f7b73656e6465727d2f7b646174617d00000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d4d79206578747261206461746100000000000000000000000000000000000000"; + return (isCallException(error) && error.data === offchainErrorData && + error.errorSignature === "OffchainLookup(address,string[],bytes,bytes4,bytes)" && + JSON.stringify(error.errorArgs) === errorArgsJson); + }); + }); + + + it("testGetMissing should fail if early URL 4xx", async function() { + this.timeout(60000); + + const provider = connect("ropsten"); + + // testGetMissing(bytes callData = "0x1234") + const tx = { + to: address, enableCcipRead: true, + data: "0x4ece8d7d000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000" + } + + await assert.rejects(async function() { + const result = await provider.call(tx); + console.log(result); + }, (error: unknown) => { + const infoJson = '{"url":"https:/\/ethers.ricmoo.workers.dev/status/404/{sender}/{data}","errorMessage":"hello world"}'; + return (isError(error, "OFFCHAIN_FAULT") && error.reason === "404_MISSING_RESOURCE" && + JSON.stringify(error.info || "") === infoJson); + }); + }); + + + it("testGetFallback passes if any URL returns correctly", async function() { + this.timeout(60000); + + const provider = connect("ropsten"); + + // testGetFallback(bytes callData = "0x1234") + const tx = { + to: address, enableCcipRead: true, + data: "0xedf4a021000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000" + } + + const result = await provider.call(tx); + verify(address, calldata, result); + }); + + it("testPost passes under normal operation", async function() { + this.timeout(60000); + + const provider = connect("ropsten"); + + // testPost(bytes callData = "0x1234") + const tx = { + to: address, enableCcipRead: true, + data: "0x66cab49d000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000" + } + + const result = await provider.call(tx); + verify(address, calldata, result); + }); +}) diff --git a/packages/providers/src.ts/tests/test-events.ts b/packages/providers/src.ts/tests/test-events.ts new file mode 100644 index 000000000..8be21d2f0 --- /dev/null +++ b/packages/providers/src.ts/tests/test-events.ts @@ -0,0 +1,59 @@ +import assert from "assert"; + +import { getProvider } from "./create-provider.js"; + +import type { + AbstractProvider +} from "../index.js"; + + +async function testBlockEvent(provider: AbstractProvider, startBlock: number): Promise { + const blockEvents: Array = await new Promise((resolve, reject) => { + const result: Array = [ ]; + const callback = (blockNumber: number) => { + result.push(blockNumber); + if (result.length >= 2) { + provider.off("block", callback); + resolve(result); + } + }; + provider.on("block", callback); + }); + + assert.ok(blockEvents.length >= 2, "blockEvents.length >= 2"); + + for (let i = 0; i < blockEvents.length; i++) { + assert.equal(blockEvents[i], startBlock + i + 1, `blockNumber + ${ i }`); + } + + assert.equal(await provider.listenerCount("block"), 0, "listenerCount"); +} + +//async function testFilterEvent(provider: AbstractProvider): Promise { +//} + +describe("Tests Events", function() { + // These providers cover all possible + const Providers = [ "EtherscanProvider", "InfuraProvider" ]; + + for (const providerName of Providers) { + it(`responds to block events: ${ providerName }`, async function() { + this.timeout(120000); + const provider = getProvider(providerName, "goerli"); + if (provider == null) { throw new Error("internal; should not happen"); } + await testBlockEvent(provider, await provider.getBlockNumber()); + }); + } + + for (const providerName of Providers) { + it(`responds to filter events: ${ providerName }`, async function() { + this.skip(); +/* + this.timeout(120000); + const provider = getProvider(providerName, "goerli"); + if (provider == null) { throw new Error("internal; should not happen"); } + await testFilterEvent(provider); +*/ + }); + } +}); diff --git a/packages/providers/src.ts/tests/test-wildcard.ts b/packages/providers/src.ts/tests/test-wildcard.ts new file mode 100644 index 000000000..636be0c22 --- /dev/null +++ b/packages/providers/src.ts/tests/test-wildcard.ts @@ -0,0 +1,20 @@ +import assert from "assert"; + +import { connect } from "./create-provider.js"; + +describe("Test EIP-2544 ENS wildcards", function() { + const provider = connect("ropsten"); + + it("Resolves recursively", async function() { + const resolver = await provider.getResolver("ricmoose.hatch.eth"); + assert.ok(resolver, "failed to get resolver"); + + assert.equal(resolver.address, "0x8fc4C380c5d539aE631daF3Ca9182b40FB21D1ae", "address"); + assert.equal(await resolver.supportsWildcard(), true, "supportsWildcard()"); + + // Test pass-through avatar + assert.equal(await resolver.getAvatar(), "https:/\/static.ricmoo.com/uploads/profile-06cb9c3031c9.jpg", "getAvatar()"); + + assert.equal(await resolver.getAddress(), "0x4FaBE0A3a4DDd9968A7b4565184Ad0eFA7BE5411", "getAddress()"); + }); +}); diff --git a/packages/providers/src.ts/tests/utils.ts b/packages/providers/src.ts/tests/utils.ts new file mode 100644 index 000000000..ed43a4e56 --- /dev/null +++ b/packages/providers/src.ts/tests/utils.ts @@ -0,0 +1,114 @@ + +import fs from "fs" +import path from "path"; +import zlib from 'zlib'; + +// Find the package root (based on the nyc output/ folder) +const root = (function() { + let root = process.cwd(); + + while (true) { + if (fs.existsSync(path.join(root, "output"))) { return root; } + const parent = path.join(root, ".."); + if (parent === root) { break; } + root = parent; + } + + throw new Error("could not find root"); +})(); + +// Load the tests +export function loadTests(tag: string): Array { + const filename = path.resolve(root, "testcases", tag + '.json.gz'); + return JSON.parse(zlib.gunzipSync(fs.readFileSync(filename)).toString()); +} + +async function stall(duration: number): Promise { + return new Promise((resolve) => { setTimeout(resolve, duration); }); +} + +export interface MochaRunnable { + timeout: (value: number) => void; + skip: () => void; +} + +const ATTEMPTS = 5; +export async function retryIt(name: string, func: (this: MochaRunnable) => Promise): Promise { + it(name, async function() { + this.timeout(ATTEMPTS * 5000); + + for (let i = 0; i < ATTEMPTS; i++) { + try { + await func.call(this); + return; + } catch (error: any) { + if (error.message === "sync skip; aborting execution") { + // Skipping a test; let mocha handle it + throw error; + } else if (error.code === "ERR_ASSERTION") { + // Assertion error; let mocha scold us + throw error; + } else { + if (i === ATTEMPTS - 1) { + stats.pushRetry(i, name, error); + } else { + await stall(500 * (1 << i)); + stats.pushRetry(i, name, null); + } + } + } + } + + // All hope is lost. + throw new Error(`Failed after ${ ATTEMPTS } attempts; ${ name }`); + }); +} + +export interface StatSet { + name: string; + retries: Array<{ message: string, error: null | Error }>; +} + +const _guard = { }; + +export class Stats { + #stats: Array; + + constructor(guard: any) { + if (guard !== _guard) { throw new Error("private constructor"); } + this.#stats = [ ]; + } + + #currentStats(): StatSet { + if (this.#stats.length === 0) { throw new Error("no active stats"); } + return this.#stats[this.#stats.length - 1]; + } + + pushRetry(attempt: number, line: string, error: null | Error): void { + const { retries } = this.#currentStats(); + + if (attempt > 0) { retries.pop(); } + if (retries.length < 100) { + retries.push({ + message: `${ attempt + 1 } failures: ${ line }`, + error + }); + } + } + + start(name: string): void { + this.#stats.push({ name, retries: [ ] }); + } + + end(): void { + const { name, retries } = this.#currentStats(); + if (retries.length === 0) { return; } + console.log(`Warning: The following tests required retries (${ name })`); + retries.forEach(({ error, message }) => { + console.log(" " + message); + if (error) { console.log(error); } + }); + } +} + +export const stats = new Stats(_guard); diff --git a/packages/providers/src.ts/ws-browser.ts b/packages/providers/src.ts/ws-browser.ts new file mode 100644 index 000000000..4512bb7c3 --- /dev/null +++ b/packages/providers/src.ts/ws-browser.ts @@ -0,0 +1,17 @@ + +declare global { + interface Window { } + const window: Window; + const self: Window; +} + +function getGlobal(): any { + if (typeof self !== 'undefined') { return self; } + if (typeof window !== 'undefined') { return window; } + if (typeof global !== 'undefined') { return global; } + throw new Error('unable to locate global object'); +}; + +const _WebSocket = getGlobal().WebSocket; + +export { _WebSocket as WebSocket }; diff --git a/packages/providers/tsconfig.json b/packages/providers/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/providers/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/rlp/.npmignore b/packages/rlp/.npmignore new file mode 100644 index 000000000..03a92044c --- /dev/null +++ b/packages/rlp/.npmignore @@ -0,0 +1,3 @@ +/src.ts/tests/** +/lib/tests/** +tsconfig.tsbuildinfo diff --git a/packages/rlp/LICENSE.md b/packages/rlp/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/rlp/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/rlp/package.json b/packages/rlp/package.json new file mode 100644 index 000000000..d0d1e44f7 --- /dev/null +++ b/packages/rlp/package.json @@ -0,0 +1,34 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/bytes": "^6.0.0-beta.1", + "@ethersproject/logger": "^6.0.0-beta.1" + }, + "description": "Recursive-Length Prefix (RLP) coder.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "ethers", + "rlp" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/rlp", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/rlp", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/rlp/src.ts/_version.ts b/packages/rlp/src.ts/_version.ts new file mode 100644 index 000000000..72a0d0c72 --- /dev/null +++ b/packages/rlp/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/rlp@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/rlp/src.ts/decode.ts b/packages/rlp/src.ts/decode.ts new file mode 100644 index 000000000..c3ce480fe --- /dev/null +++ b/packages/rlp/src.ts/decode.ts @@ -0,0 +1,111 @@ +//See: https://github.com/ethereum/wiki/wiki/RLP + +import { hexlify } from "@ethersproject/bytes"; + +import { logger } from "./logger.js"; + +import type { BytesLike } from "@ethersproject/bytes"; + +import type { RlpStructuredData } from "./types.js"; + + +function hexlifyByte(value: number): string { + let result = value.toString(16); + while (result.length < 2) { result = "0" + result; } + return "0x" + result; +} + +function unarrayifyInteger(data: Uint8Array, offset: number, length: number): number { + let result = 0; + for (let i = 0; i < length; i++) { + result = (result * 256) + data[offset + i]; + } + return result; +} + +type Decoded = { + result: any; + consumed: number; +}; + +function _decodeChildren(data: Uint8Array, offset: number, childOffset: number, length: number): Decoded { + const result = []; + + while (childOffset < offset + 1 + length) { + const decoded = _decode(data, childOffset); + + result.push(decoded.result); + + childOffset += decoded.consumed; + if (childOffset > offset + 1 + length) { + logger.throwError("child data too short", "BUFFER_OVERRUN", { + buffer: data, length, offset + }); + } + } + + return {consumed: (1 + length), result: result}; +} + +// returns { consumed: number, result: Object } +function _decode(data: Uint8Array, offset: number): { consumed: number, result: any } { + if (data.length === 0) { + logger.throwError("data too short", "BUFFER_OVERRUN", { + buffer: data, length: 0, offset: 1 + }); + } + + const checkOffset = (offset: number) => { + if (offset > data.length) { + logger.throwError("data short segment too short", "BUFFER_OVERRUN", { + buffer: data, length: data.length, offset + }); + } + }; + + // Array with extra length prefix + if (data[offset] >= 0xf8) { + const lengthLength = data[offset] - 0xf7; + checkOffset(offset + 1 + lengthLength); + + const length = unarrayifyInteger(data, offset + 1, lengthLength); + checkOffset(offset + 1 + lengthLength + length); + + return _decodeChildren(data, offset, offset + 1 + lengthLength, lengthLength + length); + + } else if (data[offset] >= 0xc0) { + const length = data[offset] - 0xc0; + checkOffset(offset + 1 + length); + + return _decodeChildren(data, offset, offset + 1, length); + + } else if (data[offset] >= 0xb8) { + const lengthLength = data[offset] - 0xb7; + checkOffset(offset + 1 + lengthLength); + + const length = unarrayifyInteger(data, offset + 1, lengthLength); + checkOffset(offset + 1 + lengthLength + length); + + const result = hexlify(data.slice(offset + 1 + lengthLength, offset + 1 + lengthLength + length)); + return { consumed: (1 + lengthLength + length), result: result } + + } else if (data[offset] >= 0x80) { + const length = data[offset] - 0x80; + checkOffset(offset + 1 + length); + + const result = hexlify(data.slice(offset + 1, offset + 1 + length)); + return { consumed: (1 + length), result: result } + } + + return { consumed: 1, result: hexlifyByte(data[offset]) }; +} + +export function decodeRlp(_data: BytesLike): RlpStructuredData { + const data = logger.getBytes(_data, "data"); + const decoded = _decode(data, 0); + if (decoded.consumed !== data.length) { + logger.throwArgumentError("unexpected junk after rlp payload", "data", _data); + } + return decoded.result; +} + diff --git a/packages/rlp/src.ts/encode.ts b/packages/rlp/src.ts/encode.ts new file mode 100644 index 000000000..a70ba5a59 --- /dev/null +++ b/packages/rlp/src.ts/encode.ts @@ -0,0 +1,61 @@ +//See: https://github.com/ethereum/wiki/wiki/RLP + +import { logger } from "./logger.js"; + +import type { RlpStructuredData } from "./types.js"; + + +function arrayifyInteger(value: number): Array { + const result = []; + while (value) { + result.unshift(value & 0xff); + value >>= 8; + } + return result; +} + +function _encode(object: Array | string): Array { + if (Array.isArray(object)) { + let payload: Array = []; + object.forEach(function(child) { + payload = payload.concat(_encode(child)); + }); + + if (payload.length <= 55) { + payload.unshift(0xc0 + payload.length) + return payload; + } + + const length = arrayifyInteger(payload.length); + length.unshift(0xf7 + length.length); + + return length.concat(payload); + + } + + const data: Array = Array.prototype.slice.call(logger.getBytes(object, "object")); + + if (data.length === 1 && data[0] <= 0x7f) { + return data; + + } else if (data.length <= 55) { + data.unshift(0x80 + data.length); + return data; + } + + const length = arrayifyInteger(data.length); + length.unshift(0xb7 + length.length); + + return length.concat(data); +} + +const nibbles = "0123456789abcdef"; + +export function encodeRlp(object: RlpStructuredData): string { + let result = "0x"; + for (const v of _encode(object)) { + result += nibbles[v >> 4]; + result += nibbles[v & 0xf]; + } + return result; +} diff --git a/packages/rlp/src.ts/index.ts b/packages/rlp/src.ts/index.ts new file mode 100644 index 000000000..fe681db35 --- /dev/null +++ b/packages/rlp/src.ts/index.ts @@ -0,0 +1,4 @@ +export { encodeRlp } from "./encode.js"; +export { decodeRlp } from "./decode.js"; + +export type { RlpStructuredData } from "./types.js"; diff --git a/packages/rlp/src.ts/logger.ts b/packages/rlp/src.ts/logger.ts new file mode 100644 index 000000000..6fde778de --- /dev/null +++ b/packages/rlp/src.ts/logger.ts @@ -0,0 +1,3 @@ +import { Logger } from "@ethersproject/logger"; +import { version } from "./_version.js"; +export const logger = new Logger(version); diff --git a/packages/rlp/src.ts/tests/test-rlp.ts b/packages/rlp/src.ts/tests/test-rlp.ts new file mode 100644 index 000000000..132da22c5 --- /dev/null +++ b/packages/rlp/src.ts/tests/test-rlp.ts @@ -0,0 +1,101 @@ +import assert from "assert"; + +import { loadTests } from "./utils.js"; + +import { decodeRlp, encodeRlp } from "../index.js"; + +import type { TestCaseRlp } from "./types.js"; + +describe("Test RLP Coder", function() { + + const tests = loadTests("rlp"); + + tests.forEach(({ name, encoded, decoded }) => { + it(`encodes ${ name }`, function() { + assert.equal(encodeRlp(decoded), encoded); + }); + }); + + tests.forEach(({ name, encoded, decoded }) => { + it(`decodes ${ name }`, function() { + assert.deepStrictEqual(decodeRlp(encoded), decoded); + }); + }); +}); + +describe("Test bad RLP Data", function() { + it("fails encoding data with invalid values", function() { + assert.throws(() => { + encodeRlp([ "0x1234", 1234 ]); + }, (error) => { + return (error.code === "INVALID_ARGUMENT" && + error.argument === "object" && + error.value === 1234) + }); + }); + + it("fails decoding data with trailing junk", function() { + assert.throws(() => { + // Zeros_1 + decodeRlp("0x0042"); + }, (error) => { + return (error.code === "INVALID_ARGUMENT" && + error.message.match(/^unexpected junk after rlp payload/) && + error.argument === "data" && + error.value === "0x0042") + }); + }); + + it ("fails decoding short data", function() { + assert.throws(() => { + decodeRlp("0x"); + }, (error) => { + return (error.code === "BUFFER_OVERRUN" && + error.message.match(/^data too short/) && + Buffer.from(error.buffer).toString("hex") === "" && + error.offset === 1 && + error.length === 0) + }); + }); + + it ("fails decoding short data in child", function() { + assert.throws(() => { + decodeRlp("0xc8880102030405060708"); + }, (error) => { + return (error.code === "BUFFER_OVERRUN" && + error.message.match(/^child data too short/) && + Buffer.from(error.buffer).toString("hex") === "c8880102030405060708" && + error.offset === 0 && + error.length === 8) + }); + }); + + it ("fails decoding short segment data", function() { + assert.throws(() => { + // [["0x4243"], ["0x3145"]] = 0xc8 c3 82 4243 c3 82 3145 + // XXXX + decodeRlp("0xc8c382c3823145"); + }, (error) => { + return (error.code === "BUFFER_OVERRUN" && + error.message.match(/^data short segment too short/) && + Buffer.from(error.buffer).toString("hex") === "c8c382c3823145" && + error.offset === 9 && + error.length === 7) + }); + }); +}); + +/* + utils.RLP.encode([["0x4243"], ["0x3145"]]) + + 0xc8 c3 82 4243 c3 82 3145 + + { + "name": "arrayShort2", + "decoded": [ + "0x48656c6c6f20576f726c64", + "0x48656c6c6f20576f726c64" + ], + "encoded": "0xd8 8b 48656c6c6f20576f726c64 8b 48656c6c6f20576f726c64" + }, +*/ diff --git a/packages/rlp/src.ts/tests/types.ts b/packages/rlp/src.ts/tests/types.ts new file mode 100644 index 000000000..25196c5c3 --- /dev/null +++ b/packages/rlp/src.ts/tests/types.ts @@ -0,0 +1,7 @@ +export type NestedHexString = string | Array; + +export interface TestCaseRlp { + name: string; + encoded: string; + decoded: NestedHexString; +} diff --git a/packages/rlp/src.ts/tests/utils.ts b/packages/rlp/src.ts/tests/utils.ts new file mode 100644 index 000000000..b40517e1b --- /dev/null +++ b/packages/rlp/src.ts/tests/utils.ts @@ -0,0 +1,25 @@ + +import fs from "fs" +import path from "path"; +import zlib from 'zlib'; + +// Find the package root (based on the nyc output/ folder) +const root = (function() { + let root = process.cwd(); + + while (true) { + if (fs.existsSync(path.join(root, "output"))) { return root; } + const parent = path.join(root, ".."); + if (parent === root) { break; } + root = parent; + } + + throw new Error("could not find root"); +})(); + +// Load the tests +export function loadTests(tag: string): Array { + const filename = path.resolve(root, "testcases", tag + '.json.gz'); + return JSON.parse(zlib.gunzipSync(fs.readFileSync(filename)).toString()); +} + diff --git a/packages/rlp/src.ts/types.ts b/packages/rlp/src.ts/types.ts new file mode 100644 index 000000000..fd1e2c3bd --- /dev/null +++ b/packages/rlp/src.ts/types.ts @@ -0,0 +1 @@ +export type RlpStructuredData = string | Array; diff --git a/packages/rlp/tsconfig.json b/packages/rlp/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/rlp/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/signing-key/.npmignore b/packages/signing-key/.npmignore new file mode 100644 index 000000000..03a92044c --- /dev/null +++ b/packages/signing-key/.npmignore @@ -0,0 +1,3 @@ +/src.ts/tests/** +/lib/tests/** +tsconfig.tsbuildinfo diff --git a/packages/signing-key/LICENSE.md b/packages/signing-key/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/signing-key/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/signing-key/package.json b/packages/signing-key/package.json new file mode 100644 index 000000000..e0d7b8ee7 --- /dev/null +++ b/packages/signing-key/package.json @@ -0,0 +1,40 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/bytes": "^6.0.0-beta.1", + "@ethersproject/crypto": "^6.0.0-beta.1", + "@ethersproject/logger": "^6.0.0-beta.1", + "@ethersproject/math": "^6.0.0-beta.1", + "@ethersproject/properties": "^6.0.0-beta.1", + "@noble/secp256k1": "1.5.5" + }, + "dummy": { + "hash.js": "1.1.7" + }, + "description": "Elliptic curve library functions for the secp256k1 curve.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "ethers" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/signing-key", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/signing-key", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/signing-key/src.ts/_version.ts b/packages/signing-key/src.ts/_version.ts new file mode 100644 index 000000000..e63f0a14e --- /dev/null +++ b/packages/signing-key/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/signing-key@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/signing-key/src.ts/index.ts b/packages/signing-key/src.ts/index.ts new file mode 100644 index 000000000..edcab570a --- /dev/null +++ b/packages/signing-key/src.ts/index.ts @@ -0,0 +1,5 @@ + +export { Signature } from "./signature.js"; +export { SigningKey } from "./signing-key.js"; + +export type { SignatureLike } from "./signature.js"; diff --git a/packages/signing-key/src.ts/logger.ts b/packages/signing-key/src.ts/logger.ts new file mode 100644 index 000000000..a1bfc739b --- /dev/null +++ b/packages/signing-key/src.ts/logger.ts @@ -0,0 +1,3 @@ +import { version } from "./_version.js"; +import { Logger } from "@ethersproject/logger"; +export const logger = new Logger(version); diff --git a/packages/signing-key/src.ts/signature.ts b/packages/signing-key/src.ts/signature.ts new file mode 100644 index 000000000..9a8e0a5cb --- /dev/null +++ b/packages/signing-key/src.ts/signature.ts @@ -0,0 +1,283 @@ +import { getStore, setStore } from "@ethersproject/properties"; + +//import type { BigNumberish } from "@ethersproject/bignumber"; +import type { Freezable, Frozen } from "@ethersproject/properties"; + +import { arrayify, concat, dataLength, hexlify, isHexString } from "@ethersproject/bytes"; + +import type { BytesLike } from "@ethersproject/bytes"; + +import type { BigNumberish } from "@ethersproject/logger"; + +import { logger } from "./logger.js"; + + +// Constants +const BN_0 = BigInt(0); +const BN_1 = BigInt(1); +const BN_2 = BigInt(2); +const BN_27 = BigInt(27); +const BN_28 = BigInt(28); +const BN_35 = BigInt(35); + + +export type SignatureLike = Signature | string | { + r: string; + s: string; + v: BigNumberish; + //chainId?: BigNumberish; + yParity?: 0 | 1; + yParityAndS?: string; +//} | { +// r: string; +// s: string; +// //chainId: BigNumberish; +// v?: BigNumberish; +// yParity?: 0 | 1 +// yParityAndS?: string; +} | { + r: string; + yParityAndS: string; + //chainId?: BigNumberish; + yParity?: 0 | 1; + s?: string; + v?: number; +} | { + r: string; + s: string; + yParity: 0 | 1; + //chainId?: BigNumberish; + v?: BigNumberish; + yParityAndS?: string; +}; + + +const _guard = { }; + +const Zero = "0x0000000000000000000000000000000000000000000000000000000000000000"; + +export class Signature implements Freezable { + #props: { r: string, s: string, v: 27 | 28, networkV: null | bigint }; + + get r(): string { return getStore(this.#props, "r"); } + set r(value: BytesLike) { + if (dataLength(value) !== 32) { + logger.throwArgumentError("invalid r", "value", value); + } + setStore(this.#props, "r", hexlify(value)); + } + + get s(): string { return getStore(this.#props, "s"); } + set s(value: BytesLike) { + if (dataLength(value) !== 32) { + logger.throwArgumentError("invalid r", "value", value); + } else if (arrayify(value)[0] & 0x80) { + logger.throwArgumentError("non-canonical s", "value", value); + } + setStore(this.#props, "s", hexlify(value)); + } + + get v(): 27 | 28 { return getStore(this.#props, "v"); } + set v(value: BigNumberish) { + const v = logger.getNumber(value, "value"); + if (v !== 27 && v !== 28) { throw new Error("@TODO"); } + setStore(this.#props, "v", v); + } + + get networkV(): null | bigint { return getStore(this.#props, "networkV"); } + get legacyChainId(): null | bigint { + const v = this.networkV; + if (v == null) { return null; } + return Signature.getChainId(v); + } + + get yParity(): 0 | 1 { + if (this.v === 27) { return 0; } + return 1; + /* + // When v is 0 or 1 it is the recid directly + if (this.v.isZero()) { return 0; } + if (this.v.eq(1)) { return 1; } + + // Otherwise, odd (e.g. 27) is 0 and even (e.g. 28) is 1 + return this.v.and(1).isZero() ? 1: 0; + */ + } + + get yParityAndS(): string { + // The EIP-2098 compact representation + const yParityAndS = arrayify(this.s); + if (this.yParity) { yParityAndS[0] |= 0x80; } + return hexlify(yParityAndS); + } + + get compactSerialized(): string { + return concat([ this.r, this.yParityAndS ]); + } + + get serialized(): string { + return concat([ this.r, this.s, (this.yParity ? "0x1c": "0x1b") ]); + } + + constructor(guard: any, r: string, s: string, v: 27 | 28) { + logger.assertPrivate(guard, _guard, "Signature"); + this.#props = { r, s, v, networkV: null }; + } + + [Symbol.for('nodejs.util.inspect.custom')]() { + return `Signature { r: "${ this.r }", s: "${ this.s }", yParity: ${ this.yParity }, networkV: ${ this.networkV } }`; + } + + clone(): Signature { + if (getStore(this.#props, "networkV")) { + logger.throwError("cannot clone EIP-155 signatures", "UNSUPPORTED_OPERATION", { + operation: "clone" + }); + } + const { r, s, v } = this.#props; + return new Signature(_guard, r, s, v); + } + + freeze(): Frozen { + Object.freeze(this.#props); + return this; + } + + isFrozen(): boolean { + return Object.isFrozen(this.#props); + } + + toJSON(): any { + const { r, s, v, networkV } = this; + return { + _type: "signature", + networkV: ((networkV != null) ? networkV.toString(): null), + r, s, v, + }; + } + + static create(): Signature { + return new Signature(_guard, Zero, Zero, 27); + } + + // Get the chain ID from an EIP-155 v + static getChainId(v: BigNumberish): bigint { + const bv = logger.getBigInt(v, "v"); + + // The v is not an EIP-155 v, so it is the unspecified chain ID + if ((bv == BN_27) || (bv == BN_28)) { return BN_0; } + + // Bad value for an EIP-155 v + if (bv < BN_35) { logger.throwArgumentError("invalid EIP-155 v", "v", v); } + + return (bv - BN_35) / BN_2; + } + + // Get the EIP-155 v transformed for a given chainId + static getChainIdV(chainId: BigNumberish, v: 27 | 28): bigint { + return (logger.getBigInt(chainId) * BN_2) + BigInt(35 + v - 27); + } + + // Convert an EIP-155 v into a normalized v + static getNormalizedV(v: BigNumberish): 27 | 28 { + const bv = logger.getBigInt(v); + + if (bv == BN_0) { return 27; } + if (bv == BN_1) { return 28; } + + // Otherwise, EIP-155 v means odd is 27 and even is 28 + return (bv & BN_1) ? 27: 28; + } + + static fromTransaction(r: string, s: string, _v: BigNumberish): Frozen { + const v = logger.getBigInt(_v, "v"); + const sig = Signature.from({ r, s, v }); + setStore(sig.#props, "networkV", v); + return sig.freeze(); + } + + static from(sig: SignatureLike): Signature { + const throwError = (message: string) => { + return logger.throwArgumentError(message, "signature", sig); + }; + + if (typeof(sig) === "string") { + const bytes = logger.getBytes(sig, "signature"); + if (bytes.length === 64) { + const r = hexlify(bytes.slice(0, 32)); + const s = bytes.slice(32, 64); + const v = (s[0] & 0x80) ? 28: 27; + s[0] &= 0x7f; + return new Signature(_guard, r, hexlify(s), v); + } + + if (dataLength(sig) !== 65) { + const r = hexlify(sig.slice(0, 32)); + const s = bytes.slice(32, 64); + if (s[0] & 0x80) { throwError("non-canonical s"); } + const v = Signature.getNormalizedV(bytes[64]); + return new Signature(_guard, r, hexlify(s), v); + } + + return throwError("invlaid raw signature length"); + } + + if (sig instanceof Signature) { return sig.clone(); } + + // Get r + const r = sig.r; + if (r == null) { throwError("missing r"); } + if (!isHexString(r, 32)) { throwError("invalid r"); } + + // Get s; by any means necessary (we check consistency below) + const s = (function(s?: string, yParityAndS?: string) { + if (s) { + if (!isHexString(s, 32)) { throwError("invalid s"); } + return s; + } + if (yParityAndS) { + if (!isHexString(yParityAndS, 32)) { throwError("invalid yParityAndS"); } + const bytes = arrayify(yParityAndS); + bytes[0] &= 0x7f; + return hexlify(bytes); + } + return throwError("missing s"); + })(sig.s, sig.yParityAndS); + if (arrayify(s)[0] & 0x80) { throwError("non-canonical s"); } + + // Get v; by any means necessary (we check consistency below) + const v = (function(v?: BigNumberish, yParityAndS?: string, yParity?: number) { + if (v) { return Signature.getNormalizedV(v); } + if (yParityAndS) { + if (!isHexString(yParityAndS, 32)) { throwError("invalid yParityAndS"); } + return ((arrayify(yParityAndS)[0] & 0x80) ? 28: 27); + } + if (yParity) { + switch (yParity) { + case 0: return 27; + case 1: return 28; + } + return throwError("invalid yParity"); + } + //if (chainId) { return BigNumber.from(chainId).and(1).sub(27); } // @TODO: check this + return throwError("missing v"); + })(sig.v, sig.yParityAndS, sig.yParity); + + // @TODO: add chainId support + + const result = new Signature(_guard, r, s, v); + + // If multiple of v, yParity, yParityAndS we given, check they match + if ("yParity" in sig && sig.yParity !== result.yParity) { + throwError("yParity mismatch"); + } else if ("yParityAndS" in sig && sig.yParityAndS !== result.yParityAndS) { + throwError("yParityAndS mismatch"); + } + + //if (sig.chainId && sig.chainId !== result.chainId) { + //} + + return result; + } +} + diff --git a/packages/signing-key/src.ts/signing-key.ts b/packages/signing-key/src.ts/signing-key.ts new file mode 100644 index 000000000..b8cfda5a1 --- /dev/null +++ b/packages/signing-key/src.ts/signing-key.ts @@ -0,0 +1,124 @@ + +import * as secp256k1 from "@noble/secp256k1"; + +import { arrayify, concat, dataLength, hexlify } from "@ethersproject/bytes"; +import { computeHmac } from "@ethersproject/crypto"; +import { toHex } from "@ethersproject/math"; + +import type { BytesLike } from "@ethersproject/bytes"; +import type { Frozen } from "@ethersproject/properties"; + +import { Signature } from "./signature.js"; +import { logger } from "./logger.js"; + +import type { SignatureLike } from "./signature.js"; + + +// Make noble-secp256k1 sync +secp256k1.utils.hmacSha256Sync = function(key: Uint8Array, ...messages: Array): Uint8Array { + return arrayify(computeHmac("sha256", key, concat(messages))); +} + +export class SigningKey { + #privateKey: string; + + constructor(privateKey: BytesLike) { + logger.assertArgument((dataLength(privateKey) === 32), "invalid private key length", "privateKey", "[REDACTED]"); + this.#privateKey = hexlify(privateKey); + } + + get privateKey(): string { return this.#privateKey; } + get publicKey(): string { return SigningKey.computePublicKey(this.#privateKey); } + get compressedPublicKey(): string { return SigningKey.computePublicKey(this.#privateKey, true); } + + sign(digest: BytesLike): Frozen { + logger.assertArgument((dataLength(digest) === 32), "invalid digest length", "digest", digest); + + const [ sigDer, recid ] = secp256k1.signSync(arrayify(digest), arrayify(this.#privateKey), { + recovered: true, + canonical: true + }); + + const sig = secp256k1.Signature.fromHex(sigDer); + + return Signature.from({ + r: toHex("0x" + sig.r.toString(16), 32), + s: toHex("0x" + sig.s.toString(16), 32), + v: (recid ? 0x1c: 0x1b) + }).freeze(); + } + + computeShardSecret(other: BytesLike): string { + const pubKey = SigningKey.computePublicKey(other); + return hexlify(secp256k1.getSharedSecret(arrayify(this.#privateKey), pubKey)); + } + + static computePublicKey(key: BytesLike, compressed?: boolean): string { + let bytes = logger.getBytes(key, "key"); + + if (bytes.length === 32) { + const pubKey = secp256k1.getPublicKey(bytes, !!compressed); + return hexlify(pubKey); + } + + if (bytes.length === 64) { + const pub = new Uint8Array(65); + pub[0] = 0x04; + pub.set(bytes, 1); + bytes = pub; + } + + const point = secp256k1.Point.fromHex(bytes); + return hexlify(point.toRawBytes(compressed)); + } + + static recoverPublicKey(digest: BytesLike, signature: SignatureLike): string { + const sig = Signature.from(signature); + const der = secp256k1.Signature.fromCompact(arrayify(concat([ sig.r, sig.s ]))).toDERRawBytes(); + + const pubKey = secp256k1.recoverPublicKey(arrayify(digest), der, sig.yParity); + if (pubKey != null) { return hexlify(pubKey); } + + return logger.throwArgumentError("invalid signautre for digest", "signature", signature); + } + + static _addPoints(p0: BytesLike, p1: BytesLike, compressed?: boolean): string { + const pub0 = secp256k1.Point.fromHex(SigningKey.computePublicKey(p0).substring(2)); + const pub1 = secp256k1.Point.fromHex(SigningKey.computePublicKey(p1).substring(2)); + return "0x" + pub0.add(pub1).toHex(!!compressed) + } +} + +/* +const key = new SigningKey("0x1234567890123456789012345678901234567890123456789012345678901234"); +console.log(key); +console.log(key.sign("0x1234567890123456789012345678901234567890123456789012345678901234")); +{ + const privKey = "0x1234567812345678123456781234567812345678123456781234567812345678"; + const signingKey = new SigningKey(privKey); + console.log("0", signingKey, signingKey.publicKey, signingKey.publicKeyCompressed); + + let pubKey = SigningKey.computePublicKey(privKey); + let pubKeyComp = SigningKey.computePublicKey(privKey, true); + let pubKeyRaw = "0x" + SigningKey.computePublicKey(privKey).substring(4); + console.log("A", pubKey, pubKeyComp); + + let a = SigningKey.computePublicKey(pubKey); + let b = SigningKey.computePublicKey(pubKey, true); + console.log("B", a, b); + + a = SigningKey.computePublicKey(pubKeyComp); + b = SigningKey.computePublicKey(pubKeyComp, true); + console.log("C", a, b); + + a = SigningKey.computePublicKey(pubKeyRaw); + b = SigningKey.computePublicKey(pubKeyRaw, true); + console.log("D", a, b); + + const digest = "0x1122334411223344112233441122334411223344112233441122334411223344"; + const sig = signingKey.sign(digest); + console.log("SS", sig, sig.r, sig.s, sig.yParity); + + console.log("R", SigningKey.recoverPublicKey(digest, sig)); +} +*/ diff --git a/packages/signing-key/tsconfig.json b/packages/signing-key/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/signing-key/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/strings/.npmignore b/packages/strings/.npmignore new file mode 100644 index 000000000..03a92044c --- /dev/null +++ b/packages/strings/.npmignore @@ -0,0 +1,3 @@ +/src.ts/tests/** +/lib/tests/** +tsconfig.tsbuildinfo diff --git a/packages/strings/package.json b/packages/strings/package.json new file mode 100644 index 000000000..975aafad8 --- /dev/null +++ b/packages/strings/package.json @@ -0,0 +1,33 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/bytes": "^6.0.0-beta.1", + "@ethersproject/logger": "^6.0.0-beta.1" + }, + "description": "String utility functions.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "ethers" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/strings", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/strings", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/strings/src.ts/_version.ts b/packages/strings/src.ts/_version.ts new file mode 100644 index 000000000..10fecd0a7 --- /dev/null +++ b/packages/strings/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/strings@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/strings/src.ts/bytes32.ts b/packages/strings/src.ts/bytes32.ts new file mode 100644 index 000000000..dbb1019e8 --- /dev/null +++ b/packages/strings/src.ts/bytes32.ts @@ -0,0 +1,36 @@ + +import { zeroPadRight } from "@ethersproject/bytes"; + +import { logger } from "./logger.js"; +import { toUtf8Bytes, toUtf8String } from "./utf8.js"; + +import type { BytesLike } from "@ethersproject/logger"; + + +export function formatBytes32String(text: string): string { + + // Get the bytes + const bytes = toUtf8Bytes(text); + + // Check we have room for null-termination + if (bytes.length > 31) { throw new Error("bytes32 string must be less than 32 bytes"); } + + // Zero-pad (implicitly null-terminates) + return zeroPadRight(bytes, 32); +} + +export function parseBytes32String(_bytes: BytesLike): string { + const data = logger.getBytes(_bytes, "bytes"); + + // Must be 32 bytes with a null-termination + if (data.length !== 32) { throw new Error("invalid bytes32 - not 32 bytes long"); } + if (data[31] !== 0) { throw new Error("invalid bytes32 string - no null terminator"); } + + // Find the null termination + let length = 31; + while (data[length - 1] === 0) { length--; } + + // Determine the string value + return toUtf8String(data.slice(0, length)); +} + diff --git a/packages/strings/src.ts/idna.ts b/packages/strings/src.ts/idna.ts new file mode 100644 index 000000000..7e5bdbaf2 --- /dev/null +++ b/packages/strings/src.ts/idna.ts @@ -0,0 +1,214 @@ +import { logger } from "./logger.js"; +import { toUtf8CodePoints, _toUtf8String, UnicodeNormalizationForm } from "./utf8.js"; + +type Ranged = { + l: number, // Lo value + h: number, // High value (less the lo) + d?: number, // Delta/stride (default: 1) + s?: number, // Shift (default: 1) + e?: Array // Exceptions to skip +}; + +type Table = { [ src: number ]: Array }; + +function bytes2(data: string): Array { + if ((data.length % 4) !== 0) { + throw new Error("should not happen; bad data"); + } + let result = []; + for (let i = 0; i < data.length; i += 4) { + result.push(parseInt(data.substring(i, i + 4), 16)); + } + return result; +} + +function createTable(data: string, _func?: (value: string) => Array): Table { + const func = _func || function(value: string) { return [ parseInt(value, 16) ]; } + + let lo = 0; + + let result: Table = { }; + data.split(",").forEach((pair) => { + let comps = pair.split(":"); + lo += parseInt(comps[0], 16); + result[lo] = func(comps[1]); + }); + + return result; +} + +function createRangeTable(data: string): Array { + let hi = 0; + return data.split(",").map((v) => { + let comps = v.split("-"); + if (comps.length === 1) { + comps[1] = "0"; + } else if (comps[1] === "") { + comps[1] = "1"; + } + + let lo = hi + parseInt(comps[0], 16); + hi = parseInt(comps[1], 16); + return { l: lo, h: hi }; + }); +} + +function matchMap(value: number, ranges: Array): null | Ranged { + let lo = 0; + for (let i = 0; i < ranges.length; i++) { + let range = ranges[i]; + lo += range.l; + if (value >= lo && value <= lo + range.h && ((value - lo) % (range.d || 1)) === 0) { + if (range.e && range.e.indexOf(value - lo) !== -1) { continue; } + return range; + } + } + return null; +} + +const Table_A_1_ranges = createRangeTable("221,13-1b,5f-,40-10,51-f,11-3,3-3,2-2,2-4,8,2,15,2d,28-8,88,48,27-,3-5,11-20,27-,8,28,3-5,12,18,b-a,1c-4,6-16,2-d,2-2,2,1b-4,17-9,8f-,10,f,1f-2,1c-34,33-14e,4,36-,13-,6-2,1a-f,4,9-,3-,17,8,2-2,5-,2,8-,3-,4-8,2-3,3,6-,16-6,2-,7-3,3-,17,8,3,3,3-,2,6-3,3-,4-a,5,2-6,10-b,4,8,2,4,17,8,3,6-,b,4,4-,2-e,2-4,b-10,4,9-,3-,17,8,3-,5-,9-2,3-,4-7,3-3,3,4-3,c-10,3,7-2,4,5-2,3,2,3-2,3-2,4-2,9,4-3,6-2,4,5-8,2-e,d-d,4,9,4,18,b,6-3,8,4,5-6,3-8,3-3,b-11,3,9,4,18,b,6-3,8,4,5-6,3-6,2,3-3,b-11,3,9,4,18,11-3,7-,4,5-8,2-7,3-3,b-11,3,13-2,19,a,2-,8-2,2-3,7,2,9-11,4-b,3b-3,1e-24,3,2-,3,2-,2-5,5,8,4,2,2-,3,e,4-,6,2,7-,b-,3-21,49,23-5,1c-3,9,25,10-,2-2f,23,6,3,8-2,5-5,1b-45,27-9,2a-,2-3,5b-4,45-4,53-5,8,40,2,5-,8,2,5-,28,2,5-,20,2,5-,8,2,5-,8,8,18,20,2,5-,8,28,14-5,1d-22,56-b,277-8,1e-2,52-e,e,8-a,18-8,15-b,e,4,3-b,5e-2,b-15,10,b-5,59-7,2b-555,9d-3,5b-5,17-,7-,27-,7-,9,2,2,2,20-,36,10,f-,7,14-,4,a,54-3,2-6,6-5,9-,1c-10,13-1d,1c-14,3c-,10-6,32-b,240-30,28-18,c-14,a0,115-,3,66-,b-76,5,5-,1d,24,2,5-2,2,8-,35-2,19,f-10,1d-3,311-37f,1b,5a-b,d7-19,d-3,41,57-,68-4,29-3,5f,29-37,2e-2,25-c,2c-2,4e-3,30,78-3,64-,20,19b7-49,51a7-59,48e-2,38-738,2ba5-5b,222f-,3c-94,8-b,6-4,1b,6,2,3,3,6d-20,16e-f,41-,37-7,2e-2,11-f,5-b,18-,b,14,5-3,6,88-,2,bf-2,7-,7-,7-,4-2,8,8-9,8-2ff,20,5-b,1c-b4,27-,27-cbb1,f7-9,28-2,b5-221,56,48,3-,2-,3-,5,d,2,5,3,42,5-,9,8,1d,5,6,2-2,8,153-3,123-3,33-27fd,a6da-5128,21f-5df,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3,2-1d,61-ff7d"); + +// @TODO: Make this relative... +const Table_B_1_flags = "ad,34f,1806,180b,180c,180d,200b,200c,200d,2060,feff".split(",").map((v) => parseInt(v, 16)); + +const Table_B_2_ranges: Array = [ + { h: 25, s: 32, l: 65 }, + { h: 30, s: 32, e: [ 23 ], l: 127 }, + { h: 54, s: 1, e: [ 48 ], l: 64, d: 2 }, + { h: 14, s: 1, l: 57, d: 2 }, + { h: 44, s: 1, l: 17, d: 2 }, + { h: 10, s: 1, e: [ 2, 6, 8 ], l: 61, d: 2 }, + { h: 16, s: 1, l: 68, d: 2 }, + { h: 84, s: 1, e: [ 18, 24, 66 ], l: 19, d: 2 }, + { h: 26, s: 32, e: [ 17 ], l: 435 }, + { h: 22, s: 1, l: 71, d: 2 }, + { h: 15, s: 80, l: 40 }, + { h: 31, s: 32, l: 16 }, + { h: 32, s: 1, l: 80, d: 2 }, + { h: 52, s: 1, l: 42, d: 2 }, + { h: 12, s: 1, l: 55, d: 2 }, + { h: 40, s: 1, e: [ 38 ], l: 15, d: 2 }, + { h: 14, s: 1, l: 48, d: 2 }, + { h: 37, s: 48, l: 49 }, + { h: 148, s: 1, l: 6351, d: 2 }, + { h: 88, s: 1, l: 160, d: 2 }, + { h: 15, s: 16, l: 704 }, + { h: 25, s: 26, l: 854 }, + { h: 25, s: 32, l: 55915 }, + { h: 37, s: 40, l: 1247 }, + { h: 25, s: -119711, l: 53248 }, + { h: 25, s: -119763, l: 52 }, + { h: 25, s: -119815, l: 52 }, + { h: 25, s: -119867, e: [ 1, 4, 5, 7, 8, 11, 12, 17 ], l: 52 }, + { h: 25, s: -119919, l: 52 }, + { h: 24, s: -119971, e: [ 2, 7, 8, 17 ], l: 52 }, + { h: 24, s: -120023, e: [ 2, 7, 13, 15, 16, 17 ], l: 52 }, + { h: 25, s: -120075, l: 52 }, + { h: 25, s: -120127, l: 52 }, + { h: 25, s: -120179, l: 52 }, + { h: 25, s: -120231, l: 52 }, + { h: 25, s: -120283, l: 52 }, + { h: 25, s: -120335, l: 52 }, + { h: 24, s: -119543, e: [ 17 ], l: 56 }, + { h: 24, s: -119601, e: [ 17 ], l: 58 }, + { h: 24, s: -119659, e: [ 17 ], l: 58 }, + { h: 24, s: -119717, e: [ 17 ], l: 58 }, + { h: 24, s: -119775, e: [ 17 ], l: 58 } +]; +const Table_B_2_lut_abs = createTable("b5:3bc,c3:ff,7:73,2:253,5:254,3:256,1:257,5:259,1:25b,3:260,1:263,2:269,1:268,5:26f,1:272,2:275,7:280,3:283,5:288,3:28a,1:28b,5:292,3f:195,1:1bf,29:19e,125:3b9,8b:3b2,1:3b8,1:3c5,3:3c6,1:3c0,1a:3ba,1:3c1,1:3c3,2:3b8,1:3b5,1bc9:3b9,1c:1f76,1:1f77,f:1f7a,1:1f7b,d:1f78,1:1f79,1:1f7c,1:1f7d,107:63,5:25b,4:68,1:68,1:68,3:69,1:69,1:6c,3:6e,4:70,1:71,1:72,1:72,1:72,7:7a,2:3c9,2:7a,2:6b,1:e5,1:62,1:63,3:65,1:66,2:6d,b:3b3,1:3c0,6:64,1b574:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3"); +const Table_B_2_lut_rel = createTable("179:1,2:1,2:1,5:1,2:1,a:4f,a:1,8:1,2:1,2:1,3:1,5:1,3:1,4:1,2:1,3:1,4:1,8:2,1:1,2:2,1:1,2:2,27:2,195:26,2:25,1:25,1:25,2:40,2:3f,1:3f,33:1,11:-6,1:-9,1ac7:-3a,6d:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,b:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,c:-8,2:-8,2:-8,2:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,49:-8,1:-8,1:-4a,1:-4a,d:-56,1:-56,1:-56,1:-56,d:-8,1:-8,f:-8,1:-8,3:-7"); +const Table_B_2_complex = createTable("df:00730073,51:00690307,19:02BC006E,a7:006A030C,18a:002003B9,16:03B903080301,20:03C503080301,1d7:05650582,190f:00680331,1:00740308,1:0077030A,1:0079030A,1:006102BE,b6:03C50313,2:03C503130300,2:03C503130301,2:03C503130342,2a:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,3:1F7003B9,1:03B103B9,1:03AC03B9,2:03B10342,1:03B1034203B9,5:03B103B9,6:1F7403B9,1:03B703B9,1:03AE03B9,2:03B70342,1:03B7034203B9,5:03B703B9,6:03B903080300,1:03B903080301,3:03B90342,1:03B903080342,b:03C503080300,1:03C503080301,1:03C10313,2:03C50342,1:03C503080342,b:1F7C03B9,1:03C903B9,1:03CE03B9,2:03C90342,1:03C9034203B9,5:03C903B9,ac:00720073,5b:00B00063,6:00B00066,d:006E006F,a:0073006D,1:00740065006C,1:0074006D,124f:006800700061,2:00610075,2:006F0076,b:00700061,1:006E0061,1:03BC0061,1:006D0061,1:006B0061,1:006B0062,1:006D0062,1:00670062,3:00700066,1:006E0066,1:03BC0066,4:0068007A,1:006B0068007A,1:006D0068007A,1:00670068007A,1:00740068007A,15:00700061,1:006B00700061,1:006D00700061,1:006700700061,8:00700076,1:006E0076,1:03BC0076,1:006D0076,1:006B0076,1:006D0076,1:00700077,1:006E0077,1:03BC0077,1:006D0077,1:006B0077,1:006D0077,1:006B03C9,1:006D03C9,2:00620071,3:00632215006B0067,1:0063006F002E,1:00640062,1:00670079,2:00680070,2:006B006B,1:006B006D,9:00700068,2:00700070006D,1:00700072,2:00730076,1:00770062,c723:00660066,1:00660069,1:0066006C,1:006600660069,1:00660066006C,1:00730074,1:00730074,d:05740576,1:05740565,1:0574056B,1:057E0576,1:0574056D", bytes2); + +const Table_C_ranges = createRangeTable("80-20,2a0-,39c,32,f71,18e,7f2-f,19-7,30-4,7-5,f81-b,5,a800-20ff,4d1-1f,110,fa-6,d174-7,2e84-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,2,1f-5f,ff7f-20001"); + + +function flatten(values: Array>): Array { + return values.reduce((accum, value) => { + value.forEach((value) => { accum.push(value); }); + return accum; + }, [ ]); +} + +export function _nameprepTableA1(codepoint: number): boolean { + return !!matchMap(codepoint, Table_A_1_ranges); +} + +export function _nameprepTableB2(codepoint: number): null | Array { + const range = matchMap(codepoint, Table_B_2_ranges); + if (range) { + if (range.s == null) { throw new Error("should not happenl bad range"); } + return [ codepoint + range.s ]; + } + + const codes = Table_B_2_lut_abs[codepoint]; + if (codes) { return codes; } + + const shift = Table_B_2_lut_rel[codepoint]; + if (shift) { return [ codepoint + shift[0] ]; } + + const complex = Table_B_2_complex[codepoint]; + if (complex) { return complex; } + + return null; +} + +export function _nameprepTableC(codepoint: number): boolean { + return !!matchMap(codepoint, Table_C_ranges); +} + +export function nameprep(value: string): string { + + // This allows platforms with incomplete normalize to bypass + // it for very basic names which the built-in toLowerCase + // will certainly handle correctly + if (value.match(/^[a-z0-9-]*$/i) && value.length <= 59) { return value.toLowerCase(); } + + // Get the code points (keeping the current normalization) + let codes = toUtf8CodePoints(value); + + codes = flatten(codes.map((code) => { + // Substitute Table B.1 (Maps to Nothing) + if (Table_B_1_flags.indexOf(code) >= 0) { return [ ]; } + if (code >= 0xfe00 && code <= 0xfe0f) { return [ ]; } + + // Substitute Table B.2 (Case Folding) + let codesTableB2 = _nameprepTableB2(code); + if (codesTableB2) { return codesTableB2; } + + // No Substitution + return [ code ]; + })); + + // Normalize using form KC + codes = toUtf8CodePoints(_toUtf8String(codes), UnicodeNormalizationForm.NFKC); + + // Prohibit Tables C.1.2, C.2.2, C.3, C.4, C.5, C.6, C.7, C.8, C.9 + codes.forEach((code) => { + if (_nameprepTableC(code)) { + logger.throwArgumentError("STRINGPREP_CONTAINS_PROHIBITED", "value", value); + } + }); + + // Prohibit Unassigned Code Points (Table A.1) + codes.forEach((code) => { + if (_nameprepTableA1(code)) { + logger.throwArgumentError("STRINGPREP_CONTAINS_UNASSIGNED", "value", value); + } + }); + + // IDNA extras + let name = _toUtf8String(codes); + + // IDNA: 4.2.3.1 + if (name.substring(0, 1) === "-" || name.substring(2, 4) === "--" || name.substring(name.length - 1) === "-") { + logger.throwArgumentError("invalid hyphen", "value", value); + } + + // IDNA: 4.2.4 + if (name.length > 63) { + logger.throwArgumentError("too long", "value", value); + } + + return name; +} + diff --git a/packages/strings/src.ts/index.ts b/packages/strings/src.ts/index.ts new file mode 100644 index 000000000..b5b3d5221 --- /dev/null +++ b/packages/strings/src.ts/index.ts @@ -0,0 +1,14 @@ +export { formatBytes32String, parseBytes32String } from "./bytes32.js"; +export { nameprep } from "./idna.js"; +export { + _toEscapedUtf8String, + toUtf8Bytes, + toUtf8CodePoints, + toUtf8String, + + UnicodeNormalizationForm, + Utf8ErrorFuncs, + Utf8ErrorReason +} from "./utf8.js"; + +export type { Utf8ErrorFunc } from "./utf8.js"; diff --git a/packages/strings/src.ts/logger.ts b/packages/strings/src.ts/logger.ts new file mode 100644 index 000000000..6fde778de --- /dev/null +++ b/packages/strings/src.ts/logger.ts @@ -0,0 +1,3 @@ +import { Logger } from "@ethersproject/logger"; +import { version } from "./_version.js"; +export const logger = new Logger(version); diff --git a/packages/strings/src.ts/utf8.ts b/packages/strings/src.ts/utf8.ts new file mode 100644 index 000000000..75e1167a8 --- /dev/null +++ b/packages/strings/src.ts/utf8.ts @@ -0,0 +1,293 @@ + +import type { BytesLike } from "@ethersproject/logger"; + +import { logger } from "./logger.js"; + + +/////////////////////////////// + +export enum UnicodeNormalizationForm { + current = "", + NFC = "NFC", + NFD = "NFD", + NFKC = "NFKC", + NFKD = "NFKD" +}; + +export enum Utf8ErrorReason { + // A continuation byte was present where there was nothing to continue + // - offset = the index the codepoint began in + UNEXPECTED_CONTINUE = "unexpected continuation byte", + + // An invalid (non-continuation) byte to start a UTF-8 codepoint was found + // - offset = the index the codepoint began in + BAD_PREFIX = "bad codepoint prefix", + + // The string is too short to process the expected codepoint + // - offset = the index the codepoint began in + OVERRUN = "string overrun", + + // A missing continuation byte was expected but not found + // - offset = the index the continuation byte was expected at + MISSING_CONTINUE = "missing continuation byte", + + // The computed code point is outside the range for UTF-8 + // - offset = start of this codepoint + // - badCodepoint = the computed codepoint; outside the UTF-8 range + OUT_OF_RANGE = "out of UTF-8 range", + + // UTF-8 strings may not contain UTF-16 surrogate pairs + // - offset = start of this codepoint + // - badCodepoint = the computed codepoint; inside the UTF-16 surrogate range + UTF16_SURROGATE = "UTF-16 surrogate", + + // The string is an overlong representation + // - offset = start of this codepoint + // - badCodepoint = the computed codepoint; already bounds checked + OVERLONG = "overlong representation", +}; + + +export type Utf8ErrorFunc = (reason: Utf8ErrorReason, offset: number, bytes: ArrayLike, output: Array, badCodepoint?: number) => number; + +function errorFunc(reason: Utf8ErrorReason, offset: number, bytes: ArrayLike, output: Array, badCodepoint?: number): number { + return logger.throwArgumentError(`invalid codepoint at offset ${ offset }; ${ reason }`, "bytes", bytes); +} + +function ignoreFunc(reason: Utf8ErrorReason, offset: number, bytes: ArrayLike, output: Array, badCodepoint?: number): number { + + // If there is an invalid prefix (including stray continuation), skip any additional continuation bytes + if (reason === Utf8ErrorReason.BAD_PREFIX || reason === Utf8ErrorReason.UNEXPECTED_CONTINUE) { + let i = 0; + for (let o = offset + 1; o < bytes.length; o++) { + if (bytes[o] >> 6 !== 0x02) { break; } + i++; + } + return i; + } + + // This byte runs us past the end of the string, so just jump to the end + // (but the first byte was read already read and therefore skipped) + if (reason === Utf8ErrorReason.OVERRUN) { + return bytes.length - offset - 1; + } + + // Nothing to skip + return 0; +} + +function replaceFunc(reason: Utf8ErrorReason, offset: number, bytes: ArrayLike, output: Array, badCodepoint?: number): number { + + // Overlong representations are otherwise "valid" code points; just non-deistingtished + if (reason === Utf8ErrorReason.OVERLONG) { + output.push((badCodepoint != null) ? badCodepoint: -1); + return 0; + } + + // Put the replacement character into the output + output.push(0xfffd); + + // Otherwise, process as if ignoring errors + return ignoreFunc(reason, offset, bytes, output, badCodepoint); +} + +// Common error handing strategies +export const Utf8ErrorFuncs: { [ name: string ]: Utf8ErrorFunc } = Object.freeze({ + error: errorFunc, + ignore: ignoreFunc, + replace: replaceFunc +}); + +// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499 +function getUtf8CodePoints(_bytes: BytesLike, onError?: Utf8ErrorFunc): Array { + if (onError == null) { onError = Utf8ErrorFuncs.error; } + + const bytes = logger.getBytes(_bytes, "bytes"); + + const result: Array = []; + let i = 0; + + // Invalid bytes are ignored + while(i < bytes.length) { + + const c = bytes[i++]; + + // 0xxx xxxx + if (c >> 7 === 0) { + result.push(c); + continue; + } + + // Multibyte; how many bytes left for this character? + let extraLength = null; + let overlongMask = null; + + // 110x xxxx 10xx xxxx + if ((c & 0xe0) === 0xc0) { + extraLength = 1; + overlongMask = 0x7f; + + // 1110 xxxx 10xx xxxx 10xx xxxx + } else if ((c & 0xf0) === 0xe0) { + extraLength = 2; + overlongMask = 0x7ff; + + // 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx + } else if ((c & 0xf8) === 0xf0) { + extraLength = 3; + overlongMask = 0xffff; + + } else { + if ((c & 0xc0) === 0x80) { + i += onError(Utf8ErrorReason.UNEXPECTED_CONTINUE, i - 1, bytes, result); + } else { + i += onError(Utf8ErrorReason.BAD_PREFIX, i - 1, bytes, result); + } + continue; + } + + // Do we have enough bytes in our data? + if (i - 1 + extraLength >= bytes.length) { + i += onError(Utf8ErrorReason.OVERRUN, i - 1, bytes, result); + continue; + } + + // Remove the length prefix from the char + let res: null | number = c & ((1 << (8 - extraLength - 1)) - 1); + + for (let j = 0; j < extraLength; j++) { + let nextChar = bytes[i]; + + // Invalid continuation byte + if ((nextChar & 0xc0) != 0x80) { + i += onError(Utf8ErrorReason.MISSING_CONTINUE, i, bytes, result); + res = null; + break; + }; + + res = (res << 6) | (nextChar & 0x3f); + i++; + } + + // See above loop for invalid continuation byte + if (res === null) { continue; } + + // Maximum code point + if (res > 0x10ffff) { + i += onError(Utf8ErrorReason.OUT_OF_RANGE, i - 1 - extraLength, bytes, result, res); + continue; + } + + // Reserved for UTF-16 surrogate halves + if (res >= 0xd800 && res <= 0xdfff) { + i += onError(Utf8ErrorReason.UTF16_SURROGATE, i - 1 - extraLength, bytes, result, res); + continue; + } + + // Check for overlong sequences (more bytes than needed) + if (res <= overlongMask) { + i += onError(Utf8ErrorReason.OVERLONG, i - 1 - extraLength, bytes, result, res); + continue; + } + + result.push(res); + } + + return result; +} + +// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array +export function toUtf8Bytes(str: string, form: UnicodeNormalizationForm = UnicodeNormalizationForm.current): Uint8Array { + + if (form != UnicodeNormalizationForm.current) { + logger.assertNormalize(form); + str = str.normalize(form); + } + + let result = []; + for (let i = 0; i < str.length; i++) { + const c = str.charCodeAt(i); + + if (c < 0x80) { + result.push(c); + + } else if (c < 0x800) { + result.push((c >> 6) | 0xc0); + result.push((c & 0x3f) | 0x80); + + } else if ((c & 0xfc00) == 0xd800) { + i++; + const c2 = str.charCodeAt(i); + + if (i >= str.length || (c2 & 0xfc00) !== 0xdc00) { + throw new Error("invalid utf-8 string"); + } + + // Surrogate Pair + const pair = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff); + result.push((pair >> 18) | 0xf0); + result.push(((pair >> 12) & 0x3f) | 0x80); + result.push(((pair >> 6) & 0x3f) | 0x80); + result.push((pair & 0x3f) | 0x80); + + } else { + result.push((c >> 12) | 0xe0); + result.push(((c >> 6) & 0x3f) | 0x80); + result.push((c & 0x3f) | 0x80); + } + } + + return new Uint8Array(result); +}; + +function escapeChar(value: number) { + const hex = ("0000" + value.toString(16)); + return "\\u" + hex.substring(hex.length - 4); +} + +export function _toEscapedUtf8String(bytes: BytesLike, onError?: Utf8ErrorFunc): string { + return '"' + getUtf8CodePoints(bytes, onError).map((codePoint) => { + if (codePoint < 256) { + switch (codePoint) { + case 8: return "\\b"; + case 9: return "\\t"; + case 10: return "\\n" + case 13: return "\\r"; + case 34: return "\\\""; + case 92: return "\\\\"; + } + + if (codePoint >= 32 && codePoint < 127) { + return String.fromCharCode(codePoint); + } + } + + if (codePoint <= 0xffff) { + return escapeChar(codePoint); + } + + codePoint -= 0x10000; + return escapeChar(((codePoint >> 10) & 0x3ff) + 0xd800) + escapeChar((codePoint & 0x3ff) + 0xdc00); + }).join("") + '"'; +} + +export function _toUtf8String(codePoints: Array): string { + return codePoints.map((codePoint) => { + if (codePoint <= 0xffff) { + return String.fromCharCode(codePoint); + } + codePoint -= 0x10000; + return String.fromCharCode( + (((codePoint >> 10) & 0x3ff) + 0xd800), + ((codePoint & 0x3ff) + 0xdc00) + ); + }).join(""); +} + +export function toUtf8String(bytes: BytesLike, onError?: Utf8ErrorFunc): string { + return _toUtf8String(getUtf8CodePoints(bytes, onError)); +} + +export function toUtf8CodePoints(str: string, form: UnicodeNormalizationForm = UnicodeNormalizationForm.current): Array { + return getUtf8CodePoints(toUtf8Bytes(str, form)); +} diff --git a/packages/strings/tsconfig.json b/packages/strings/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/strings/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/transactions/.npmignore b/packages/transactions/.npmignore new file mode 100644 index 000000000..03a92044c --- /dev/null +++ b/packages/transactions/.npmignore @@ -0,0 +1,3 @@ +/src.ts/tests/** +/lib/tests/** +tsconfig.tsbuildinfo diff --git a/packages/transactions/LICENSE.md b/packages/transactions/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/transactions/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/transactions/package.json b/packages/transactions/package.json new file mode 100644 index 000000000..1c1f7bd80 --- /dev/null +++ b/packages/transactions/package.json @@ -0,0 +1,39 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/address": "^6.0.0-beta.1", + "@ethersproject/bytes": "^6.0.0-beta.1", + "@ethersproject/crypto": "^6.0.0-beta.1", + "@ethersproject/logger": "^6.0.0-beta.1", + "@ethersproject/math": "^6.0.0-beta.1", + "@ethersproject/rlp": "^6.0.0-beta.1", + "@ethersproject/properties": "^6.0.0-beta.1", + "@ethersproject/signing-key": "^6.0.0-beta.1" + }, + "description": "Ethereum Providers for ethers.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "ethers" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/transactions", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/providers", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/transactions/src.ts/_version.ts b/packages/transactions/src.ts/_version.ts new file mode 100644 index 000000000..836a568d9 --- /dev/null +++ b/packages/transactions/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/transactions@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/transactions/src.ts/accesslist.ts b/packages/transactions/src.ts/accesslist.ts new file mode 100644 index 000000000..ca3eb2601 --- /dev/null +++ b/packages/transactions/src.ts/accesslist.ts @@ -0,0 +1,47 @@ +import { getAddress } from "@ethersproject/address"; +import { dataLength } from "@ethersproject/bytes"; + +export type AccessListSet = { address: string, storageKeys: Array }; +export type AccessList = Array; + +// Input allows flexibility in describing an access list +export type AccessListish = AccessList | + Array<[ string, Array ]> | + Record>; + +function accessSetify(addr: string, storageKeys: Array): { address: string,storageKeys: Array } { + return { + address: getAddress(addr), + storageKeys: (storageKeys || []).map((storageKey, index) => { + if (dataLength(storageKey) !== 32) { + //logger.throwArgumentError("invalid access list storageKey", `accessList[${ addr }> + throw new Error(""); + } + return storageKey.toLowerCase(); + }) + }; +} + +export function accessListify(value: AccessListish): AccessList { + if (Array.isArray(value)) { + return (] | { address: string, storageKeys: Array}>>value).map((set, index) => { + if (Array.isArray(set)) { + if (set.length > 2) { + //logger.throwArgumentError("access list expected to be [ address, storageKeys[> + throw new Error(""); + } + return accessSetify(set[0], set[1]) + } + return accessSetify(set.address, set.storageKeys); + }); + } + const result: Array<{ address: string, storageKeys: Array }> = Object.keys(value).map((addr) => { + const storageKeys: Record = value[addr].reduce((accum, storageKey) => { + accum[storageKey] = true; + return accum; + }, >{ }); + return accessSetify(addr, Object.keys(storageKeys).sort()) + }); + result.sort((a, b) => (a.address.localeCompare(b.address))); + return result; +} diff --git a/packages/transactions/src.ts/index.ts b/packages/transactions/src.ts/index.ts new file mode 100644 index 000000000..0089cefaa --- /dev/null +++ b/packages/transactions/src.ts/index.ts @@ -0,0 +1,6 @@ +export { accessListify } from "./accesslist.js"; +export { Transaction } from "./transaction.js"; + +export type { AccessList, AccessListSet, AccessListish } from "./accesslist.js"; + +export type { SignedTransaction, TransactionLike } from "./transaction.js"; diff --git a/packages/transactions/src.ts/logger.ts b/packages/transactions/src.ts/logger.ts new file mode 100644 index 000000000..6fde778de --- /dev/null +++ b/packages/transactions/src.ts/logger.ts @@ -0,0 +1,3 @@ +import { Logger } from "@ethersproject/logger"; +import { version } from "./_version.js"; +export const logger = new Logger(version); diff --git a/packages/transactions/src.ts/tests/test-transactions.ts b/packages/transactions/src.ts/tests/test-transactions.ts new file mode 100644 index 000000000..6ba6cb1e4 --- /dev/null +++ b/packages/transactions/src.ts/tests/test-transactions.ts @@ -0,0 +1,46 @@ +import assert from "assert"; +import { loadTests } from "./utils.js"; +import type { TestCaseTransaction} from "./types.js"; + + +import { Transaction } from "../index.js"; + + +describe("Tests Transaction Serializing", function() { + const tests = loadTests("transactions"); + for (const test of tests) { + it(`serialized unsigned EIP-155 transaction: ${ test.name }`, function() { + const txData = Object.assign({ }, test.transaction, { type: 0, accessList: undefined, maxFeePerGas: undefined, maxPriorityFeePerGas: undefined }); + + // Use the testcase sans the chainId for a legacy test + if (txData.chainId != null && parseInt(txData.chainId) != 0) { txData.chainId = "0x00"; } + + const tx = Transaction.from(txData); + assert.equal(tx.unsignedSerialized, test.unsignedLegacy, "unsignedLegacy"); + }); + + // Unsupported parameters for EIP-155; i.e. unspecified chain ID + if (test.unsignedEip155) { + it(`serialized unsigned EIP-155 transaction: ${ test.name }`, function() { + const txData = Object.assign({ }, test.transaction, { type: 0, accessList: undefined, maxFeePerGas: undefined, maxPriorityFeePerGas: undefined }); + const tx = Transaction.from(txData); + assert.equal(tx.unsignedSerialized, test.unsignedEip155, "unsignedEip155"); + }); + } + + it(`serialized unsigned Berlin transaction: ${ test.name }`, function() { + const txData = Object.assign({ }, test.transaction, { type: 1, maxFeePerGas: undefined, maxPriorityFeePerGas: undefined }); + const tx = Transaction.from(txData); //Object.assign({ }, txData, { type: 1, maxFeePerGas: undefined })); + assert.equal(tx.unsignedSerialized, test.unsignedBerlin, "unsignedBerlin"); + }); + + it(`serialized unsigned London transaction: ${ test.name }`, function() { + const txData = test.transaction; + const tx = Transaction.from({ type: 2, ...txData }); + assert.equal(tx.unsignedSerialized, test.unsignedLondon, "unsignedLondon"); + }); + } +}); + +describe("Tests Transaction Parsing", function() { +}); diff --git a/packages/transactions/src.ts/tests/types.ts b/packages/transactions/src.ts/tests/types.ts new file mode 100644 index 000000000..04bee593e --- /dev/null +++ b/packages/transactions/src.ts/tests/types.ts @@ -0,0 +1,31 @@ +export interface TestCaseTransactionTx { + to?: string; + nonce?: number; + gasLimit?: string; + + gasPrice?: string; + maxFeePerGas?: string; + maxPriorityFeePerGas?: string; + + data?: string; + value?: string; + + accessList?: Array<{ address: string, storageKeys: Array }>; + + chainId?: string; +} + +export interface TestCaseTransaction { + name: string; + transaction: TestCaseTransactionTx; + privateKey: string; + + unsignedLegacy: string; + signedLegacy: string; + unsignedEip155: string; + signedEip155: string; + unsignedBerlin: string; + signedBerlin: string; + unsignedLondon: string; + signedLondon: string; +} diff --git a/packages/transactions/src.ts/tests/utils.ts b/packages/transactions/src.ts/tests/utils.ts new file mode 100644 index 000000000..b40517e1b --- /dev/null +++ b/packages/transactions/src.ts/tests/utils.ts @@ -0,0 +1,25 @@ + +import fs from "fs" +import path from "path"; +import zlib from 'zlib'; + +// Find the package root (based on the nyc output/ folder) +const root = (function() { + let root = process.cwd(); + + while (true) { + if (fs.existsSync(path.join(root, "output"))) { return root; } + const parent = path.join(root, ".."); + if (parent === root) { break; } + root = parent; + } + + throw new Error("could not find root"); +})(); + +// Load the tests +export function loadTests(tag: string): Array { + const filename = path.resolve(root, "testcases", tag + '.json.gz'); + return JSON.parse(zlib.gunzipSync(fs.readFileSync(filename)).toString()); +} + diff --git a/packages/transactions/src.ts/transaction.ts b/packages/transactions/src.ts/transaction.ts new file mode 100644 index 000000000..78880c85b --- /dev/null +++ b/packages/transactions/src.ts/transaction.ts @@ -0,0 +1,498 @@ + +import { getAddress } from "@ethersproject/address"; +import { arrayify, BytesLike, concat, hexlify } from "@ethersproject/bytes"; +import { keccak256 } from "@ethersproject/crypto"; +import { toArray } from "@ethersproject/math"; +import { getStore, setStore } from "@ethersproject/properties"; +import { encodeRlp } from "@ethersproject/rlp"; +import { Signature, SignatureLike } from "@ethersproject/signing-key"; + +import { accessListify } from "./accesslist.js"; +import { logger } from "./logger.js"; + +import type { BigNumberish } from "@ethersproject/logger"; +import type { Freezable, Frozen } from "@ethersproject/properties"; + +import type { AccessList, AccessListish } from "./accesslist.js"; + + +const BN_0 = BigInt(0); + +export interface TransactionLike { + type?: null | number; + + to?: null | A; + from?: null | A; + + nonce?: null | number; + + gasLimit?: null | BigNumberish; + gasPrice?: null | BigNumberish; + + maxPriorityFeePerGas?: null | BigNumberish; + maxFeePerGas?: null | BigNumberish; + + data?: null | string; + value?: null | BigNumberish; + chainId?: null | BigNumberish; + + hash?: null | string; + + signature?: null | SignatureLike; + + accessList?: null | AccessListish; +} + +function formatNumber(_value: BigNumberish, name: string): Uint8Array { + const value = logger.getBigInt(_value, "value"); + const result = toArray(value); + if (result.length > 32) { + logger.throwArgumentError(`value too large`, `tx.${ name }`, value); + } + return result; +} + +function formatAccessList(value: AccessListish): Array<[ string, Array ]> { + return accessListify(value).map((set) => [ set.address, set.storageKeys ]); +} + +function _parseLegacy(data: Uint8Array): TransactionLike { + return { }; +} + +function _serializeLegacy(tx: Transaction, sig?: Signature): string { + const fields: Array = [ + formatNumber(tx.nonce || 0, "nonce"), + formatNumber(tx.gasPrice || 0, "gasPrice"), + formatNumber(tx.gasLimit || 0, "gasLimit"), + ((tx.to != null) ? getAddress(tx.to): "0x"), + formatNumber(tx.value || 0, "value"), + (tx.data || "0x"), + ]; + + let chainId = BN_0; + if (tx.chainId != null) { + // A chainId was provided; if non-zero we'll use EIP-155 + chainId = logger.getBigInt(tx.chainId, "tx.chainId"); + + // We have a chainId in the tx and an EIP-155 v in the signature, + // make sure they agree with each other + if (sig && sig.networkV != null && sig.legacyChainId !== chainId) { + logger.throwArgumentError("tx.chainId/sig.v mismatch", "sig", sig); + } + + } else if (sig) { + // No chainId provided, but the signature is signing with EIP-155; derive chainId + const legacy = sig.legacyChainId; + if (legacy != null) { chainId = legacy; } + } + + // Requesting an unsigned transaction + if (!sig) { + // We have an EIP-155 transaction (chainId was specified and non-zero) + if (chainId !== BN_0) { + fields.push(toArray(chainId)); + fields.push("0x"); + fields.push("0x"); + } + + return encodeRlp(fields); + } + + // We pushed a chainId and null r, s on for hashing only; remove those + let v = BigInt(27 + sig.yParity); + if (chainId !== BN_0) { + v = Signature.getChainIdV(chainId, sig.v); + } else if (BigInt(sig.v) !== v) { + logger.throwArgumentError("tx.chainId/sig.v mismatch", "sig", sig); + } + + fields.push(toArray(v)); + fields.push(toArray(sig.r)); + fields.push(toArray(sig.s)); + + return encodeRlp(fields); +} + +function _parseEip1559(data: Uint8Array): TransactionLike { + throw new Error("@TODO"); +} + +function _serializeEip1559(tx: Transaction, sig?: Signature): string { + // If there is an explicit gasPrice, make sure it matches the + // EIP-1559 fees; otherwise they may not understand what they + // think they are setting in terms of fee. + //if (tx.gasPrice != null) { + // if (tx.gasPrice !== (tx.maxFeePerGas || BN_0)) { + // logger.throwArgumentError("mismatch EIP-1559 gasPrice != maxFeePerGas", "tx", tx); + // } + //} + const fields: Array = [ + formatNumber(tx.chainId || 0, "chainId"), + formatNumber(tx.nonce || 0, "nonce"), + formatNumber(tx.maxPriorityFeePerGas || 0, "maxPriorityFeePerGas"), + formatNumber(tx.maxFeePerGas || 0, "maxFeePerGas"), + formatNumber(tx.gasLimit || 0, "gasLimit"), + ((tx.to != null) ? getAddress(tx.to): "0x"), + formatNumber(tx.value || 0, "value"), + (tx.data || "0x"), + (formatAccessList(tx.accessList || [])) + ]; + + if (sig) { + fields.push(formatNumber(sig.yParity, "yParity")); + fields.push(toArray(sig.r)); + fields.push(toArray(sig.s)); + } + + return concat([ "0x02", encodeRlp(fields)]); +} + +function _parseEip2930(data: Uint8Array): TransactionLike { + throw new Error("@TODO"); +} + +function _serializeEip2930(tx: Transaction, sig?: Signature): string { + const fields: any = [ + formatNumber(tx.chainId || 0, "chainId"), + formatNumber(tx.nonce || 0, "nonce"), + formatNumber(tx.gasPrice || 0, "gasPrice"), + formatNumber(tx.gasLimit || 0, "gasLimit"), + ((tx.to != null) ? getAddress(tx.to): "0x"), + formatNumber(tx.value || 0, "value"), + (tx.data || "0x"), + (formatAccessList(tx.accessList || [])) + ]; + + if (sig) { + fields.push(formatNumber(sig.yParity, "recoveryParam")); + fields.push(toArray(sig.r)); + fields.push(toArray(sig.s)); + } + + return concat([ "0x01", encodeRlp(fields)]); +} + +export interface SignedTransaction extends Transaction { + type: number; + typeName: string; + signature: Signature; +} + +export class Transaction implements Freezable, TransactionLike { + #props: { + type: null | number, + to: null | string, + data: string, + nonce: number, + gasLimit: bigint, + gasPrice: null | bigint, + maxPriorityFeePerGas: null | bigint, + maxFeePerGas: null | bigint, + value: bigint, + chainId: bigint, + sig: null | Signature, + accessList: null | AccessList + }; + + // A type of null indicates the type will be populated automatically + get type(): null | number { return getStore(this.#props, "type"); } + get typeName(): null | string { + switch (this.type) { + case 0: return "legacy"; + case 1: return "eip-2930"; + case 2: return "eip-1559"; + } + + return null; + } + set type(value: null | number | string) { + switch (value) { + case null: + setStore(this.#props, "type", null); + break; + case 0: case "legacy": + setStore(this.#props, "type", 0); + break; + case 1: case "berlin": case "eip-2930": + setStore(this.#props, "type", 1); + break; + case 2: case "london": case "eip-1559": + setStore(this.#props, "type", 2); + break; + default: + throw new Error(`unsupported transaction type`); + } + } + + /* + detectType(): number { + const hasFee = (this.maxFeePerGas != null) || (this.maxPriorityFeePerGas != null); + const hasAccessList = (this.accessList != null); + const hasLegacy = (this.gasPrice != null); + + if (hasLegacy) { + if (hasFee) { + throw new Error("cannot mix legacy and london properties"); + } + if (hasAccessList) { return 1; } + return 0; + } + + return 2; + } + */ + + get to(): null | string { return getStore(this.#props, "to"); } + set to(value: null | string) { + setStore(this.#props, "to", (value == null) ? null: getAddress(value)); + } + + get nonce(): number { return getStore(this.#props, "nonce"); } + set nonce(value: BigNumberish) { setStore(this.#props, "nonce", logger.getNumber(value, "value")); } + + get gasLimit(): bigint { return getStore(this.#props, "gasLimit"); } + set gasLimit(value: BigNumberish) { setStore(this.#props, "gasLimit", logger.getBigInt(value)); } + + get gasPrice(): null | bigint { return getStore(this.#props, "gasPrice"); } + set gasPrice(value: null | BigNumberish) { + setStore(this.#props, "gasPrice", (value == null) ? null: logger.getBigInt(value)); + } + + get maxPriorityFeePerGas(): null | bigint { return getStore(this.#props, "maxPriorityFeePerGas"); } + set maxPriorityFeePerGas(value: null | BigNumberish) { + setStore(this.#props, "maxPriorityFeePerGas", (value == null) ? null: logger.getBigInt(value)); + } + + get maxFeePerGas(): null | bigint { return getStore(this.#props, "maxFeePerGas"); } + set maxFeePerGas(value: null | BigNumberish) { + setStore(this.#props, "maxFeePerGas", (value == null) ? null: logger.getBigInt(value)); + } + + get data(): string { return getStore(this.#props, "data"); } + set data(value: BytesLike) { setStore(this.#props, "data", hexlify(value)); } + + get value(): bigint { return getStore(this.#props, "value"); } + set value(value: BigNumberish) { + setStore(this.#props, "value", logger.getBigInt(value)); + } + + get chainId(): bigint { return getStore(this.#props, "chainId"); } + set chainId(value: BigNumberish) { setStore(this.#props, "chainId", logger.getBigInt(value)); } + + get signature(): null | Signature { return getStore(this.#props, "sig") || null; } + set signature(value: null | SignatureLike) { + setStore(this.#props, "sig", (value == null) ? null: Signature.from(value)); + } + + get accessList(): null | AccessList { return getStore(this.#props, "accessList") || null; } + set accessList(value: null | AccessListish) { + setStore(this.#props, "accessList", (value == null) ? null: accessListify(value)); + } + + constructor() { + this.#props = { + type: null, + to: null, + nonce: 0, + gasLimit: BigInt(0), + gasPrice: null, + maxPriorityFeePerGas: null, + maxFeePerGas: null, + data: "0x", + value: BigInt(0), + chainId: BigInt(0), + sig: null, + accessList: null + }; + } + + get hash(): null | string { + if (this.signature == null) { + throw new Error("cannot hash unsigned transaction; maybe you meant .unsignedHash"); + } + return keccak256(this.serialized); + } + + get unsignedHash(): string { + return keccak256(this.unsignedSerialized); + } + + get from(): null | string { + if (this.signature == null) { return null; } + // use ecomputeAddress(this.fromPublicKey); + return ""; + } + + get fromPublicKey(): null | string { + if (this.signature == null) { return null; } + // use ecrecover + return ""; + } + + isSigned(): this is SignedTransaction { + return this.signature != null; + } + + get serialized(): string { + if (this.signature == null) { + throw new Error("cannot serialize unsigned transaction; maybe you meant .unsignedSerialized"); + } + + const types = this.inferTypes(); + if (types.length !== 1) { + throw new Error("cannot determine transaction type; specify type manually"); + } + + switch (types[0]) { + case 0: + return _serializeLegacy(this, this.signature); + case 1: + return _serializeEip2930(this, this.signature); + case 2: + return _serializeEip1559(this, this.signature); + } + + throw new Error("unsupported type"); + } + + get unsignedSerialized(): string { + if (this.signature != null) { + throw new Error("cannot serialize unsigned transaction; maybe you meant .unsignedSerialized"); + } + + const types = this.inferTypes(); + if (types.length !== 1) { + throw new Error("cannot determine transaction type; specify type manually"); + } + + switch (types[0]) { + case 0: + return _serializeLegacy(this); + case 1: + return _serializeEip2930(this); + case 2: + return _serializeEip1559(this); + } + + throw new Error("unsupported type"); + } + + // Validates properties and lists possible types this transaction adheres to + inferTypes(): Array { + + // Checks that there are no conflicting properties set + const hasGasPrice = this.gasPrice != null; + const hasFee = (this.maxFeePerGas != null || this.maxPriorityFeePerGas != null); + const hasAccessList = (this.accessList != null); + + //if (hasGasPrice && hasFee) { + // throw new Error("transaction cannot have gasPrice and maxFeePerGas"); + //} + + if (!!this.maxFeePerGas && !!this.maxPriorityFeePerGas) { + if (this.maxFeePerGas < this.maxPriorityFeePerGas) { + throw new Error("priorityFee cannot be more than maxFee"); + } + } + + //if (this.type === 2 && hasGasPrice) { + // throw new Error("eip-1559 transaction cannot have gasPrice"); + //} + + if ((this.type === 0 || this.type === 1) && hasFee) { + throw new Error("transaction type cannot have maxFeePerGas or maxPriorityFeePerGas"); + } + + if (this.type === 0 && hasAccessList) { + throw new Error("legacy transaction cannot have accessList"); + } + + const types: Array = [ ]; + + // Explicit type + if (this.type != null) { + types.push(this.type); + + } else { + if (hasFee) { + types.push(2); + } else if (hasGasPrice) { + types.push(1); + if (!hasAccessList) { types.push(0); } + } else if (hasAccessList) { + types.push(1); + types.push(2); + } else { + types.push(0); + types.push(1); + types.push(2); + } + } + + types.sort(); + + return types; + } + + clone(): Transaction { + return Transaction.from(this); + } + + freeze(): Frozen { + if (this.#props.sig) { + this.#props.sig = (this.#props.sig.clone().freeze()); + } + + if (this.#props.accessList) { + this.#props.accessList = Object.freeze(this.#props.accessList.map((set) => { + Object.freeze(set.storageKeys); + return Object.freeze(set); + })); + } + + Object.freeze(this.#props); + return this; + } + + isFrozen(): boolean { + return Object.isFrozen(this.#props); + } + + static from(tx: string | TransactionLike): Transaction { + if (typeof(tx) === "string") { + const payload = arrayify(tx); + + if (payload[0] >= 0x7f) { // @TODO: > vs >= ?? + return Transaction.from(_parseLegacy(payload)); + } + + switch(payload[0]) { + case 1: return Transaction.from(_parseEip2930(payload.slice(1))); + case 2: return Transaction.from(_parseEip1559(payload.slice(1))); + } + + throw new Error("unsupported transaction type"); + } + + const result = new Transaction(); + if (tx.type != null) { result.type = tx.type; } + if (tx.to != null) { result.to = tx.to; } + if (tx.nonce != null) { result.nonce = tx.nonce; } + if (tx.gasLimit != null) { result.gasLimit = tx.gasLimit; } + if (tx.gasPrice != null) { result.gasPrice = tx.gasPrice; } + if (tx.maxPriorityFeePerGas != null) { result.maxPriorityFeePerGas = tx.maxPriorityFeePerGas; } + if (tx.maxFeePerGas != null) { result.maxFeePerGas = tx.maxFeePerGas; } + if (tx.data != null) { result.data = tx.data; } + if (tx.value != null) { result.value = tx.value; } + if (tx.chainId != null) { result.chainId = tx.chainId; } + if (tx.signature != null) { result.signature = Signature.from(tx.signature); } + if (tx.accessList != null) { result.accessList = tx.accessList; } + + // Should these be checked?? Should from be allowed if there is no signature? + // from?: null | A; + // hash?: null | string; + + return result; + } +} diff --git a/packages/transactions/tsconfig.json b/packages/transactions/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/transactions/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/wallet/LICENSE.md b/packages/wallet/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/wallet/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/wallet/package.json b/packages/wallet/package.json new file mode 100644 index 000000000..fe055b1d2 --- /dev/null +++ b/packages/wallet/package.json @@ -0,0 +1,42 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/address": "^6.0.0-beta.1", + "@ethersproject/crypto": "^6.0.0-beta.1", + "@ethersproject/hash": "^6.0.0-beta.1", + "@ethersproject/logger": "^6.0.0-beta.1", + "@ethersproject/providers": "^6.0.0-beta.1", + "@ethersproject/properties": "^6.0.0-beta.1", + "@ethersproject/strings": "^6.0.0-beta.1", + "@ethersproject/signing-key": "^6.0.0-beta.1", + "@ethersproject/transactions": "^6.0.0-beta.1", + "@ethersproject/wordlists": "^6.0.0-beta.1", + "aes-js": "4.0.0-beta.2" + }, + "description": "Manage, encrypt and decrypt Ethereum Wallets.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "ethers" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/wallet", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/wallet", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/wallet/src.ts/_version.ts b/packages/wallet/src.ts/_version.ts new file mode 100644 index 000000000..aaa0b26f9 --- /dev/null +++ b/packages/wallet/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/wallet@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/wallet/src.ts/address.ts b/packages/wallet/src.ts/address.ts new file mode 100644 index 000000000..d1c409f1e --- /dev/null +++ b/packages/wallet/src.ts/address.ts @@ -0,0 +1,8 @@ +import { getAddress } from "@ethersproject/address"; +import { keccak256 } from "@ethersproject/crypto"; +import { SigningKey } from "@ethersproject/signing-key"; + +export function computeAddress(key: string): string { + const publicKey = SigningKey.computePublicKey(key, false); + return getAddress(keccak256("0x" + publicKey.substring(4)).substring(26)); +} diff --git a/packages/wallet/src.ts/base-wallet.ts b/packages/wallet/src.ts/base-wallet.ts new file mode 100644 index 000000000..0068298db --- /dev/null +++ b/packages/wallet/src.ts/base-wallet.ts @@ -0,0 +1,87 @@ +import { getAddress, resolveAddress } from "@ethersproject/address"; +import { hashMessage, TypedDataEncoder } from "@ethersproject/hash"; +import { defineProperties, resolveProperties } from "@ethersproject/properties"; +import { AbstractSigner } from "@ethersproject/providers"; +import { Transaction } from "@ethersproject/transactions"; + +import { computeAddress } from "./address.js"; +import { logger } from "./logger.js"; + +import type { TypedDataDomain, TypedDataField } from "@ethersproject/hash"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { SigningKey } from "@ethersproject/signing-key"; +import type { TransactionLike } from "@ethersproject/transactions"; + + +export class BaseWallet extends AbstractSigner { + readonly address!: string; + + readonly #signingKey: SigningKey; + + constructor(privateKey: SigningKey, provider?: null | Provider) { + super(provider); + this.#signingKey = privateKey; + + const address = computeAddress(this.signingKey.publicKey); + defineProperties(this, { address }); + } + + // Store these in getters to reduce visibility in console.log + get signingKey(): SigningKey { return this.#signingKey; } + get privateKey(): string { return this.signingKey.privateKey; } + + async getAddress(): Promise { return this.address; } + + connect(provider: null | Provider): BaseWallet { + return new BaseWallet(this.#signingKey, provider); + } + + async signTransaction(_tx: TransactionRequest): Promise { + // Replace any Addressable or ENS name with an address + const tx = >Object.assign({ }, _tx, await resolveProperties({ + to: (_tx.to ? resolveAddress(_tx.to, this.provider): undefined), + from: (_tx.from ? resolveAddress(_tx.from, this.provider): undefined) + })); + + if (tx.from != null) { + if (getAddress(tx.from) !== this.address) { + logger.throwArgumentError("transaction from address mismatch", "tx.from", _tx.from); + } + delete tx.from; + } + + // Build the transaction + const btx = Transaction.from(tx); + btx.signature = this.signingKey.sign(btx.unsignedHash); + + return btx.serialized; + } + + async signMessage(message: string | Uint8Array): Promise { + return this.signingKey.sign(hashMessage(message)).serialized; + } + + async signTypedData(domain: TypedDataDomain, types: Record>, value: Record): Promise { + + // Populate any ENS names + const populated = await TypedDataEncoder.resolveNames(domain, types, value, async (name: string) => { + if (this.provider == null) { + return logger.throwError("cannot resolve ENS names without a provider", "UNSUPPORTED_OPERATION", { + operation: "resolveName", + info: { name } + }); + } + + const address = await this.provider.resolveName(name); + if (address == null) { + return logger.throwError("unconfigured ENS name", "UNCONFIGURED_NAME", { + value: name + }); + } + + return address; + }); + + return this.signingKey.sign(TypedDataEncoder.hash(populated.domain, types, populated.value)).serialized; + } +} diff --git a/packages/wallet/src.ts/hdwallet.ts b/packages/wallet/src.ts/hdwallet.ts new file mode 100644 index 000000000..872f5ac39 --- /dev/null +++ b/packages/wallet/src.ts/hdwallet.ts @@ -0,0 +1,354 @@ +import { arrayify, concat, dataSlice, hexlify } from "@ethersproject/bytes"; +import { computeHmac, randomBytes, ripemd160, sha256 } from "@ethersproject/crypto"; +import { decodeBase58, encodeBase58, toBigInt, toHex } from "@ethersproject/math"; +import { defineProperties } from "@ethersproject/properties"; +import { VoidSigner } from "@ethersproject/providers"; +import { SigningKey } from "@ethersproject/signing-key"; +import { langEn } from "@ethersproject/wordlists/lib/lang-en.js"; + +import { computeAddress } from "./address.js"; +import { logger } from "./logger.js"; +import { Mnemonic } from "./mnemonic.js"; +import { BaseWallet } from "./base-wallet.js"; + +import type { BytesLike, Numeric } from "@ethersproject/logger"; +import type { Provider } from "@ethersproject/providers"; +import type { Wordlist } from "@ethersproject/wordlists"; + + +export const defaultPath = "m/44'/60'/0'/0/0"; + + +// "Bitcoin seed" +const MasterSecret = new Uint8Array([ 66, 105, 116, 99, 111, 105, 110, 32, 115, 101, 101, 100 ]); + +const HardenedBit = 0x80000000; + +const N = BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"); + +const Nibbles = "0123456789abcdef"; +function zpad(value: number, length: number): string { + let result = ""; + while (value) { + result = Nibbles[value % 16] + result; + value = Math.trunc(value / 16); + } + while (result.length < length * 2) { result = "0" + result; } + return "0x" + result; +} + +function encodeBase58Check(_value: BytesLike): string { + const value = logger.getBytes(_value); + const check = dataSlice(sha256(sha256(value)), 0, 4); + const bytes = concat([ value, check ]); + return encodeBase58(bytes); +} + +const _guard = { }; + +function ser_I(index: number, chainCode: string, publicKey: string, privateKey: null | string): { IL: Uint8Array, IR: Uint8Array } { + const data = new Uint8Array(37); + + if (index & HardenedBit) { + if (privateKey == null) { + return logger.throwError("cannot derive child of neutered node", "UNSUPPORTED_OPERATION", { + operation: "deriveChild" + }); + } + + // Data = 0x00 || ser_256(k_par) + data.set(arrayify(privateKey), 1); + + } else { + // Data = ser_p(point(k_par)) + data.set(arrayify(publicKey)); + } + + // Data += ser_32(i) + for (let i = 24; i >= 0; i -= 8) { data[33 + (i >> 3)] = ((index >> (24 - i)) & 0xff); } + const I = arrayify(computeHmac("sha512", chainCode, data)); + + return { IL: I.slice(0, 32), IR: I.slice(32) }; +} + +type HDNodeLike = { depth: number, deriveChild: (i: number) => T }; +function derivePath>(node: T, path: string): T { + const components = path.split("/"); + + if (components.length === 0 || (components[0] === "m" && node.depth !== 0)) { + throw new Error("invalid path - " + path); + } + + if (components[0] === "m") { components.shift(); } + + let result: T = node; + for (let i = 0; i < components.length; i++) { + const component = components[i]; + + if (component.match(/^[0-9]+'$/)) { + const index = parseInt(component.substring(0, component.length - 1)); + if (index >= HardenedBit) { throw new Error("invalid path index - " + component); } + result = result.deriveChild(HardenedBit + index); + + } else if (component.match(/^[0-9]+$/)) { + const index = parseInt(component); + if (index >= HardenedBit) { throw new Error("invalid path index - " + component); } + result = result.deriveChild(index); + + } else { + throw new Error("invalid path component - " + component); + } + } + + return result; +} + + +export interface HDNodeWithPath { + path: string; +} + +export class HDNodeWallet extends BaseWallet { + readonly publicKey!: string; + + readonly fingerprint!: string; + readonly parentFingerprint!: string; + + readonly mnemonic!: null | Mnemonic; + + readonly chainCode!: string; + + readonly path!: null | string; + readonly index!: number; + readonly depth!: number; + + constructor(guard: any, signingKey: SigningKey, parentFingerprint: string, chainCode: string, path: null | string, index: number, depth: number, mnemonic: null | Mnemonic, provider: null | Provider) { + super(signingKey, provider); + logger.assertPrivate(guard, _guard, "HDNodeWallet"); + + defineProperties(this, { publicKey: signingKey.compressedPublicKey }); + + const fingerprint = dataSlice(ripemd160(sha256(this.publicKey)), 0, 4); + defineProperties(this, { + parentFingerprint, fingerprint, + chainCode, path, index, depth + }); + + defineProperties(this, { mnemonic }); + } + + connect(provider: null | Provider): HDNodeWallet { + return new HDNodeWallet(_guard, this.signingKey, this.parentFingerprint, + this.chainCode, this.path, this.index, this.depth, this.mnemonic, provider); + } + + get extendedKey(): string { + // We only support the mainnet values for now, but if anyone needs + // testnet values, let me know. I believe current sentiment is that + // we should always use mainnet, and use BIP-44 to derive the network + // - Mainnet: public=0x0488B21E, private=0x0488ADE4 + // - Testnet: public=0x043587CF, private=0x04358394 + + if (this.depth >= 256) { throw new Error("Depth too large!"); } + + return encodeBase58Check(concat([ + "0x0488ADE4", zpad(this.depth, 1), this.parentFingerprint, + zpad(this.index, 4), this.chainCode, + concat([ "0x00", this.privateKey ]) + ])); + } + + hasPath(): this is { path: string } { return (this.path != null); } + + neuter(): HDNodeVoidWallet { + return new HDNodeVoidWallet(_guard, this.address, this.publicKey, + this.parentFingerprint, this.chainCode, this.path, this.index, + this.depth, this.provider); + } + + deriveChild(_index: Numeric): HDNodeWallet { + const index = logger.getNumber(_index, "index"); + if (index > 0xffffffff) { throw new Error("invalid index - " + String(index)); } + + // Base path + let path = this.path; + if (path) { + path += "/" + (index & ~HardenedBit); + if (index & HardenedBit) { path += "'"; } + } + + const { IR, IL } = ser_I(index, this.chainCode, this.publicKey, this.privateKey); + const ki = new SigningKey(toHex((toBigInt(IL) + BigInt(this.privateKey)) % N, 32)); + + return new HDNodeWallet(_guard, ki, this.fingerprint, hexlify(IR), + path, index, this.depth + 1, this.mnemonic, this.provider); + + } + + derivePath(path: string): HDNodeWallet { + return derivePath(this, path); + } + + static #fromSeed(_seed: BytesLike, mnemonic: null | Mnemonic): HDNodeWallet { + const seed = logger.getBytes(_seed, "seed"); + if (seed.length < 16 || seed.length > 64) { + throw new Error("invalid seed"); + } + + const I: Uint8Array = arrayify(computeHmac("sha512", MasterSecret, seed)); + const signingKey = new SigningKey(hexlify(I.slice(0, 32))); + + return new HDNodeWallet(_guard, signingKey, "0x00000000", hexlify(I.slice(32)), + "m", 0, 0, mnemonic, null); + } + + static fromSeed(seed: BytesLike): HDNodeWallet { + return HDNodeWallet.#fromSeed(seed, null); + } + + static fromPhrase(phrase: string, password = "", path: null | string = defaultPath, wordlist: Wordlist = langEn): HDNodeWallet { + if (!path) { path = defaultPath; } + const mnemonic = Mnemonic.fromPhrase(phrase, password, wordlist) + return HDNodeWallet.#fromSeed(mnemonic.computeSeed(), mnemonic).derivePath(path); + } + + static fromMnemonic(mnemonic: Mnemonic, path: null | string = defaultPath): HDNodeWallet { + if (!path) { path = defaultPath; } + return HDNodeWallet.#fromSeed(mnemonic.computeSeed(), mnemonic).derivePath(path); + } + + static fromExtendedKey(extendedKey: string): HDNodeWallet | HDNodeVoidWallet { + const bytes = arrayify(decodeBase58(extendedKey)); // @TODO: redact + + if (bytes.length !== 82 || encodeBase58Check(bytes.slice(0, 78)) !== extendedKey) { + logger.throwArgumentError("invalid extended key", "extendedKey", "[ REDACTED ]"); + } + + const depth = bytes[4]; + const parentFingerprint = hexlify(bytes.slice(5, 9)); + const index = parseInt(hexlify(bytes.slice(9, 13)).substring(2), 16); + const chainCode = hexlify(bytes.slice(13, 45)); + const key = bytes.slice(45, 78); + + switch (hexlify(bytes.slice(0, 4))) { + // Public Key + case "0x0488b21e": case "0x043587cf": { + const publicKey = hexlify(key); + return new HDNodeVoidWallet(_guard, computeAddress(publicKey), publicKey, + parentFingerprint, chainCode, null, index, depth, null); + } + + // Private Key + case "0x0488ade4": case "0x04358394 ": + if (key[0] !== 0) { break; } + return new HDNodeWallet(_guard, new SigningKey(key.slice(1)), + parentFingerprint, chainCode, null, index, depth, null, null); + } + + + return logger.throwArgumentError("invalid extended key prefix", "extendedKey", "[ REDACTED ]"); + } + + static createRandom(password = "", path: null | string = defaultPath, wordlist: Wordlist = langEn): HDNodeWallet { + if (!path) { path = defaultPath; } + const mnemonic = Mnemonic.fromEntropy(randomBytes(16), password, wordlist) + return HDNodeWallet.#fromSeed(mnemonic.computeSeed(), mnemonic).derivePath(path); + } +} + +export class HDNodeVoidWallet extends VoidSigner { + readonly publicKey!: string; + + readonly fingerprint!: string; + readonly parentFingerprint!: string; + + readonly chainCode!: string; + + readonly path!: null | string; + readonly index!: number; + readonly depth!: number; + + constructor(guard: any, address: string, publicKey: string, parentFingerprint: string, chainCode: string, path: null | string, index: number, depth: number, provider: null | Provider) { + super(address, provider); + logger.assertPrivate(guard, _guard, "HDNodeVoidWallet"); + + defineProperties(this, { publicKey }); + + const fingerprint = dataSlice(ripemd160(sha256(publicKey)), 0, 4); + defineProperties(this, { + publicKey, fingerprint, parentFingerprint, chainCode, path, index, depth + }); + } + + connect(provider: null | Provider): HDNodeVoidWallet { + return new HDNodeVoidWallet(_guard, this.address, this.publicKey, + this.parentFingerprint, this.chainCode, this.path, this.index, this.depth, provider); + } + + get extendedKey(): string { + // We only support the mainnet values for now, but if anyone needs + // testnet values, let me know. I believe current sentiment is that + // we should always use mainnet, and use BIP-44 to derive the network + // - Mainnet: public=0x0488B21E, private=0x0488ADE4 + // - Testnet: public=0x043587CF, private=0x04358394 + + if (this.depth >= 256) { throw new Error("Depth too large!"); } + + return encodeBase58Check(concat([ + "0x0488B21E", + zpad(this.depth, 1), + this.parentFingerprint, + zpad(this.index, 4), + this.chainCode, + this.publicKey, + ])); + } + + hasPath(): this is { path: string } { return (this.path != null); } + + deriveChild(_index: Numeric): HDNodeVoidWallet { + const index = logger.getNumber(_index, "index"); + if (index > 0xffffffff) { throw new Error("invalid index - " + String(index)); } + + // Base path + let path = this.path; + if (path) { + path += "/" + (index & ~HardenedBit); + if (index & HardenedBit) { path += "'"; } + } + + const { IR, IL } = ser_I(index, this.chainCode, this.publicKey, null); + const Ki = SigningKey._addPoints(IL, this.publicKey, true); + + const address = computeAddress(Ki); + + return new HDNodeVoidWallet(_guard, address, Ki, this.fingerprint, hexlify(IR), + path, index, this.depth + 1, this.provider); + + } + + derivePath(path: string): HDNodeVoidWallet { + return derivePath(this, path); + } +} + +export class HDNodeWalletManager { + #root: HDNodeWallet; + + constructor(phrase: string, password = "", path = "m/44'/60'/0'/0", locale: Wordlist = langEn) { + this.#root = HDNodeWallet.fromPhrase(phrase, password, path, locale); + } + + getSigner(index = 0): HDNodeWallet { + return this.#root.deriveChild(index); + } +} + +export function getAccountPath(_index: Numeric): string { + const index = logger.getNumber(_index, "index"); + if (index < 0 || index >= HardenedBit) { + logger.throwArgumentError("invalid account index", "index", index); + } + return `m/44'/60'/${ index }'/0/0`; +} + diff --git a/packages/wallet/src.ts/index.ts b/packages/wallet/src.ts/index.ts new file mode 100644 index 000000000..79dc0fc3f --- /dev/null +++ b/packages/wallet/src.ts/index.ts @@ -0,0 +1,23 @@ +export { computeAddress } from "./address.js"; +export { + defaultPath, + + getAccountPath, + + HDNodeWallet, + HDNodeVoidWallet, + HDNodeWalletManager, +} from "./hdwallet.js"; +export { isCrowdsaleJson, decryptCrowdsaleJson } from "./json-crowdsale.js"; +export { + isKeystoreJson, + decryptKeystoreJsonSync, decryptKeystoreJson, + encryptKeystoreJson +} from "./json-keystore.js"; +export { Mnemonic } from "./mnemonic.js"; +export { Wallet } from "./wallet.js"; + +export type { + KeystoreAccountParams, KeystoreAccount, + EncryptOptions +} from "./json-keystore.js" diff --git a/packages/wallet/src.ts/json-crowdsale.ts b/packages/wallet/src.ts/json-crowdsale.ts new file mode 100644 index 000000000..145be4035 --- /dev/null +++ b/packages/wallet/src.ts/json-crowdsale.ts @@ -0,0 +1,54 @@ +import { CBC, pkcs7Strip } from "aes-js"; + +import { getAddress } from "@ethersproject/address"; +import { arrayify } from "@ethersproject/bytes"; +import { pbkdf2 } from "@ethersproject/crypto"; +import { id } from "@ethersproject/hash"; + +import { logger } from "./logger.js"; +import { getPassword, looseArrayify, spelunk } from "./utils.js"; + +export interface CrowdsaleAccount { + privateKey: string; + address: string; +} + +export function isCrowdsaleJson(json: string): boolean { + try { + const data = JSON.parse(json); + if (data.encseed) { return true; } + } catch (error) { } + return false; +} + +// See: https://github.com/ethereum/pyethsaletool +export function decryptCrowdsaleJson(json: string, _password: string | Uint8Array): CrowdsaleAccount { + const data = JSON.parse(json); + const password = getPassword(_password); + + // Ethereum Address + const address = getAddress(spelunk(data, "ethaddr:string!")); + + // Encrypted Seed + const encseed = looseArrayify(spelunk(data, "encseed:string!")); + if (!encseed || (encseed.length % 16) !== 0) { + logger.throwArgumentError("invalid encseed", "json", json); + } + + const key = arrayify(pbkdf2(password, password, 2000, 32, "sha256")).slice(0, 16); + + const iv = encseed.slice(0, 16); + const encryptedSeed = encseed.slice(16); + + // Decrypt the seed + const aesCbc = new CBC(key, iv); + const seed = pkcs7Strip(arrayify(aesCbc.decrypt(encryptedSeed))); + + // This wallet format is weird... Convert the binary encoded hex to a string. + let seedHex = ""; + for (let i = 0; i < seed.length; i++) { + seedHex += String.fromCharCode(seed[i]); + } + + return { address, privateKey: id(seedHex) }; +} diff --git a/packages/wallet/src.ts/json-keystore.ts b/packages/wallet/src.ts/json-keystore.ts new file mode 100644 index 000000000..31860d044 --- /dev/null +++ b/packages/wallet/src.ts/json-keystore.ts @@ -0,0 +1,369 @@ +import { CTR } from "aes-js"; + +import { getAddress } from "@ethersproject/address"; +import { arrayify, concat, hexlify } from "@ethersproject/bytes"; +import { keccak256, pbkdf2, randomBytes, scrypt, scryptSync } from "@ethersproject/crypto"; + +import { computeAddress } from "./address.js"; +import { logger } from "./logger.js"; + +import { getPassword, spelunk, uuidV4, zpad } from "./utils.js"; + +import type { ProgressCallback } from "@ethersproject/crypto"; +import type { BytesLike } from "@ethersproject/logger"; + +import { version } from "./_version.js"; + +const defaultPath = "m/44'/60'/0'/0/0"; + + +export type KeystoreAccountParams = { + privateKey: string; + address?: string; + mnemonic?: { + entropy: string; + path: string; + locale: string; + }; +}; + +export type KeystoreAccount = { + address: string; + privateKey: string; + mnemonic?: { + entropy: string; + path: string; + locale: string; + }; +}; + +export type EncryptOptions = { + iv?: BytesLike; + entropy?: BytesLike; + client?: string; + salt?: BytesLike; + uuid?: string; + scrypt?: { + N?: number; + r?: number; + p?: number; + } +} + +export function isKeystoreJson(json: string): boolean { + try { + const data = JSON.parse(json); + const version = ((data.version != null) ? parseInt(data.version): 0); + if (version === 3) { return true; } + } catch (error) { } + return false; +} + +function decrypt(data: any, key: Uint8Array, ciphertext: Uint8Array): string { + const cipher = spelunk(data, "crypto.cipher:string"); + if (cipher === "aes-128-ctr") { + const iv = spelunk(data, "crypto.cipherparams.iv:data!") + const aesCtr = new CTR(key, iv); + return hexlify(aesCtr.decrypt(ciphertext)); + } + + return logger.throwError("unsupported cipher", "UNSUPPORTED_OPERATION", { + operation: "decrypt" + }); +} + +function getAccount(data: any, _key: string): KeystoreAccount { + const key = logger.getBytes(_key); + const ciphertext = spelunk(data, "crypto.ciphertext:data!"); + + const computedMAC = hexlify(keccak256(concat([ key.slice(16, 32), ciphertext ]))).substring(2); + if (computedMAC !== spelunk(data, "crypto.mac:string!").toLowerCase()) { + return logger.throwArgumentError("incorrect password", "password", "[ REDACTED ]"); + } + + const privateKey = decrypt(data, key.slice(0, 16), ciphertext); + + const address = computeAddress(privateKey); + if (data.address) { + let check = data.address.toLowerCase(); + if (check.substring(0, 2) !== "0x") { check = "0x" + check; } + + if (getAddress(check) !== address) { + logger.throwArgumentError("keystore address/privateKey mismatch", "address", data.address); + } + } + + const account: KeystoreAccount = { address, privateKey }; + + // Version 0.1 x-ethers metadata must contain an encrypted mnemonic phrase + const version = spelunk(data, "x-ethers.version:string"); + if (version === "0.1") { + const mnemonicKey = key.slice(32, 64); + + const mnemonicCiphertext = spelunk(data, "x-ethers.mnemonicCiphertext:data!"); + const mnemonicIv = spelunk(data, "x-ethers.mnemonicCounter:data!"); + + const mnemonicAesCtr = new CTR(mnemonicKey, mnemonicIv); + + account.mnemonic = { + path: (spelunk(data, "x-ethers.path:string") || defaultPath), + locale: (spelunk(data, "x-ethers.locale:string") || "en"), + entropy: hexlify(arrayify(mnemonicAesCtr.decrypt(mnemonicCiphertext))) + }; + } + + return account; +} + +type KdfParams = { + name: "scrypt"; + salt: Uint8Array; + N: number; + r: number; + p: number; + dkLen: number; +} | { + name: "pbkdf2"; + salt: Uint8Array; + count: number; + dkLen: number; + algorithm: "sha256" | "sha512"; +}; + +function getKdfParams(data: any): KdfParams { + const kdf = spelunk(data, "crypto.kdf:string"); + if (kdf && typeof(kdf) === "string") { + const throwError = function(name: string, value: any): never { + return logger.throwArgumentError("invalid key-derivation function parameters", name, value); + } + + if (kdf.toLowerCase() === "scrypt") { + const salt = spelunk(data, "crypto.kdfparams.salt:data!"); + const N = spelunk(data, "crypto.kdfparams.n:int!"); + const r = spelunk(data, "crypto.kdfparams.r:int!"); + const p = spelunk(data, "crypto.kdfparams.p:int!"); + + // Check for all required parameters + if (!N || !r || !p) { return throwError("kdf", kdf); } + + // Make sure N is a power of 2 + if ((N & (N - 1)) !== 0) { return throwError("N", N); } + + const dkLen = spelunk(data, "crypto.kdfparams.dklen:int!"); + if (dkLen !== 32) { return throwError("dklen", dkLen); } + + return { name: "scrypt", salt, N, r, p, dkLen: 64 }; + + } else if (kdf.toLowerCase() === "pbkdf2") { + + const salt = spelunk(data, "crypto.kdfparams.salt:data!"); + + const prf = spelunk(data, "crypto.kdfparams.prf:string!"); + const algorithm = prf.split("-").pop(); + if (algorithm !== "sha256" && algorithm !== "sha512") { + return throwError("prf", prf); + } + + const count = spelunk(data, "crypto.kdfparams.c:int!"); + + const dkLen = spelunk(data, "crypto.kdfparams.dklen:int!"); + if (dkLen !== 32) { throwError("dklen", dkLen); } + + return { name: "pbkdf2", salt, count, dkLen, algorithm }; + } + } + + return logger.throwArgumentError("unsupported key-derivation function", "kdf", kdf); +} + + +export function decryptKeystoreJsonSync(json: string, _password: string | Uint8Array): KeystoreAccount { + const data = JSON.parse(json); + + const password = getPassword(_password); + + const params = getKdfParams(data); + if (params.name === "pbkdf2") { + const { salt, count, dkLen, algorithm } = params; + const key = pbkdf2(password, salt, count, dkLen, algorithm); + return getAccount(data, key); + } else if (params.name === "scrypt") { + const { salt, N, r, p, dkLen } = params; + const key = scryptSync(password, salt, N, r, p, dkLen); + return getAccount(data, key); + } + + throw new Error("unreachable"); +} + +function stall(duration: number): Promise { + return new Promise((resolve) => { setTimeout(() => { resolve(); }, duration); }); +} + +export async function decryptKeystoreJson(json: string, _password: string | Uint8Array, progress?: ProgressCallback): Promise { + const data = JSON.parse(json); + + const password = getPassword(_password); + + const params = getKdfParams(data); + if (params.name === "pbkdf2") { + if (progress) { + progress(0); + await stall(0); + } + const { salt, count, dkLen, algorithm } = params; + const key = pbkdf2(password, salt, count, dkLen, algorithm); + if (progress) { + progress(1); + await stall(0); + } + return getAccount(data, key); + } else if (params.name === "scrypt") { + const { salt, N, r, p, dkLen } = params; + const key = await scrypt(password, salt, N, r, p, dkLen, progress); + return getAccount(data, key); + } + + throw new Error("unreachable"); +} + + +export async function encryptKeystoreJson(account: KeystoreAccount, password: string | Uint8Array, options?: EncryptOptions, progressCallback?: ProgressCallback): Promise { + + // Check the address matches the private key + //if (getAddress(account.address) !== computeAddress(account.privateKey)) { + // throw new Error("address/privateKey mismatch"); + //} + + // Check the mnemonic (if any) matches the private key + /* + if (hasMnemonic(account)) { + const mnemonic = account.mnemonic; + const node = HDNode.fromMnemonic(mnemonic.phrase, null, mnemonic.locale).derivePath(mnemonic.path || defaultPath); + + if (node.privateKey != account.privateKey) { + throw new Error("mnemonic mismatch"); + } + } + */ + + // The options are optional, so adjust the call as needed + if (typeof(options) === "function" && !progressCallback) { + progressCallback = options; + options = {}; + } + if (!options) { options = {}; } + + const privateKey = logger.getBytes(account.privateKey, "privateKey"); + const passwordBytes = getPassword(password); + +/* + let mnemonic: null | Mnemonic = null; + let entropy: Uint8Array = null + let path: string = null; + let locale: string = null; + if (hasMnemonic(account)) { + const srcMnemonic = account.mnemonic; + entropy = arrayify(mnemonicToEntropy(srcMnemonic.phrase, srcMnemonic.locale || "en")); + path = srcMnemonic.path || defaultPath; + locale = srcMnemonic.locale || "en"; + mnemonic = Mnemonic.from( + } +*/ + // Check/generate the salt + const salt = (options.salt != null) ? logger.getBytes(options.salt, "options.slat"): randomBytes(32); + + // Override initialization vector + const iv = (options.iv != null) ? logger.getBytes(options.iv, "options.iv"): randomBytes(16); + if (iv.length !== 16) { + logger.throwArgumentError("invalid options.iv", "options.iv", options.iv); + } + + // Override the uuid + const uuidRandom = (options.uuid != null) ? logger.getBytes(options.uuid, "options.uuid"): randomBytes(16); + if (uuidRandom.length !== 16) { + logger.throwArgumentError("invalid options.uuid", "options.uuid", options.iv); + } + if (uuidRandom.length !== 16) { throw new Error("invalid uuid"); } + + // Override the scrypt password-based key derivation function parameters + let N = (1 << 17), r = 8, p = 1; + if (options.scrypt) { + if (options.scrypt.N) { N = options.scrypt.N; } + if (options.scrypt.r) { r = options.scrypt.r; } + if (options.scrypt.p) { p = options.scrypt.p; } + } + + // We take 64 bytes: + // - 32 bytes As normal for the Web3 secret storage (derivedKey, macPrefix) + // - 32 bytes AES key to encrypt mnemonic with (required here to be Ethers Wallet) + const _key = await scrypt(passwordBytes, salt, N, r, p, 64, progressCallback); + const key = arrayify(_key); + + // This will be used to encrypt the wallet (as per Web3 secret storage) + const derivedKey = key.slice(0, 16); + const macPrefix = key.slice(16, 32); + + // Encrypt the private key + const aesCtr = new CTR(derivedKey, iv); + const ciphertext = arrayify(aesCtr.encrypt(privateKey)); + + // Compute the message authentication code, used to check the password + const mac = keccak256(concat([ macPrefix, ciphertext ])) + + // See: https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition + const data: { [key: string]: any } = { + address: account.address.substring(2).toLowerCase(), + id: uuidV4(uuidRandom), + version: 3, + Crypto: { + cipher: "aes-128-ctr", + cipherparams: { + iv: hexlify(iv).substring(2), + }, + ciphertext: hexlify(ciphertext).substring(2), + kdf: "scrypt", + kdfparams: { + salt: hexlify(salt).substring(2), + n: N, + dklen: 32, + p: p, + r: r + }, + mac: mac.substring(2) + } + }; + + // If we have a mnemonic, encrypt it into the JSON wallet + if (account.mnemonic) { + const client = (options.client != null) ? options.client: `ethers/${ version }`; + + const path = account.mnemonic.path || defaultPath; + const locale = account.mnemonic.locale || "en"; + + const mnemonicKey = key.slice(32, 64); + + const entropy = logger.getBytes(account.mnemonic.entropy, "account.mnemonic.entropy"); + const mnemonicIv = randomBytes(16); + const mnemonicAesCtr = new CTR(mnemonicKey, mnemonicIv); + const mnemonicCiphertext = arrayify(mnemonicAesCtr.encrypt(entropy)); + + const now = new Date(); + const timestamp = (now.getUTCFullYear() + "-" + + zpad(now.getUTCMonth() + 1, 2) + "-" + + zpad(now.getUTCDate(), 2) + "T" + + zpad(now.getUTCHours(), 2) + "-" + + zpad(now.getUTCMinutes(), 2) + "-" + + zpad(now.getUTCSeconds(), 2) + ".0Z"); + const gethFilename = ("UTC--" + timestamp + "--" + data.address); + + data["x-ethers"] = { + client, gethFilename, path, locale, + mnemonicCounter: hexlify(mnemonicIv).substring(2), + mnemonicCiphertext: hexlify(mnemonicCiphertext).substring(2), + version: "0.1" + }; + } + + return JSON.stringify(data); +} diff --git a/packages/wallet/src.ts/logger.ts b/packages/wallet/src.ts/logger.ts new file mode 100644 index 000000000..6fde778de --- /dev/null +++ b/packages/wallet/src.ts/logger.ts @@ -0,0 +1,3 @@ +import { Logger } from "@ethersproject/logger"; +import { version } from "./_version.js"; +export const logger = new Logger(version); diff --git a/packages/wallet/src.ts/mnemonic.ts b/packages/wallet/src.ts/mnemonic.ts new file mode 100644 index 000000000..ca9b1bbc9 --- /dev/null +++ b/packages/wallet/src.ts/mnemonic.ts @@ -0,0 +1,158 @@ +import { arrayify, hexlify } from "@ethersproject/bytes"; +import { pbkdf2, sha256 } from "@ethersproject/crypto"; +import { defineProperties } from "@ethersproject/properties"; +import { toUtf8Bytes, UnicodeNormalizationForm } from "@ethersproject/strings"; +import { langEn } from "@ethersproject/wordlists"; + +import { logger } from "./logger.js"; + +import type { BytesLike } from "@ethersproject/logger"; +import type { Wordlist } from "@ethersproject/wordlists"; + + +// Returns a byte with the MSB bits set +function getUpperMask(bits: number): number { + return ((1 << bits) - 1) << (8 - bits) & 0xff; +} + +// Returns a byte with the LSB bits set +function getLowerMask(bits: number): number { + return ((1 << bits) - 1) & 0xff; +} + + +function mnemonicToEntropy(mnemonic: string, wordlist: null | Wordlist = langEn): string { + logger.assertNormalize("NFKD"); + + if (wordlist == null) { wordlist = langEn; } + + const words = wordlist.split(mnemonic); + if ((words.length % 3) !== 0 || words.length < 12 || words.length > 24) { + logger.throwArgumentError("invalid mnemonic length", "mnemonic", "[ REDACTED ]"); + } + + const entropy = arrayify(new Uint8Array(Math.ceil(11 * words.length / 8))); + + let offset = 0; + for (let i = 0; i < words.length; i++) { + let index = wordlist.getWordIndex(words[i].normalize("NFKD")); + if (index === -1) { + logger.throwArgumentError(`invalid mnemonic word at index ${ i }`, "mnemonic", "[ REDACTED ]"); + } + + for (let bit = 0; bit < 11; bit++) { + if (index & (1 << (10 - bit))) { + entropy[offset >> 3] |= (1 << (7 - (offset % 8))); + } + offset++; + } + } + + const entropyBits = 32 * words.length / 3; + + + const checksumBits = words.length / 3; + const checksumMask = getUpperMask(checksumBits); + + const checksum = arrayify(sha256(entropy.slice(0, entropyBits / 8)))[0] & checksumMask; + + if (checksum !== (entropy[entropy.length - 1] & checksumMask)) { + logger.throwArgumentError("invalid mnemonic checksum", "mnemonic", "[ REDACTED ]"); + } + + return hexlify(entropy.slice(0, entropyBits / 8)); +} + +function entropyToMnemonic(entropy: Uint8Array, wordlist: null | Wordlist = langEn): string { + if ((entropy.length % 4) || entropy.length < 16 || entropy.length > 32) { + logger.throwArgumentError("invalid entropy size", "entropy", "[ REDACTED ]"); + } + + if (wordlist == null) { wordlist = langEn; } + + const indices: Array = [ 0 ]; + + let remainingBits = 11; + for (let i = 0; i < entropy.length; i++) { + + // Consume the whole byte (with still more to go) + if (remainingBits > 8) { + indices[indices.length - 1] <<= 8; + indices[indices.length - 1] |= entropy[i]; + + remainingBits -= 8; + + // This byte will complete an 11-bit index + } else { + indices[indices.length - 1] <<= remainingBits; + indices[indices.length - 1] |= entropy[i] >> (8 - remainingBits); + + // Start the next word + indices.push(entropy[i] & getLowerMask(8 - remainingBits)); + + remainingBits += 3; + } + } + + // Compute the checksum bits + const checksumBits = entropy.length / 4; + const checksum = parseInt(sha256(entropy).substring(2, 4), 16) & getUpperMask(checksumBits); + + // Shift the checksum into the word indices + indices[indices.length - 1] <<= checksumBits; + indices[indices.length - 1] |= (checksum >> (8 - checksumBits)); + + return wordlist.join(indices.map((index) => (wordlist).getWord(index))); +} + +const _guard = { }; + +export class Mnemonic { + readonly phrase!: string; + readonly password!: string; + readonly wordlist!: Wordlist; + + readonly entropy!: string; + + constructor(guard: any, entropy: string, phrase: string, password?: null | string, wordlist?: null | Wordlist) { + if (password == null) { password = ""; } + if (wordlist == null) { wordlist = langEn; } + logger.assertPrivate(guard, _guard, "Mnemonic"); + defineProperties(this, { phrase, password, wordlist, entropy }); + } + + computeSeed(): string { + const salt = toUtf8Bytes("mnemonic" + this.password, UnicodeNormalizationForm.NFKD); + return pbkdf2(toUtf8Bytes(this.phrase, UnicodeNormalizationForm.NFKD), salt, 2048, 64, "sha512"); + } + + static fromPhrase(phrase: string, password?: null | string, wordlist?: null | Wordlist) { + // Normalize the case and space; throws if invalid + const entropy = mnemonicToEntropy(phrase, wordlist); + phrase = entropyToMnemonic(logger.getBytes(entropy), wordlist); + return new Mnemonic(_guard, entropy, phrase, password, wordlist); + } + + static fromEntropy(_entropy: BytesLike, password?: null | string, wordlist?: null | Wordlist): Mnemonic { + const entropy = logger.getBytes(_entropy, "entropy"); + const phrase = entropyToMnemonic(entropy, wordlist); + return new Mnemonic(_guard, hexlify(entropy), phrase, password, wordlist); + } + + static entropyToPhrase(_entropy: BytesLike, wordlist?: null | Wordlist): string { + const entropy = logger.getBytes(_entropy, "entropy"); + return entropyToMnemonic(entropy, wordlist); + } + + static phraseToEntropy(phrase: string, wordlist?: null | Wordlist): string { + return mnemonicToEntropy(phrase, wordlist); + } + + static isValidMnemonic(phrase: string, wordlist?: null | Wordlist): boolean { + try { + mnemonicToEntropy(phrase, wordlist); + return true; + } catch (error) { } + return false; + } +} diff --git a/packages/wallet/src.ts/tests/test-hdwallet.ts b/packages/wallet/src.ts/tests/test-hdwallet.ts new file mode 100644 index 000000000..81de0fc4a --- /dev/null +++ b/packages/wallet/src.ts/tests/test-hdwallet.ts @@ -0,0 +1,121 @@ +import assert from "assert"; + +import { wordlists } from "@ethersproject/wordlists/lib/wordlists.js"; + +import { loadTests } from "./utils.js"; + +import { HDNodeWallet, HDNodeVoidWallet } from "../hdwallet.js"; +import { Mnemonic } from "../mnemonic.js"; + +import type { TestCaseMnemonic, TestCaseMnemonicNode } from "./types.js"; + + +const decoder = new TextDecoder(); +function fromHex(hex: string): string { + const data = Buffer.from(hex.substring(2), "hex"); + return decoder.decode(data); +} + +describe("Test HDWallets", function() { + function checkWallet(wallet: HDNodeWallet | HDNodeVoidWallet, test: TestCaseMnemonicNode): void { + assert.equal(wallet.chainCode, test.chainCode, "chainCode"); + assert.equal(wallet.depth, test.depth, "depth"); + assert.equal(wallet.index, test.index, "index"); + assert.equal(wallet.fingerprint, test.fingerprint, "fingerprint"); + assert.equal(wallet.parentFingerprint, test.parentFingerprint, "parentFingerprint"); + assert.equal(wallet.publicKey, test.publicKey, "publicKey"); + + if (wallet instanceof HDNodeWallet) { + assert.equal(wallet.extendedKey, test.xpriv, "xpriv"); + assert.equal(wallet.privateKey, test.privateKey, "privateKey"); + assert.equal(wallet.neuter().extendedKey, test.xpub, "xpub"); + } else if (wallet instanceof HDNodeVoidWallet) { + assert.equal(wallet.extendedKey, test.xpub, "xpub"); + } + } + + const tests = loadTests("mnemonics"); + tests.forEach((test) => { + // The phrase and password are stored in the test as hex so they + // are safe as ascii7 values for viewing, printing, etc. + const phrase = fromHex(test.phrase); + const password = fromHex(test.password); + const wordlist = wordlists[test.locale]; + if (wordlist == null) { + it(`tests ${ test.name }`, function() { + this.skip(); + }); + return; + } + + const mnemonic = Mnemonic.fromPhrase(phrase, password, wordlist); + + function checkMnemonic(actual: Mnemonic): void { + assert.equal(actual.phrase, phrase, "phrase"); + assert.equal(actual.password, password, "password"); + assert.equal(actual.wordlist.locale, test.locale, "locale"); + assert.equal(actual.entropy, mnemonic.entropy, "entropy"); + assert.equal(actual.computeSeed(), mnemonic.computeSeed(), "seed"); + } + + it(`computes the HD keys by mnemonic: ${ test.name }`, function() { + for (const subtest of test.nodes) { + const w = HDNodeWallet.fromPhrase(phrase, password, subtest.path, wordlist); + assert.ok(w instanceof HDNodeWallet, "instanceof HDNodeWallet"); + assert.equal(w.path, subtest.path, "path") + checkWallet(w, subtest); + assert.ok(!!w.mnemonic, "has mnemonic"); + checkMnemonic(w.mnemonic as Mnemonic); + } + }); + + it(`computes the HD keys by entropy: ${ test.name }`, function() { + const seedRoot = HDNodeWallet.fromSeed(test.seed); + for (const subtest of test.nodes) { + const w = seedRoot.derivePath(subtest.path); + assert.ok(w instanceof HDNodeWallet, "instanceof HDNodeWallet"); + assert.equal(w.path, subtest.path, "path") + checkWallet(w, subtest); + assert.equal(w.mnemonic, null); + } + }); + + it(`computes the HD keys by enxtended private key: ${ test.name }`, function() { + for (const subtest of test.nodes) { + const w = HDNodeWallet.fromExtendedKey(subtest.xpriv); + assert.ok(w instanceof HDNodeWallet, "instanceof HDNodeWallet"); + checkWallet(w, subtest); + assert.equal(w.mnemonic, null); + } + }); + + it(`computes the neutered HD keys by paths: ${ test.name }`, function() { + const root = HDNodeWallet.fromPhrase(phrase, password, "m", wordlist).neuter(); + for (const subtest of test.nodes) { + if (subtest.path.indexOf("'") >= 0) { + assert.throws(() => { + const w = root.derivePath(subtest.path); + console.log(w); + }, (error) => { + return (error.code === "UNSUPPORTED_OPERATION" && + error.message.match(/^cannot derive child of neutered node/) && + error.operation === "deriveChild"); + }); + } else { + const w = root.derivePath(subtest.path); + assert.ok(w instanceof HDNodeVoidWallet, "instanceof HDNodeVoidWallet"); + assert.equal(w.path, subtest.path, "path") + checkWallet(w, subtest); + } + } + }); + + it(`computes the neutered HD keys by enxtended public key: ${ test.name }`, function() { + for (const subtest of test.nodes) { + const w = HDNodeWallet.fromExtendedKey(subtest.xpub); + assert.ok(w instanceof HDNodeVoidWallet, "instanceof HDNodeVoidWallet"); + checkWallet(w, subtest); + } + }); + }); +}); diff --git a/packages/wallet/src.ts/tests/test-json.ts b/packages/wallet/src.ts/tests/test-json.ts new file mode 100644 index 000000000..7cbabbe29 --- /dev/null +++ b/packages/wallet/src.ts/tests/test-json.ts @@ -0,0 +1,58 @@ +import assert from "assert"; + +import { loadTests } from "./utils.js"; + +import type { TestCaseWallet } from "./types.js"; + +import { + decryptCrowdsaleJson, + decryptKeystoreJson, decryptKeystoreJsonSync, + Wallet +} from "../index.js"; + +describe("Tests JSON Wallet Formats", function() { + const tests = loadTests("wallets"); + tests.forEach((test) => { + if (test.type === "crowdsale") { + it(`tests decrypting Crowdsale JSON: ${ test.name }`, async function() { + const password = Buffer.from(test.password.substring(2), "hex"); + const account = decryptCrowdsaleJson(test.content, password); + assert.equal(account.address, test.address, "address"); + }); + + } else if (test.type === "keystore") { + it(`tests decrypting Keystore JSON (sync): ${ test.name }`, function() { + this.timeout(20000); + const password = Buffer.from(test.password.substring(2), "hex"); + const account = decryptKeystoreJsonSync(test.content, password); + //console.log(account); + assert.equal(account.address, test.address, "address"); + }); + + it(`tests decrypting Keystore JSON (async): ${ test.name }`, async function() { + this.timeout(20000); + const password = Buffer.from(test.password.substring(2), "hex"); + const account = await decryptKeystoreJson(test.content, password); + //console.log(account); + assert.equal(account.address, test.address, "address"); + }); + } + + it(`tests decrypting JSON (sync): ${ test.name }`, function() { + this.timeout(20000); + const password = Buffer.from(test.password.substring(2), "hex"); + const wallet = Wallet.fromEncryptedJsonSync(test.content, password); + //console.log(wallet); + assert.equal(wallet.address, test.address, "address"); + }); + + it(`tests decrypting JSON (async): ${ test.name }`, async function() { + this.timeout(20000); + const password = Buffer.from(test.password.substring(2), "hex"); + const wallet = await Wallet.fromEncryptedJson(test.content, password); + //console.log(wallet); + assert.equal(wallet.address, test.address, "address"); + }); + + }); +}); diff --git a/packages/wallet/src.ts/tests/test-mnemonic.ts b/packages/wallet/src.ts/tests/test-mnemonic.ts new file mode 100644 index 000000000..874ec3b86 --- /dev/null +++ b/packages/wallet/src.ts/tests/test-mnemonic.ts @@ -0,0 +1,149 @@ + +declare global { + class TextDecoder { + decode(data: Uint8Array): string; + } +} + +import assert from "assert"; + +import { sha256 } from "@ethersproject/crypto"; +import { toUtf8Bytes } from "@ethersproject/strings"; + +import { wordlists } from "@ethersproject/wordlists/lib/wordlists.js"; + +import { Mnemonic } from "../index.js"; + +import { loadTests } from "./utils.js"; +import type { TestCaseMnemonic } from "./types.js"; + +const decoder = new TextDecoder(); +function fromHex(hex: string): string { + const data = Buffer.from(hex.substring(2), "hex"); + return decoder.decode(data); +} + +function repeat(text: string, length: number): Array { + const result = [ ]; + while (result.length < length) { result.push(text); } + return result; +} + +describe("Tests Mnemonics", function() { + const tests = loadTests("mnemonics"); + + function runTest(phrase: string, mnemonic: Mnemonic, test: TestCaseMnemonic): void { + assert.ok(Mnemonic.isValidMnemonic(phrase, mnemonic.wordlist), "isValidMnemonic"); + if (test.locale === "en") { + assert.ok(Mnemonic.isValidMnemonic(phrase), "isValidMnemonic (default)"); + } + + assert.equal(mnemonic.wordlist.locale, test.locale, "locale"); + + assert.equal(mnemonic.entropy, test.entropy, "entropy"); + assert.equal(mnemonic.computeSeed(), test.seed, "seed"); + assert.equal(sha256(toUtf8Bytes(phrase)), test.phraseHash, "phraseHash") + } + + for (const test of tests) { + const wordlist = wordlists[test.locale]; + + it(`computes mnemonic from phrase: ${ test.name }`, function() { + if (wordlist == null) { + this.skip(); + return; + } + + const phrase = fromHex(test.phrase); + const password = fromHex(test.password); + const mnemonic = Mnemonic.fromPhrase(phrase, password, wordlist); + runTest(phrase, mnemonic, test); + }); + } + + for (const test of tests) { + const wordlist = wordlists[test.locale]; + + it(`computes mnemonic from entropy: ${ test.name }`, function() { + if (wordlist == null) { + this.skip(); + return; + } + const phrase = fromHex(test.phrase); + const password = fromHex(test.password); + const mnemonic = Mnemonic.fromEntropy(test.entropy, password, wordlist); + runTest(phrase, mnemonic, test); + }); + } +}); + +describe("Tests Bad Mnemonics Fail", function() { + + const badLengths = [ + repeat("abandon", 9), // 9 words; too short + repeat("abandon", 16), // 16 words; not congruent to 0 mod 3 + repeat("abandon", 27), // 27 words; too long + ]; + + for (const _phrase of badLengths) { + const phrase = _phrase.join(" "); + it(`fails on invalid mnemonic length: ${ _phrase.length }`, function() { + assert.ok(!Mnemonic.isValidMnemonic(phrase)); + assert.throws(function() { + Mnemonic.fromPhrase(phrase); + }, function(error) { + return (error.code === "INVALID_ARGUMENT" && + error.message.match(/^invalid mnemonic length/) && + error.argument === "mnemonic" && + error.value === "[ REDACTED ]"); + }); + }); + } + + it("fails on invalid mnemonic word", function() { + const phrase = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon wagmi"; + assert.ok(!Mnemonic.isValidMnemonic(phrase)); + assert.throws(function() { + Mnemonic.fromPhrase(phrase); + }, function(error) { + return (error.code === "INVALID_ARGUMENT" && + error.message.match(/^invalid mnemonic word at index 11/) && + error.argument === "mnemonic" && + error.value === "[ REDACTED ]"); + }); + }); + + it("fails on invalid mnemonic checksum", function() { + const phrase = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon"; + assert.ok(!Mnemonic.isValidMnemonic(phrase)); + assert.throws(function() { + Mnemonic.fromPhrase(phrase); + }, function(error) { + return (error.code === "INVALID_ARGUMENT" && + error.message.match(/^invalid mnemonic checksum/) && + error.argument === "mnemonic" && + error.value === "[ REDACTED ]"); + }); + }); + + + const badEntropyLengths = [ + repeat("42", 12), //12 bytes; too short + repeat("42", 15), // 16 bytes; not congruent to 0 mod 4 + repeat("42", 36), // 36 bytes; too long + ]; + + for (const _entropy of badEntropyLengths) { + const entropy = "0x" + _entropy.join(""); + it(`fails on invalid entropy length: ${ _entropy.length }`, function() { + assert.throws(function() { + Mnemonic.fromEntropy(entropy); + }, function(error) { + return (error.code === "INVALID_ARGUMENT" && + error.message.match(/^invalid entropy size/) && + error.argument === "entropy" && + error.value === "[ REDACTED ]"); + }); + }); + } +}) diff --git a/packages/wallet/src.ts/tests/test-wallet.ts b/packages/wallet/src.ts/tests/test-wallet.ts new file mode 100644 index 000000000..2e5d7525d --- /dev/null +++ b/packages/wallet/src.ts/tests/test-wallet.ts @@ -0,0 +1,83 @@ +import assert from "assert"; + +import { loadTests } from "./utils.js"; + +import type { + TestCaseAccount, TestCaseTypedData, TestCaseTransaction +} from "./types"; + + +import { Wallet } from "../index.js"; + + +describe("Test Private Key Wallet", function() { + const tests = loadTests("accounts"); + + tests.forEach(({ name, privateKey, address }) => { + it(`creates wallet: ${ name }`, function() { + const wallet = new Wallet(privateKey); + assert.equal(wallet.privateKey, privateKey); + assert.equal(wallet.address, address); + }); + }); +}); + +describe("Test Transaction Signing", function() { + const tests = loadTests("transactions"); + for (const test of tests) { + it(`tests signing a legacy transaction: ${ test.name }`, async function() { + const wallet = new Wallet(test.privateKey); + const txData = Object.assign({ }, test.transaction, { type: 0, accessList: undefined, maxFeePerGas: undefined, maxPriorityFeePerGas: undefined }); + + // Use the testcase sans the chainId for a legacy test + if (txData.chainId != null && parseInt(txData.chainId) != 0) { txData.chainId = "0x00"; } + + const signed = await wallet.signTransaction(txData); + assert.equal(signed, test.signedLegacy, "signedLegacy"); + }); + } + + for (const test of tests) { + if (!test.signedEip155) { continue; } + it(`tests signing an EIP-155 transaction: ${ test.name }`, async function() { + const wallet = new Wallet(test.privateKey); + const txData = Object.assign({ }, test.transaction, { type: 0, accessList: undefined, maxFeePerGas: undefined, maxPriorityFeePerGas: undefined }); + const signed = await wallet.signTransaction(txData); + assert.equal(signed, test.signedEip155, "signedEip155"); + }); + } + + for (const test of tests) { + it(`tests signing a Berlin transaction: ${ test.name }`, async function() { + const wallet = new Wallet(test.privateKey); + const txData = Object.assign({ }, test.transaction, { type: 1, maxFeePerGas: undefined, maxPriorityFeePerGas: undefined }); + const signed = await wallet.signTransaction(txData); + assert.equal(signed, test.signedBerlin, "signedBerlin"); + }); + } + + for (const test of tests) { + it(`tests signing a London transaction: ${ test.name }`, async function() { + const wallet = new Wallet(test.privateKey); + const txData = Object.assign({ }, test.transaction, { type: 2 }); + const signed = await wallet.signTransaction(txData); + assert.equal(signed, test.signedLondon, "signedLondon"); + }); + } +}); + +describe("Test Message Signing (EIP-191)", function() { +}); + +describe("Test Typed-Data Signing (EIP-712)", function() { + const tests = loadTests("typed-data"); + for (const test of tests) { + const { privateKey, signature } = test; + if (privateKey == null || signature == null) { continue; } + it(`tests signing typed-data: ${ test.name }`, async function() { + const wallet = new Wallet(privateKey); + const sig = await wallet.signTypedData(test.domain, test.types, test.data); + assert.equal(sig, signature, "signature"); + }); + } +}); diff --git a/packages/wallet/src.ts/tests/types.ts b/packages/wallet/src.ts/tests/types.ts new file mode 100644 index 000000000..332fb40fe --- /dev/null +++ b/packages/wallet/src.ts/tests/types.ts @@ -0,0 +1,100 @@ + +export interface TestCaseAccount { + name: string; + privateKey: string; + address: string; + icap: string; +} + +export interface TestCaseMnemonicNode { + path: string, + chainCode: string; + depth: number; + index: number; + parentFingerprint: string; + fingerprint: string; + publicKey: string; + privateKey: string; + xpriv: string; + xpub: string; +} + +export interface TestCaseMnemonic { + name: string; + phrase: string; + phraseHash: string; + password: string; + locale: string; + entropy: string; + seed: string; + nodes: Array; +}; + +export interface TestCaseTypedDataDomain { + name?: string; + version?: string; + chainId?: number; + verifyingContract?: string; + salt?: string; +} + +export interface TestCaseTypedDataType { + name: string; + type: string; +} + +export interface TestCaseTypedData { + name: string; + + domain: TestCaseTypedDataDomain; + primaryType: string; + types: Record> + data: any; + + encoded: string; + digest: string; + + privateKey?: string; + signature?: string; +} + +export interface TestCaseTransactionTx { + to?: string; + nonce?: number; + gasLimit?: string; + + gasPrice?: string; + maxFeePerGas?: string; + maxPriorityFeePerGas?: string; + + data?: string; + value?: string; + + accessList?: Array<{ address: string, storageKeys: Array }>; + + chainId?: string; +} + +export interface TestCaseTransaction { + name: string; + transaction: TestCaseTransactionTx; + privateKey: string; + + unsignedLegacy: string; + signedLegacy: string; + unsignedEip155: string; + signedEip155: string; + unsignedBerlin: string; + signedBerlin: string; + unsignedLondon: string; + signedLondon: string; +} + +export interface TestCaseWallet { + name: string; + filename: string, + type: string; + address: string; + password: string; + content: string; +} diff --git a/packages/wallet/src.ts/tests/utils.ts b/packages/wallet/src.ts/tests/utils.ts new file mode 100644 index 000000000..b40517e1b --- /dev/null +++ b/packages/wallet/src.ts/tests/utils.ts @@ -0,0 +1,25 @@ + +import fs from "fs" +import path from "path"; +import zlib from 'zlib'; + +// Find the package root (based on the nyc output/ folder) +const root = (function() { + let root = process.cwd(); + + while (true) { + if (fs.existsSync(path.join(root, "output"))) { return root; } + const parent = path.join(root, ".."); + if (parent === root) { break; } + root = parent; + } + + throw new Error("could not find root"); +})(); + +// Load the tests +export function loadTests(tag: string): Array { + const filename = path.resolve(root, "testcases", tag + '.json.gz'); + return JSON.parse(zlib.gunzipSync(fs.readFileSync(filename)).toString()); +} + diff --git a/packages/wallet/src.ts/utils.ts b/packages/wallet/src.ts/utils.ts new file mode 100644 index 000000000..ba4e181d8 --- /dev/null +++ b/packages/wallet/src.ts/utils.ts @@ -0,0 +1,148 @@ +import { arrayify, hexlify } from "@ethersproject/bytes"; +import { toUtf8Bytes, UnicodeNormalizationForm } from '@ethersproject/strings'; + +import { logger } from "./logger.js"; + +import type { BytesLike } from "@ethersproject/logger"; + +export function looseArrayify(hexString: string): Uint8Array { + if (typeof(hexString) === 'string' && hexString.substring(0, 2) !== '0x') { + hexString = '0x' + hexString; + } + return arrayify(hexString); +} + +export function zpad(value: String | number, length: number): String { + value = String(value); + while (value.length < length) { value = '0' + value; } + return value; +} + +export function getPassword(password: string | Uint8Array): Uint8Array { + if (typeof(password) === 'string') { + return toUtf8Bytes(password, UnicodeNormalizationForm.NFKC); + } + return arrayify(password); +} + +export function spelunk(object: any, _path: string): T { + + const match = _path.match(/^([a-z0-9$_.-]*)(:([a-z]+))?(!)?$/i); + if (match == null) { + return logger.throwArgumentError("invalid path", "path", _path); + } + const path = match[1]; + const type = match[3]; + const reqd = (match[4] === "!"); + + let cur = object; + for (const comp of path.toLowerCase().split('.')) { + + // Search for a child object with a case-insensitive matching key + if (Array.isArray(cur)) { + if (!comp.match(/^[0-9]+$/)) { break; } + cur = cur[parseInt(comp)]; + + } else if (typeof(cur) === "object") { + let found: any = null; + for (const key in cur) { + if (key.toLowerCase() === comp) { + found = cur[key]; + break; + } + } + cur = found; + + } else { + cur = null; + } + + if (cur == null) { break; } + } + + if (reqd && cur == null) { + logger.throwArgumentError("missing required value", "path", path); + } + + if (type && cur != null) { + if (type === "int") { + if (typeof(cur) === "string" && cur.match(/^-?[0-9]+$/)) { + return parseInt(cur); + } else if (Number.isSafeInteger(cur)) { + return cur; + } + } + + if (type === "number") { + if (typeof(cur) === "string" && cur.match(/^-?[0-9.]*$/)) { + return parseFloat(cur); + } + } + + if (type === "data") { + if (typeof(cur) === "string") { return looseArrayify(cur); } + } + + if (type === "array" && Array.isArray(cur)) { return cur; } + if (type === typeof(cur)) { return cur; } + + logger.throwArgumentError(`wrong type found for ${ type } `, "path", path); + } + + return cur; +} +/* +export function follow(object: any, path: string): null | string { + let currentChild = object; + + for (const comp of path.toLowerCase().split('/')) { + + // Search for a child object with a case-insensitive matching key + let matchingChild = null; + for (const key in currentChild) { + if (key.toLowerCase() === comp) { + matchingChild = currentChild[key]; + break; + } + } + + if (matchingChild === null) { return null; } + + currentChild = matchingChild; + } + + return currentChild; +} + +// "path/to/something:type!" +export function followRequired(data: any, path: string): string { + const value = follow(data, path); + if (value != null) { return value; } + return logger.throwArgumentError("invalid value", `data:${ path }`, + JSON.stringify(data)); +} +*/ +// See: https://www.ietf.org/rfc/rfc4122.txt (Section 4.4) +export function uuidV4(randomBytes: BytesLike): string { + const bytes = logger.getBytes(randomBytes, "randomBytes"); + + // Section: 4.1.3: + // - time_hi_and_version[12:16] = 0b0100 + bytes[6] = (bytes[6] & 0x0f) | 0x40; + + // Section 4.4 + // - clock_seq_hi_and_reserved[6] = 0b0 + // - clock_seq_hi_and_reserved[7] = 0b1 + bytes[8] = (bytes[8] & 0x3f) | 0x80; + + const value = hexlify(bytes); + + return [ + value.substring(2, 10), + value.substring(10, 14), + value.substring(14, 18), + value.substring(18, 22), + value.substring(22, 34), + ].join("-"); +} + diff --git a/packages/wallet/src.ts/wallet.ts b/packages/wallet/src.ts/wallet.ts new file mode 100644 index 000000000..41ce84560 --- /dev/null +++ b/packages/wallet/src.ts/wallet.ts @@ -0,0 +1,167 @@ +import { isHexString } from "@ethersproject/bytes"; +import { randomBytes } from "@ethersproject/crypto"; +import { SigningKey } from "@ethersproject/signing-key"; + +import { computeAddress } from "./address.js"; +import { BaseWallet } from "./base-wallet.js"; +import { HDNodeWallet } from "./hdwallet.js"; +import { decryptCrowdsaleJson, isCrowdsaleJson } from "./json-crowdsale.js"; +import { + decryptKeystoreJson, decryptKeystoreJsonSync, isKeystoreJson +} from "./json-keystore.js"; +import { logger } from "./logger.js"; +import { Mnemonic } from "./mnemonic.js"; + +import type { ProgressCallback } from "@ethersproject/crypto"; +import type { Provider } from "@ethersproject/providers"; +import type { Wordlist } from "@ethersproject/wordlists"; + +import type { CrowdsaleAccount } from "./json-crowdsale.js"; +import type { KeystoreAccount } from "./json-keystore.js"; + +function tryWallet(value: any): null | Wallet { + try { + if (!value || !value.signingKey) { return null; } + const key = trySigningKey(value.signingKey); + if (key == null || computeAddress(key.publicKey) !== value.address) { return null; } + if (value.mnemonic) { + const wallet = HDNodeWallet.fromMnemonic(value.mnemonic); + if (wallet.privateKey !== key.privateKey) { return null; } + } + return value; + } catch (e) { console.log(e); } + return null; +} + +// Try using value as mnemonic to derive the defaultPath HDodeWallet +function tryMnemonic(value: any): null | HDNodeWallet { + try { + if (value == null || typeof(value.phrase) !== "string" || + typeof(value.password) !== "string" || + value.wordlist == null) { return null; } + return HDNodeWallet.fromPhrase(value.phrase, value.password, null, value.wordlist); + } catch (error) { console.log(error); } + return null; +} + +function trySigningKey(value: any): null | SigningKey { + try { + if (!value || !isHexString(value.privateKey, 32)) { return null; } + + const key = value.privateKey; + if (SigningKey.computePublicKey(key) !== value.publicKey) { return null; } + return new SigningKey(key); + } catch (e) { console.log(e); } + return null; +} + +function stall(duration: number): Promise { + return new Promise((resolve) => { setTimeout(() => { resolve(); }, duration); }); +} + +export class Wallet extends BaseWallet { + readonly #mnemonic: null | Mnemonic; + + constructor(key: string | Mnemonic | SigningKey | BaseWallet, provider?: null | Provider) { + let signingKey: null | SigningKey = null; + let mnemonic: null | Mnemonic = null; + + // A normal private key + if (typeof(key) === "string") { signingKey = new SigningKey(key); } + + // Try Wallet + if (signingKey == null) { + const wallet = tryWallet(key); + if (wallet) { + signingKey = wallet.signingKey; + mnemonic = wallet.mnemonic || null; + } + } + + // Try Mnemonic, with the defaultPath wallet + if (signingKey == null) { + const wallet = tryMnemonic(key); + if (wallet) { + signingKey = wallet.signingKey; + mnemonic = wallet.mnemonic || null; + } + } + + // A signing key + if (signingKey == null) { signingKey = trySigningKey(key); } + + if (signingKey == null) { + logger.throwArgumentError("invalid key", "key", "[ REDACTED ]"); + } + + super(signingKey as SigningKey, provider); + this.#mnemonic = mnemonic; + } + + // Store this in a getter to reduce visibility in console.log + get mnemonic(): null | Mnemonic { return this.#mnemonic; } + + connect(provider: null | Provider): Wallet { + return new Wallet(this, provider); + } + + async encrypt(password: Uint8Array | string, options?: any, progressCallback?: ProgressCallback): Promise { + throw new Error("TODO"); + } + + encryptSync(password: Uint8Array | string, options?: any): Promise { + throw new Error("TODO"); + } + + static async fromEncryptedJson(json: string, password: Uint8Array | string, progress?: ProgressCallback): Promise { + let account: null | CrowdsaleAccount | KeystoreAccount = null; + if (isKeystoreJson(json)) { + account = await decryptKeystoreJson(json, password, progress); + + } else if (isCrowdsaleJson(json)) { + if (progress) { progress(0); await stall(0); } + account = decryptCrowdsaleJson(json, password); + if (progress) { progress(1); await stall(0); } + + } else { + return logger.throwArgumentError("invalid JSON wallet", "json", "[ REDACTED ]"); + } + + const wallet = new Wallet(account.privateKey); + if (wallet.address !== account.address) { + logger.throwArgumentError("address/privateKey mismatch", "json", "[ REDACTED ]"); + } + // @TODO: mnemonic + return wallet; + } + + static fromEncryptedJsonSync(json: string, password: Uint8Array | string): Wallet { + let account: null | CrowdsaleAccount | KeystoreAccount = null; + if (isKeystoreJson(json)) { + account = decryptKeystoreJsonSync(json, password); + } else if (isCrowdsaleJson(json)) { + account = decryptCrowdsaleJson(json, password); + } else { + return logger.throwArgumentError("invalid JSON wallet", "json", "[ REDACTED ]"); + } + + const wallet = new Wallet(account.privateKey); + if (wallet.address !== account.address) { + logger.throwArgumentError("address/privateKey mismatch", "json", "[ REDACTED ]"); + } + // @TODO: mnemonic + return wallet; + } + + static createRandom(provider?: null | Provider, password?: null | string, wordlist?: null | Wordlist): Wallet { + return new Wallet(Mnemonic.fromEntropy(randomBytes(16), password, wordlist), provider); + } + + static fromMnemonic(mnemonic: Mnemonic, provider?: null | Provider): Wallet { + return new Wallet(mnemonic, provider); + } + + static fromPhrase(phrase: string, provider?: null | Provider, password = "", wordlist?: Wordlist): Wallet { + return new Wallet(Mnemonic.fromPhrase(phrase, password, wordlist), provider); + } +} diff --git a/packages/wallet/tsconfig.json b/packages/wallet/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/wallet/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/web/.npmignore b/packages/web/.npmignore new file mode 100644 index 000000000..03a92044c --- /dev/null +++ b/packages/web/.npmignore @@ -0,0 +1,3 @@ +/src.ts/tests/** +/lib/tests/** +tsconfig.tsbuildinfo diff --git a/packages/web/LICENSE.md b/packages/web/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/web/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/web/package.json b/packages/web/package.json new file mode 100644 index 000000000..83c9cc540 --- /dev/null +++ b/packages/web/package.json @@ -0,0 +1,35 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/bytes": "^6.0.0-beta.1", + "@ethersproject/logger": "^6.0.0-beta.1", + "@ethersproject/properties": "^6.0.0-beta.1", + "@ethersproject/strings": "^6.0.0-beta.1" + }, + "description": "Web fetching Utilities for ethers.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "keywords": [ + "Ethereum", + "ethers" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/web", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/web", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/web/src.ts/_version.ts b/packages/web/src.ts/_version.ts new file mode 100644 index 000000000..26ff8934e --- /dev/null +++ b/packages/web/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/web@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/web/src.ts/fetch-data.ts b/packages/web/src.ts/fetch-data.ts new file mode 100644 index 000000000..6e9dac82c --- /dev/null +++ b/packages/web/src.ts/fetch-data.ts @@ -0,0 +1,224 @@ +import { decodeBase64 } from "@ethersproject/bytes"; +import { toUtf8Bytes } from "@ethersproject/strings" + +import { getUrl } from "./get-url.js"; /*-browser*/ +import { logger } from "./logger.js"; +import { FetchRequest } from "./request.js"; +import { FetchResponse } from "./response.js"; + +import type { Frozen } from "@ethersproject/properties"; + + +async function delay(duration: number): Promise { + return new Promise((resolve) => { setTimeout(resolve, duration); }); +} + +export type PreflightRequestFunc = (request: Frozen) => Promise; +export type ProcessResponseFunc = (request: Frozen, response: FetchResponse) => Promise; +export type ThrottleRetryFunc = (request: Frozen, response: FetchResponse, attempt: number) => Promise; + +export type FrozenFetchRequest = Frozen; +export type FrozenFetchResponse = Frozen; + +export type ConnectionInfo = { + // The request + request: FetchRequest; + + // Called each time a request is about to be sent to the network; in + // the case of a throttle event, this may occur multiple times + // @TODO: Allow the prflight to directly make the request and respond? + //preflightRequest?: (request: Frozen) => Promise + preflightRequest?: PreflightRequestFunc; + + // If the response.throwThrottleError() is used the throttleConfig is + // used to determine when and if to retry + processResponse?: ProcessResponseFunc; + + // Throttling Configuration + throttleLimit?: number; + throttleSlotInterval?: number; + throttleRetry?: ThrottleRetryFunc; +}; + +// @TODO: Add option for global preflightRequest? + +function getTime(): number { return (new Date()).getTime(); } + +function unpercent(value: string): Uint8Array { + value = value.replace(/%([0-9a-f][0-9a-f])/gi, (all, code) => { + return String.fromCharCode(parseInt(code, 16)); + }); + return toUtf8Bytes(value); +} + +export type GatewayFunc = (url: string) => Promise + +let lockGateways = false; +let ipfsGateway: null | string | GatewayFunc = "https:/\/gateway.ipfs.io/"; +let arGateway: null | string | GatewayFunc = "https:/\/gateway.ar.io/"; + +export async function fetchData(connection: string | FetchRequest | ConnectionInfo): Promise> { + const conn = (typeof(connection) === "string") ? { + request: new FetchRequest(connection) + }: (connection instanceof FetchRequest) ? { + request: connection + }: Object.assign({ }, connection); + + if (conn.request == null) { + return logger.throwArgumentError("missing request", "connection", connection); + } + + let req = conn.request.clone().freeze(); + + switch (conn.request.url.split(":")[0]) { + case "data": { + const match = req.url.match(/^data:([^;:]*)?(;base64)?,(.*)$/i); + if (match) { + try { + const headers = { + "content-type": (match[1] ? match[1]: "text/plain") + }; + const body = (match[2] ? decodeBase64(match[3]): unpercent(match[3])); + return new FetchResponse(200, "OK", headers, body, req.clone()); + } catch (error) { + return new FetchResponse(400, "BAD REQUEST (invalid base64 encoded data)", { }, null, req.clone()); + } + } + return new FetchResponse(500, "INTERNAL SERVER ERROR (unsupported dara URI)", { }, null, req.clone()); + } + case "ipfs": + case "ipns": + case "ar": + throw new Error("not implemented yet"); + console.log("FF", arGateway, ipfsGateway); + case "http": case "https": + break; + default: + throw new Error("unsupported scheme"); + } + + const attempts = (conn.throttleLimit != null) ? conn.throttleLimit: 12; + if (!Number.isInteger(attempts) || attempts < 1) { + return logger.throwArgumentError("invalid throttleLimit", "connection", connection); + } + + const slotInterval = (conn.throttleSlotInterval != null) ? conn.throttleSlotInterval: 100; + //logger.assertInteger(slotInterval, "connection.throttleSlotInterval", connection.throttleSlotInterval); + if (!Number.isInteger(slotInterval) || attempts < 0) { + return logger.throwArgumentError("invalid throttleSlotInterval", "connection", connection); + } + + const retryFunc = (conn.throttleRetry != null) ? conn.throttleRetry: null; + if (retryFunc && typeof(retryFunc) !== "function") { + return logger.throwArgumentError("invalid throttleRetry callback", "connection", connection); + } + + const preflightRequest = conn.preflightRequest || null; + if (preflightRequest && typeof(preflightRequest) !== "function") { + return logger.throwArgumentError("invalid preflightRequest callback", "connection", connection); + } + + const processResponse = conn.processResponse || null; + if (processResponse && typeof(processResponse) !== "function") { + return logger.throwArgumentError("invalid processResponse callback", "connection", connection); + } + + // Start time of this fetch (for timeouts) + const t0 = getTime(); + + let response: null | FetchResponse = null; + for (let a = 0; a < attempts; a++) { + let request = req.clone(); + + if (preflightRequest) { + request = (await preflightRequest(request.freeze())).clone(); + } + + const remainingTime = getTime() - t0; + if (remainingTime < 0) { + return logger.throwError("timeout", "TIMEOUT", { operation: "request", request }); + } + + response = await getUrl(request, remainingTime); + + // Retry logic (server forced) + if (a < attempts) { + if (response.statusCode === 301 || response.statusCode === 302) { + // Try following the redirect; the request will through if the + // type of redirect is not supported + try { + req = request.redirect(response.headers.location || ""); + continue; + } catch (error) { }; + + // Things won't get any better on another attempt; abort + return response; + + } else if (response.statusCode === 429) { + if (retryFunc == null || (await retryFunc(request.freeze(), response, a))) { + const retryAfter = response.headers["retry-after"]; + if (typeof(retryAfter) === "string" && retryAfter.match(/^[1-9][0-9]*$/)) { + await delay(parseInt(retryAfter)); + } else { + await delay(slotInterval * Math.trunc(Math.random() * Math.pow(2, a))); + } + continue; + } + } + } + + // Optional post-processing response; also allows trapping + // HTTP status errors and doing "something different", + // including any further throttling. + if (processResponse) { + try { + return await processResponse(request, response); + } catch (error: any) { + + // response.throwThrottleError + if (error.throttle && typeof(error.stall) === "number") { + if (a < attempts) { + await delay(error.stall); + continue; + } + + // Too many retries should behave more like a 5xx server error + return response.makeServerError("exceeded maximum retry limit", error); + } + + // Something went wrong during processing; throw a 5xx server error + response.makeServerError("error in post-processing function", error).assertOk(); + } + } + + return response; + } + + // Too many retries should behave more like a 5xx server error + return (response).makeServerError("exceeded maximum retry limit"); +} + +fetchData.lock = function(): void { + lockGateways = true; +} + +// @TODO: Allow a master Gateway function +fetchData.setGateway = function(gateway: null | GatewayFunc): void { +} + +fetchData.setIpfsGateway = function(gateway: null | string | GatewayFunc): void { + if (lockGateways) { + logger.throwError("gateways are locked", "UNSUPPORTED_OPERATION", { + operation: "setIpfsGateway" }); + } + ipfsGateway = gateway; +}; + +fetchData.setArGateway = function(gateway: null | string | GatewayFunc): void { + if (lockGateways) { + logger.throwError("gateways are locked", "UNSUPPORTED_OPERATION", { + operation: "setArGateway" }); + } + arGateway = gateway; +}; + diff --git a/packages/web/src.ts/get-url-browser.ts b/packages/web/src.ts/get-url-browser.ts new file mode 100644 index 000000000..f150146f5 --- /dev/null +++ b/packages/web/src.ts/get-url-browser.ts @@ -0,0 +1,62 @@ + +declare global { + class Headers { + constructor(values: Array<[ string, string ]>); + forEach(func: (v: string, k: string) => void): void; + } + + class Response { + status: number; + statusText: string; + headers: Headers; + arrayBuffer(): Promise; + } + + type FetchInit = { + method?: string, + headers?: Headers, + body?: Uint8Array + }; + + function fetch(url: string, init: FetchInit): Promise; +} + +import { logger } from "./logger.js"; +import { FetchResponse } from "./response.js"; + +import type { FetchRequest } from "./request.js"; + +export async function getUrl(req: FetchRequest, timeout: number): Promise { + const protocol = req.url.split(":")[0].toLowerCase(); + + if (protocol !== "http" && protocol !== "https") { + logger.throwError(`unsupported protocol ${ protocol }`, "UNSUPPORTED_OPERATION", { + info: { protocol }, + operation: "request" + }); + } + + if (req.credentials && !req.allowInsecureAuthentication) { + logger.throwError("insecure authorized connections unsupported", "UNSUPPORTED_OPERATION", { + operation: "request" + }); + } + + const init = { + method: req.method, + headers: new Headers(Array.from(req)), + body: req.body || undefined, + }; + + const resp = await fetch(req.url, init); + + const headers: Record = { }; + resp.headers.forEach((value, key) => { + headers[key.toLowerCase()] = value; + }); + + const body = new Uint8Array(await resp.arrayBuffer()); + + return new FetchResponse(resp.status, resp.statusText, headers, body, req); +} + diff --git a/packages/web/src.ts/get-url.ts b/packages/web/src.ts/get-url.ts new file mode 100644 index 000000000..7a9e12acc --- /dev/null +++ b/packages/web/src.ts/get-url.ts @@ -0,0 +1,89 @@ + +import http from "http"; +import https from "https"; +import { gunzipSync } from "zlib"; + +import { arrayify } from "@ethersproject/bytes"; + +import { logger } from "./logger.js"; +import { FetchResponse } from "./response.js"; + +import type { FetchRequest } from "./request.js"; + + +export async function getUrl(req: FetchRequest, timeout: number): Promise { + + const protocol = req.url.split(":")[0].toLowerCase(); + + if (protocol !== "http" && protocol !== "https") { + logger.throwError(`unsupported protocol ${ protocol }`, "UNSUPPORTED_OPERATION", { + info: { protocol }, + operation: "request" + }); + } + + if (req.credentials && !req.allowInsecureAuthentication) { + logger.throwError("insecure authorized connections unsupported", "UNSUPPORTED_OPERATION", { + operation: "request" + }); + } + + const method = req.method; + const headers = Object.assign({ }, req.headers); + + const options: any = { method, headers }; + + const request = ((protocol === "http") ? http: https).request(req.url, options); + + request.setTimeout(timeout); + + const body = req.body; + if (body) { request.write(Buffer.from(body)); } + + request.end(); + + return new Promise((resolve, reject) => { + request.once("response", (resp: http.IncomingMessage) => { + const statusCode = resp.statusCode || 0; + const statusMessage = resp.statusMessage || ""; + const headers = Object.keys(resp.headers || {}).reduce((accum, name) => { + let value = resp.headers[name] || ""; + if (Array.isArray(value)) { + value = value.join(", "); + } + accum[name] = value; + return accum; + }, <{ [ name: string ]: string }>{ }); + + let body: null | Uint8Array = null; + //resp.setEncoding("utf8"); + + resp.on("data", (chunk: Uint8Array) => { + if (body == null) { + body = chunk; + } else { + const newBody = new Uint8Array(body.length + chunk.length); + newBody.set(body, 0); + newBody.set(chunk, body.length); + body = newBody; + } + }); + + resp.on("end", () => { + if (headers["content-encoding"] === "gzip" && body) { + body = arrayify(gunzipSync(body)); + } + + resolve(new FetchResponse(statusCode, statusMessage, headers, body, req)); + }); + + resp.on("error", (error) => { + (error).response = new FetchResponse(statusCode, statusMessage, headers, body, req); + reject(error); + }); + }); + + request.on("error", (error) => { reject(error); }); + }); +} + diff --git a/packages/web/src.ts/index.ts b/packages/web/src.ts/index.ts new file mode 100644 index 000000000..101762f6f --- /dev/null +++ b/packages/web/src.ts/index.ts @@ -0,0 +1,11 @@ + +export { fetchData } from "./fetch-data.js"; +export { FetchRequest } from "./request.js"; +export { FetchResponse } from "./response.js"; + +export type { + ConnectionInfo, + PreflightRequestFunc, ProcessResponseFunc, + ThrottleRetryFunc +} from "./fetch-data.js"; + diff --git a/packages/web/src.ts/logger.ts b/packages/web/src.ts/logger.ts new file mode 100644 index 000000000..a1bfc739b --- /dev/null +++ b/packages/web/src.ts/logger.ts @@ -0,0 +1,3 @@ +import { version } from "./_version.js"; +import { Logger } from "@ethersproject/logger"; +export const logger = new Logger(version); diff --git a/packages/web/src.ts/request.ts b/packages/web/src.ts/request.ts new file mode 100644 index 000000000..8fb9a9858 --- /dev/null +++ b/packages/web/src.ts/request.ts @@ -0,0 +1,246 @@ + +import { getStore, setStore } from "@ethersproject/properties"; +import { toUtf8Bytes } from "@ethersproject/strings"; + +import { logger } from "./logger.js"; + +import type { Freezable, Frozen } from "@ethersproject/properties"; + + +function check(value: T, type: string, name: string): T { + if (typeof(value) !== type) { + throw new Error(`invalid ${ name }`); + } + return value; +} + +export interface FetchRequestWithBody extends FetchRequest { + body: Uint8Array; +} + +export class FetchRequest implements Freezable, Iterable<[ key: string, value: string ]> { + #props: { + allowInsecure: boolean, + gzip: boolean; + headers: Record, + method: string, + timeout: number, + url: string, + + body?: Uint8Array, + bodyType?: string, + creds?: string, + }; + + // URL + get url(): string { return getStore(this.#props, "url"); } + set url(url: string) { + setStore(this.#props, "url", check(url, "string", "url")); + } + + // Body + get body(): null | Uint8Array { + const body = getStore(this.#props, "body"); + if (body == null) { return null; } + if (this.isFrozen()) { return new Uint8Array(body); } + return body; + } + set body(body: null | string | Readonly | Readonly) { + if (body == null) { + setStore(this.#props, "body", undefined); + setStore(this.#props, "bodyType", undefined); + } else if (typeof(body) === "string") { + // @TODO: utf8-check + setStore(this.#props, "body", toUtf8Bytes(body)); + setStore(this.#props, "bodyType", "text/plain"); + } else if (body instanceof Uint8Array) { + setStore(this.#props, "body", body); + setStore(this.#props, "bodyType", "application/octet-stream"); + } else if (typeof(body) === "object") { + setStore(this.#props, "body", toUtf8Bytes(JSON.stringify(body))); + setStore(this.#props, "bodyType", "application/json"); + } else { + throw new Error("invalid body"); + } + } + hasBody(): this is FetchRequestWithBody { + return (getStore(this.#props, "body") != null); + } + + // Method (default: GET with no body, POST with a body) + get method(): string { + const method = getStore(this.#props, "method"); + if (method) { return method.toUpperCase(); } + if (this.body) { return "POST"; } + return "GET"; + } + set method(method: null | string) { + if (method == null) { method = ""; } + setStore(this.#props, "method", check(method, "string", "method")); + } + + // Headers (automatically fills content-type if not explicitly set) + get headers(): Readonly> { + const headers = Object.assign({ }, getStore(this.#props, "headers")); + const bodyType = getStore(this.#props, "bodyType"); + + if (this.credentials) { /* TODO */ }; + + if (this.allowGzip) { + headers["accept-encoding"] = "gzip"; + } + + if (headers["content-type"] == null && bodyType) { + headers["content-type"] = bodyType; + } + if (this.body) { headers["content-length"] = String(this.body.length); } + + return Object.freeze(headers); + } + getHeader(key: string): string { + return this.headers[key.toLowerCase()]; + } + setHeader(key: string, value: string | number): void { + const headers = getStore(this.#props, "headers"); + setStore(this.#props, "headers", headers); + headers[check(key, "string", "key").toLowerCase()] = String(value); + } + clearHeaders(): void { + setStore(this.#props, "headers", { }); + } + + [Symbol.iterator](): Iterator<[ key: string, value: string ]> { + const headers = this.headers; + const keys = Object.keys(headers); + let index = 0; + return { + next: () => { + if (index < keys.length) { + const key = keys[index++]; + return { + value: [ key, headers[key] ], done: false + } + } + return { value: undefined, done: true }; + } + }; + } + + // Configure an Authorization header + get credentials(): null | string { + return getStore(this.#props, "creds") || null; + } + setCredentials(username: string, password: string): void { + if (username.match(/:/)) { + logger.throwArgumentError("invalid basic authentication username", "username", "[REDACTED]"); + } + setStore(this.#props, "creds", `${ username }:${ password }`); + // @TODO: + //const auth = username + ":" + password; + //this.setHeader("authorization", "Basic " + base64Encode(toUtf8Bytes(auth))) + //this.setHeader("authorization", "Basic TODO:" + auth); + } + + // Configure the request to allow gzipped responses + get allowGzip(): boolean { + return getStore(this.#props, "gzip"); + } + set allowGzip(value: boolean) { + setStore(this.#props, "gzip", !!value); + } + + // Allow credentials to be sent over an insecure (non-HTTPS) channel + get allowInsecureAuthentication(): boolean { + return !!getStore(this.#props, "allowInsecure"); + } + set allowInsecureAuthentication(value: boolean) { + setStore(this.#props, "allowInsecure", check(value, "boolean", "allowInsecureAuthentication")); + } + + // Timeout (seconds) + get timeout(): number { return getStore(this.#props, "timeout"); } + set timeout(timeout: number) { + timeout = check(timeout, "number", "timeout"); + if (timeout <= 0) { throw new Error("invalid timerout"); } + setStore(this.#props, "timeout", timeout); + } + + constructor(url: string) { + this.#props = { + allowInsecure: false, + gzip: false, + headers: { }, + method: "", + timeout: 300, + url: check(url, "string", "url") + }; + } + + redirect(location: string): FetchRequest { + // Redirection; for now we only support absolute locataions + const current = this.url.split(":")[0].toLowerCase(); + const target = location.split(":")[0].toLowerCase(); + if (this.method !== "GET" || (current === "https" && target === "http") || + !location.match(/^https?:/)) { + return logger.throwError(`unsupported redirect`, "UNSUPPORTED_OPERATION", { + operation: `redirect(${ this.method } ${ JSON.stringify(this.url) } => ${ JSON.stringify(location) })` + }); + } + + // Create a copy of this request, with a new URL + const req = new FetchRequest(location); + req.method = "GET"; + req.allowGzip = this.allowGzip; + req.timeout = this.timeout; + setStore(req.#props, "body", getStore(this.#props, "body")); + setStore(req.#props, "headers", Object.assign({}, getStore(this.#props, "headers"))); + setStore(req.#props, "bodyType", getStore(this.#props, "bodyType")); + + // Do not forward credentials unless on the same domain; only absolute + //req.allowInsecure = false; + // paths are currently supported; may want a way to specify to forward? + //setStore(req.#props, "creds", getStore(this.#pros, "creds")); + + return req; + } + + clone(): FetchRequest { + const clone = new FetchRequest(this.url); + + // Preserve "default method" (i.e. null) + setStore(clone.#props, "method", getStore(this.#props, "method")); + + // Preserve "default body" with type, copying the Uint8Array is present + const body = getStore(this.#props, "body"); + setStore(clone.#props, "body", (body == null) ? undefined: new Uint8Array(body)); + setStore(clone.#props, "bodyType", getStore(this.#props, "bodyType")); + + // Preserve "default headers" + setStore(clone.#props, "headers", Object.assign({ }, getStore(this.#props, "headers"))); + + // Credentials is readonly, so we copy internally + setStore(clone.#props, "creds", getStore(this.#props, "creds")); + + if (this.allowGzip) { clone.allowGzip = true; } + + clone.timeout = this.timeout; + if (this.allowInsecureAuthentication) { clone.allowInsecureAuthentication = true; } + + return clone; + } + + freeze(): Frozen { + // Copy the body so any changes to previous access do not modify it + const body = getStore(this.#props, "body"); + if (body != null) { setStore(this.#props, "body", new Uint8Array(body)); } + + Object.freeze(this.#props.headers); + Object.freeze(this.#props); + + return this; + } + + isFrozen(): boolean { + return Object.isFrozen(this.#props); + } +} diff --git a/packages/web/src.ts/response.ts b/packages/web/src.ts/response.ts new file mode 100644 index 000000000..3fc9b74f5 --- /dev/null +++ b/packages/web/src.ts/response.ts @@ -0,0 +1,143 @@ +import { hexlify } from "@ethersproject/bytes"; +import { defineProperties, getStore } from "@ethersproject/properties"; +import { toUtf8String } from "@ethersproject/strings"; + +import { logger } from "./logger.js"; + +import type { FetchRequest } from "./request.js"; + +export interface FetchResponseWithBody extends FetchResponse { + body: Readonly; +} + +interface ThrottleError extends Error { + stall: number; + throttle: true; +}; + +export class FetchResponse implements Iterable<[ key: string, value: string ]> { + #props: { + statusCode: number, + statusMessage: string, + headers: Readonly>, + body: null | Readonly, + request: null | FetchRequest, + } + #error: { error?: Error, message: string }; + + toString(): string { + const body = getStore(this.#props, "body"); + return ``; + } + + get statusCode(): number { return getStore(this.#props, "statusCode"); } + get statusMessage(): string { return getStore(this.#props, "statusMessage"); } + get headers() { return getStore(this.#props, "headers"); } + get body(): null | Readonly { + const body = getStore(this.#props, "body"); + return (body == null) ? null: new Uint8Array(body); + } + get bodyText(): string { + try { + const body = getStore(this.#props, "body"); + return (body == null) ? "": toUtf8String(body); + } catch (error) { + return logger.throwError("response body is not valid UTF-8 data", "UNSUPPORTED_OPERATION", { + operation: "bodyText", info: { response: this } + }); + } + } + get bodyJson(): any { + try { + return JSON.parse(this.bodyText); + } catch (error) { + return logger.throwError("response body is not valid JSON", "UNSUPPORTED_OPERATION", { + operation: "bodyJson", info: { response: this } + }); + } + } + + [Symbol.iterator](): Iterator<[ key: string, value: string ]> { + const headers = this.headers; + const keys = Object.keys(headers); + let index = 0; + return { + next: () => { + if (index < keys.length) { + const key = keys[index++]; + return { + value: [ key, headers[key] ], done: false + } + } + return { value: undefined, done: true }; + } + }; + } + + constructor(statusCode: number, statusMessage: string, headers: Readonly>, body: null | Uint8Array, request?: FetchRequest) { + this.#props = { + statusCode, + statusMessage, + headers: Object.freeze(Object.assign({ }, Object.keys(headers).reduce((accum, k) => { + accum[k.toLowerCase()] = headers[k]; + return accum; + }, >{ }))), + body: ((body == null) ? null: new Uint8Array(body)), + request: (request || null), + }; + this.#error = { message: "" }; + } + + makeServerError(message?: string, error?: Error): FetchResponse { + let statusMessage: string; + if (!message) { + message = `${ this.statusCode } ${ this.statusMessage }`; + statusMessage = `CLIENT ESCALATED SERVER ERROR (${ message })`; + } else { + statusMessage = `CLIENT ESCALATED SERVER ERROR (${ this.statusCode } ${ this.statusMessage }; ${ message })`; + } + const response = new FetchResponse(599, statusMessage, this.headers, + this.body, getStore(this.#props, "request") || undefined); + response.#error = { message, error }; + return response; + } + + throwThrottleError(message?: string, stall?: number): never { + if (stall == null) { stall = 1000; } + if (typeof(stall) !== "number" || !Number.isInteger(stall) || stall < 0) { + logger.throwArgumentError("invalid stall timeout", "stall", stall); + } + + const error = new Error(message || "throttling requests"); + + defineProperties(error, { stall, throttle: true }); + + throw error; + } + + getHeader(key: string): string { + return this.headers[key.toLowerCase()]; + } + + hasBody(): this is FetchResponseWithBody { + const body = getStore(this.#props, "body"); + return (body != null); + } + + get request(): null | FetchRequest { return getStore(this.#props, "request"); } + + ok(): boolean { + return (this.#error.message === "" && this.statusCode >= 200 && this.statusCode < 300); + } + + assertOk(): void { + if (this.ok()) { return; } + let { message, error } = this.#error; + if (message === "") { + message = `server response ${ this.statusCode } ${ this.statusMessage }`; + } + logger.throwError(message, "SERVER_ERROR", { + request: (this.request || "unknown request"), response: this, error + }); + } +} diff --git a/packages/web/tsconfig.json b/packages/web/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/web/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/packages/wordlists/.npmignore b/packages/wordlists/.npmignore new file mode 100644 index 000000000..ccab92b85 --- /dev/null +++ b/packages/wordlists/.npmignore @@ -0,0 +1,5 @@ +/src.ts/tests/** +/lib/tests/** +tsconfig.tsbuildinfo + +input/** diff --git a/packages/wordlists/LICENSE.md b/packages/wordlists/LICENSE.md new file mode 100644 index 000000000..1773dac18 --- /dev/null +++ b/packages/wordlists/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Richard Moore + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/wordlists/input/lang-cz.txt b/packages/wordlists/input/lang-cz.txt new file mode 100644 index 000000000..fdab4a2ae --- /dev/null +++ b/packages/wordlists/input/lang-cz.txt @@ -0,0 +1,2048 @@ +abdikace +abeceda +adresa +agrese +akce +aktovka +alej +alkohol +amputace +ananas +andulka +anekdota +anketa +antika +anulovat +archa +arogance +asfalt +asistent +aspirace +astma +astronom +atlas +atletika +atol +autobus +azyl +babka +bachor +bacil +baculka +badatel +bageta +bagr +bahno +bakterie +balada +baletka +balkon +balonek +balvan +balza +bambus +bankomat +barbar +baret +barman +baroko +barva +baterka +batoh +bavlna +bazalka +bazilika +bazuka +bedna +beran +beseda +bestie +beton +bezinka +bezmoc +beztak +bicykl +bidlo +biftek +bikiny +bilance +biograf +biolog +bitva +bizon +blahobyt +blatouch +blecha +bledule +blesk +blikat +blizna +blokovat +bloudit +blud +bobek +bobr +bodlina +bodnout +bohatost +bojkot +bojovat +bokorys +bolest +borec +borovice +bota +boubel +bouchat +bouda +boule +bourat +boxer +bradavka +brambora +branka +bratr +brepta +briketa +brko +brloh +bronz +broskev +brunetka +brusinka +brzda +brzy +bublina +bubnovat +buchta +buditel +budka +budova +bufet +bujarost +bukvice +buldok +bulva +bunda +bunkr +burza +butik +buvol +buzola +bydlet +bylina +bytovka +bzukot +capart +carevna +cedr +cedule +cejch +cejn +cela +celer +celkem +celnice +cenina +cennost +cenovka +centrum +cenzor +cestopis +cetka +chalupa +chapadlo +charita +chata +chechtat +chemie +chichot +chirurg +chlad +chleba +chlubit +chmel +chmura +chobot +chochol +chodba +cholera +chomout +chopit +choroba +chov +chrapot +chrlit +chrt +chrup +chtivost +chudina +chutnat +chvat +chvilka +chvost +chyba +chystat +chytit +cibule +cigareta +cihelna +cihla +cinkot +cirkus +cisterna +citace +citrus +cizinec +cizost +clona +cokoliv +couvat +ctitel +ctnost +cudnost +cuketa +cukr +cupot +cvaknout +cval +cvik +cvrkot +cyklista +daleko +dareba +datel +datum +dcera +debata +dechovka +decibel +deficit +deflace +dekl +dekret +demokrat +deprese +derby +deska +detektiv +dikobraz +diktovat +dioda +diplom +disk +displej +divadlo +divoch +dlaha +dlouho +dluhopis +dnes +dobro +dobytek +docent +dochutit +dodnes +dohled +dohoda +dohra +dojem +dojnice +doklad +dokola +doktor +dokument +dolar +doleva +dolina +doma +dominant +domluvit +domov +donutit +dopad +dopis +doplnit +doposud +doprovod +dopustit +dorazit +dorost +dort +dosah +doslov +dostatek +dosud +dosyta +dotaz +dotek +dotknout +doufat +doutnat +dovozce +dozadu +doznat +dozorce +drahota +drak +dramatik +dravec +draze +drdol +drobnost +drogerie +drozd +drsnost +drtit +drzost +duben +duchovno +dudek +duha +duhovka +dusit +dusno +dutost +dvojice +dvorec +dynamit +ekolog +ekonomie +elektron +elipsa +email +emise +emoce +empatie +epizoda +epocha +epopej +epos +esej +esence +eskorta +eskymo +etiketa +euforie +evoluce +exekuce +exkurze +expedice +exploze +export +extrakt +facka +fajfka +fakulta +fanatik +fantazie +farmacie +favorit +fazole +federace +fejeton +fenka +fialka +figurant +filozof +filtr +finance +finta +fixace +fjord +flanel +flirt +flotila +fond +fosfor +fotbal +fotka +foton +frakce +freska +fronta +fukar +funkce +fyzika +galeje +garant +genetika +geolog +gilotina +glazura +glejt +golem +golfista +gotika +graf +gramofon +granule +grep +gril +grog +groteska +guma +hadice +hadr +hala +halenka +hanba +hanopis +harfa +harpuna +havran +hebkost +hejkal +hejno +hejtman +hektar +helma +hematom +herec +herna +heslo +hezky +historik +hladovka +hlasivky +hlava +hledat +hlen +hlodavec +hloh +hloupost +hltat +hlubina +hluchota +hmat +hmota +hmyz +hnis +hnojivo +hnout +hoblina +hoboj +hoch +hodiny +hodlat +hodnota +hodovat +hojnost +hokej +holinka +holka +holub +homole +honitba +honorace +horal +horda +horizont +horko +horlivec +hormon +hornina +horoskop +horstvo +hospoda +hostina +hotovost +houba +houf +houpat +houska +hovor +hradba +hranice +hravost +hrazda +hrbolek +hrdina +hrdlo +hrdost +hrnek +hrobka +hromada +hrot +hrouda +hrozen +hrstka +hrubost +hryzat +hubenost +hubnout +hudba +hukot +humr +husita +hustota +hvozd +hybnost +hydrant +hygiena +hymna +hysterik +idylka +ihned +ikona +iluze +imunita +infekce +inflace +inkaso +inovace +inspekce +internet +invalida +investor +inzerce +ironie +jablko +jachta +jahoda +jakmile +jakost +jalovec +jantar +jarmark +jaro +jasan +jasno +jatka +javor +jazyk +jedinec +jedle +jednatel +jehlan +jekot +jelen +jelito +jemnost +jenom +jepice +jeseter +jevit +jezdec +jezero +jinak +jindy +jinoch +jiskra +jistota +jitrnice +jizva +jmenovat +jogurt +jurta +kabaret +kabel +kabinet +kachna +kadet +kadidlo +kahan +kajak +kajuta +kakao +kaktus +kalamita +kalhoty +kalibr +kalnost +kamera +kamkoliv +kamna +kanibal +kanoe +kantor +kapalina +kapela +kapitola +kapka +kaple +kapota +kapr +kapusta +kapybara +karamel +karotka +karton +kasa +katalog +katedra +kauce +kauza +kavalec +kazajka +kazeta +kazivost +kdekoliv +kdesi +kedluben +kemp +keramika +kino +klacek +kladivo +klam +klapot +klasika +klaun +klec +klenba +klepat +klesnout +klid +klima +klisna +klobouk +klokan +klopa +kloub +klubovna +klusat +kluzkost +kmen +kmitat +kmotr +kniha +knot +koalice +koberec +kobka +kobliha +kobyla +kocour +kohout +kojenec +kokos +koktejl +kolaps +koleda +kolize +kolo +komando +kometa +komik +komnata +komora +kompas +komunita +konat +koncept +kondice +konec +konfese +kongres +konina +konkurs +kontakt +konzerva +kopanec +kopie +kopnout +koprovka +korbel +korektor +kormidlo +koroptev +korpus +koruna +koryto +korzet +kosatec +kostka +kotel +kotleta +kotoul +koukat +koupelna +kousek +kouzlo +kovboj +koza +kozoroh +krabice +krach +krajina +kralovat +krasopis +kravata +kredit +krejcar +kresba +kreveta +kriket +kritik +krize +krkavec +krmelec +krmivo +krocan +krok +kronika +kropit +kroupa +krovka +krtek +kruhadlo +krupice +krutost +krvinka +krychle +krypta +krystal +kryt +kudlanka +kufr +kujnost +kukla +kulajda +kulich +kulka +kulomet +kultura +kuna +kupodivu +kurt +kurzor +kutil +kvalita +kvasinka +kvestor +kynolog +kyselina +kytara +kytice +kytka +kytovec +kyvadlo +labrador +lachtan +ladnost +laik +lakomec +lamela +lampa +lanovka +lasice +laso +lastura +latinka +lavina +lebka +leckdy +leden +lednice +ledovka +ledvina +legenda +legie +legrace +lehce +lehkost +lehnout +lektvar +lenochod +lentilka +lepenka +lepidlo +letadlo +letec +letmo +letokruh +levhart +levitace +levobok +libra +lichotka +lidojed +lidskost +lihovina +lijavec +lilek +limetka +linie +linka +linoleum +listopad +litina +litovat +lobista +lodivod +logika +logoped +lokalita +loket +lomcovat +lopata +lopuch +lord +losos +lotr +loudal +louh +louka +louskat +lovec +lstivost +lucerna +lucifer +lump +lusk +lustrace +lvice +lyra +lyrika +lysina +madam +madlo +magistr +mahagon +majetek +majitel +majorita +makak +makovice +makrela +malba +malina +malovat +malvice +maminka +mandle +manko +marnost +masakr +maskot +masopust +matice +matrika +maturita +mazanec +mazivo +mazlit +mazurka +mdloba +mechanik +meditace +medovina +melasa +meloun +mentolka +metla +metoda +metr +mezera +migrace +mihnout +mihule +mikina +mikrofon +milenec +milimetr +milost +mimika +mincovna +minibar +minomet +minulost +miska +mistr +mixovat +mladost +mlha +mlhovina +mlok +mlsat +mluvit +mnich +mnohem +mobil +mocnost +modelka +modlitba +mohyla +mokro +molekula +momentka +monarcha +monokl +monstrum +montovat +monzun +mosaz +moskyt +most +motivace +motorka +motyka +moucha +moudrost +mozaika +mozek +mozol +mramor +mravenec +mrkev +mrtvola +mrzet +mrzutost +mstitel +mudrc +muflon +mulat +mumie +munice +muset +mutace +muzeum +muzikant +myslivec +mzda +nabourat +nachytat +nadace +nadbytek +nadhoz +nadobro +nadpis +nahlas +nahnat +nahodile +nahradit +naivita +najednou +najisto +najmout +naklonit +nakonec +nakrmit +nalevo +namazat +namluvit +nanometr +naoko +naopak +naostro +napadat +napevno +naplnit +napnout +naposled +naprosto +narodit +naruby +narychlo +nasadit +nasekat +naslepo +nastat +natolik +navenek +navrch +navzdory +nazvat +nebe +nechat +necky +nedaleko +nedbat +neduh +negace +nehet +nehoda +nejen +nejprve +neklid +nelibost +nemilost +nemoc +neochota +neonka +nepokoj +nerost +nerv +nesmysl +nesoulad +netvor +neuron +nevina +nezvykle +nicota +nijak +nikam +nikdy +nikl +nikterak +nitro +nocleh +nohavice +nominace +nora +norek +nositel +nosnost +nouze +noviny +novota +nozdra +nuda +nudle +nuget +nutit +nutnost +nutrie +nymfa +obal +obarvit +obava +obdiv +obec +obehnat +obejmout +obezita +obhajoba +obilnice +objasnit +objekt +obklopit +oblast +oblek +obliba +obloha +obluda +obnos +obohatit +obojek +obout +obrazec +obrna +obruba +obrys +obsah +obsluha +obstarat +obuv +obvaz +obvinit +obvod +obvykle +obyvatel +obzor +ocas +ocel +ocenit +ochladit +ochota +ochrana +ocitnout +odboj +odbyt +odchod +odcizit +odebrat +odeslat +odevzdat +odezva +odhadce +odhodit +odjet +odjinud +odkaz +odkoupit +odliv +odluka +odmlka +odolnost +odpad +odpis +odplout +odpor +odpustit +odpykat +odrazka +odsoudit +odstup +odsun +odtok +odtud +odvaha +odveta +odvolat +odvracet +odznak +ofina +ofsajd +ohlas +ohnisko +ohrada +ohrozit +ohryzek +okap +okenice +oklika +okno +okouzlit +okovy +okrasa +okres +okrsek +okruh +okupant +okurka +okusit +olejnina +olizovat +omak +omeleta +omezit +omladina +omlouvat +omluva +omyl +onehdy +opakovat +opasek +operace +opice +opilost +opisovat +opora +opozice +opravdu +oproti +orbital +orchestr +orgie +orlice +orloj +ortel +osada +oschnout +osika +osivo +oslava +oslepit +oslnit +oslovit +osnova +osoba +osolit +ospalec +osten +ostraha +ostuda +ostych +osvojit +oteplit +otisk +otop +otrhat +otrlost +otrok +otruby +otvor +ovanout +ovar +oves +ovlivnit +ovoce +oxid +ozdoba +pachatel +pacient +padouch +pahorek +pakt +palanda +palec +palivo +paluba +pamflet +pamlsek +panenka +panika +panna +panovat +panstvo +pantofle +paprika +parketa +parodie +parta +paruka +paryba +paseka +pasivita +pastelka +patent +patrona +pavouk +pazneht +pazourek +pecka +pedagog +pejsek +peklo +peloton +penalta +pendrek +penze +periskop +pero +pestrost +petarda +petice +petrolej +pevnina +pexeso +pianista +piha +pijavice +pikle +piknik +pilina +pilnost +pilulka +pinzeta +pipeta +pisatel +pistole +pitevna +pivnice +pivovar +placenta +plakat +plamen +planeta +plastika +platit +plavidlo +plaz +plech +plemeno +plenta +ples +pletivo +plevel +plivat +plnit +plno +plocha +plodina +plomba +plout +pluk +plyn +pobavit +pobyt +pochod +pocit +poctivec +podat +podcenit +podepsat +podhled +podivit +podklad +podmanit +podnik +podoba +podpora +podraz +podstata +podvod +podzim +poezie +pohanka +pohnutka +pohovor +pohroma +pohyb +pointa +pojistka +pojmout +pokazit +pokles +pokoj +pokrok +pokuta +pokyn +poledne +polibek +polknout +poloha +polynom +pomalu +pominout +pomlka +pomoc +pomsta +pomyslet +ponechat +ponorka +ponurost +popadat +popel +popisek +poplach +poprosit +popsat +popud +poradce +porce +porod +porucha +poryv +posadit +posed +posila +poskok +poslanec +posoudit +pospolu +postava +posudek +posyp +potah +potkan +potlesk +potomek +potrava +potupa +potvora +poukaz +pouto +pouzdro +povaha +povidla +povlak +povoz +povrch +povstat +povyk +povzdech +pozdrav +pozemek +poznatek +pozor +pozvat +pracovat +prahory +praktika +prales +praotec +praporek +prase +pravda +princip +prkno +probudit +procento +prodej +profese +prohra +projekt +prolomit +promile +pronikat +propad +prorok +prosba +proton +proutek +provaz +prskavka +prsten +prudkost +prut +prvek +prvohory +psanec +psovod +pstruh +ptactvo +puberta +puch +pudl +pukavec +puklina +pukrle +pult +pumpa +punc +pupen +pusa +pusinka +pustina +putovat +putyka +pyramida +pysk +pytel +racek +rachot +radiace +radnice +radon +raft +ragby +raketa +rakovina +rameno +rampouch +rande +rarach +rarita +rasovna +rastr +ratolest +razance +razidlo +reagovat +reakce +recept +redaktor +referent +reflex +rejnok +reklama +rekord +rekrut +rektor +reputace +revize +revma +revolver +rezerva +riskovat +riziko +robotika +rodokmen +rohovka +rokle +rokoko +romaneto +ropovod +ropucha +rorejs +rosol +rostlina +rotmistr +rotoped +rotunda +roubenka +roucho +roup +roura +rovina +rovnice +rozbor +rozchod +rozdat +rozeznat +rozhodce +rozinka +rozjezd +rozkaz +rozloha +rozmar +rozpad +rozruch +rozsah +roztok +rozum +rozvod +rubrika +ruchadlo +rukavice +rukopis +ryba +rybolov +rychlost +rydlo +rypadlo +rytina +ryzost +sadista +sahat +sako +samec +samizdat +samota +sanitka +sardinka +sasanka +satelit +sazba +sazenice +sbor +schovat +sebranka +secese +sedadlo +sediment +sedlo +sehnat +sejmout +sekera +sekta +sekunda +sekvoje +semeno +seno +servis +sesadit +seshora +seskok +seslat +sestra +sesuv +sesypat +setba +setina +setkat +setnout +setrvat +sever +seznam +shoda +shrnout +sifon +silnice +sirka +sirotek +sirup +situace +skafandr +skalisko +skanzen +skaut +skeptik +skica +skladba +sklenice +sklo +skluz +skoba +skokan +skoro +skripta +skrz +skupina +skvost +skvrna +slabika +sladidlo +slanina +slast +slavnost +sledovat +slepec +sleva +slezina +slib +slina +sliznice +slon +sloupek +slovo +sluch +sluha +slunce +slupka +slza +smaragd +smetana +smilstvo +smlouva +smog +smrad +smrk +smrtka +smutek +smysl +snad +snaha +snob +sobota +socha +sodovka +sokol +sopka +sotva +souboj +soucit +soudce +souhlas +soulad +soumrak +souprava +soused +soutok +souviset +spalovna +spasitel +spis +splav +spodek +spojenec +spolu +sponzor +spornost +spousta +sprcha +spustit +sranda +sraz +srdce +srna +srnec +srovnat +srpen +srst +srub +stanice +starosta +statika +stavba +stehno +stezka +stodola +stolek +stopa +storno +stoupat +strach +stres +strhnout +strom +struna +studna +stupnice +stvol +styk +subjekt +subtropy +suchar +sudost +sukno +sundat +sunout +surikata +surovina +svah +svalstvo +svetr +svatba +svazek +svisle +svitek +svoboda +svodidlo +svorka +svrab +sykavka +sykot +synek +synovec +sypat +sypkost +syrovost +sysel +sytost +tabletka +tabule +tahoun +tajemno +tajfun +tajga +tajit +tajnost +taktika +tamhle +tampon +tancovat +tanec +tanker +tapeta +tavenina +tazatel +technika +tehdy +tekutina +telefon +temnota +tendence +tenista +tenor +teplota +tepna +teprve +terapie +termoska +textil +ticho +tiskopis +titulek +tkadlec +tkanina +tlapka +tleskat +tlukot +tlupa +tmel +toaleta +topinka +topol +torzo +touha +toulec +tradice +traktor +tramp +trasa +traverza +trefit +trest +trezor +trhavina +trhlina +trochu +trojice +troska +trouba +trpce +trpitel +trpkost +trubec +truchlit +truhlice +trus +trvat +tudy +tuhnout +tuhost +tundra +turista +turnaj +tuzemsko +tvaroh +tvorba +tvrdost +tvrz +tygr +tykev +ubohost +uboze +ubrat +ubrousek +ubrus +ubytovna +ucho +uctivost +udivit +uhradit +ujednat +ujistit +ujmout +ukazatel +uklidnit +uklonit +ukotvit +ukrojit +ulice +ulita +ulovit +umyvadlo +unavit +uniforma +uniknout +upadnout +uplatnit +uplynout +upoutat +upravit +uran +urazit +usednout +usilovat +usmrtit +usnadnit +usnout +usoudit +ustlat +ustrnout +utahovat +utkat +utlumit +utonout +utopenec +utrousit +uvalit +uvolnit +uvozovka +uzdravit +uzel +uzenina +uzlina +uznat +vagon +valcha +valoun +vana +vandal +vanilka +varan +varhany +varovat +vcelku +vchod +vdova +vedro +vegetace +vejce +velbloud +veletrh +velitel +velmoc +velryba +venkov +veranda +verze +veselka +veskrze +vesnice +vespodu +vesta +veterina +veverka +vibrace +vichr +videohra +vidina +vidle +vila +vinice +viset +vitalita +vize +vizitka +vjezd +vklad +vkus +vlajka +vlak +vlasec +vlevo +vlhkost +vliv +vlnovka +vloupat +vnucovat +vnuk +voda +vodivost +vodoznak +vodstvo +vojensky +vojna +vojsko +volant +volba +volit +volno +voskovka +vozidlo +vozovna +vpravo +vrabec +vracet +vrah +vrata +vrba +vrcholek +vrhat +vrstva +vrtule +vsadit +vstoupit +vstup +vtip +vybavit +vybrat +vychovat +vydat +vydra +vyfotit +vyhledat +vyhnout +vyhodit +vyhradit +vyhubit +vyjasnit +vyjet +vyjmout +vyklopit +vykonat +vylekat +vymazat +vymezit +vymizet +vymyslet +vynechat +vynikat +vynutit +vypadat +vyplatit +vypravit +vypustit +vyrazit +vyrovnat +vyrvat +vyslovit +vysoko +vystavit +vysunout +vysypat +vytasit +vytesat +vytratit +vyvinout +vyvolat +vyvrhel +vyzdobit +vyznat +vzadu +vzbudit +vzchopit +vzdor +vzduch +vzdychat +vzestup +vzhledem +vzkaz +vzlykat +vznik +vzorek +vzpoura +vztah +vztek +xylofon +zabrat +zabydlet +zachovat +zadarmo +zadusit +zafoukat +zahltit +zahodit +zahrada +zahynout +zajatec +zajet +zajistit +zaklepat +zakoupit +zalepit +zamezit +zamotat +zamyslet +zanechat +zanikat +zaplatit +zapojit +zapsat +zarazit +zastavit +zasunout +zatajit +zatemnit +zatknout +zaujmout +zavalit +zavelet +zavinit +zavolat +zavrtat +zazvonit +zbavit +zbrusu +zbudovat +zbytek +zdaleka +zdarma +zdatnost +zdivo +zdobit +zdroj +zdvih +zdymadlo +zelenina +zeman +zemina +zeptat +zezadu +zezdola +zhatit +zhltnout +zhluboka +zhotovit +zhruba +zima +zimnice +zjemnit +zklamat +zkoumat +zkratka +zkumavka +zlato +zlehka +zloba +zlom +zlost +zlozvyk +zmapovat +zmar +zmatek +zmije +zmizet +zmocnit +zmodrat +zmrzlina +zmutovat +znak +znalost +znamenat +znovu +zobrazit +zotavit +zoubek +zoufale +zplodit +zpomalit +zprava +zprostit +zprudka +zprvu +zrada +zranit +zrcadlo +zrnitost +zrno +zrovna +zrychlit +zrzavost +zticha +ztratit +zubovina +zubr +zvednout +zvenku +zvesela +zvon +zvrat +zvukovod +zvyk diff --git a/packages/wordlists/input/lang-en.txt b/packages/wordlists/input/lang-en.txt new file mode 100644 index 000000000..942040ed5 --- /dev/null +++ b/packages/wordlists/input/lang-en.txt @@ -0,0 +1,2048 @@ +abandon +ability +able +about +above +absent +absorb +abstract +absurd +abuse +access +accident +account +accuse +achieve +acid +acoustic +acquire +across +act +action +actor +actress +actual +adapt +add +addict +address +adjust +admit +adult +advance +advice +aerobic +affair +afford +afraid +again +age +agent +agree +ahead +aim +air +airport +aisle +alarm +album +alcohol +alert +alien +all +alley +allow +almost +alone +alpha +already +also +alter +always +amateur +amazing +among +amount +amused +analyst +anchor +ancient +anger +angle +angry +animal +ankle +announce +annual +another +answer +antenna +antique +anxiety +any +apart +apology +appear +apple +approve +april +arch +arctic +area +arena +argue +arm +armed +armor +army +around +arrange +arrest +arrive +arrow +art +artefact +artist +artwork +ask +aspect +assault +asset +assist +assume +asthma +athlete +atom +attack +attend +attitude +attract +auction +audit +august +aunt +author +auto +autumn +average +avocado +avoid +awake +aware +away +awesome +awful +awkward +axis +baby +bachelor +bacon +badge +bag +balance +balcony +ball +bamboo +banana +banner +bar +barely +bargain +barrel +base +basic +basket +battle +beach +bean +beauty +because +become +beef +before +begin +behave +behind +believe +below +belt +bench +benefit +best +betray +better +between +beyond +bicycle +bid +bike +bind +biology +bird +birth +bitter +black +blade +blame +blanket +blast +bleak +bless +blind +blood +blossom +blouse +blue +blur +blush +board +boat +body +boil +bomb +bone +bonus +book +boost +border +boring +borrow +boss +bottom +bounce +box +boy +bracket +brain +brand +brass +brave +bread +breeze +brick +bridge +brief +bright +bring +brisk +broccoli +broken +bronze +broom +brother +brown +brush +bubble +buddy +budget +buffalo +build +bulb +bulk +bullet +bundle +bunker +burden +burger +burst +bus +business +busy +butter +buyer +buzz +cabbage +cabin +cable +cactus +cage +cake +call +calm +camera +camp +can +canal +cancel +candy +cannon +canoe +canvas +canyon +capable +capital +captain +car +carbon +card +cargo +carpet +carry +cart +case +cash +casino +castle +casual +cat +catalog +catch +category +cattle +caught +cause +caution +cave +ceiling +celery +cement +census +century +cereal +certain +chair +chalk +champion +change +chaos +chapter +charge +chase +chat +cheap +check +cheese +chef +cherry +chest +chicken +chief +child +chimney +choice +choose +chronic +chuckle +chunk +churn +cigar +cinnamon +circle +citizen +city +civil +claim +clap +clarify +claw +clay +clean +clerk +clever +click +client +cliff +climb +clinic +clip +clock +clog +close +cloth +cloud +clown +club +clump +cluster +clutch +coach +coast +coconut +code +coffee +coil +coin +collect +color +column +combine +come +comfort +comic +common +company +concert +conduct +confirm +congress +connect +consider +control +convince +cook +cool +copper +copy +coral +core +corn +correct +cost +cotton +couch +country +couple +course +cousin +cover +coyote +crack +cradle +craft +cram +crane +crash +crater +crawl +crazy +cream +credit +creek +crew +cricket +crime +crisp +critic +crop +cross +crouch +crowd +crucial +cruel +cruise +crumble +crunch +crush +cry +crystal +cube +culture +cup +cupboard +curious +current +curtain +curve +cushion +custom +cute +cycle +dad +damage +damp +dance +danger +daring +dash +daughter +dawn +day +deal +debate +debris +decade +december +decide +decline +decorate +decrease +deer +defense +define +defy +degree +delay +deliver +demand +demise +denial +dentist +deny +depart +depend +deposit +depth +deputy +derive +describe +desert +design +desk +despair +destroy +detail +detect +develop +device +devote +diagram +dial +diamond +diary +dice +diesel +diet +differ +digital +dignity +dilemma +dinner +dinosaur +direct +dirt +disagree +discover +disease +dish +dismiss +disorder +display +distance +divert +divide +divorce +dizzy +doctor +document +dog +doll +dolphin +domain +donate +donkey +donor +door +dose +double +dove +draft +dragon +drama +drastic +draw +dream +dress +drift +drill +drink +drip +drive +drop +drum +dry +duck +dumb +dune +during +dust +dutch +duty +dwarf +dynamic +eager +eagle +early +earn +earth +easily +east +easy +echo +ecology +economy +edge +edit +educate +effort +egg +eight +either +elbow +elder +electric +elegant +element +elephant +elevator +elite +else +embark +embody +embrace +emerge +emotion +employ +empower +empty +enable +enact +end +endless +endorse +enemy +energy +enforce +engage +engine +enhance +enjoy +enlist +enough +enrich +enroll +ensure +enter +entire +entry +envelope +episode +equal +equip +era +erase +erode +erosion +error +erupt +escape +essay +essence +estate +eternal +ethics +evidence +evil +evoke +evolve +exact +example +excess +exchange +excite +exclude +excuse +execute +exercise +exhaust +exhibit +exile +exist +exit +exotic +expand +expect +expire +explain +expose +express +extend +extra +eye +eyebrow +fabric +face +faculty +fade +faint +faith +fall +false +fame +family +famous +fan +fancy +fantasy +farm +fashion +fat +fatal +father +fatigue +fault +favorite +feature +february +federal +fee +feed +feel +female +fence +festival +fetch +fever +few +fiber +fiction +field +figure +file +film +filter +final +find +fine +finger +finish +fire +firm +first +fiscal +fish +fit +fitness +fix +flag +flame +flash +flat +flavor +flee +flight +flip +float +flock +floor +flower +fluid +flush +fly +foam +focus +fog +foil +fold +follow +food +foot +force +forest +forget +fork +fortune +forum +forward +fossil +foster +found +fox +fragile +frame +frequent +fresh +friend +fringe +frog +front +frost +frown +frozen +fruit +fuel +fun +funny +furnace +fury +future +gadget +gain +galaxy +gallery +game +gap +garage +garbage +garden +garlic +garment +gas +gasp +gate +gather +gauge +gaze +general +genius +genre +gentle +genuine +gesture +ghost +giant +gift +giggle +ginger +giraffe +girl +give +glad +glance +glare +glass +glide +glimpse +globe +gloom +glory +glove +glow +glue +goat +goddess +gold +good +goose +gorilla +gospel +gossip +govern +gown +grab +grace +grain +grant +grape +grass +gravity +great +green +grid +grief +grit +grocery +group +grow +grunt +guard +guess +guide +guilt +guitar +gun +gym +habit +hair +half +hammer +hamster +hand +happy +harbor +hard +harsh +harvest +hat +have +hawk +hazard +head +health +heart +heavy +hedgehog +height +hello +helmet +help +hen +hero +hidden +high +hill +hint +hip +hire +history +hobby +hockey +hold +hole +holiday +hollow +home +honey +hood +hope +horn +horror +horse +hospital +host +hotel +hour +hover +hub +huge +human +humble +humor +hundred +hungry +hunt +hurdle +hurry +hurt +husband +hybrid +ice +icon +idea +identify +idle +ignore +ill +illegal +illness +image +imitate +immense +immune +impact +impose +improve +impulse +inch +include +income +increase +index +indicate +indoor +industry +infant +inflict +inform +inhale +inherit +initial +inject +injury +inmate +inner +innocent +input +inquiry +insane +insect +inside +inspire +install +intact +interest +into +invest +invite +involve +iron +island +isolate +issue +item +ivory +jacket +jaguar +jar +jazz +jealous +jeans +jelly +jewel +job +join +joke +journey +joy +judge +juice +jump +jungle +junior +junk +just +kangaroo +keen +keep +ketchup +key +kick +kid +kidney +kind +kingdom +kiss +kit +kitchen +kite +kitten +kiwi +knee +knife +knock +know +lab +label +labor +ladder +lady +lake +lamp +language +laptop +large +later +latin +laugh +laundry +lava +law +lawn +lawsuit +layer +lazy +leader +leaf +learn +leave +lecture +left +leg +legal +legend +leisure +lemon +lend +length +lens +leopard +lesson +letter +level +liar +liberty +library +license +life +lift +light +like +limb +limit +link +lion +liquid +list +little +live +lizard +load +loan +lobster +local +lock +logic +lonely +long +loop +lottery +loud +lounge +love +loyal +lucky +luggage +lumber +lunar +lunch +luxury +lyrics +machine +mad +magic +magnet +maid +mail +main +major +make +mammal +man +manage +mandate +mango +mansion +manual +maple +marble +march +margin +marine +market +marriage +mask +mass +master +match +material +math +matrix +matter +maximum +maze +meadow +mean +measure +meat +mechanic +medal +media +melody +melt +member +memory +mention +menu +mercy +merge +merit +merry +mesh +message +metal +method +middle +midnight +milk +million +mimic +mind +minimum +minor +minute +miracle +mirror +misery +miss +mistake +mix +mixed +mixture +mobile +model +modify +mom +moment +monitor +monkey +monster +month +moon +moral +more +morning +mosquito +mother +motion +motor +mountain +mouse +move +movie +much +muffin +mule +multiply +muscle +museum +mushroom +music +must +mutual +myself +mystery +myth +naive +name +napkin +narrow +nasty +nation +nature +near +neck +need +negative +neglect +neither +nephew +nerve +nest +net +network +neutral +never +news +next +nice +night +noble +noise +nominee +noodle +normal +north +nose +notable +note +nothing +notice +novel +now +nuclear +number +nurse +nut +oak +obey +object +oblige +obscure +observe +obtain +obvious +occur +ocean +october +odor +off +offer +office +often +oil +okay +old +olive +olympic +omit +once +one +onion +online +only +open +opera +opinion +oppose +option +orange +orbit +orchard +order +ordinary +organ +orient +original +orphan +ostrich +other +outdoor +outer +output +outside +oval +oven +over +own +owner +oxygen +oyster +ozone +pact +paddle +page +pair +palace +palm +panda +panel +panic +panther +paper +parade +parent +park +parrot +party +pass +patch +path +patient +patrol +pattern +pause +pave +payment +peace +peanut +pear +peasant +pelican +pen +penalty +pencil +people +pepper +perfect +permit +person +pet +phone +photo +phrase +physical +piano +picnic +picture +piece +pig +pigeon +pill +pilot +pink +pioneer +pipe +pistol +pitch +pizza +place +planet +plastic +plate +play +please +pledge +pluck +plug +plunge +poem +poet +point +polar +pole +police +pond +pony +pool +popular +portion +position +possible +post +potato +pottery +poverty +powder +power +practice +praise +predict +prefer +prepare +present +pretty +prevent +price +pride +primary +print +priority +prison +private +prize +problem +process +produce +profit +program +project +promote +proof +property +prosper +protect +proud +provide +public +pudding +pull +pulp +pulse +pumpkin +punch +pupil +puppy +purchase +purity +purpose +purse +push +put +puzzle +pyramid +quality +quantum +quarter +question +quick +quit +quiz +quote +rabbit +raccoon +race +rack +radar +radio +rail +rain +raise +rally +ramp +ranch +random +range +rapid +rare +rate +rather +raven +raw +razor +ready +real +reason +rebel +rebuild +recall +receive +recipe +record +recycle +reduce +reflect +reform +refuse +region +regret +regular +reject +relax +release +relief +rely +remain +remember +remind +remove +render +renew +rent +reopen +repair +repeat +replace +report +require +rescue +resemble +resist +resource +response +result +retire +retreat +return +reunion +reveal +review +reward +rhythm +rib +ribbon +rice +rich +ride +ridge +rifle +right +rigid +ring +riot +ripple +risk +ritual +rival +river +road +roast +robot +robust +rocket +romance +roof +rookie +room +rose +rotate +rough +round +route +royal +rubber +rude +rug +rule +run +runway +rural +sad +saddle +sadness +safe +sail +salad +salmon +salon +salt +salute +same +sample +sand +satisfy +satoshi +sauce +sausage +save +say +scale +scan +scare +scatter +scene +scheme +school +science +scissors +scorpion +scout +scrap +screen +script +scrub +sea +search +season +seat +second +secret +section +security +seed +seek +segment +select +sell +seminar +senior +sense +sentence +series +service +session +settle +setup +seven +shadow +shaft +shallow +share +shed +shell +sheriff +shield +shift +shine +ship +shiver +shock +shoe +shoot +shop +short +shoulder +shove +shrimp +shrug +shuffle +shy +sibling +sick +side +siege +sight +sign +silent +silk +silly +silver +similar +simple +since +sing +siren +sister +situate +six +size +skate +sketch +ski +skill +skin +skirt +skull +slab +slam +sleep +slender +slice +slide +slight +slim +slogan +slot +slow +slush +small +smart +smile +smoke +smooth +snack +snake +snap +sniff +snow +soap +soccer +social +sock +soda +soft +solar +soldier +solid +solution +solve +someone +song +soon +sorry +sort +soul +sound +soup +source +south +space +spare +spatial +spawn +speak +special +speed +spell +spend +sphere +spice +spider +spike +spin +spirit +split +spoil +sponsor +spoon +sport +spot +spray +spread +spring +spy +square +squeeze +squirrel +stable +stadium +staff +stage +stairs +stamp +stand +start +state +stay +steak +steel +stem +step +stereo +stick +still +sting +stock +stomach +stone +stool +story +stove +strategy +street +strike +strong +struggle +student +stuff +stumble +style +subject +submit +subway +success +such +sudden +suffer +sugar +suggest +suit +summer +sun +sunny +sunset +super +supply +supreme +sure +surface +surge +surprise +surround +survey +suspect +sustain +swallow +swamp +swap +swarm +swear +sweet +swift +swim +swing +switch +sword +symbol +symptom +syrup +system +table +tackle +tag +tail +talent +talk +tank +tape +target +task +taste +tattoo +taxi +teach +team +tell +ten +tenant +tennis +tent +term +test +text +thank +that +theme +then +theory +there +they +thing +this +thought +three +thrive +throw +thumb +thunder +ticket +tide +tiger +tilt +timber +time +tiny +tip +tired +tissue +title +toast +tobacco +today +toddler +toe +together +toilet +token +tomato +tomorrow +tone +tongue +tonight +tool +tooth +top +topic +topple +torch +tornado +tortoise +toss +total +tourist +toward +tower +town +toy +track +trade +traffic +tragic +train +transfer +trap +trash +travel +tray +treat +tree +trend +trial +tribe +trick +trigger +trim +trip +trophy +trouble +truck +true +truly +trumpet +trust +truth +try +tube +tuition +tumble +tuna +tunnel +turkey +turn +turtle +twelve +twenty +twice +twin +twist +two +type +typical +ugly +umbrella +unable +unaware +uncle +uncover +under +undo +unfair +unfold +unhappy +uniform +unique +unit +universe +unknown +unlock +until +unusual +unveil +update +upgrade +uphold +upon +upper +upset +urban +urge +usage +use +used +useful +useless +usual +utility +vacant +vacuum +vague +valid +valley +valve +van +vanish +vapor +various +vast +vault +vehicle +velvet +vendor +venture +venue +verb +verify +version +very +vessel +veteran +viable +vibrant +vicious +victory +video +view +village +vintage +violin +virtual +virus +visa +visit +visual +vital +vivid +vocal +voice +void +volcano +volume +vote +voyage +wage +wagon +wait +walk +wall +walnut +want +warfare +warm +warrior +wash +wasp +waste +water +wave +way +wealth +weapon +wear +weasel +weather +web +wedding +weekend +weird +welcome +west +wet +whale +what +wheat +wheel +when +where +whip +whisper +wide +width +wife +wild +will +win +window +wine +wing +wink +winner +winter +wire +wisdom +wise +wish +witness +wolf +woman +wonder +wood +wool +word +work +world +worry +worth +wrap +wreck +wrestle +wrist +write +wrong +yard +year +yellow +you +young +youth +zebra +zero +zone +zoo diff --git a/packages/wordlists/input/lang-es.txt b/packages/wordlists/input/lang-es.txt new file mode 100644 index 000000000..fdbc23c73 --- /dev/null +++ b/packages/wordlists/input/lang-es.txt @@ -0,0 +1,2048 @@ +ábaco +abdomen +abeja +abierto +abogado +abono +aborto +abrazo +abrir +abuelo +abuso +acabar +academia +acceso +acción +aceite +acelga +acento +aceptar +ácido +aclarar +acné +acoger +acoso +activo +acto +actriz +actuar +acudir +acuerdo +acusar +adicto +admitir +adoptar +adorno +aduana +adulto +aéreo +afectar +afición +afinar +afirmar +ágil +agitar +agonía +agosto +agotar +agregar +agrio +agua +agudo +águila +aguja +ahogo +ahorro +aire +aislar +ajedrez +ajeno +ajuste +alacrán +alambre +alarma +alba +álbum +alcalde +aldea +alegre +alejar +alerta +aleta +alfiler +alga +algodón +aliado +aliento +alivio +alma +almeja +almíbar +altar +alteza +altivo +alto +altura +alumno +alzar +amable +amante +amapola +amargo +amasar +ámbar +ámbito +ameno +amigo +amistad +amor +amparo +amplio +ancho +anciano +ancla +andar +andén +anemia +ángulo +anillo +ánimo +anís +anotar +antena +antiguo +antojo +anual +anular +anuncio +añadir +añejo +año +apagar +aparato +apetito +apio +aplicar +apodo +aporte +apoyo +aprender +aprobar +apuesta +apuro +arado +araña +arar +árbitro +árbol +arbusto +archivo +arco +arder +ardilla +arduo +área +árido +aries +armonía +arnés +aroma +arpa +arpón +arreglo +arroz +arruga +arte +artista +asa +asado +asalto +ascenso +asegurar +aseo +asesor +asiento +asilo +asistir +asno +asombro +áspero +astilla +astro +astuto +asumir +asunto +atajo +ataque +atar +atento +ateo +ático +atleta +átomo +atraer +atroz +atún +audaz +audio +auge +aula +aumento +ausente +autor +aval +avance +avaro +ave +avellana +avena +avestruz +avión +aviso +ayer +ayuda +ayuno +azafrán +azar +azote +azúcar +azufre +azul +baba +babor +bache +bahía +baile +bajar +balanza +balcón +balde +bambú +banco +banda +baño +barba +barco +barniz +barro +báscula +bastón +basura +batalla +batería +batir +batuta +baúl +bazar +bebé +bebida +bello +besar +beso +bestia +bicho +bien +bingo +blanco +bloque +blusa +boa +bobina +bobo +boca +bocina +boda +bodega +boina +bola +bolero +bolsa +bomba +bondad +bonito +bono +bonsái +borde +borrar +bosque +bote +botín +bóveda +bozal +bravo +brazo +brecha +breve +brillo +brinco +brisa +broca +broma +bronce +brote +bruja +brusco +bruto +buceo +bucle +bueno +buey +bufanda +bufón +búho +buitre +bulto +burbuja +burla +burro +buscar +butaca +buzón +caballo +cabeza +cabina +cabra +cacao +cadáver +cadena +caer +café +caída +caimán +caja +cajón +cal +calamar +calcio +caldo +calidad +calle +calma +calor +calvo +cama +cambio +camello +camino +campo +cáncer +candil +canela +canguro +canica +canto +caña +cañón +caoba +caos +capaz +capitán +capote +captar +capucha +cara +carbón +cárcel +careta +carga +cariño +carne +carpeta +carro +carta +casa +casco +casero +caspa +castor +catorce +catre +caudal +causa +cazo +cebolla +ceder +cedro +celda +célebre +celoso +célula +cemento +ceniza +centro +cerca +cerdo +cereza +cero +cerrar +certeza +césped +cetro +chacal +chaleco +champú +chancla +chapa +charla +chico +chiste +chivo +choque +choza +chuleta +chupar +ciclón +ciego +cielo +cien +cierto +cifra +cigarro +cima +cinco +cine +cinta +ciprés +circo +ciruela +cisne +cita +ciudad +clamor +clan +claro +clase +clave +cliente +clima +clínica +cobre +cocción +cochino +cocina +coco +código +codo +cofre +coger +cohete +cojín +cojo +cola +colcha +colegio +colgar +colina +collar +colmo +columna +combate +comer +comida +cómodo +compra +conde +conejo +conga +conocer +consejo +contar +copa +copia +corazón +corbata +corcho +cordón +corona +correr +coser +cosmos +costa +cráneo +cráter +crear +crecer +creído +crema +cría +crimen +cripta +crisis +cromo +crónica +croqueta +crudo +cruz +cuadro +cuarto +cuatro +cubo +cubrir +cuchara +cuello +cuento +cuerda +cuesta +cueva +cuidar +culebra +culpa +culto +cumbre +cumplir +cuna +cuneta +cuota +cupón +cúpula +curar +curioso +curso +curva +cutis +dama +danza +dar +dardo +dátil +deber +débil +década +decir +dedo +defensa +definir +dejar +delfín +delgado +delito +demora +denso +dental +deporte +derecho +derrota +desayuno +deseo +desfile +desnudo +destino +desvío +detalle +detener +deuda +día +diablo +diadema +diamante +diana +diario +dibujo +dictar +diente +dieta +diez +difícil +digno +dilema +diluir +dinero +directo +dirigir +disco +diseño +disfraz +diva +divino +doble +doce +dolor +domingo +don +donar +dorado +dormir +dorso +dos +dosis +dragón +droga +ducha +duda +duelo +dueño +dulce +dúo +duque +durar +dureza +duro +ébano +ebrio +echar +eco +ecuador +edad +edición +edificio +editor +educar +efecto +eficaz +eje +ejemplo +elefante +elegir +elemento +elevar +elipse +élite +elixir +elogio +eludir +embudo +emitir +emoción +empate +empeño +empleo +empresa +enano +encargo +enchufe +encía +enemigo +enero +enfado +enfermo +engaño +enigma +enlace +enorme +enredo +ensayo +enseñar +entero +entrar +envase +envío +época +equipo +erizo +escala +escena +escolar +escribir +escudo +esencia +esfera +esfuerzo +espada +espejo +espía +esposa +espuma +esquí +estar +este +estilo +estufa +etapa +eterno +ética +etnia +evadir +evaluar +evento +evitar +exacto +examen +exceso +excusa +exento +exigir +exilio +existir +éxito +experto +explicar +exponer +extremo +fábrica +fábula +fachada +fácil +factor +faena +faja +falda +fallo +falso +faltar +fama +familia +famoso +faraón +farmacia +farol +farsa +fase +fatiga +fauna +favor +fax +febrero +fecha +feliz +feo +feria +feroz +fértil +fervor +festín +fiable +fianza +fiar +fibra +ficción +ficha +fideo +fiebre +fiel +fiera +fiesta +figura +fijar +fijo +fila +filete +filial +filtro +fin +finca +fingir +finito +firma +flaco +flauta +flecha +flor +flota +fluir +flujo +flúor +fobia +foca +fogata +fogón +folio +folleto +fondo +forma +forro +fortuna +forzar +fosa +foto +fracaso +frágil +franja +frase +fraude +freír +freno +fresa +frío +frito +fruta +fuego +fuente +fuerza +fuga +fumar +función +funda +furgón +furia +fusil +fútbol +futuro +gacela +gafas +gaita +gajo +gala +galería +gallo +gamba +ganar +gancho +ganga +ganso +garaje +garza +gasolina +gastar +gato +gavilán +gemelo +gemir +gen +género +genio +gente +geranio +gerente +germen +gesto +gigante +gimnasio +girar +giro +glaciar +globo +gloria +gol +golfo +goloso +golpe +goma +gordo +gorila +gorra +gota +goteo +gozar +grada +gráfico +grano +grasa +gratis +grave +grieta +grillo +gripe +gris +grito +grosor +grúa +grueso +grumo +grupo +guante +guapo +guardia +guerra +guía +guiño +guion +guiso +guitarra +gusano +gustar +haber +hábil +hablar +hacer +hacha +hada +hallar +hamaca +harina +haz +hazaña +hebilla +hebra +hecho +helado +helio +hembra +herir +hermano +héroe +hervir +hielo +hierro +hígado +higiene +hijo +himno +historia +hocico +hogar +hoguera +hoja +hombre +hongo +honor +honra +hora +hormiga +horno +hostil +hoyo +hueco +huelga +huerta +hueso +huevo +huida +huir +humano +húmedo +humilde +humo +hundir +huracán +hurto +icono +ideal +idioma +ídolo +iglesia +iglú +igual +ilegal +ilusión +imagen +imán +imitar +impar +imperio +imponer +impulso +incapaz +índice +inerte +infiel +informe +ingenio +inicio +inmenso +inmune +innato +insecto +instante +interés +íntimo +intuir +inútil +invierno +ira +iris +ironía +isla +islote +jabalí +jabón +jamón +jarabe +jardín +jarra +jaula +jazmín +jefe +jeringa +jinete +jornada +joroba +joven +joya +juerga +jueves +juez +jugador +jugo +juguete +juicio +junco +jungla +junio +juntar +júpiter +jurar +justo +juvenil +juzgar +kilo +koala +labio +lacio +lacra +lado +ladrón +lagarto +lágrima +laguna +laico +lamer +lámina +lámpara +lana +lancha +langosta +lanza +lápiz +largo +larva +lástima +lata +látex +latir +laurel +lavar +lazo +leal +lección +leche +lector +leer +legión +legumbre +lejano +lengua +lento +leña +león +leopardo +lesión +letal +letra +leve +leyenda +libertad +libro +licor +líder +lidiar +lienzo +liga +ligero +lima +límite +limón +limpio +lince +lindo +línea +lingote +lino +linterna +líquido +liso +lista +litera +litio +litro +llaga +llama +llanto +llave +llegar +llenar +llevar +llorar +llover +lluvia +lobo +loción +loco +locura +lógica +logro +lombriz +lomo +lonja +lote +lucha +lucir +lugar +lujo +luna +lunes +lupa +lustro +luto +luz +maceta +macho +madera +madre +maduro +maestro +mafia +magia +mago +maíz +maldad +maleta +malla +malo +mamá +mambo +mamut +manco +mando +manejar +manga +maniquí +manjar +mano +manso +manta +mañana +mapa +máquina +mar +marco +marea +marfil +margen +marido +mármol +marrón +martes +marzo +masa +máscara +masivo +matar +materia +matiz +matriz +máximo +mayor +mazorca +mecha +medalla +medio +médula +mejilla +mejor +melena +melón +memoria +menor +mensaje +mente +menú +mercado +merengue +mérito +mes +mesón +meta +meter +método +metro +mezcla +miedo +miel +miembro +miga +mil +milagro +militar +millón +mimo +mina +minero +mínimo +minuto +miope +mirar +misa +miseria +misil +mismo +mitad +mito +mochila +moción +moda +modelo +moho +mojar +molde +moler +molino +momento +momia +monarca +moneda +monja +monto +moño +morada +morder +moreno +morir +morro +morsa +mortal +mosca +mostrar +motivo +mover +móvil +mozo +mucho +mudar +mueble +muela +muerte +muestra +mugre +mujer +mula +muleta +multa +mundo +muñeca +mural +muro +músculo +museo +musgo +música +muslo +nácar +nación +nadar +naipe +naranja +nariz +narrar +nasal +natal +nativo +natural +náusea +naval +nave +navidad +necio +néctar +negar +negocio +negro +neón +nervio +neto +neutro +nevar +nevera +nicho +nido +niebla +nieto +niñez +niño +nítido +nivel +nobleza +noche +nómina +noria +norma +norte +nota +noticia +novato +novela +novio +nube +nuca +núcleo +nudillo +nudo +nuera +nueve +nuez +nulo +número +nutria +oasis +obeso +obispo +objeto +obra +obrero +observar +obtener +obvio +oca +ocaso +océano +ochenta +ocho +ocio +ocre +octavo +octubre +oculto +ocupar +ocurrir +odiar +odio +odisea +oeste +ofensa +oferta +oficio +ofrecer +ogro +oído +oír +ojo +ola +oleada +olfato +olivo +olla +olmo +olor +olvido +ombligo +onda +onza +opaco +opción +ópera +opinar +oponer +optar +óptica +opuesto +oración +orador +oral +órbita +orca +orden +oreja +órgano +orgía +orgullo +oriente +origen +orilla +oro +orquesta +oruga +osadía +oscuro +osezno +oso +ostra +otoño +otro +oveja +óvulo +óxido +oxígeno +oyente +ozono +pacto +padre +paella +página +pago +país +pájaro +palabra +palco +paleta +pálido +palma +paloma +palpar +pan +panal +pánico +pantera +pañuelo +papá +papel +papilla +paquete +parar +parcela +pared +parir +paro +párpado +parque +párrafo +parte +pasar +paseo +pasión +paso +pasta +pata +patio +patria +pausa +pauta +pavo +payaso +peatón +pecado +pecera +pecho +pedal +pedir +pegar +peine +pelar +peldaño +pelea +peligro +pellejo +pelo +peluca +pena +pensar +peñón +peón +peor +pepino +pequeño +pera +percha +perder +pereza +perfil +perico +perla +permiso +perro +persona +pesa +pesca +pésimo +pestaña +pétalo +petróleo +pez +pezuña +picar +pichón +pie +piedra +pierna +pieza +pijama +pilar +piloto +pimienta +pino +pintor +pinza +piña +piojo +pipa +pirata +pisar +piscina +piso +pista +pitón +pizca +placa +plan +plata +playa +plaza +pleito +pleno +plomo +pluma +plural +pobre +poco +poder +podio +poema +poesía +poeta +polen +policía +pollo +polvo +pomada +pomelo +pomo +pompa +poner +porción +portal +posada +poseer +posible +poste +potencia +potro +pozo +prado +precoz +pregunta +premio +prensa +preso +previo +primo +príncipe +prisión +privar +proa +probar +proceso +producto +proeza +profesor +programa +prole +promesa +pronto +propio +próximo +prueba +público +puchero +pudor +pueblo +puerta +puesto +pulga +pulir +pulmón +pulpo +pulso +puma +punto +puñal +puño +pupa +pupila +puré +quedar +queja +quemar +querer +queso +quieto +química +quince +quitar +rábano +rabia +rabo +ración +radical +raíz +rama +rampa +rancho +rango +rapaz +rápido +rapto +rasgo +raspa +rato +rayo +raza +razón +reacción +realidad +rebaño +rebote +recaer +receta +rechazo +recoger +recreo +recto +recurso +red +redondo +reducir +reflejo +reforma +refrán +refugio +regalo +regir +regla +regreso +rehén +reino +reír +reja +relato +relevo +relieve +relleno +reloj +remar +remedio +remo +rencor +rendir +renta +reparto +repetir +reposo +reptil +res +rescate +resina +respeto +resto +resumen +retiro +retorno +retrato +reunir +revés +revista +rey +rezar +rico +riego +rienda +riesgo +rifa +rígido +rigor +rincón +riñón +río +riqueza +risa +ritmo +rito +rizo +roble +roce +rociar +rodar +rodeo +rodilla +roer +rojizo +rojo +romero +romper +ron +ronco +ronda +ropa +ropero +rosa +rosca +rostro +rotar +rubí +rubor +rudo +rueda +rugir +ruido +ruina +ruleta +rulo +rumbo +rumor +ruptura +ruta +rutina +sábado +saber +sabio +sable +sacar +sagaz +sagrado +sala +saldo +salero +salir +salmón +salón +salsa +salto +salud +salvar +samba +sanción +sandía +sanear +sangre +sanidad +sano +santo +sapo +saque +sardina +sartén +sastre +satán +sauna +saxofón +sección +seco +secreto +secta +sed +seguir +seis +sello +selva +semana +semilla +senda +sensor +señal +señor +separar +sepia +sequía +ser +serie +sermón +servir +sesenta +sesión +seta +setenta +severo +sexo +sexto +sidra +siesta +siete +siglo +signo +sílaba +silbar +silencio +silla +símbolo +simio +sirena +sistema +sitio +situar +sobre +socio +sodio +sol +solapa +soldado +soledad +sólido +soltar +solución +sombra +sondeo +sonido +sonoro +sonrisa +sopa +soplar +soporte +sordo +sorpresa +sorteo +sostén +sótano +suave +subir +suceso +sudor +suegra +suelo +sueño +suerte +sufrir +sujeto +sultán +sumar +superar +suplir +suponer +supremo +sur +surco +sureño +surgir +susto +sutil +tabaco +tabique +tabla +tabú +taco +tacto +tajo +talar +talco +talento +talla +talón +tamaño +tambor +tango +tanque +tapa +tapete +tapia +tapón +taquilla +tarde +tarea +tarifa +tarjeta +tarot +tarro +tarta +tatuaje +tauro +taza +tazón +teatro +techo +tecla +técnica +tejado +tejer +tejido +tela +teléfono +tema +temor +templo +tenaz +tender +tener +tenis +tenso +teoría +terapia +terco +término +ternura +terror +tesis +tesoro +testigo +tetera +texto +tez +tibio +tiburón +tiempo +tienda +tierra +tieso +tigre +tijera +tilde +timbre +tímido +timo +tinta +tío +típico +tipo +tira +tirón +titán +títere +título +tiza +toalla +tobillo +tocar +tocino +todo +toga +toldo +tomar +tono +tonto +topar +tope +toque +tórax +torero +tormenta +torneo +toro +torpedo +torre +torso +tortuga +tos +tosco +toser +tóxico +trabajo +tractor +traer +tráfico +trago +traje +tramo +trance +trato +trauma +trazar +trébol +tregua +treinta +tren +trepar +tres +tribu +trigo +tripa +triste +triunfo +trofeo +trompa +tronco +tropa +trote +trozo +truco +trueno +trufa +tubería +tubo +tuerto +tumba +tumor +túnel +túnica +turbina +turismo +turno +tutor +ubicar +úlcera +umbral +unidad +unir +universo +uno +untar +uña +urbano +urbe +urgente +urna +usar +usuario +útil +utopía +uva +vaca +vacío +vacuna +vagar +vago +vaina +vajilla +vale +válido +valle +valor +válvula +vampiro +vara +variar +varón +vaso +vecino +vector +vehículo +veinte +vejez +vela +velero +veloz +vena +vencer +venda +veneno +vengar +venir +venta +venus +ver +verano +verbo +verde +vereda +verja +verso +verter +vía +viaje +vibrar +vicio +víctima +vida +vídeo +vidrio +viejo +viernes +vigor +vil +villa +vinagre +vino +viñedo +violín +viral +virgo +virtud +visor +víspera +vista +vitamina +viudo +vivaz +vivero +vivir +vivo +volcán +volumen +volver +voraz +votar +voto +voz +vuelo +vulgar +yacer +yate +yegua +yema +yerno +yeso +yodo +yoga +yogur +zafiro +zanja +zapato +zarza +zona +zorro +zumo +zurdo diff --git a/packages/wordlists/input/lang-fr.txt b/packages/wordlists/input/lang-fr.txt new file mode 100644 index 000000000..1d749904f --- /dev/null +++ b/packages/wordlists/input/lang-fr.txt @@ -0,0 +1,2048 @@ +abaisser +abandon +abdiquer +abeille +abolir +aborder +aboutir +aboyer +abrasif +abreuver +abriter +abroger +abrupt +absence +absolu +absurde +abusif +abyssal +académie +acajou +acarien +accabler +accepter +acclamer +accolade +accroche +accuser +acerbe +achat +acheter +aciduler +acier +acompte +acquérir +acronyme +acteur +actif +actuel +adepte +adéquat +adhésif +adjectif +adjuger +admettre +admirer +adopter +adorer +adoucir +adresse +adroit +adulte +adverbe +aérer +aéronef +affaire +affecter +affiche +affreux +affubler +agacer +agencer +agile +agiter +agrafer +agréable +agrume +aider +aiguille +ailier +aimable +aisance +ajouter +ajuster +alarmer +alchimie +alerte +algèbre +algue +aliéner +aliment +alléger +alliage +allouer +allumer +alourdir +alpaga +altesse +alvéole +amateur +ambigu +ambre +aménager +amertume +amidon +amiral +amorcer +amour +amovible +amphibie +ampleur +amusant +analyse +anaphore +anarchie +anatomie +ancien +anéantir +angle +angoisse +anguleux +animal +annexer +annonce +annuel +anodin +anomalie +anonyme +anormal +antenne +antidote +anxieux +apaiser +apéritif +aplanir +apologie +appareil +appeler +apporter +appuyer +aquarium +aqueduc +arbitre +arbuste +ardeur +ardoise +argent +arlequin +armature +armement +armoire +armure +arpenter +arracher +arriver +arroser +arsenic +artériel +article +aspect +asphalte +aspirer +assaut +asservir +assiette +associer +assurer +asticot +astre +astuce +atelier +atome +atrium +atroce +attaque +attentif +attirer +attraper +aubaine +auberge +audace +audible +augurer +aurore +automne +autruche +avaler +avancer +avarice +avenir +averse +aveugle +aviateur +avide +avion +aviser +avoine +avouer +avril +axial +axiome +badge +bafouer +bagage +baguette +baignade +balancer +balcon +baleine +balisage +bambin +bancaire +bandage +banlieue +bannière +banquier +barbier +baril +baron +barque +barrage +bassin +bastion +bataille +bateau +batterie +baudrier +bavarder +belette +bélier +belote +bénéfice +berceau +berger +berline +bermuda +besace +besogne +bétail +beurre +biberon +bicycle +bidule +bijou +bilan +bilingue +billard +binaire +biologie +biopsie +biotype +biscuit +bison +bistouri +bitume +bizarre +blafard +blague +blanchir +blessant +blinder +blond +bloquer +blouson +bobard +bobine +boire +boiser +bolide +bonbon +bondir +bonheur +bonifier +bonus +bordure +borne +botte +boucle +boueux +bougie +boulon +bouquin +bourse +boussole +boutique +boxeur +branche +brasier +brave +brebis +brèche +breuvage +bricoler +brigade +brillant +brioche +brique +brochure +broder +bronzer +brousse +broyeur +brume +brusque +brutal +bruyant +buffle +buisson +bulletin +bureau +burin +bustier +butiner +butoir +buvable +buvette +cabanon +cabine +cachette +cadeau +cadre +caféine +caillou +caisson +calculer +calepin +calibre +calmer +calomnie +calvaire +camarade +caméra +camion +campagne +canal +caneton +canon +cantine +canular +capable +caporal +caprice +capsule +capter +capuche +carabine +carbone +caresser +caribou +carnage +carotte +carreau +carton +cascade +casier +casque +cassure +causer +caution +cavalier +caverne +caviar +cédille +ceinture +céleste +cellule +cendrier +censurer +central +cercle +cérébral +cerise +cerner +cerveau +cesser +chagrin +chaise +chaleur +chambre +chance +chapitre +charbon +chasseur +chaton +chausson +chavirer +chemise +chenille +chéquier +chercher +cheval +chien +chiffre +chignon +chimère +chiot +chlorure +chocolat +choisir +chose +chouette +chrome +chute +cigare +cigogne +cimenter +cinéma +cintrer +circuler +cirer +cirque +citerne +citoyen +citron +civil +clairon +clameur +claquer +classe +clavier +client +cligner +climat +clivage +cloche +clonage +cloporte +cobalt +cobra +cocasse +cocotier +coder +codifier +coffre +cogner +cohésion +coiffer +coincer +colère +colibri +colline +colmater +colonel +combat +comédie +commande +compact +concert +conduire +confier +congeler +connoter +consonne +contact +convexe +copain +copie +corail +corbeau +cordage +corniche +corpus +correct +cortège +cosmique +costume +coton +coude +coupure +courage +couteau +couvrir +coyote +crabe +crainte +cravate +crayon +créature +créditer +crémeux +creuser +crevette +cribler +crier +cristal +critère +croire +croquer +crotale +crucial +cruel +crypter +cubique +cueillir +cuillère +cuisine +cuivre +culminer +cultiver +cumuler +cupide +curatif +curseur +cyanure +cycle +cylindre +cynique +daigner +damier +danger +danseur +dauphin +débattre +débiter +déborder +débrider +débutant +décaler +décembre +déchirer +décider +déclarer +décorer +décrire +décupler +dédale +déductif +déesse +défensif +défiler +défrayer +dégager +dégivrer +déglutir +dégrafer +déjeuner +délice +déloger +demander +demeurer +démolir +dénicher +dénouer +dentelle +dénuder +départ +dépenser +déphaser +déplacer +déposer +déranger +dérober +désastre +descente +désert +désigner +désobéir +dessiner +destrier +détacher +détester +détourer +détresse +devancer +devenir +deviner +devoir +diable +dialogue +diamant +dicter +différer +digérer +digital +digne +diluer +dimanche +diminuer +dioxyde +directif +diriger +discuter +disposer +dissiper +distance +divertir +diviser +docile +docteur +dogme +doigt +domaine +domicile +dompter +donateur +donjon +donner +dopamine +dortoir +dorure +dosage +doseur +dossier +dotation +douanier +double +douceur +douter +doyen +dragon +draper +dresser +dribbler +droiture +duperie +duplexe +durable +durcir +dynastie +éblouir +écarter +écharpe +échelle +éclairer +éclipse +éclore +écluse +école +économie +écorce +écouter +écraser +écrémer +écrivain +écrou +écume +écureuil +édifier +éduquer +effacer +effectif +effigie +effort +effrayer +effusion +égaliser +égarer +éjecter +élaborer +élargir +électron +élégant +éléphant +élève +éligible +élitisme +éloge +élucider +éluder +emballer +embellir +embryon +émeraude +émission +emmener +émotion +émouvoir +empereur +employer +emporter +emprise +émulsion +encadrer +enchère +enclave +encoche +endiguer +endosser +endroit +enduire +énergie +enfance +enfermer +enfouir +engager +engin +englober +énigme +enjamber +enjeu +enlever +ennemi +ennuyeux +enrichir +enrobage +enseigne +entasser +entendre +entier +entourer +entraver +énumérer +envahir +enviable +envoyer +enzyme +éolien +épaissir +épargne +épatant +épaule +épicerie +épidémie +épier +épilogue +épine +épisode +épitaphe +époque +épreuve +éprouver +épuisant +équerre +équipe +ériger +érosion +erreur +éruption +escalier +espadon +espèce +espiègle +espoir +esprit +esquiver +essayer +essence +essieu +essorer +estime +estomac +estrade +étagère +étaler +étanche +étatique +éteindre +étendoir +éternel +éthanol +éthique +ethnie +étirer +étoffer +étoile +étonnant +étourdir +étrange +étroit +étude +euphorie +évaluer +évasion +éventail +évidence +éviter +évolutif +évoquer +exact +exagérer +exaucer +exceller +excitant +exclusif +excuse +exécuter +exemple +exercer +exhaler +exhorter +exigence +exiler +exister +exotique +expédier +explorer +exposer +exprimer +exquis +extensif +extraire +exulter +fable +fabuleux +facette +facile +facture +faiblir +falaise +fameux +famille +farceur +farfelu +farine +farouche +fasciner +fatal +fatigue +faucon +fautif +faveur +favori +fébrile +féconder +fédérer +félin +femme +fémur +fendoir +féodal +fermer +féroce +ferveur +festival +feuille +feutre +février +fiasco +ficeler +fictif +fidèle +figure +filature +filetage +filière +filleul +filmer +filou +filtrer +financer +finir +fiole +firme +fissure +fixer +flairer +flamme +flasque +flatteur +fléau +flèche +fleur +flexion +flocon +flore +fluctuer +fluide +fluvial +folie +fonderie +fongible +fontaine +forcer +forgeron +formuler +fortune +fossile +foudre +fougère +fouiller +foulure +fourmi +fragile +fraise +franchir +frapper +frayeur +frégate +freiner +frelon +frémir +frénésie +frère +friable +friction +frisson +frivole +froid +fromage +frontal +frotter +fruit +fugitif +fuite +fureur +furieux +furtif +fusion +futur +gagner +galaxie +galerie +gambader +garantir +gardien +garnir +garrigue +gazelle +gazon +géant +gélatine +gélule +gendarme +général +génie +genou +gentil +géologie +géomètre +géranium +germe +gestuel +geyser +gibier +gicler +girafe +givre +glace +glaive +glisser +globe +gloire +glorieux +golfeur +gomme +gonfler +gorge +gorille +goudron +gouffre +goulot +goupille +gourmand +goutte +graduel +graffiti +graine +grand +grappin +gratuit +gravir +grenat +griffure +griller +grimper +grogner +gronder +grotte +groupe +gruger +grutier +gruyère +guépard +guerrier +guide +guimauve +guitare +gustatif +gymnaste +gyrostat +habitude +hachoir +halte +hameau +hangar +hanneton +haricot +harmonie +harpon +hasard +hélium +hématome +herbe +hérisson +hermine +héron +hésiter +heureux +hiberner +hibou +hilarant +histoire +hiver +homard +hommage +homogène +honneur +honorer +honteux +horde +horizon +horloge +hormone +horrible +houleux +housse +hublot +huileux +humain +humble +humide +humour +hurler +hydromel +hygiène +hymne +hypnose +idylle +ignorer +iguane +illicite +illusion +image +imbiber +imiter +immense +immobile +immuable +impact +impérial +implorer +imposer +imprimer +imputer +incarner +incendie +incident +incliner +incolore +indexer +indice +inductif +inédit +ineptie +inexact +infini +infliger +informer +infusion +ingérer +inhaler +inhiber +injecter +injure +innocent +inoculer +inonder +inscrire +insecte +insigne +insolite +inspirer +instinct +insulter +intact +intense +intime +intrigue +intuitif +inutile +invasion +inventer +inviter +invoquer +ironique +irradier +irréel +irriter +isoler +ivoire +ivresse +jaguar +jaillir +jambe +janvier +jardin +jauger +jaune +javelot +jetable +jeton +jeudi +jeunesse +joindre +joncher +jongler +joueur +jouissif +journal +jovial +joyau +joyeux +jubiler +jugement +junior +jupon +juriste +justice +juteux +juvénile +kayak +kimono +kiosque +label +labial +labourer +lacérer +lactose +lagune +laine +laisser +laitier +lambeau +lamelle +lampe +lanceur +langage +lanterne +lapin +largeur +larme +laurier +lavabo +lavoir +lecture +légal +léger +légume +lessive +lettre +levier +lexique +lézard +liasse +libérer +libre +licence +licorne +liège +lièvre +ligature +ligoter +ligue +limer +limite +limonade +limpide +linéaire +lingot +lionceau +liquide +lisière +lister +lithium +litige +littoral +livreur +logique +lointain +loisir +lombric +loterie +louer +lourd +loutre +louve +loyal +lubie +lucide +lucratif +lueur +lugubre +luisant +lumière +lunaire +lundi +luron +lutter +luxueux +machine +magasin +magenta +magique +maigre +maillon +maintien +mairie +maison +majorer +malaxer +maléfice +malheur +malice +mallette +mammouth +mandater +maniable +manquant +manteau +manuel +marathon +marbre +marchand +mardi +maritime +marqueur +marron +marteler +mascotte +massif +matériel +matière +matraque +maudire +maussade +mauve +maximal +méchant +méconnu +médaille +médecin +méditer +méduse +meilleur +mélange +mélodie +membre +mémoire +menacer +mener +menhir +mensonge +mentor +mercredi +mérite +merle +messager +mesure +métal +météore +méthode +métier +meuble +miauler +microbe +miette +mignon +migrer +milieu +million +mimique +mince +minéral +minimal +minorer +minute +miracle +miroiter +missile +mixte +mobile +moderne +moelleux +mondial +moniteur +monnaie +monotone +monstre +montagne +monument +moqueur +morceau +morsure +mortier +moteur +motif +mouche +moufle +moulin +mousson +mouton +mouvant +multiple +munition +muraille +murène +murmure +muscle +muséum +musicien +mutation +muter +mutuel +myriade +myrtille +mystère +mythique +nageur +nappe +narquois +narrer +natation +nation +nature +naufrage +nautique +navire +nébuleux +nectar +néfaste +négation +négliger +négocier +neige +nerveux +nettoyer +neurone +neutron +neveu +niche +nickel +nitrate +niveau +noble +nocif +nocturne +noirceur +noisette +nomade +nombreux +nommer +normatif +notable +notifier +notoire +nourrir +nouveau +novateur +novembre +novice +nuage +nuancer +nuire +nuisible +numéro +nuptial +nuque +nutritif +obéir +objectif +obliger +obscur +observer +obstacle +obtenir +obturer +occasion +occuper +océan +octobre +octroyer +octupler +oculaire +odeur +odorant +offenser +officier +offrir +ogive +oiseau +oisillon +olfactif +olivier +ombrage +omettre +onctueux +onduler +onéreux +onirique +opale +opaque +opérer +opinion +opportun +opprimer +opter +optique +orageux +orange +orbite +ordonner +oreille +organe +orgueil +orifice +ornement +orque +ortie +osciller +osmose +ossature +otarie +ouragan +ourson +outil +outrager +ouvrage +ovation +oxyde +oxygène +ozone +paisible +palace +palmarès +palourde +palper +panache +panda +pangolin +paniquer +panneau +panorama +pantalon +papaye +papier +papoter +papyrus +paradoxe +parcelle +paresse +parfumer +parler +parole +parrain +parsemer +partager +parure +parvenir +passion +pastèque +paternel +patience +patron +pavillon +pavoiser +payer +paysage +peigne +peintre +pelage +pélican +pelle +pelouse +peluche +pendule +pénétrer +pénible +pensif +pénurie +pépite +péplum +perdrix +perforer +période +permuter +perplexe +persil +perte +peser +pétale +petit +pétrir +peuple +pharaon +phobie +phoque +photon +phrase +physique +piano +pictural +pièce +pierre +pieuvre +pilote +pinceau +pipette +piquer +pirogue +piscine +piston +pivoter +pixel +pizza +placard +plafond +plaisir +planer +plaque +plastron +plateau +pleurer +plexus +pliage +plomb +plonger +pluie +plumage +pochette +poésie +poète +pointe +poirier +poisson +poivre +polaire +policier +pollen +polygone +pommade +pompier +ponctuel +pondérer +poney +portique +position +posséder +posture +potager +poteau +potion +pouce +poulain +poumon +pourpre +poussin +pouvoir +prairie +pratique +précieux +prédire +préfixe +prélude +prénom +présence +prétexte +prévoir +primitif +prince +prison +priver +problème +procéder +prodige +profond +progrès +proie +projeter +prologue +promener +propre +prospère +protéger +prouesse +proverbe +prudence +pruneau +psychose +public +puceron +puiser +pulpe +pulsar +punaise +punitif +pupitre +purifier +puzzle +pyramide +quasar +querelle +question +quiétude +quitter +quotient +racine +raconter +radieux +ragondin +raideur +raisin +ralentir +rallonge +ramasser +rapide +rasage +ratisser +ravager +ravin +rayonner +réactif +réagir +réaliser +réanimer +recevoir +réciter +réclamer +récolter +recruter +reculer +recycler +rédiger +redouter +refaire +réflexe +réformer +refrain +refuge +régalien +région +réglage +régulier +réitérer +rejeter +rejouer +relatif +relever +relief +remarque +remède +remise +remonter +remplir +remuer +renard +renfort +renifler +renoncer +rentrer +renvoi +replier +reporter +reprise +reptile +requin +réserve +résineux +résoudre +respect +rester +résultat +rétablir +retenir +réticule +retomber +retracer +réunion +réussir +revanche +revivre +révolte +révulsif +richesse +rideau +rieur +rigide +rigoler +rincer +riposter +risible +risque +rituel +rival +rivière +rocheux +romance +rompre +ronce +rondin +roseau +rosier +rotatif +rotor +rotule +rouge +rouille +rouleau +routine +royaume +ruban +rubis +ruche +ruelle +rugueux +ruiner +ruisseau +ruser +rustique +rythme +sabler +saboter +sabre +sacoche +safari +sagesse +saisir +salade +salive +salon +saluer +samedi +sanction +sanglier +sarcasme +sardine +saturer +saugrenu +saumon +sauter +sauvage +savant +savonner +scalpel +scandale +scélérat +scénario +sceptre +schéma +science +scinder +score +scrutin +sculpter +séance +sécable +sécher +secouer +sécréter +sédatif +séduire +seigneur +séjour +sélectif +semaine +sembler +semence +séminal +sénateur +sensible +sentence +séparer +séquence +serein +sergent +sérieux +serrure +sérum +service +sésame +sévir +sevrage +sextuple +sidéral +siècle +siéger +siffler +sigle +signal +silence +silicium +simple +sincère +sinistre +siphon +sirop +sismique +situer +skier +social +socle +sodium +soigneux +soldat +soleil +solitude +soluble +sombre +sommeil +somnoler +sonde +songeur +sonnette +sonore +sorcier +sortir +sosie +sottise +soucieux +soudure +souffle +soulever +soupape +source +soutirer +souvenir +spacieux +spatial +spécial +sphère +spiral +stable +station +sternum +stimulus +stipuler +strict +studieux +stupeur +styliste +sublime +substrat +subtil +subvenir +succès +sucre +suffixe +suggérer +suiveur +sulfate +superbe +supplier +surface +suricate +surmener +surprise +sursaut +survie +suspect +syllabe +symbole +symétrie +synapse +syntaxe +système +tabac +tablier +tactile +tailler +talent +talisman +talonner +tambour +tamiser +tangible +tapis +taquiner +tarder +tarif +tartine +tasse +tatami +tatouage +taupe +taureau +taxer +témoin +temporel +tenaille +tendre +teneur +tenir +tension +terminer +terne +terrible +tétine +texte +thème +théorie +thérapie +thorax +tibia +tiède +timide +tirelire +tiroir +tissu +titane +titre +tituber +toboggan +tolérant +tomate +tonique +tonneau +toponyme +torche +tordre +tornade +torpille +torrent +torse +tortue +totem +toucher +tournage +tousser +toxine +traction +trafic +tragique +trahir +train +trancher +travail +trèfle +tremper +trésor +treuil +triage +tribunal +tricoter +trilogie +triomphe +tripler +triturer +trivial +trombone +tronc +tropical +troupeau +tuile +tulipe +tumulte +tunnel +turbine +tuteur +tutoyer +tuyau +tympan +typhon +typique +tyran +ubuesque +ultime +ultrason +unanime +unifier +union +unique +unitaire +univers +uranium +urbain +urticant +usage +usine +usuel +usure +utile +utopie +vacarme +vaccin +vagabond +vague +vaillant +vaincre +vaisseau +valable +valise +vallon +valve +vampire +vanille +vapeur +varier +vaseux +vassal +vaste +vecteur +vedette +végétal +véhicule +veinard +véloce +vendredi +vénérer +venger +venimeux +ventouse +verdure +vérin +vernir +verrou +verser +vertu +veston +vétéran +vétuste +vexant +vexer +viaduc +viande +victoire +vidange +vidéo +vignette +vigueur +vilain +village +vinaigre +violon +vipère +virement +virtuose +virus +visage +viseur +vision +visqueux +visuel +vital +vitesse +viticole +vitrine +vivace +vivipare +vocation +voguer +voile +voisin +voiture +volaille +volcan +voltiger +volume +vorace +vortex +voter +vouloir +voyage +voyelle +wagon +xénon +yacht +zèbre +zénith +zeste +zoologie diff --git a/packages/wordlists/input/lang-it.txt b/packages/wordlists/input/lang-it.txt new file mode 100644 index 000000000..c47370f4e --- /dev/null +++ b/packages/wordlists/input/lang-it.txt @@ -0,0 +1,2048 @@ +abaco +abbaglio +abbinato +abete +abisso +abolire +abrasivo +abrogato +accadere +accenno +accusato +acetone +achille +acido +acqua +acre +acrilico +acrobata +acuto +adagio +addebito +addome +adeguato +aderire +adipe +adottare +adulare +affabile +affetto +affisso +affranto +aforisma +afoso +africano +agave +agente +agevole +aggancio +agire +agitare +agonismo +agricolo +agrumeto +aguzzo +alabarda +alato +albatro +alberato +albo +albume +alce +alcolico +alettone +alfa +algebra +aliante +alibi +alimento +allagato +allegro +allievo +allodola +allusivo +almeno +alogeno +alpaca +alpestre +altalena +alterno +alticcio +altrove +alunno +alveolo +alzare +amalgama +amanita +amarena +ambito +ambrato +ameba +america +ametista +amico +ammasso +ammenda +ammirare +ammonito +amore +ampio +ampliare +amuleto +anacardo +anagrafe +analista +anarchia +anatra +anca +ancella +ancora +andare +andrea +anello +angelo +angolare +angusto +anima +annegare +annidato +anno +annuncio +anonimo +anticipo +anzi +apatico +apertura +apode +apparire +appetito +appoggio +approdo +appunto +aprile +arabica +arachide +aragosta +araldica +arancio +aratura +arazzo +arbitro +archivio +ardito +arenile +argento +argine +arguto +aria +armonia +arnese +arredato +arringa +arrosto +arsenico +arso +artefice +arzillo +asciutto +ascolto +asepsi +asettico +asfalto +asino +asola +aspirato +aspro +assaggio +asse +assoluto +assurdo +asta +astenuto +astice +astratto +atavico +ateismo +atomico +atono +attesa +attivare +attorno +attrito +attuale +ausilio +austria +autista +autonomo +autunno +avanzato +avere +avvenire +avviso +avvolgere +azione +azoto +azzimo +azzurro +babele +baccano +bacino +baco +badessa +badilata +bagnato +baita +balcone +baldo +balena +ballata +balzano +bambino +bandire +baraonda +barbaro +barca +baritono +barlume +barocco +basilico +basso +batosta +battuto +baule +bava +bavosa +becco +beffa +belgio +belva +benda +benevole +benigno +benzina +bere +berlina +beta +bibita +bici +bidone +bifido +biga +bilancia +bimbo +binocolo +biologo +bipede +bipolare +birbante +birra +biscotto +bisesto +bisnonno +bisonte +bisturi +bizzarro +blando +blatta +bollito +bonifico +bordo +bosco +botanico +bottino +bozzolo +braccio +bradipo +brama +branca +bravura +bretella +brevetto +brezza +briglia +brillante +brindare +broccolo +brodo +bronzina +brullo +bruno +bubbone +buca +budino +buffone +buio +bulbo +buono +burlone +burrasca +bussola +busta +cadetto +caduco +calamaro +calcolo +calesse +calibro +calmo +caloria +cambusa +camerata +camicia +cammino +camola +campale +canapa +candela +cane +canino +canotto +cantina +capace +capello +capitolo +capogiro +cappero +capra +capsula +carapace +carcassa +cardo +carisma +carovana +carretto +cartolina +casaccio +cascata +caserma +caso +cassone +castello +casuale +catasta +catena +catrame +cauto +cavillo +cedibile +cedrata +cefalo +celebre +cellulare +cena +cenone +centesimo +ceramica +cercare +certo +cerume +cervello +cesoia +cespo +ceto +chela +chiaro +chicca +chiedere +chimera +china +chirurgo +chitarra +ciao +ciclismo +cifrare +cigno +cilindro +ciottolo +circa +cirrosi +citrico +cittadino +ciuffo +civetta +civile +classico +clinica +cloro +cocco +codardo +codice +coerente +cognome +collare +colmato +colore +colposo +coltivato +colza +coma +cometa +commando +comodo +computer +comune +conciso +condurre +conferma +congelare +coniuge +connesso +conoscere +consumo +continuo +convegno +coperto +copione +coppia +copricapo +corazza +cordata +coricato +cornice +corolla +corpo +corredo +corsia +cortese +cosmico +costante +cottura +covato +cratere +cravatta +creato +credere +cremoso +crescita +creta +criceto +crinale +crisi +critico +croce +cronaca +crostata +cruciale +crusca +cucire +cuculo +cugino +cullato +cupola +curatore +cursore +curvo +cuscino +custode +dado +daino +dalmata +damerino +daniela +dannoso +danzare +datato +davanti +davvero +debutto +decennio +deciso +declino +decollo +decreto +dedicato +definito +deforme +degno +delegare +delfino +delirio +delta +demenza +denotato +dentro +deposito +derapata +derivare +deroga +descritto +deserto +desiderio +desumere +detersivo +devoto +diametro +dicembre +diedro +difeso +diffuso +digerire +digitale +diluvio +dinamico +dinnanzi +dipinto +diploma +dipolo +diradare +dire +dirotto +dirupo +disagio +discreto +disfare +disgelo +disposto +distanza +disumano +dito +divano +divelto +dividere +divorato +doblone +docente +doganale +dogma +dolce +domato +domenica +dominare +dondolo +dono +dormire +dote +dottore +dovuto +dozzina +drago +druido +dubbio +dubitare +ducale +duna +duomo +duplice +duraturo +ebano +eccesso +ecco +eclissi +economia +edera +edicola +edile +editoria +educare +egemonia +egli +egoismo +egregio +elaborato +elargire +elegante +elencato +eletto +elevare +elfico +elica +elmo +elsa +eluso +emanato +emblema +emesso +emiro +emotivo +emozione +empirico +emulo +endemico +enduro +energia +enfasi +enoteca +entrare +enzima +epatite +epilogo +episodio +epocale +eppure +equatore +erario +erba +erboso +erede +eremita +erigere +ermetico +eroe +erosivo +errante +esagono +esame +esanime +esaudire +esca +esempio +esercito +esibito +esigente +esistere +esito +esofago +esortato +esoso +espanso +espresso +essenza +esso +esteso +estimare +estonia +estroso +esultare +etilico +etnico +etrusco +etto +euclideo +europa +evaso +evidenza +evitato +evoluto +evviva +fabbrica +faccenda +fachiro +falco +famiglia +fanale +fanfara +fango +fantasma +fare +farfalla +farinoso +farmaco +fascia +fastoso +fasullo +faticare +fato +favoloso +febbre +fecola +fede +fegato +felpa +feltro +femmina +fendere +fenomeno +fermento +ferro +fertile +fessura +festivo +fetta +feudo +fiaba +fiducia +fifa +figurato +filo +finanza +finestra +finire +fiore +fiscale +fisico +fiume +flacone +flamenco +flebo +flemma +florido +fluente +fluoro +fobico +focaccia +focoso +foderato +foglio +folata +folclore +folgore +fondente +fonetico +fonia +fontana +forbito +forchetta +foresta +formica +fornaio +foro +fortezza +forzare +fosfato +fosso +fracasso +frana +frassino +fratello +freccetta +frenata +fresco +frigo +frollino +fronde +frugale +frutta +fucilata +fucsia +fuggente +fulmine +fulvo +fumante +fumetto +fumoso +fune +funzione +fuoco +furbo +furgone +furore +fuso +futile +gabbiano +gaffe +galateo +gallina +galoppo +gambero +gamma +garanzia +garbo +garofano +garzone +gasdotto +gasolio +gastrico +gatto +gaudio +gazebo +gazzella +geco +gelatina +gelso +gemello +gemmato +gene +genitore +gennaio +genotipo +gergo +ghepardo +ghiaccio +ghisa +giallo +gilda +ginepro +giocare +gioiello +giorno +giove +girato +girone +gittata +giudizio +giurato +giusto +globulo +glutine +gnomo +gobba +golf +gomito +gommone +gonfio +gonna +governo +gracile +grado +grafico +grammo +grande +grattare +gravoso +grazia +greca +gregge +grifone +grigio +grinza +grotta +gruppo +guadagno +guaio +guanto +guardare +gufo +guidare +ibernato +icona +identico +idillio +idolo +idra +idrico +idrogeno +igiene +ignaro +ignorato +ilare +illeso +illogico +illudere +imballo +imbevuto +imbocco +imbuto +immane +immerso +immolato +impacco +impeto +impiego +importo +impronta +inalare +inarcare +inattivo +incanto +incendio +inchino +incisivo +incluso +incontro +incrocio +incubo +indagine +india +indole +inedito +infatti +infilare +inflitto +ingaggio +ingegno +inglese +ingordo +ingrosso +innesco +inodore +inoltrare +inondato +insano +insetto +insieme +insonnia +insulina +intasato +intero +intonaco +intuito +inumidire +invalido +invece +invito +iperbole +ipnotico +ipotesi +ippica +iride +irlanda +ironico +irrigato +irrorare +isolato +isotopo +isterico +istituto +istrice +italia +iterare +labbro +labirinto +lacca +lacerato +lacrima +lacuna +laddove +lago +lampo +lancetta +lanterna +lardoso +larga +laringe +lastra +latenza +latino +lattuga +lavagna +lavoro +legale +leggero +lembo +lentezza +lenza +leone +lepre +lesivo +lessato +lesto +letterale +leva +levigato +libero +lido +lievito +lilla +limatura +limitare +limpido +lineare +lingua +liquido +lira +lirica +lisca +lite +litigio +livrea +locanda +lode +logica +lombare +londra +longevo +loquace +lorenzo +loto +lotteria +luce +lucidato +lumaca +luminoso +lungo +lupo +luppolo +lusinga +lusso +lutto +macabro +macchina +macero +macinato +madama +magico +maglia +magnete +magro +maiolica +malafede +malgrado +malinteso +malsano +malto +malumore +mana +mancia +mandorla +mangiare +manifesto +mannaro +manovra +mansarda +mantide +manubrio +mappa +maratona +marcire +maretta +marmo +marsupio +maschera +massaia +mastino +materasso +matricola +mattone +maturo +mazurca +meandro +meccanico +mecenate +medesimo +meditare +mega +melassa +melis +melodia +meninge +meno +mensola +mercurio +merenda +merlo +meschino +mese +messere +mestolo +metallo +metodo +mettere +miagolare +mica +micelio +michele +microbo +midollo +miele +migliore +milano +milite +mimosa +minerale +mini +minore +mirino +mirtillo +miscela +missiva +misto +misurare +mitezza +mitigare +mitra +mittente +mnemonico +modello +modifica +modulo +mogano +mogio +mole +molosso +monastero +monco +mondina +monetario +monile +monotono +monsone +montato +monviso +mora +mordere +morsicato +mostro +motivato +motosega +motto +movenza +movimento +mozzo +mucca +mucosa +muffa +mughetto +mugnaio +mulatto +mulinello +multiplo +mummia +munto +muovere +murale +musa +muscolo +musica +mutevole +muto +nababbo +nafta +nanometro +narciso +narice +narrato +nascere +nastrare +naturale +nautica +naviglio +nebulosa +necrosi +negativo +negozio +nemmeno +neofita +neretto +nervo +nessuno +nettuno +neutrale +neve +nevrotico +nicchia +ninfa +nitido +nobile +nocivo +nodo +nome +nomina +nordico +normale +norvegese +nostrano +notare +notizia +notturno +novella +nucleo +nulla +numero +nuovo +nutrire +nuvola +nuziale +oasi +obbedire +obbligo +obelisco +oblio +obolo +obsoleto +occasione +occhio +occidente +occorrere +occultare +ocra +oculato +odierno +odorare +offerta +offrire +offuscato +oggetto +oggi +ognuno +olandese +olfatto +oliato +oliva +ologramma +oltre +omaggio +ombelico +ombra +omega +omissione +ondoso +onere +onice +onnivoro +onorevole +onta +operato +opinione +opposto +oracolo +orafo +ordine +orecchino +orefice +orfano +organico +origine +orizzonte +orma +ormeggio +ornativo +orologio +orrendo +orribile +ortensia +ortica +orzata +orzo +osare +oscurare +osmosi +ospedale +ospite +ossa +ossidare +ostacolo +oste +otite +otre +ottagono +ottimo +ottobre +ovale +ovest +ovino +oviparo +ovocito +ovunque +ovviare +ozio +pacchetto +pace +pacifico +padella +padrone +paese +paga +pagina +palazzina +palesare +pallido +palo +palude +pandoro +pannello +paolo +paonazzo +paprica +parabola +parcella +parere +pargolo +pari +parlato +parola +partire +parvenza +parziale +passivo +pasticca +patacca +patologia +pattume +pavone +peccato +pedalare +pedonale +peggio +peloso +penare +pendice +penisola +pennuto +penombra +pensare +pentola +pepe +pepita +perbene +percorso +perdonato +perforare +pergamena +periodo +permesso +perno +perplesso +persuaso +pertugio +pervaso +pesatore +pesista +peso +pestifero +petalo +pettine +petulante +pezzo +piacere +pianta +piattino +piccino +picozza +piega +pietra +piffero +pigiama +pigolio +pigro +pila +pilifero +pillola +pilota +pimpante +pineta +pinna +pinolo +pioggia +piombo +piramide +piretico +pirite +pirolisi +pitone +pizzico +placebo +planare +plasma +platano +plenario +pochezza +poderoso +podismo +poesia +poggiare +polenta +poligono +pollice +polmonite +polpetta +polso +poltrona +polvere +pomice +pomodoro +ponte +popoloso +porfido +poroso +porpora +porre +portata +posa +positivo +possesso +postulato +potassio +potere +pranzo +prassi +pratica +precluso +predica +prefisso +pregiato +prelievo +premere +prenotare +preparato +presenza +pretesto +prevalso +prima +principe +privato +problema +procura +produrre +profumo +progetto +prolunga +promessa +pronome +proposta +proroga +proteso +prova +prudente +prugna +prurito +psiche +pubblico +pudica +pugilato +pugno +pulce +pulito +pulsante +puntare +pupazzo +pupilla +puro +quadro +qualcosa +quasi +querela +quota +raccolto +raddoppio +radicale +radunato +raffica +ragazzo +ragione +ragno +ramarro +ramingo +ramo +randagio +rantolare +rapato +rapina +rappreso +rasatura +raschiato +rasente +rassegna +rastrello +rata +ravveduto +reale +recepire +recinto +recluta +recondito +recupero +reddito +redimere +regalato +registro +regola +regresso +relazione +remare +remoto +renna +replica +reprimere +reputare +resa +residente +responso +restauro +rete +retina +retorica +rettifica +revocato +riassunto +ribadire +ribelle +ribrezzo +ricarica +ricco +ricevere +riciclato +ricordo +ricreduto +ridicolo +ridurre +rifasare +riflesso +riforma +rifugio +rigare +rigettato +righello +rilassato +rilevato +rimanere +rimbalzo +rimedio +rimorchio +rinascita +rincaro +rinforzo +rinnovo +rinomato +rinsavito +rintocco +rinuncia +rinvenire +riparato +ripetuto +ripieno +riportare +ripresa +ripulire +risata +rischio +riserva +risibile +riso +rispetto +ristoro +risultato +risvolto +ritardo +ritegno +ritmico +ritrovo +riunione +riva +riverso +rivincita +rivolto +rizoma +roba +robotico +robusto +roccia +roco +rodaggio +rodere +roditore +rogito +rollio +romantico +rompere +ronzio +rosolare +rospo +rotante +rotondo +rotula +rovescio +rubizzo +rubrica +ruga +rullino +rumine +rumoroso +ruolo +rupe +russare +rustico +sabato +sabbiare +sabotato +sagoma +salasso +saldatura +salgemma +salivare +salmone +salone +saltare +saluto +salvo +sapere +sapido +saporito +saraceno +sarcasmo +sarto +sassoso +satellite +satira +satollo +saturno +savana +savio +saziato +sbadiglio +sbalzo +sbancato +sbarra +sbattere +sbavare +sbendare +sbirciare +sbloccato +sbocciato +sbrinare +sbruffone +sbuffare +scabroso +scadenza +scala +scambiare +scandalo +scapola +scarso +scatenare +scavato +scelto +scenico +scettro +scheda +schiena +sciarpa +scienza +scindere +scippo +sciroppo +scivolo +sclerare +scodella +scolpito +scomparto +sconforto +scoprire +scorta +scossone +scozzese +scriba +scrollare +scrutinio +scuderia +scultore +scuola +scuro +scusare +sdebitare +sdoganare +seccatura +secondo +sedano +seggiola +segnalato +segregato +seguito +selciato +selettivo +sella +selvaggio +semaforo +sembrare +seme +seminato +sempre +senso +sentire +sepolto +sequenza +serata +serbato +sereno +serio +serpente +serraglio +servire +sestina +setola +settimana +sfacelo +sfaldare +sfamato +sfarzoso +sfaticato +sfera +sfida +sfilato +sfinge +sfocato +sfoderare +sfogo +sfoltire +sforzato +sfratto +sfruttato +sfuggito +sfumare +sfuso +sgabello +sgarbato +sgonfiare +sgorbio +sgrassato +sguardo +sibilo +siccome +sierra +sigla +signore +silenzio +sillaba +simbolo +simpatico +simulato +sinfonia +singolo +sinistro +sino +sintesi +sinusoide +sipario +sisma +sistole +situato +slitta +slogatura +sloveno +smarrito +smemorato +smentito +smeraldo +smilzo +smontare +smottato +smussato +snellire +snervato +snodo +sobbalzo +sobrio +soccorso +sociale +sodale +soffitto +sogno +soldato +solenne +solido +sollazzo +solo +solubile +solvente +somatico +somma +sonda +sonetto +sonnifero +sopire +soppeso +sopra +sorgere +sorpasso +sorriso +sorso +sorteggio +sorvolato +sospiro +sosta +sottile +spada +spalla +spargere +spatola +spavento +spazzola +specie +spedire +spegnere +spelatura +speranza +spessore +spettrale +spezzato +spia +spigoloso +spillato +spinoso +spirale +splendido +sportivo +sposo +spranga +sprecare +spronato +spruzzo +spuntino +squillo +sradicare +srotolato +stabile +stacco +staffa +stagnare +stampato +stantio +starnuto +stasera +statuto +stelo +steppa +sterzo +stiletto +stima +stirpe +stivale +stizzoso +stonato +storico +strappo +stregato +stridulo +strozzare +strutto +stuccare +stufo +stupendo +subentro +succoso +sudore +suggerito +sugo +sultano +suonare +superbo +supporto +surgelato +surrogato +sussurro +sutura +svagare +svedese +sveglio +svelare +svenuto +svezia +sviluppo +svista +svizzera +svolta +svuotare +tabacco +tabulato +tacciare +taciturno +tale +talismano +tampone +tannino +tara +tardivo +targato +tariffa +tarpare +tartaruga +tasto +tattico +taverna +tavolata +tazza +teca +tecnico +telefono +temerario +tempo +temuto +tendone +tenero +tensione +tentacolo +teorema +terme +terrazzo +terzetto +tesi +tesserato +testato +tetro +tettoia +tifare +tigella +timbro +tinto +tipico +tipografo +tiraggio +tiro +titanio +titolo +titubante +tizio +tizzone +toccare +tollerare +tolto +tombola +tomo +tonfo +tonsilla +topazio +topologia +toppa +torba +tornare +torrone +tortora +toscano +tossire +tostatura +totano +trabocco +trachea +trafila +tragedia +tralcio +tramonto +transito +trapano +trarre +trasloco +trattato +trave +treccia +tremolio +trespolo +tributo +tricheco +trifoglio +trillo +trincea +trio +tristezza +triturato +trivella +tromba +trono +troppo +trottola +trovare +truccato +tubatura +tuffato +tulipano +tumulto +tunisia +turbare +turchino +tuta +tutela +ubicato +uccello +uccisore +udire +uditivo +uffa +ufficio +uguale +ulisse +ultimato +umano +umile +umorismo +uncinetto +ungere +ungherese +unicorno +unificato +unisono +unitario +unte +uovo +upupa +uragano +urgenza +urlo +usanza +usato +uscito +usignolo +usuraio +utensile +utilizzo +utopia +vacante +vaccinato +vagabondo +vagliato +valanga +valgo +valico +valletta +valoroso +valutare +valvola +vampata +vangare +vanitoso +vano +vantaggio +vanvera +vapore +varano +varcato +variante +vasca +vedetta +vedova +veduto +vegetale +veicolo +velcro +velina +velluto +veloce +venato +vendemmia +vento +verace +verbale +vergogna +verifica +vero +verruca +verticale +vescica +vessillo +vestale +veterano +vetrina +vetusto +viandante +vibrante +vicenda +vichingo +vicinanza +vidimare +vigilia +vigneto +vigore +vile +villano +vimini +vincitore +viola +vipera +virgola +virologo +virulento +viscoso +visione +vispo +vissuto +visura +vita +vitello +vittima +vivanda +vivido +viziare +voce +voga +volatile +volere +volpe +voragine +vulcano +zampogna +zanna +zappato +zattera +zavorra +zefiro +zelante +zelo +zenzero +zerbino +zibetto +zinco +zircone +zitto +zolla +zotico +zucchero +zufolo +zulu +zuppa diff --git a/packages/wordlists/input/lang-ja.txt b/packages/wordlists/input/lang-ja.txt new file mode 100644 index 000000000..fb8501a6e --- /dev/null +++ b/packages/wordlists/input/lang-ja.txt @@ -0,0 +1,2048 @@ +あいこくしん +あいさつ +あいだ +あおぞら +あかちゃん +あきる +あけがた +あける +あこがれる +あさい +あさひ +あしあと +あじわう +あずかる +あずき +あそぶ +あたえる +あたためる +あたりまえ +あたる +あつい +あつかう +あっしゅく +あつまり +あつめる +あてな +あてはまる +あひる +あぶら +あぶる +あふれる +あまい +あまど +あまやかす +あまり +あみもの +あめりか +あやまる +あゆむ +あらいぐま +あらし +あらすじ +あらためる +あらゆる +あらわす +ありがとう +あわせる +あわてる +あんい +あんがい +あんこ +あんぜん +あんてい +あんない +あんまり +いいだす +いおん +いがい +いがく +いきおい +いきなり +いきもの +いきる +いくじ +いくぶん +いけばな +いけん +いこう +いこく +いこつ +いさましい +いさん +いしき +いじゅう +いじょう +いじわる +いずみ +いずれ +いせい +いせえび +いせかい +いせき +いぜん +いそうろう +いそがしい +いだい +いだく +いたずら +いたみ +いたりあ +いちおう +いちじ +いちど +いちば +いちぶ +いちりゅう +いつか +いっしゅん +いっせい +いっそう +いったん +いっち +いってい +いっぽう +いてざ +いてん +いどう +いとこ +いない +いなか +いねむり +いのち +いのる +いはつ +いばる +いはん +いびき +いひん +いふく +いへん +いほう +いみん +いもうと +いもたれ +いもり +いやがる +いやす +いよかん +いよく +いらい +いらすと +いりぐち +いりょう +いれい +いれもの +いれる +いろえんぴつ +いわい +いわう +いわかん +いわば +いわゆる +いんげんまめ +いんさつ +いんしょう +いんよう +うえき +うえる +うおざ +うがい +うかぶ +うかべる +うきわ +うくらいな +うくれれ +うけたまわる +うけつけ +うけとる +うけもつ +うける +うごかす +うごく +うこん +うさぎ +うしなう +うしろがみ +うすい +うすぎ +うすぐらい +うすめる +うせつ +うちあわせ +うちがわ +うちき +うちゅう +うっかり +うつくしい +うったえる +うつる +うどん +うなぎ +うなじ +うなずく +うなる +うねる +うのう +うぶげ +うぶごえ +うまれる +うめる +うもう +うやまう +うよく +うらがえす +うらぐち +うらない +うりあげ +うりきれ +うるさい +うれしい +うれゆき +うれる +うろこ +うわき +うわさ +うんこう +うんちん +うんてん +うんどう +えいえん +えいが +えいきょう +えいご +えいせい +えいぶん +えいよう +えいわ +えおり +えがお +えがく +えきたい +えくせる +えしゃく +えすて +えつらん +えのぐ +えほうまき +えほん +えまき +えもじ +えもの +えらい +えらぶ +えりあ +えんえん +えんかい +えんぎ +えんげき +えんしゅう +えんぜつ +えんそく +えんちょう +えんとつ +おいかける +おいこす +おいしい +おいつく +おうえん +おうさま +おうじ +おうせつ +おうたい +おうふく +おうべい +おうよう +おえる +おおい +おおう +おおどおり +おおや +おおよそ +おかえり +おかず +おがむ +おかわり +おぎなう +おきる +おくさま +おくじょう +おくりがな +おくる +おくれる +おこす +おこなう +おこる +おさえる +おさない +おさめる +おしいれ +おしえる +おじぎ +おじさん +おしゃれ +おそらく +おそわる +おたがい +おたく +おだやか +おちつく +おっと +おつり +おでかけ +おとしもの +おとなしい +おどり +おどろかす +おばさん +おまいり +おめでとう +おもいで +おもう +おもたい +おもちゃ +おやつ +おやゆび +およぼす +おらんだ +おろす +おんがく +おんけい +おんしゃ +おんせん +おんだん +おんちゅう +おんどけい +かあつ +かいが +がいき +がいけん +がいこう +かいさつ +かいしゃ +かいすいよく +かいぜん +かいぞうど +かいつう +かいてん +かいとう +かいふく +がいへき +かいほう +かいよう +がいらい +かいわ +かえる +かおり +かかえる +かがく +かがし +かがみ +かくご +かくとく +かざる +がぞう +かたい +かたち +がちょう +がっきゅう +がっこう +がっさん +がっしょう +かなざわし +かのう +がはく +かぶか +かほう +かほご +かまう +かまぼこ +かめれおん +かゆい +かようび +からい +かるい +かろう +かわく +かわら +がんか +かんけい +かんこう +かんしゃ +かんそう +かんたん +かんち +がんばる +きあい +きあつ +きいろ +ぎいん +きうい +きうん +きえる +きおう +きおく +きおち +きおん +きかい +きかく +きかんしゃ +ききて +きくばり +きくらげ +きけんせい +きこう +きこえる +きこく +きさい +きさく +きさま +きさらぎ +ぎじかがく +ぎしき +ぎじたいけん +ぎじにってい +ぎじゅつしゃ +きすう +きせい +きせき +きせつ +きそう +きぞく +きぞん +きたえる +きちょう +きつえん +ぎっちり +きつつき +きつね +きてい +きどう +きどく +きない +きなが +きなこ +きぬごし +きねん +きのう +きのした +きはく +きびしい +きひん +きふく +きぶん +きぼう +きほん +きまる +きみつ +きむずかしい +きめる +きもだめし +きもち +きもの +きゃく +きやく +ぎゅうにく +きよう +きょうりゅう +きらい +きらく +きりん +きれい +きれつ +きろく +ぎろん +きわめる +ぎんいろ +きんかくじ +きんじょ +きんようび +ぐあい +くいず +くうかん +くうき +くうぐん +くうこう +ぐうせい +くうそう +ぐうたら +くうふく +くうぼ +くかん +くきょう +くげん +ぐこう +くさい +くさき +くさばな +くさる +くしゃみ +くしょう +くすのき +くすりゆび +くせげ +くせん +ぐたいてき +くださる +くたびれる +くちこみ +くちさき +くつした +ぐっすり +くつろぐ +くとうてん +くどく +くなん +くねくね +くのう +くふう +くみあわせ +くみたてる +くめる +くやくしょ +くらす +くらべる +くるま +くれる +くろう +くわしい +ぐんかん +ぐんしょく +ぐんたい +ぐんて +けあな +けいかく +けいけん +けいこ +けいさつ +げいじゅつ +けいたい +げいのうじん +けいれき +けいろ +けおとす +けおりもの +げきか +げきげん +げきだん +げきちん +げきとつ +げきは +げきやく +げこう +げこくじょう +げざい +けさき +げざん +けしき +けしごむ +けしょう +げすと +けたば +けちゃっぷ +けちらす +けつあつ +けつい +けつえき +けっこん +けつじょ +けっせき +けってい +けつまつ +げつようび +げつれい +けつろん +げどく +けとばす +けとる +けなげ +けなす +けなみ +けぬき +げねつ +けねん +けはい +げひん +けぶかい +げぼく +けまり +けみかる +けむし +けむり +けもの +けらい +けろけろ +けわしい +けんい +けんえつ +けんお +けんか +げんき +けんげん +けんこう +けんさく +けんしゅう +けんすう +げんそう +けんちく +けんてい +けんとう +けんない +けんにん +げんぶつ +けんま +けんみん +けんめい +けんらん +けんり +こあくま +こいぬ +こいびと +ごうい +こうえん +こうおん +こうかん +ごうきゅう +ごうけい +こうこう +こうさい +こうじ +こうすい +ごうせい +こうそく +こうたい +こうちゃ +こうつう +こうてい +こうどう +こうない +こうはい +ごうほう +ごうまん +こうもく +こうりつ +こえる +こおり +ごかい +ごがつ +ごかん +こくご +こくさい +こくとう +こくない +こくはく +こぐま +こけい +こける +ここのか +こころ +こさめ +こしつ +こすう +こせい +こせき +こぜん +こそだて +こたい +こたえる +こたつ +こちょう +こっか +こつこつ +こつばん +こつぶ +こてい +こてん +ことがら +ことし +ことば +ことり +こなごな +こねこね +このまま +このみ +このよ +ごはん +こひつじ +こふう +こふん +こぼれる +ごまあぶら +こまかい +ごますり +こまつな +こまる +こむぎこ +こもじ +こもち +こもの +こもん +こやく +こやま +こゆう +こゆび +こよい +こよう +こりる +これくしょん +ころっけ +こわもて +こわれる +こんいん +こんかい +こんき +こんしゅう +こんすい +こんだて +こんとん +こんなん +こんびに +こんぽん +こんまけ +こんや +こんれい +こんわく +ざいえき +さいかい +さいきん +ざいげん +ざいこ +さいしょ +さいせい +ざいたく +ざいちゅう +さいてき +ざいりょう +さうな +さかいし +さがす +さかな +さかみち +さがる +さぎょう +さくし +さくひん +さくら +さこく +さこつ +さずかる +ざせき +さたん +さつえい +ざつおん +ざっか +ざつがく +さっきょく +ざっし +さつじん +ざっそう +さつたば +さつまいも +さてい +さといも +さとう +さとおや +さとし +さとる +さのう +さばく +さびしい +さべつ +さほう +さほど +さます +さみしい +さみだれ +さむけ +さめる +さやえんどう +さゆう +さよう +さよく +さらだ +ざるそば +さわやか +さわる +さんいん +さんか +さんきゃく +さんこう +さんさい +ざんしょ +さんすう +さんせい +さんそ +さんち +さんま +さんみ +さんらん +しあい +しあげ +しあさって +しあわせ +しいく +しいん +しうち +しえい +しおけ +しかい +しかく +じかん +しごと +しすう +じだい +したうけ +したぎ +したて +したみ +しちょう +しちりん +しっかり +しつじ +しつもん +してい +してき +してつ +じてん +じどう +しなぎれ +しなもの +しなん +しねま +しねん +しのぐ +しのぶ +しはい +しばかり +しはつ +しはらい +しはん +しひょう +しふく +じぶん +しへい +しほう +しほん +しまう +しまる +しみん +しむける +じむしょ +しめい +しめる +しもん +しゃいん +しゃうん +しゃおん +じゃがいも +しやくしょ +しゃくほう +しゃけん +しゃこ +しゃざい +しゃしん +しゃせん +しゃそう +しゃたい +しゃちょう +しゃっきん +じゃま +しゃりん +しゃれい +じゆう +じゅうしょ +しゅくはく +じゅしん +しゅっせき +しゅみ +しゅらば +じゅんばん +しょうかい +しょくたく +しょっけん +しょどう +しょもつ +しらせる +しらべる +しんか +しんこう +じんじゃ +しんせいじ +しんちく +しんりん +すあげ +すあし +すあな +ずあん +すいえい +すいか +すいとう +ずいぶん +すいようび +すうがく +すうじつ +すうせん +すおどり +すきま +すくう +すくない +すける +すごい +すこし +ずさん +すずしい +すすむ +すすめる +すっかり +ずっしり +ずっと +すてき +すてる +すねる +すのこ +すはだ +すばらしい +ずひょう +ずぶぬれ +すぶり +すふれ +すべて +すべる +ずほう +すぼん +すまい +すめし +すもう +すやき +すらすら +するめ +すれちがう +すろっと +すわる +すんぜん +すんぽう +せあぶら +せいかつ +せいげん +せいじ +せいよう +せおう +せかいかん +せきにん +せきむ +せきゆ +せきらんうん +せけん +せこう +せすじ +せたい +せたけ +せっかく +せっきゃく +ぜっく +せっけん +せっこつ +せっさたくま +せつぞく +せつだん +せつでん +せっぱん +せつび +せつぶん +せつめい +せつりつ +せなか +せのび +せはば +せびろ +せぼね +せまい +せまる +せめる +せもたれ +せりふ +ぜんあく +せんい +せんえい +せんか +せんきょ +せんく +せんげん +ぜんご +せんさい +せんしゅ +せんすい +せんせい +せんぞ +せんたく +せんちょう +せんてい +せんとう +せんぬき +せんねん +せんぱい +ぜんぶ +ぜんぽう +せんむ +せんめんじょ +せんもん +せんやく +せんゆう +せんよう +ぜんら +ぜんりゃく +せんれい +せんろ +そあく +そいとげる +そいね +そうがんきょう +そうき +そうご +そうしん +そうだん +そうなん +そうび +そうめん +そうり +そえもの +そえん +そがい +そげき +そこう +そこそこ +そざい +そしな +そせい +そせん +そそぐ +そだてる +そつう +そつえん +そっかん +そつぎょう +そっけつ +そっこう +そっせん +そっと +そとがわ +そとづら +そなえる +そなた +そふぼ +そぼく +そぼろ +そまつ +そまる +そむく +そむりえ +そめる +そもそも +そよかぜ +そらまめ +そろう +そんかい +そんけい +そんざい +そんしつ +そんぞく +そんちょう +ぞんび +ぞんぶん +そんみん +たあい +たいいん +たいうん +たいえき +たいおう +だいがく +たいき +たいぐう +たいけん +たいこ +たいざい +だいじょうぶ +だいすき +たいせつ +たいそう +だいたい +たいちょう +たいてい +だいどころ +たいない +たいねつ +たいのう +たいはん +だいひょう +たいふう +たいへん +たいほ +たいまつばな +たいみんぐ +たいむ +たいめん +たいやき +たいよう +たいら +たいりょく +たいる +たいわん +たうえ +たえる +たおす +たおる +たおれる +たかい +たかね +たきび +たくさん +たこく +たこやき +たさい +たしざん +だじゃれ +たすける +たずさわる +たそがれ +たたかう +たたく +ただしい +たたみ +たちばな +だっかい +だっきゃく +だっこ +だっしゅつ +だったい +たてる +たとえる +たなばた +たにん +たぬき +たのしみ +たはつ +たぶん +たべる +たぼう +たまご +たまる +だむる +ためいき +ためす +ためる +たもつ +たやすい +たよる +たらす +たりきほんがん +たりょう +たりる +たると +たれる +たれんと +たろっと +たわむれる +だんあつ +たんい +たんおん +たんか +たんき +たんけん +たんご +たんさん +たんじょうび +だんせい +たんそく +たんたい +だんち +たんてい +たんとう +だんな +たんにん +だんねつ +たんのう +たんぴん +だんぼう +たんまつ +たんめい +だんれつ +だんろ +だんわ +ちあい +ちあん +ちいき +ちいさい +ちえん +ちかい +ちから +ちきゅう +ちきん +ちけいず +ちけん +ちこく +ちさい +ちしき +ちしりょう +ちせい +ちそう +ちたい +ちたん +ちちおや +ちつじょ +ちてき +ちてん +ちぬき +ちぬり +ちのう +ちひょう +ちへいせん +ちほう +ちまた +ちみつ +ちみどろ +ちめいど +ちゃんこなべ +ちゅうい +ちゆりょく +ちょうし +ちょさくけん +ちらし +ちらみ +ちりがみ +ちりょう +ちるど +ちわわ +ちんたい +ちんもく +ついか +ついたち +つうか +つうじょう +つうはん +つうわ +つかう +つかれる +つくね +つくる +つけね +つける +つごう +つたえる +つづく +つつじ +つつむ +つとめる +つながる +つなみ +つねづね +つのる +つぶす +つまらない +つまる +つみき +つめたい +つもり +つもる +つよい +つるぼ +つるみく +つわもの +つわり +てあし +てあて +てあみ +ていおん +ていか +ていき +ていけい +ていこく +ていさつ +ていし +ていせい +ていたい +ていど +ていねい +ていひょう +ていへん +ていぼう +てうち +ておくれ +てきとう +てくび +でこぼこ +てさぎょう +てさげ +てすり +てそう +てちがい +てちょう +てつがく +てつづき +でっぱ +てつぼう +てつや +でぬかえ +てぬき +てぬぐい +てのひら +てはい +てぶくろ +てふだ +てほどき +てほん +てまえ +てまきずし +てみじか +てみやげ +てらす +てれび +てわけ +てわたし +でんあつ +てんいん +てんかい +てんき +てんぐ +てんけん +てんごく +てんさい +てんし +てんすう +でんち +てんてき +てんとう +てんない +てんぷら +てんぼうだい +てんめつ +てんらんかい +でんりょく +でんわ +どあい +といれ +どうかん +とうきゅう +どうぐ +とうし +とうむぎ +とおい +とおか +とおく +とおす +とおる +とかい +とかす +ときおり +ときどき +とくい +とくしゅう +とくてん +とくに +とくべつ +とけい +とける +とこや +とさか +としょかん +とそう +とたん +とちゅう +とっきゅう +とっくん +とつぜん +とつにゅう +とどける +ととのえる +とない +となえる +となり +とのさま +とばす +どぶがわ +とほう +とまる +とめる +ともだち +ともる +どようび +とらえる +とんかつ +どんぶり +ないかく +ないこう +ないしょ +ないす +ないせん +ないそう +なおす +ながい +なくす +なげる +なこうど +なさけ +なたでここ +なっとう +なつやすみ +ななおし +なにごと +なにもの +なにわ +なのか +なふだ +なまいき +なまえ +なまみ +なみだ +なめらか +なめる +なやむ +ならう +ならび +ならぶ +なれる +なわとび +なわばり +にあう +にいがた +にうけ +におい +にかい +にがて +にきび +にくしみ +にくまん +にげる +にさんかたんそ +にしき +にせもの +にちじょう +にちようび +にっか +にっき +にっけい +にっこう +にっさん +にっしょく +にっすう +にっせき +にってい +になう +にほん +にまめ +にもつ +にやり +にゅういん +にりんしゃ +にわとり +にんい +にんか +にんき +にんげん +にんしき +にんずう +にんそう +にんたい +にんち +にんてい +にんにく +にんぷ +にんまり +にんむ +にんめい +にんよう +ぬいくぎ +ぬかす +ぬぐいとる +ぬぐう +ぬくもり +ぬすむ +ぬまえび +ぬめり +ぬらす +ぬんちゃく +ねあげ +ねいき +ねいる +ねいろ +ねぐせ +ねくたい +ねくら +ねこぜ +ねこむ +ねさげ +ねすごす +ねそべる +ねだん +ねつい +ねっしん +ねつぞう +ねったいぎょ +ねぶそく +ねふだ +ねぼう +ねほりはほり +ねまき +ねまわし +ねみみ +ねむい +ねむたい +ねもと +ねらう +ねわざ +ねんいり +ねんおし +ねんかん +ねんきん +ねんぐ +ねんざ +ねんし +ねんちゃく +ねんど +ねんぴ +ねんぶつ +ねんまつ +ねんりょう +ねんれい +のいず +のおづま +のがす +のきなみ +のこぎり +のこす +のこる +のせる +のぞく +のぞむ +のたまう +のちほど +のっく +のばす +のはら +のべる +のぼる +のみもの +のやま +のらいぬ +のらねこ +のりもの +のりゆき +のれん +のんき +ばあい +はあく +ばあさん +ばいか +ばいく +はいけん +はいご +はいしん +はいすい +はいせん +はいそう +はいち +ばいばい +はいれつ +はえる +はおる +はかい +ばかり +はかる +はくしゅ +はけん +はこぶ +はさみ +はさん +はしご +ばしょ +はしる +はせる +ぱそこん +はそん +はたん +はちみつ +はつおん +はっかく +はづき +はっきり +はっくつ +はっけん +はっこう +はっさん +はっしん +はったつ +はっちゅう +はってん +はっぴょう +はっぽう +はなす +はなび +はにかむ +はぶらし +はみがき +はむかう +はめつ +はやい +はやし +はらう +はろうぃん +はわい +はんい +はんえい +はんおん +はんかく +はんきょう +ばんぐみ +はんこ +はんしゃ +はんすう +はんだん +ぱんち +ぱんつ +はんてい +はんとし +はんのう +はんぱ +はんぶん +はんぺん +はんぼうき +はんめい +はんらん +はんろん +ひいき +ひうん +ひえる +ひかく +ひかり +ひかる +ひかん +ひくい +ひけつ +ひこうき +ひこく +ひさい +ひさしぶり +ひさん +びじゅつかん +ひしょ +ひそか +ひそむ +ひたむき +ひだり +ひたる +ひつぎ +ひっこし +ひっし +ひつじゅひん +ひっす +ひつぜん +ぴったり +ぴっちり +ひつよう +ひてい +ひとごみ +ひなまつり +ひなん +ひねる +ひはん +ひびく +ひひょう +ひほう +ひまわり +ひまん +ひみつ +ひめい +ひめじし +ひやけ +ひやす +ひよう +びょうき +ひらがな +ひらく +ひりつ +ひりょう +ひるま +ひるやすみ +ひれい +ひろい +ひろう +ひろき +ひろゆき +ひんかく +ひんけつ +ひんこん +ひんしゅ +ひんそう +ぴんち +ひんぱん +びんぼう +ふあん +ふいうち +ふうけい +ふうせん +ぷうたろう +ふうとう +ふうふ +ふえる +ふおん +ふかい +ふきん +ふくざつ +ふくぶくろ +ふこう +ふさい +ふしぎ +ふじみ +ふすま +ふせい +ふせぐ +ふそく +ぶたにく +ふたん +ふちょう +ふつう +ふつか +ふっかつ +ふっき +ふっこく +ぶどう +ふとる +ふとん +ふのう +ふはい +ふひょう +ふへん +ふまん +ふみん +ふめつ +ふめん +ふよう +ふりこ +ふりる +ふるい +ふんいき +ぶんがく +ぶんぐ +ふんしつ +ぶんせき +ふんそう +ぶんぽう +へいあん +へいおん +へいがい +へいき +へいげん +へいこう +へいさ +へいしゃ +へいせつ +へいそ +へいたく +へいてん +へいねつ +へいわ +へきが +へこむ +べにいろ +べにしょうが +へらす +へんかん +べんきょう +べんごし +へんさい +へんたい +べんり +ほあん +ほいく +ぼうぎょ +ほうこく +ほうそう +ほうほう +ほうもん +ほうりつ +ほえる +ほおん +ほかん +ほきょう +ぼきん +ほくろ +ほけつ +ほけん +ほこう +ほこる +ほしい +ほしつ +ほしゅ +ほしょう +ほせい +ほそい +ほそく +ほたて +ほたる +ぽちぶくろ +ほっきょく +ほっさ +ほったん +ほとんど +ほめる +ほんい +ほんき +ほんけ +ほんしつ +ほんやく +まいにち +まかい +まかせる +まがる +まける +まこと +まさつ +まじめ +ますく +まぜる +まつり +まとめ +まなぶ +まぬけ +まねく +まほう +まもる +まゆげ +まよう +まろやか +まわす +まわり +まわる +まんが +まんきつ +まんぞく +まんなか +みいら +みうち +みえる +みがく +みかた +みかん +みけん +みこん +みじかい +みすい +みすえる +みせる +みっか +みつかる +みつける +みてい +みとめる +みなと +みなみかさい +みねらる +みのう +みのがす +みほん +みもと +みやげ +みらい +みりょく +みわく +みんか +みんぞく +むいか +むえき +むえん +むかい +むかう +むかえ +むかし +むぎちゃ +むける +むげん +むさぼる +むしあつい +むしば +むじゅん +むしろ +むすう +むすこ +むすぶ +むすめ +むせる +むせん +むちゅう +むなしい +むのう +むやみ +むよう +むらさき +むりょう +むろん +めいあん +めいうん +めいえん +めいかく +めいきょく +めいさい +めいし +めいそう +めいぶつ +めいれい +めいわく +めぐまれる +めざす +めした +めずらしい +めだつ +めまい +めやす +めんきょ +めんせき +めんどう +もうしあげる +もうどうけん +もえる +もくし +もくてき +もくようび +もちろん +もどる +もらう +もんく +もんだい +やおや +やける +やさい +やさしい +やすい +やすたろう +やすみ +やせる +やそう +やたい +やちん +やっと +やっぱり +やぶる +やめる +ややこしい +やよい +やわらかい +ゆうき +ゆうびんきょく +ゆうべ +ゆうめい +ゆけつ +ゆしゅつ +ゆせん +ゆそう +ゆたか +ゆちゃく +ゆでる +ゆにゅう +ゆびわ +ゆらい +ゆれる +ようい +ようか +ようきゅう +ようじ +ようす +ようちえん +よかぜ +よかん +よきん +よくせい +よくぼう +よけい +よごれる +よさん +よしゅう +よそう +よそく +よっか +よてい +よどがわく +よねつ +よやく +よゆう +よろこぶ +よろしい +らいう +らくがき +らくご +らくさつ +らくだ +らしんばん +らせん +らぞく +らたい +らっか +られつ +りえき +りかい +りきさく +りきせつ +りくぐん +りくつ +りけん +りこう +りせい +りそう +りそく +りてん +りねん +りゆう +りゅうがく +りよう +りょうり +りょかん +りょくちゃ +りょこう +りりく +りれき +りろん +りんご +るいけい +るいさい +るいじ +るいせき +るすばん +るりがわら +れいかん +れいぎ +れいせい +れいぞうこ +れいとう +れいぼう +れきし +れきだい +れんあい +れんけい +れんこん +れんさい +れんしゅう +れんぞく +れんらく +ろうか +ろうご +ろうじん +ろうそく +ろくが +ろこつ +ろじうら +ろしゅつ +ろせん +ろてん +ろめん +ろれつ +ろんぎ +ろんぱ +ろんぶん +ろんり +わかす +わかめ +わかやま +わかれる +わしつ +わじまし +わすれもの +わらう +われる diff --git a/packages/wordlists/input/lang-ko.txt b/packages/wordlists/input/lang-ko.txt new file mode 100644 index 000000000..1acebf75a --- /dev/null +++ b/packages/wordlists/input/lang-ko.txt @@ -0,0 +1,2048 @@ +가격 +가끔 +가난 +가능 +가득 +가르침 +가뭄 +가방 +가상 +가슴 +가운데 +가을 +가이드 +가입 +가장 +가정 +가족 +가죽 +각오 +각자 +간격 +간부 +간섭 +간장 +간접 +간판 +갈등 +갈비 +갈색 +갈증 +감각 +감기 +감소 +감수성 +감자 +감정 +갑자기 +강남 +강당 +강도 +강력히 +강변 +강북 +강사 +강수량 +강아지 +강원도 +강의 +강제 +강조 +같이 +개구리 +개나리 +개방 +개별 +개선 +개성 +개인 +객관적 +거실 +거액 +거울 +거짓 +거품 +걱정 +건강 +건물 +건설 +건조 +건축 +걸음 +검사 +검토 +게시판 +게임 +겨울 +견해 +결과 +결국 +결론 +결석 +결승 +결심 +결정 +결혼 +경계 +경고 +경기 +경력 +경복궁 +경비 +경상도 +경영 +경우 +경쟁 +경제 +경주 +경찰 +경치 +경향 +경험 +계곡 +계단 +계란 +계산 +계속 +계약 +계절 +계층 +계획 +고객 +고구려 +고궁 +고급 +고등학생 +고무신 +고민 +고양이 +고장 +고전 +고집 +고춧가루 +고통 +고향 +곡식 +골목 +골짜기 +골프 +공간 +공개 +공격 +공군 +공급 +공기 +공동 +공무원 +공부 +공사 +공식 +공업 +공연 +공원 +공장 +공짜 +공책 +공통 +공포 +공항 +공휴일 +과목 +과일 +과장 +과정 +과학 +관객 +관계 +관광 +관념 +관람 +관련 +관리 +관습 +관심 +관점 +관찰 +광경 +광고 +광장 +광주 +괴로움 +굉장히 +교과서 +교문 +교복 +교실 +교양 +교육 +교장 +교직 +교통 +교환 +교훈 +구경 +구름 +구멍 +구별 +구분 +구석 +구성 +구속 +구역 +구입 +구청 +구체적 +국가 +국기 +국내 +국립 +국물 +국민 +국수 +국어 +국왕 +국적 +국제 +국회 +군대 +군사 +군인 +궁극적 +권리 +권위 +권투 +귀국 +귀신 +규정 +규칙 +균형 +그날 +그냥 +그늘 +그러나 +그룹 +그릇 +그림 +그제서야 +그토록 +극복 +극히 +근거 +근교 +근래 +근로 +근무 +근본 +근원 +근육 +근처 +글씨 +글자 +금강산 +금고 +금년 +금메달 +금액 +금연 +금요일 +금지 +긍정적 +기간 +기관 +기념 +기능 +기독교 +기둥 +기록 +기름 +기법 +기본 +기분 +기쁨 +기숙사 +기술 +기억 +기업 +기온 +기운 +기원 +기적 +기준 +기침 +기혼 +기획 +긴급 +긴장 +길이 +김밥 +김치 +김포공항 +깍두기 +깜빡 +깨달음 +깨소금 +껍질 +꼭대기 +꽃잎 +나들이 +나란히 +나머지 +나물 +나침반 +나흘 +낙엽 +난방 +날개 +날씨 +날짜 +남녀 +남대문 +남매 +남산 +남자 +남편 +남학생 +낭비 +낱말 +내년 +내용 +내일 +냄비 +냄새 +냇물 +냉동 +냉면 +냉방 +냉장고 +넥타이 +넷째 +노동 +노란색 +노력 +노인 +녹음 +녹차 +녹화 +논리 +논문 +논쟁 +놀이 +농구 +농담 +농민 +농부 +농업 +농장 +농촌 +높이 +눈동자 +눈물 +눈썹 +뉴욕 +느낌 +늑대 +능동적 +능력 +다방 +다양성 +다음 +다이어트 +다행 +단계 +단골 +단독 +단맛 +단순 +단어 +단위 +단점 +단체 +단추 +단편 +단풍 +달걀 +달러 +달력 +달리 +닭고기 +담당 +담배 +담요 +담임 +답변 +답장 +당근 +당분간 +당연히 +당장 +대규모 +대낮 +대단히 +대답 +대도시 +대략 +대량 +대륙 +대문 +대부분 +대신 +대응 +대장 +대전 +대접 +대중 +대책 +대출 +대충 +대통령 +대학 +대한민국 +대합실 +대형 +덩어리 +데이트 +도대체 +도덕 +도둑 +도망 +도서관 +도심 +도움 +도입 +도자기 +도저히 +도전 +도중 +도착 +독감 +독립 +독서 +독일 +독창적 +동화책 +뒷모습 +뒷산 +딸아이 +마누라 +마늘 +마당 +마라톤 +마련 +마무리 +마사지 +마약 +마요네즈 +마을 +마음 +마이크 +마중 +마지막 +마찬가지 +마찰 +마흔 +막걸리 +막내 +막상 +만남 +만두 +만세 +만약 +만일 +만점 +만족 +만화 +많이 +말기 +말씀 +말투 +맘대로 +망원경 +매년 +매달 +매력 +매번 +매스컴 +매일 +매장 +맥주 +먹이 +먼저 +먼지 +멀리 +메일 +며느리 +며칠 +면담 +멸치 +명단 +명령 +명예 +명의 +명절 +명칭 +명함 +모금 +모니터 +모델 +모든 +모범 +모습 +모양 +모임 +모조리 +모집 +모퉁이 +목걸이 +목록 +목사 +목소리 +목숨 +목적 +목표 +몰래 +몸매 +몸무게 +몸살 +몸속 +몸짓 +몸통 +몹시 +무관심 +무궁화 +무더위 +무덤 +무릎 +무슨 +무엇 +무역 +무용 +무조건 +무지개 +무척 +문구 +문득 +문법 +문서 +문제 +문학 +문화 +물가 +물건 +물결 +물고기 +물론 +물리학 +물음 +물질 +물체 +미국 +미디어 +미사일 +미술 +미역 +미용실 +미움 +미인 +미팅 +미혼 +민간 +민족 +민주 +믿음 +밀가루 +밀리미터 +밑바닥 +바가지 +바구니 +바나나 +바늘 +바닥 +바닷가 +바람 +바이러스 +바탕 +박물관 +박사 +박수 +반대 +반드시 +반말 +반발 +반성 +반응 +반장 +반죽 +반지 +반찬 +받침 +발가락 +발걸음 +발견 +발달 +발레 +발목 +발바닥 +발생 +발음 +발자국 +발전 +발톱 +발표 +밤하늘 +밥그릇 +밥맛 +밥상 +밥솥 +방금 +방면 +방문 +방바닥 +방법 +방송 +방식 +방안 +방울 +방지 +방학 +방해 +방향 +배경 +배꼽 +배달 +배드민턴 +백두산 +백색 +백성 +백인 +백제 +백화점 +버릇 +버섯 +버튼 +번개 +번역 +번지 +번호 +벌금 +벌레 +벌써 +범위 +범인 +범죄 +법률 +법원 +법적 +법칙 +베이징 +벨트 +변경 +변동 +변명 +변신 +변호사 +변화 +별도 +별명 +별일 +병실 +병아리 +병원 +보관 +보너스 +보라색 +보람 +보름 +보상 +보안 +보자기 +보장 +보전 +보존 +보통 +보편적 +보험 +복도 +복사 +복숭아 +복습 +볶음 +본격적 +본래 +본부 +본사 +본성 +본인 +본질 +볼펜 +봉사 +봉지 +봉투 +부근 +부끄러움 +부담 +부동산 +부문 +부분 +부산 +부상 +부엌 +부인 +부작용 +부장 +부정 +부족 +부지런히 +부친 +부탁 +부품 +부회장 +북부 +북한 +분노 +분량 +분리 +분명 +분석 +분야 +분위기 +분필 +분홍색 +불고기 +불과 +불교 +불꽃 +불만 +불법 +불빛 +불안 +불이익 +불행 +브랜드 +비극 +비난 +비닐 +비둘기 +비디오 +비로소 +비만 +비명 +비밀 +비바람 +비빔밥 +비상 +비용 +비율 +비중 +비타민 +비판 +빌딩 +빗물 +빗방울 +빗줄기 +빛깔 +빨간색 +빨래 +빨리 +사건 +사계절 +사나이 +사냥 +사람 +사랑 +사립 +사모님 +사물 +사방 +사상 +사생활 +사설 +사슴 +사실 +사업 +사용 +사월 +사장 +사전 +사진 +사촌 +사춘기 +사탕 +사투리 +사흘 +산길 +산부인과 +산업 +산책 +살림 +살인 +살짝 +삼계탕 +삼국 +삼십 +삼월 +삼촌 +상관 +상금 +상대 +상류 +상반기 +상상 +상식 +상업 +상인 +상자 +상점 +상처 +상추 +상태 +상표 +상품 +상황 +새벽 +색깔 +색연필 +생각 +생명 +생물 +생방송 +생산 +생선 +생신 +생일 +생활 +서랍 +서른 +서명 +서민 +서비스 +서양 +서울 +서적 +서점 +서쪽 +서클 +석사 +석유 +선거 +선물 +선배 +선생 +선수 +선원 +선장 +선전 +선택 +선풍기 +설거지 +설날 +설렁탕 +설명 +설문 +설사 +설악산 +설치 +설탕 +섭씨 +성공 +성당 +성명 +성별 +성인 +성장 +성적 +성질 +성함 +세금 +세미나 +세상 +세월 +세종대왕 +세탁 +센터 +센티미터 +셋째 +소규모 +소극적 +소금 +소나기 +소년 +소득 +소망 +소문 +소설 +소속 +소아과 +소용 +소원 +소음 +소중히 +소지품 +소질 +소풍 +소형 +속담 +속도 +속옷 +손가락 +손길 +손녀 +손님 +손등 +손목 +손뼉 +손실 +손질 +손톱 +손해 +솔직히 +솜씨 +송아지 +송이 +송편 +쇠고기 +쇼핑 +수건 +수년 +수단 +수돗물 +수동적 +수면 +수명 +수박 +수상 +수석 +수술 +수시로 +수업 +수염 +수영 +수입 +수준 +수집 +수출 +수컷 +수필 +수학 +수험생 +수화기 +숙녀 +숙소 +숙제 +순간 +순서 +순수 +순식간 +순위 +숟가락 +술병 +술집 +숫자 +스님 +스물 +스스로 +스승 +스웨터 +스위치 +스케이트 +스튜디오 +스트레스 +스포츠 +슬쩍 +슬픔 +습관 +습기 +승객 +승리 +승부 +승용차 +승진 +시각 +시간 +시골 +시금치 +시나리오 +시댁 +시리즈 +시멘트 +시민 +시부모 +시선 +시설 +시스템 +시아버지 +시어머니 +시월 +시인 +시일 +시작 +시장 +시절 +시점 +시중 +시즌 +시집 +시청 +시합 +시험 +식구 +식기 +식당 +식량 +식료품 +식물 +식빵 +식사 +식생활 +식초 +식탁 +식품 +신고 +신규 +신념 +신문 +신발 +신비 +신사 +신세 +신용 +신제품 +신청 +신체 +신화 +실감 +실내 +실력 +실례 +실망 +실수 +실습 +실시 +실장 +실정 +실질적 +실천 +실체 +실컷 +실태 +실패 +실험 +실현 +심리 +심부름 +심사 +심장 +심정 +심판 +쌍둥이 +씨름 +씨앗 +아가씨 +아나운서 +아드님 +아들 +아쉬움 +아스팔트 +아시아 +아울러 +아저씨 +아줌마 +아직 +아침 +아파트 +아프리카 +아픔 +아홉 +아흔 +악기 +악몽 +악수 +안개 +안경 +안과 +안내 +안녕 +안동 +안방 +안부 +안주 +알루미늄 +알코올 +암시 +암컷 +압력 +앞날 +앞문 +애인 +애정 +액수 +앨범 +야간 +야단 +야옹 +약간 +약국 +약속 +약수 +약점 +약품 +약혼녀 +양념 +양력 +양말 +양배추 +양주 +양파 +어둠 +어려움 +어른 +어젯밤 +어쨌든 +어쩌다가 +어쩐지 +언니 +언덕 +언론 +언어 +얼굴 +얼른 +얼음 +얼핏 +엄마 +업무 +업종 +업체 +엉덩이 +엉망 +엉터리 +엊그제 +에너지 +에어컨 +엔진 +여건 +여고생 +여관 +여군 +여권 +여대생 +여덟 +여동생 +여든 +여론 +여름 +여섯 +여성 +여왕 +여인 +여전히 +여직원 +여학생 +여행 +역사 +역시 +역할 +연결 +연구 +연극 +연기 +연락 +연설 +연세 +연속 +연습 +연애 +연예인 +연인 +연장 +연주 +연출 +연필 +연합 +연휴 +열기 +열매 +열쇠 +열심히 +열정 +열차 +열흘 +염려 +엽서 +영국 +영남 +영상 +영양 +영역 +영웅 +영원히 +영하 +영향 +영혼 +영화 +옆구리 +옆방 +옆집 +예감 +예금 +예방 +예산 +예상 +예선 +예술 +예습 +예식장 +예약 +예전 +예절 +예정 +예컨대 +옛날 +오늘 +오락 +오랫동안 +오렌지 +오로지 +오른발 +오븐 +오십 +오염 +오월 +오전 +오직 +오징어 +오페라 +오피스텔 +오히려 +옥상 +옥수수 +온갖 +온라인 +온몸 +온종일 +온통 +올가을 +올림픽 +올해 +옷차림 +와이셔츠 +와인 +완성 +완전 +왕비 +왕자 +왜냐하면 +왠지 +외갓집 +외국 +외로움 +외삼촌 +외출 +외침 +외할머니 +왼발 +왼손 +왼쪽 +요금 +요일 +요즘 +요청 +용기 +용서 +용어 +우산 +우선 +우승 +우연히 +우정 +우체국 +우편 +운동 +운명 +운반 +운전 +운행 +울산 +울음 +움직임 +웃어른 +웃음 +워낙 +원고 +원래 +원서 +원숭이 +원인 +원장 +원피스 +월급 +월드컵 +월세 +월요일 +웨이터 +위반 +위법 +위성 +위원 +위험 +위협 +윗사람 +유난히 +유럽 +유명 +유물 +유산 +유적 +유치원 +유학 +유행 +유형 +육군 +육상 +육십 +육체 +은행 +음력 +음료 +음반 +음성 +음식 +음악 +음주 +의견 +의논 +의문 +의복 +의식 +의심 +의외로 +의욕 +의원 +의학 +이것 +이곳 +이념 +이놈 +이달 +이대로 +이동 +이렇게 +이력서 +이론적 +이름 +이민 +이발소 +이별 +이불 +이빨 +이상 +이성 +이슬 +이야기 +이용 +이웃 +이월 +이윽고 +이익 +이전 +이중 +이튿날 +이틀 +이혼 +인간 +인격 +인공 +인구 +인근 +인기 +인도 +인류 +인물 +인생 +인쇄 +인연 +인원 +인재 +인종 +인천 +인체 +인터넷 +인하 +인형 +일곱 +일기 +일단 +일대 +일등 +일반 +일본 +일부 +일상 +일생 +일손 +일요일 +일월 +일정 +일종 +일주일 +일찍 +일체 +일치 +일행 +일회용 +임금 +임무 +입대 +입력 +입맛 +입사 +입술 +입시 +입원 +입장 +입학 +자가용 +자격 +자극 +자동 +자랑 +자부심 +자식 +자신 +자연 +자원 +자율 +자전거 +자정 +자존심 +자판 +작가 +작년 +작성 +작업 +작용 +작은딸 +작품 +잔디 +잔뜩 +잔치 +잘못 +잠깐 +잠수함 +잠시 +잠옷 +잠자리 +잡지 +장관 +장군 +장기간 +장래 +장례 +장르 +장마 +장면 +장모 +장미 +장비 +장사 +장소 +장식 +장애인 +장인 +장점 +장차 +장학금 +재능 +재빨리 +재산 +재생 +재작년 +재정 +재채기 +재판 +재학 +재활용 +저것 +저고리 +저곳 +저녁 +저런 +저렇게 +저번 +저울 +저절로 +저축 +적극 +적당히 +적성 +적용 +적응 +전개 +전공 +전기 +전달 +전라도 +전망 +전문 +전반 +전부 +전세 +전시 +전용 +전자 +전쟁 +전주 +전철 +전체 +전통 +전혀 +전후 +절대 +절망 +절반 +절약 +절차 +점검 +점수 +점심 +점원 +점점 +점차 +접근 +접시 +접촉 +젓가락 +정거장 +정도 +정류장 +정리 +정말 +정면 +정문 +정반대 +정보 +정부 +정비 +정상 +정성 +정오 +정원 +정장 +정지 +정치 +정확히 +제공 +제과점 +제대로 +제목 +제발 +제법 +제삿날 +제안 +제일 +제작 +제주도 +제출 +제품 +제한 +조각 +조건 +조금 +조깅 +조명 +조미료 +조상 +조선 +조용히 +조절 +조정 +조직 +존댓말 +존재 +졸업 +졸음 +종교 +종로 +종류 +종소리 +종업원 +종종 +종합 +좌석 +죄인 +주관적 +주름 +주말 +주머니 +주먹 +주문 +주민 +주방 +주변 +주식 +주인 +주일 +주장 +주전자 +주택 +준비 +줄거리 +줄기 +줄무늬 +중간 +중계방송 +중국 +중년 +중단 +중독 +중반 +중부 +중세 +중소기업 +중순 +중앙 +중요 +중학교 +즉석 +즉시 +즐거움 +증가 +증거 +증권 +증상 +증세 +지각 +지갑 +지경 +지극히 +지금 +지급 +지능 +지름길 +지리산 +지방 +지붕 +지식 +지역 +지우개 +지원 +지적 +지점 +지진 +지출 +직선 +직업 +직원 +직장 +진급 +진동 +진로 +진료 +진리 +진짜 +진찰 +진출 +진통 +진행 +질문 +질병 +질서 +짐작 +집단 +집안 +집중 +짜증 +찌꺼기 +차남 +차라리 +차량 +차림 +차별 +차선 +차츰 +착각 +찬물 +찬성 +참가 +참기름 +참새 +참석 +참여 +참외 +참조 +찻잔 +창가 +창고 +창구 +창문 +창밖 +창작 +창조 +채널 +채점 +책가방 +책방 +책상 +책임 +챔피언 +처벌 +처음 +천국 +천둥 +천장 +천재 +천천히 +철도 +철저히 +철학 +첫날 +첫째 +청년 +청바지 +청소 +청춘 +체계 +체력 +체온 +체육 +체중 +체험 +초등학생 +초반 +초밥 +초상화 +초순 +초여름 +초원 +초저녁 +초점 +초청 +초콜릿 +촛불 +총각 +총리 +총장 +촬영 +최근 +최상 +최선 +최신 +최악 +최종 +추석 +추억 +추진 +추천 +추측 +축구 +축소 +축제 +축하 +출근 +출발 +출산 +출신 +출연 +출입 +출장 +출판 +충격 +충고 +충돌 +충분히 +충청도 +취업 +취직 +취향 +치약 +친구 +친척 +칠십 +칠월 +칠판 +침대 +침묵 +침실 +칫솔 +칭찬 +카메라 +카운터 +칼국수 +캐릭터 +캠퍼스 +캠페인 +커튼 +컨디션 +컬러 +컴퓨터 +코끼리 +코미디 +콘서트 +콜라 +콤플렉스 +콩나물 +쾌감 +쿠데타 +크림 +큰길 +큰딸 +큰소리 +큰아들 +큰어머니 +큰일 +큰절 +클래식 +클럽 +킬로 +타입 +타자기 +탁구 +탁자 +탄생 +태권도 +태양 +태풍 +택시 +탤런트 +터널 +터미널 +테니스 +테스트 +테이블 +텔레비전 +토론 +토마토 +토요일 +통계 +통과 +통로 +통신 +통역 +통일 +통장 +통제 +통증 +통합 +통화 +퇴근 +퇴원 +퇴직금 +튀김 +트럭 +특급 +특별 +특성 +특수 +특징 +특히 +튼튼히 +티셔츠 +파란색 +파일 +파출소 +판결 +판단 +판매 +판사 +팔십 +팔월 +팝송 +패션 +팩스 +팩시밀리 +팬티 +퍼센트 +페인트 +편견 +편의 +편지 +편히 +평가 +평균 +평생 +평소 +평양 +평일 +평화 +포스터 +포인트 +포장 +포함 +표면 +표정 +표준 +표현 +품목 +품질 +풍경 +풍속 +풍습 +프랑스 +프린터 +플라스틱 +피곤 +피망 +피아노 +필름 +필수 +필요 +필자 +필통 +핑계 +하느님 +하늘 +하드웨어 +하룻밤 +하반기 +하숙집 +하순 +하여튼 +하지만 +하천 +하품 +하필 +학과 +학교 +학급 +학기 +학년 +학력 +학번 +학부모 +학비 +학생 +학술 +학습 +학용품 +학원 +학위 +학자 +학점 +한계 +한글 +한꺼번에 +한낮 +한눈 +한동안 +한때 +한라산 +한마디 +한문 +한번 +한복 +한식 +한여름 +한쪽 +할머니 +할아버지 +할인 +함께 +함부로 +합격 +합리적 +항공 +항구 +항상 +항의 +해결 +해군 +해답 +해당 +해물 +해석 +해설 +해수욕장 +해안 +핵심 +핸드백 +햄버거 +햇볕 +햇살 +행동 +행복 +행사 +행운 +행위 +향기 +향상 +향수 +허락 +허용 +헬기 +현관 +현금 +현대 +현상 +현실 +현장 +현재 +현지 +혈액 +협력 +형부 +형사 +형수 +형식 +형제 +형태 +형편 +혜택 +호기심 +호남 +호랑이 +호박 +호텔 +호흡 +혹시 +홀로 +홈페이지 +홍보 +홍수 +홍차 +화면 +화분 +화살 +화요일 +화장 +화학 +확보 +확인 +확장 +확정 +환갑 +환경 +환영 +환율 +환자 +활기 +활동 +활발히 +활용 +활짝 +회견 +회관 +회복 +회색 +회원 +회장 +회전 +횟수 +횡단보도 +효율적 +후반 +후춧가루 +훈련 +훨씬 +휴식 +휴일 +흉내 +흐름 +흑백 +흑인 +흔적 +흔히 +흥미 +흥분 +희곡 +희망 +희생 +흰색 +힘껏 diff --git a/packages/wordlists/input/lang-pt.txt b/packages/wordlists/input/lang-pt.txt new file mode 100644 index 000000000..4a8910550 --- /dev/null +++ b/packages/wordlists/input/lang-pt.txt @@ -0,0 +1,2048 @@ +abacate +abaixo +abalar +abater +abduzir +abelha +aberto +abismo +abotoar +abranger +abreviar +abrigar +abrupto +absinto +absoluto +absurdo +abutre +acabado +acalmar +acampar +acanhar +acaso +aceitar +acelerar +acenar +acervo +acessar +acetona +achatar +acidez +acima +acionado +acirrar +aclamar +aclive +acolhida +acomodar +acoplar +acordar +acumular +acusador +adaptar +adega +adentro +adepto +adequar +aderente +adesivo +adeus +adiante +aditivo +adjetivo +adjunto +admirar +adorar +adquirir +adubo +adverso +advogado +aeronave +afastar +aferir +afetivo +afinador +afivelar +aflito +afluente +afrontar +agachar +agarrar +agasalho +agenciar +agilizar +agiota +agitado +agora +agradar +agreste +agrupar +aguardar +agulha +ajoelhar +ajudar +ajustar +alameda +alarme +alastrar +alavanca +albergue +albino +alcatra +aldeia +alecrim +alegria +alertar +alface +alfinete +algum +alheio +aliar +alicate +alienar +alinhar +aliviar +almofada +alocar +alpiste +alterar +altitude +alucinar +alugar +aluno +alusivo +alvo +amaciar +amador +amarelo +amassar +ambas +ambiente +ameixa +amenizar +amido +amistoso +amizade +amolador +amontoar +amoroso +amostra +amparar +ampliar +ampola +anagrama +analisar +anarquia +anatomia +andaime +anel +anexo +angular +animar +anjo +anomalia +anotado +ansioso +anterior +anuidade +anunciar +anzol +apagador +apalpar +apanhado +apego +apelido +apertada +apesar +apetite +apito +aplauso +aplicada +apoio +apontar +aposta +aprendiz +aprovar +aquecer +arame +aranha +arara +arcada +ardente +areia +arejar +arenito +aresta +argiloso +argola +arma +arquivo +arraial +arrebate +arriscar +arroba +arrumar +arsenal +arterial +artigo +arvoredo +asfaltar +asilado +aspirar +assador +assinar +assoalho +assunto +astral +atacado +atadura +atalho +atarefar +atear +atender +aterro +ateu +atingir +atirador +ativo +atoleiro +atracar +atrevido +atriz +atual +atum +auditor +aumentar +aura +aurora +autismo +autoria +autuar +avaliar +avante +avaria +avental +avesso +aviador +avisar +avulso +axila +azarar +azedo +azeite +azulejo +babar +babosa +bacalhau +bacharel +bacia +bagagem +baiano +bailar +baioneta +bairro +baixista +bajular +baleia +baliza +balsa +banal +bandeira +banho +banir +banquete +barato +barbado +baronesa +barraca +barulho +baseado +bastante +batata +batedor +batida +batom +batucar +baunilha +beber +beijo +beirada +beisebol +beldade +beleza +belga +beliscar +bendito +bengala +benzer +berimbau +berlinda +berro +besouro +bexiga +bezerro +bico +bicudo +bienal +bifocal +bifurcar +bigorna +bilhete +bimestre +bimotor +biologia +biombo +biosfera +bipolar +birrento +biscoito +bisneto +bispo +bissexto +bitola +bizarro +blindado +bloco +bloquear +boato +bobagem +bocado +bocejo +bochecha +boicotar +bolada +boletim +bolha +bolo +bombeiro +bonde +boneco +bonita +borbulha +borda +boreal +borracha +bovino +boxeador +branco +brasa +braveza +breu +briga +brilho +brincar +broa +brochura +bronzear +broto +bruxo +bucha +budismo +bufar +bule +buraco +busca +busto +buzina +cabana +cabelo +cabide +cabo +cabrito +cacau +cacetada +cachorro +cacique +cadastro +cadeado +cafezal +caiaque +caipira +caixote +cajado +caju +calafrio +calcular +caldeira +calibrar +calmante +calota +camada +cambista +camisa +camomila +campanha +camuflar +canavial +cancelar +caneta +canguru +canhoto +canivete +canoa +cansado +cantar +canudo +capacho +capela +capinar +capotar +capricho +captador +capuz +caracol +carbono +cardeal +careca +carimbar +carneiro +carpete +carreira +cartaz +carvalho +casaco +casca +casebre +castelo +casulo +catarata +cativar +caule +causador +cautelar +cavalo +caverna +cebola +cedilha +cegonha +celebrar +celular +cenoura +censo +centeio +cercar +cerrado +certeiro +cerveja +cetim +cevada +chacota +chaleira +chamado +chapada +charme +chatice +chave +chefe +chegada +cheiro +cheque +chicote +chifre +chinelo +chocalho +chover +chumbo +chutar +chuva +cicatriz +ciclone +cidade +cidreira +ciente +cigana +cimento +cinto +cinza +ciranda +circuito +cirurgia +citar +clareza +clero +clicar +clone +clube +coado +coagir +cobaia +cobertor +cobrar +cocada +coelho +coentro +coeso +cogumelo +coibir +coifa +coiote +colar +coleira +colher +colidir +colmeia +colono +coluna +comando +combinar +comentar +comitiva +comover +complexo +comum +concha +condor +conectar +confuso +congelar +conhecer +conjugar +consumir +contrato +convite +cooperar +copeiro +copiador +copo +coquetel +coragem +cordial +corneta +coronha +corporal +correio +cortejo +coruja +corvo +cosseno +costela +cotonete +couro +couve +covil +cozinha +cratera +cravo +creche +credor +creme +crer +crespo +criada +criminal +crioulo +crise +criticar +crosta +crua +cruzeiro +cubano +cueca +cuidado +cujo +culatra +culminar +culpar +cultura +cumprir +cunhado +cupido +curativo +curral +cursar +curto +cuspir +custear +cutelo +damasco +datar +debater +debitar +deboche +debulhar +decalque +decimal +declive +decote +decretar +dedal +dedicado +deduzir +defesa +defumar +degelo +degrau +degustar +deitado +deixar +delator +delegado +delinear +delonga +demanda +demitir +demolido +dentista +depenado +depilar +depois +depressa +depurar +deriva +derramar +desafio +desbotar +descanso +desenho +desfiado +desgaste +desigual +deslize +desmamar +desova +despesa +destaque +desviar +detalhar +detentor +detonar +detrito +deusa +dever +devido +devotado +dezena +diagrama +dialeto +didata +difuso +digitar +dilatado +diluente +diminuir +dinastia +dinheiro +diocese +direto +discreta +disfarce +disparo +disquete +dissipar +distante +ditador +diurno +diverso +divisor +divulgar +dizer +dobrador +dolorido +domador +dominado +donativo +donzela +dormente +dorsal +dosagem +dourado +doutor +drenagem +drible +drogaria +duelar +duende +dueto +duplo +duquesa +durante +duvidoso +eclodir +ecoar +ecologia +edificar +edital +educado +efeito +efetivar +ejetar +elaborar +eleger +eleitor +elenco +elevador +eliminar +elogiar +embargo +embolado +embrulho +embutido +emenda +emergir +emissor +empatia +empenho +empinado +empolgar +emprego +empurrar +emulador +encaixe +encenado +enchente +encontro +endeusar +endossar +enfaixar +enfeite +enfim +engajado +engenho +englobar +engomado +engraxar +enguia +enjoar +enlatar +enquanto +enraizar +enrolado +enrugar +ensaio +enseada +ensino +ensopado +entanto +enteado +entidade +entortar +entrada +entulho +envergar +enviado +envolver +enxame +enxerto +enxofre +enxuto +epiderme +equipar +ereto +erguido +errata +erva +ervilha +esbanjar +esbelto +escama +escola +escrita +escuta +esfinge +esfolar +esfregar +esfumado +esgrima +esmalte +espanto +espelho +espiga +esponja +espreita +espumar +esquerda +estaca +esteira +esticar +estofado +estrela +estudo +esvaziar +etanol +etiqueta +euforia +europeu +evacuar +evaporar +evasivo +eventual +evidente +evoluir +exagero +exalar +examinar +exato +exausto +excesso +excitar +exclamar +executar +exemplo +exibir +exigente +exonerar +expandir +expelir +expirar +explanar +exposto +expresso +expulsar +externo +extinto +extrato +fabricar +fabuloso +faceta +facial +fada +fadiga +faixa +falar +falta +familiar +fandango +fanfarra +fantoche +fardado +farelo +farinha +farofa +farpa +fartura +fatia +fator +favorita +faxina +fazenda +fechado +feijoada +feirante +felino +feminino +fenda +feno +fera +feriado +ferrugem +ferver +festejar +fetal +feudal +fiapo +fibrose +ficar +ficheiro +figurado +fileira +filho +filme +filtrar +firmeza +fisgada +fissura +fita +fivela +fixador +fixo +flacidez +flamingo +flanela +flechada +flora +flutuar +fluxo +focal +focinho +fofocar +fogo +foguete +foice +folgado +folheto +forjar +formiga +forno +forte +fosco +fossa +fragata +fralda +frango +frasco +fraterno +freira +frente +fretar +frieza +friso +fritura +fronha +frustrar +fruteira +fugir +fulano +fuligem +fundar +fungo +funil +furador +furioso +futebol +gabarito +gabinete +gado +gaiato +gaiola +gaivota +galega +galho +galinha +galocha +ganhar +garagem +garfo +gargalo +garimpo +garoupa +garrafa +gasoduto +gasto +gata +gatilho +gaveta +gazela +gelado +geleia +gelo +gemada +gemer +gemido +generoso +gengiva +genial +genoma +genro +geologia +gerador +germinar +gesso +gestor +ginasta +gincana +gingado +girafa +girino +glacial +glicose +global +glorioso +goela +goiaba +golfe +golpear +gordura +gorjeta +gorro +gostoso +goteira +governar +gracejo +gradual +grafite +gralha +grampo +granada +gratuito +graveto +graxa +grego +grelhar +greve +grilo +grisalho +gritaria +grosso +grotesco +grudado +grunhido +gruta +guache +guarani +guaxinim +guerrear +guiar +guincho +guisado +gula +guloso +guru +habitar +harmonia +haste +haver +hectare +herdar +heresia +hesitar +hiato +hibernar +hidratar +hiena +hino +hipismo +hipnose +hipoteca +hoje +holofote +homem +honesto +honrado +hormonal +hospedar +humorado +iate +ideia +idoso +ignorado +igreja +iguana +ileso +ilha +iludido +iluminar +ilustrar +imagem +imediato +imenso +imersivo +iminente +imitador +imortal +impacto +impedir +implante +impor +imprensa +impune +imunizar +inalador +inapto +inativo +incenso +inchar +incidir +incluir +incolor +indeciso +indireto +indutor +ineficaz +inerente +infantil +infestar +infinito +inflamar +informal +infrator +ingerir +inibido +inicial +inimigo +injetar +inocente +inodoro +inovador +inox +inquieto +inscrito +inseto +insistir +inspetor +instalar +insulto +intacto +integral +intimar +intocado +intriga +invasor +inverno +invicto +invocar +iogurte +iraniano +ironizar +irreal +irritado +isca +isento +isolado +isqueiro +italiano +janeiro +jangada +janta +jararaca +jardim +jarro +jasmim +jato +javali +jazida +jejum +joaninha +joelhada +jogador +joia +jornal +jorrar +jovem +juba +judeu +judoca +juiz +julgador +julho +jurado +jurista +juro +justa +labareda +laboral +lacre +lactante +ladrilho +lagarta +lagoa +laje +lamber +lamentar +laminar +lampejo +lanche +lapidar +lapso +laranja +lareira +largura +lasanha +lastro +lateral +latido +lavanda +lavoura +lavrador +laxante +lazer +lealdade +lebre +legado +legendar +legista +leigo +leiloar +leitura +lembrete +leme +lenhador +lentilha +leoa +lesma +leste +letivo +letreiro +levar +leveza +levitar +liberal +libido +liderar +ligar +ligeiro +limitar +limoeiro +limpador +linda +linear +linhagem +liquidez +listagem +lisura +litoral +livro +lixa +lixeira +locador +locutor +lojista +lombo +lona +longe +lontra +lorde +lotado +loteria +loucura +lousa +louvar +luar +lucidez +lucro +luneta +lustre +lutador +luva +macaco +macete +machado +macio +madeira +madrinha +magnata +magreza +maior +mais +malandro +malha +malote +maluco +mamilo +mamoeiro +mamute +manada +mancha +mandato +manequim +manhoso +manivela +manobrar +mansa +manter +manusear +mapeado +maquinar +marcador +maresia +marfim +margem +marinho +marmita +maroto +marquise +marreco +martelo +marujo +mascote +masmorra +massagem +mastigar +matagal +materno +matinal +matutar +maxilar +medalha +medida +medusa +megafone +meiga +melancia +melhor +membro +memorial +menino +menos +mensagem +mental +merecer +mergulho +mesada +mesclar +mesmo +mesquita +mestre +metade +meteoro +metragem +mexer +mexicano +micro +migalha +migrar +milagre +milenar +milhar +mimado +minerar +minhoca +ministro +minoria +miolo +mirante +mirtilo +misturar +mocidade +moderno +modular +moeda +moer +moinho +moita +moldura +moleza +molho +molinete +molusco +montanha +moqueca +morango +morcego +mordomo +morena +mosaico +mosquete +mostarda +motel +motim +moto +motriz +muda +muito +mulata +mulher +multar +mundial +munido +muralha +murcho +muscular +museu +musical +nacional +nadador +naja +namoro +narina +narrado +nascer +nativa +natureza +navalha +navegar +navio +neblina +nebuloso +negativa +negociar +negrito +nervoso +neta +neural +nevasca +nevoeiro +ninar +ninho +nitidez +nivelar +nobreza +noite +noiva +nomear +nominal +nordeste +nortear +notar +noticiar +noturno +novelo +novilho +novo +nublado +nudez +numeral +nupcial +nutrir +nuvem +obcecado +obedecer +objetivo +obrigado +obscuro +obstetra +obter +obturar +ocidente +ocioso +ocorrer +oculista +ocupado +ofegante +ofensiva +oferenda +oficina +ofuscado +ogiva +olaria +oleoso +olhar +oliveira +ombro +omelete +omisso +omitir +ondulado +oneroso +ontem +opcional +operador +oponente +oportuno +oposto +orar +orbitar +ordem +ordinal +orfanato +orgasmo +orgulho +oriental +origem +oriundo +orla +ortodoxo +orvalho +oscilar +ossada +osso +ostentar +otimismo +ousadia +outono +outubro +ouvido +ovelha +ovular +oxidar +oxigenar +pacato +paciente +pacote +pactuar +padaria +padrinho +pagar +pagode +painel +pairar +paisagem +palavra +palestra +palheta +palito +palmada +palpitar +pancada +panela +panfleto +panqueca +pantanal +papagaio +papelada +papiro +parafina +parcial +pardal +parede +partida +pasmo +passado +pastel +patamar +patente +patinar +patrono +paulada +pausar +peculiar +pedalar +pedestre +pediatra +pedra +pegada +peitoral +peixe +pele +pelicano +penca +pendurar +peneira +penhasco +pensador +pente +perceber +perfeito +pergunta +perito +permitir +perna +perplexo +persiana +pertence +peruca +pescado +pesquisa +pessoa +petiscar +piada +picado +piedade +pigmento +pilastra +pilhado +pilotar +pimenta +pincel +pinguim +pinha +pinote +pintar +pioneiro +pipoca +piquete +piranha +pires +pirueta +piscar +pistola +pitanga +pivete +planta +plaqueta +platina +plebeu +plumagem +pluvial +pneu +poda +poeira +poetisa +polegada +policiar +poluente +polvilho +pomar +pomba +ponderar +pontaria +populoso +porta +possuir +postal +pote +poupar +pouso +povoar +praia +prancha +prato +praxe +prece +predador +prefeito +premiar +prensar +preparar +presilha +pretexto +prevenir +prezar +primata +princesa +prisma +privado +processo +produto +profeta +proibido +projeto +prometer +propagar +prosa +protetor +provador +publicar +pudim +pular +pulmonar +pulseira +punhal +punir +pupilo +pureza +puxador +quadra +quantia +quarto +quase +quebrar +queda +queijo +quente +querido +quimono +quina +quiosque +rabanada +rabisco +rachar +racionar +radial +raiar +rainha +raio +raiva +rajada +ralado +ramal +ranger +ranhura +rapadura +rapel +rapidez +raposa +raquete +raridade +rasante +rascunho +rasgar +raspador +rasteira +rasurar +ratazana +ratoeira +realeza +reanimar +reaver +rebaixar +rebelde +rebolar +recado +recente +recheio +recibo +recordar +recrutar +recuar +rede +redimir +redonda +reduzida +reenvio +refinar +refletir +refogar +refresco +refugiar +regalia +regime +regra +reinado +reitor +rejeitar +relativo +remador +remendo +remorso +renovado +reparo +repelir +repleto +repolho +represa +repudiar +requerer +resenha +resfriar +resgatar +residir +resolver +respeito +ressaca +restante +resumir +retalho +reter +retirar +retomada +retratar +revelar +revisor +revolta +riacho +rica +rigidez +rigoroso +rimar +ringue +risada +risco +risonho +robalo +rochedo +rodada +rodeio +rodovia +roedor +roleta +romano +roncar +rosado +roseira +rosto +rota +roteiro +rotina +rotular +rouco +roupa +roxo +rubro +rugido +rugoso +ruivo +rumo +rupestre +russo +sabor +saciar +sacola +sacudir +sadio +safira +saga +sagrada +saibro +salada +saleiro +salgado +saliva +salpicar +salsicha +saltar +salvador +sambar +samurai +sanar +sanfona +sangue +sanidade +sapato +sarda +sargento +sarjeta +saturar +saudade +saxofone +sazonal +secar +secular +seda +sedento +sediado +sedoso +sedutor +segmento +segredo +segundo +seiva +seleto +selvagem +semanal +semente +senador +senhor +sensual +sentado +separado +sereia +seringa +serra +servo +setembro +setor +sigilo +silhueta +silicone +simetria +simpatia +simular +sinal +sincero +singular +sinopse +sintonia +sirene +siri +situado +soberano +sobra +socorro +sogro +soja +solda +soletrar +solteiro +sombrio +sonata +sondar +sonegar +sonhador +sono +soprano +soquete +sorrir +sorteio +sossego +sotaque +soterrar +sovado +sozinho +suavizar +subida +submerso +subsolo +subtrair +sucata +sucesso +suco +sudeste +sufixo +sugador +sugerir +sujeito +sulfato +sumir +suor +superior +suplicar +suposto +suprimir +surdina +surfista +surpresa +surreal +surtir +suspiro +sustento +tabela +tablete +tabuada +tacho +tagarela +talher +talo +talvez +tamanho +tamborim +tampa +tangente +tanto +tapar +tapioca +tardio +tarefa +tarja +tarraxa +tatuagem +taurino +taxativo +taxista +teatral +tecer +tecido +teclado +tedioso +teia +teimar +telefone +telhado +tempero +tenente +tensor +tentar +termal +terno +terreno +tese +tesoura +testado +teto +textura +texugo +tiara +tigela +tijolo +timbrar +timidez +tingido +tinteiro +tiragem +titular +toalha +tocha +tolerar +tolice +tomada +tomilho +tonel +tontura +topete +tora +torcido +torneio +torque +torrada +torto +tostar +touca +toupeira +toxina +trabalho +tracejar +tradutor +trafegar +trajeto +trama +trancar +trapo +traseiro +tratador +travar +treino +tremer +trepidar +trevo +triagem +tribo +triciclo +tridente +trilogia +trindade +triplo +triturar +triunfal +trocar +trombeta +trova +trunfo +truque +tubular +tucano +tudo +tulipa +tupi +turbo +turma +turquesa +tutelar +tutorial +uivar +umbigo +unha +unidade +uniforme +urologia +urso +urtiga +urubu +usado +usina +usufruir +vacina +vadiar +vagaroso +vaidoso +vala +valente +validade +valores +vantagem +vaqueiro +varanda +vareta +varrer +vascular +vasilha +vassoura +vazar +vazio +veado +vedar +vegetar +veicular +veleiro +velhice +veludo +vencedor +vendaval +venerar +ventre +verbal +verdade +vereador +vergonha +vermelho +verniz +versar +vertente +vespa +vestido +vetorial +viaduto +viagem +viajar +viatura +vibrador +videira +vidraria +viela +viga +vigente +vigiar +vigorar +vilarejo +vinco +vinheta +vinil +violeta +virada +virtude +visitar +visto +vitral +viveiro +vizinho +voador +voar +vogal +volante +voleibol +voltagem +volumoso +vontade +vulto +vuvuzela +xadrez +xarope +xeque +xeretar +xerife +xingar +zangado +zarpar +zebu +zelador +zombar +zoologia +zumbido diff --git a/packages/wordlists/input/lang-zh_cn.txt b/packages/wordlists/input/lang-zh_cn.txt new file mode 100644 index 000000000..b90f1ed85 --- /dev/null +++ b/packages/wordlists/input/lang-zh_cn.txt @@ -0,0 +1,2048 @@ +的 +一 +是 +在 +不 +了 +有 +和 +人 +这 +中 +大 +为 +上 +个 +国 +我 +以 +要 +他 +时 +来 +用 +们 +生 +到 +作 +地 +于 +出 +就 +分 +对 +成 +会 +可 +主 +发 +年 +动 +同 +工 +也 +能 +下 +过 +子 +说 +产 +种 +面 +而 +方 +后 +多 +定 +行 +学 +法 +所 +民 +得 +经 +十 +三 +之 +进 +着 +等 +部 +度 +家 +电 +力 +里 +如 +水 +化 +高 +自 +二 +理 +起 +小 +物 +现 +实 +加 +量 +都 +两 +体 +制 +机 +当 +使 +点 +从 +业 +本 +去 +把 +性 +好 +应 +开 +它 +合 +还 +因 +由 +其 +些 +然 +前 +外 +天 +政 +四 +日 +那 +社 +义 +事 +平 +形 +相 +全 +表 +间 +样 +与 +关 +各 +重 +新 +线 +内 +数 +正 +心 +反 +你 +明 +看 +原 +又 +么 +利 +比 +或 +但 +质 +气 +第 +向 +道 +命 +此 +变 +条 +只 +没 +结 +解 +问 +意 +建 +月 +公 +无 +系 +军 +很 +情 +者 +最 +立 +代 +想 +已 +通 +并 +提 +直 +题 +党 +程 +展 +五 +果 +料 +象 +员 +革 +位 +入 +常 +文 +总 +次 +品 +式 +活 +设 +及 +管 +特 +件 +长 +求 +老 +头 +基 +资 +边 +流 +路 +级 +少 +图 +山 +统 +接 +知 +较 +将 +组 +见 +计 +别 +她 +手 +角 +期 +根 +论 +运 +农 +指 +几 +九 +区 +强 +放 +决 +西 +被 +干 +做 +必 +战 +先 +回 +则 +任 +取 +据 +处 +队 +南 +给 +色 +光 +门 +即 +保 +治 +北 +造 +百 +规 +热 +领 +七 +海 +口 +东 +导 +器 +压 +志 +世 +金 +增 +争 +济 +阶 +油 +思 +术 +极 +交 +受 +联 +什 +认 +六 +共 +权 +收 +证 +改 +清 +美 +再 +采 +转 +更 +单 +风 +切 +打 +白 +教 +速 +花 +带 +安 +场 +身 +车 +例 +真 +务 +具 +万 +每 +目 +至 +达 +走 +积 +示 +议 +声 +报 +斗 +完 +类 +八 +离 +华 +名 +确 +才 +科 +张 +信 +马 +节 +话 +米 +整 +空 +元 +况 +今 +集 +温 +传 +土 +许 +步 +群 +广 +石 +记 +需 +段 +研 +界 +拉 +林 +律 +叫 +且 +究 +观 +越 +织 +装 +影 +算 +低 +持 +音 +众 +书 +布 +复 +容 +儿 +须 +际 +商 +非 +验 +连 +断 +深 +难 +近 +矿 +千 +周 +委 +素 +技 +备 +半 +办 +青 +省 +列 +习 +响 +约 +支 +般 +史 +感 +劳 +便 +团 +往 +酸 +历 +市 +克 +何 +除 +消 +构 +府 +称 +太 +准 +精 +值 +号 +率 +族 +维 +划 +选 +标 +写 +存 +候 +毛 +亲 +快 +效 +斯 +院 +查 +江 +型 +眼 +王 +按 +格 +养 +易 +置 +派 +层 +片 +始 +却 +专 +状 +育 +厂 +京 +识 +适 +属 +圆 +包 +火 +住 +调 +满 +县 +局 +照 +参 +红 +细 +引 +听 +该 +铁 +价 +严 +首 +底 +液 +官 +德 +随 +病 +苏 +失 +尔 +死 +讲 +配 +女 +黄 +推 +显 +谈 +罪 +神 +艺 +呢 +席 +含 +企 +望 +密 +批 +营 +项 +防 +举 +球 +英 +氧 +势 +告 +李 +台 +落 +木 +帮 +轮 +破 +亚 +师 +围 +注 +远 +字 +材 +排 +供 +河 +态 +封 +另 +施 +减 +树 +溶 +怎 +止 +案 +言 +士 +均 +武 +固 +叶 +鱼 +波 +视 +仅 +费 +紧 +爱 +左 +章 +早 +朝 +害 +续 +轻 +服 +试 +食 +充 +兵 +源 +判 +护 +司 +足 +某 +练 +差 +致 +板 +田 +降 +黑 +犯 +负 +击 +范 +继 +兴 +似 +余 +坚 +曲 +输 +修 +故 +城 +夫 +够 +送 +笔 +船 +占 +右 +财 +吃 +富 +春 +职 +觉 +汉 +画 +功 +巴 +跟 +虽 +杂 +飞 +检 +吸 +助 +升 +阳 +互 +初 +创 +抗 +考 +投 +坏 +策 +古 +径 +换 +未 +跑 +留 +钢 +曾 +端 +责 +站 +简 +述 +钱 +副 +尽 +帝 +射 +草 +冲 +承 +独 +令 +限 +阿 +宣 +环 +双 +请 +超 +微 +让 +控 +州 +良 +轴 +找 +否 +纪 +益 +依 +优 +顶 +础 +载 +倒 +房 +突 +坐 +粉 +敌 +略 +客 +袁 +冷 +胜 +绝 +析 +块 +剂 +测 +丝 +协 +诉 +念 +陈 +仍 +罗 +盐 +友 +洋 +错 +苦 +夜 +刑 +移 +频 +逐 +靠 +混 +母 +短 +皮 +终 +聚 +汽 +村 +云 +哪 +既 +距 +卫 +停 +烈 +央 +察 +烧 +迅 +境 +若 +印 +洲 +刻 +括 +激 +孔 +搞 +甚 +室 +待 +核 +校 +散 +侵 +吧 +甲 +游 +久 +菜 +味 +旧 +模 +湖 +货 +损 +预 +阻 +毫 +普 +稳 +乙 +妈 +植 +息 +扩 +银 +语 +挥 +酒 +守 +拿 +序 +纸 +医 +缺 +雨 +吗 +针 +刘 +啊 +急 +唱 +误 +训 +愿 +审 +附 +获 +茶 +鲜 +粮 +斤 +孩 +脱 +硫 +肥 +善 +龙 +演 +父 +渐 +血 +欢 +械 +掌 +歌 +沙 +刚 +攻 +谓 +盾 +讨 +晚 +粒 +乱 +燃 +矛 +乎 +杀 +药 +宁 +鲁 +贵 +钟 +煤 +读 +班 +伯 +香 +介 +迫 +句 +丰 +培 +握 +兰 +担 +弦 +蛋 +沉 +假 +穿 +执 +答 +乐 +谁 +顺 +烟 +缩 +征 +脸 +喜 +松 +脚 +困 +异 +免 +背 +星 +福 +买 +染 +井 +概 +慢 +怕 +磁 +倍 +祖 +皇 +促 +静 +补 +评 +翻 +肉 +践 +尼 +衣 +宽 +扬 +棉 +希 +伤 +操 +垂 +秋 +宜 +氢 +套 +督 +振 +架 +亮 +末 +宪 +庆 +编 +牛 +触 +映 +雷 +销 +诗 +座 +居 +抓 +裂 +胞 +呼 +娘 +景 +威 +绿 +晶 +厚 +盟 +衡 +鸡 +孙 +延 +危 +胶 +屋 +乡 +临 +陆 +顾 +掉 +呀 +灯 +岁 +措 +束 +耐 +剧 +玉 +赵 +跳 +哥 +季 +课 +凯 +胡 +额 +款 +绍 +卷 +齐 +伟 +蒸 +殖 +永 +宗 +苗 +川 +炉 +岩 +弱 +零 +杨 +奏 +沿 +露 +杆 +探 +滑 +镇 +饭 +浓 +航 +怀 +赶 +库 +夺 +伊 +灵 +税 +途 +灭 +赛 +归 +召 +鼓 +播 +盘 +裁 +险 +康 +唯 +录 +菌 +纯 +借 +糖 +盖 +横 +符 +私 +努 +堂 +域 +枪 +润 +幅 +哈 +竟 +熟 +虫 +泽 +脑 +壤 +碳 +欧 +遍 +侧 +寨 +敢 +彻 +虑 +斜 +薄 +庭 +纳 +弹 +饲 +伸 +折 +麦 +湿 +暗 +荷 +瓦 +塞 +床 +筑 +恶 +户 +访 +塔 +奇 +透 +梁 +刀 +旋 +迹 +卡 +氯 +遇 +份 +毒 +泥 +退 +洗 +摆 +灰 +彩 +卖 +耗 +夏 +择 +忙 +铜 +献 +硬 +予 +繁 +圈 +雪 +函 +亦 +抽 +篇 +阵 +阴 +丁 +尺 +追 +堆 +雄 +迎 +泛 +爸 +楼 +避 +谋 +吨 +野 +猪 +旗 +累 +偏 +典 +馆 +索 +秦 +脂 +潮 +爷 +豆 +忽 +托 +惊 +塑 +遗 +愈 +朱 +替 +纤 +粗 +倾 +尚 +痛 +楚 +谢 +奋 +购 +磨 +君 +池 +旁 +碎 +骨 +监 +捕 +弟 +暴 +割 +贯 +殊 +释 +词 +亡 +壁 +顿 +宝 +午 +尘 +闻 +揭 +炮 +残 +冬 +桥 +妇 +警 +综 +招 +吴 +付 +浮 +遭 +徐 +您 +摇 +谷 +赞 +箱 +隔 +订 +男 +吹 +园 +纷 +唐 +败 +宋 +玻 +巨 +耕 +坦 +荣 +闭 +湾 +键 +凡 +驻 +锅 +救 +恩 +剥 +凝 +碱 +齿 +截 +炼 +麻 +纺 +禁 +废 +盛 +版 +缓 +净 +睛 +昌 +婚 +涉 +筒 +嘴 +插 +岸 +朗 +庄 +街 +藏 +姑 +贸 +腐 +奴 +啦 +惯 +乘 +伙 +恢 +匀 +纱 +扎 +辩 +耳 +彪 +臣 +亿 +璃 +抵 +脉 +秀 +萨 +俄 +网 +舞 +店 +喷 +纵 +寸 +汗 +挂 +洪 +贺 +闪 +柬 +爆 +烯 +津 +稻 +墙 +软 +勇 +像 +滚 +厘 +蒙 +芳 +肯 +坡 +柱 +荡 +腿 +仪 +旅 +尾 +轧 +冰 +贡 +登 +黎 +削 +钻 +勒 +逃 +障 +氨 +郭 +峰 +币 +港 +伏 +轨 +亩 +毕 +擦 +莫 +刺 +浪 +秘 +援 +株 +健 +售 +股 +岛 +甘 +泡 +睡 +童 +铸 +汤 +阀 +休 +汇 +舍 +牧 +绕 +炸 +哲 +磷 +绩 +朋 +淡 +尖 +启 +陷 +柴 +呈 +徒 +颜 +泪 +稍 +忘 +泵 +蓝 +拖 +洞 +授 +镜 +辛 +壮 +锋 +贫 +虚 +弯 +摩 +泰 +幼 +廷 +尊 +窗 +纲 +弄 +隶 +疑 +氏 +宫 +姐 +震 +瑞 +怪 +尤 +琴 +循 +描 +膜 +违 +夹 +腰 +缘 +珠 +穷 +森 +枝 +竹 +沟 +催 +绳 +忆 +邦 +剩 +幸 +浆 +栏 +拥 +牙 +贮 +礼 +滤 +钠 +纹 +罢 +拍 +咱 +喊 +袖 +埃 +勤 +罚 +焦 +潜 +伍 +墨 +欲 +缝 +姓 +刊 +饱 +仿 +奖 +铝 +鬼 +丽 +跨 +默 +挖 +链 +扫 +喝 +袋 +炭 +污 +幕 +诸 +弧 +励 +梅 +奶 +洁 +灾 +舟 +鉴 +苯 +讼 +抱 +毁 +懂 +寒 +智 +埔 +寄 +届 +跃 +渡 +挑 +丹 +艰 +贝 +碰 +拔 +爹 +戴 +码 +梦 +芽 +熔 +赤 +渔 +哭 +敬 +颗 +奔 +铅 +仲 +虎 +稀 +妹 +乏 +珍 +申 +桌 +遵 +允 +隆 +螺 +仓 +魏 +锐 +晓 +氮 +兼 +隐 +碍 +赫 +拨 +忠 +肃 +缸 +牵 +抢 +博 +巧 +壳 +兄 +杜 +讯 +诚 +碧 +祥 +柯 +页 +巡 +矩 +悲 +灌 +龄 +伦 +票 +寻 +桂 +铺 +圣 +恐 +恰 +郑 +趣 +抬 +荒 +腾 +贴 +柔 +滴 +猛 +阔 +辆 +妻 +填 +撤 +储 +签 +闹 +扰 +紫 +砂 +递 +戏 +吊 +陶 +伐 +喂 +疗 +瓶 +婆 +抚 +臂 +摸 +忍 +虾 +蜡 +邻 +胸 +巩 +挤 +偶 +弃 +槽 +劲 +乳 +邓 +吉 +仁 +烂 +砖 +租 +乌 +舰 +伴 +瓜 +浅 +丙 +暂 +燥 +橡 +柳 +迷 +暖 +牌 +秧 +胆 +详 +簧 +踏 +瓷 +谱 +呆 +宾 +糊 +洛 +辉 +愤 +竞 +隙 +怒 +粘 +乃 +绪 +肩 +籍 +敏 +涂 +熙 +皆 +侦 +悬 +掘 +享 +纠 +醒 +狂 +锁 +淀 +恨 +牲 +霸 +爬 +赏 +逆 +玩 +陵 +祝 +秒 +浙 +貌 +役 +彼 +悉 +鸭 +趋 +凤 +晨 +畜 +辈 +秩 +卵 +署 +梯 +炎 +滩 +棋 +驱 +筛 +峡 +冒 +啥 +寿 +译 +浸 +泉 +帽 +迟 +硅 +疆 +贷 +漏 +稿 +冠 +嫩 +胁 +芯 +牢 +叛 +蚀 +奥 +鸣 +岭 +羊 +凭 +串 +塘 +绘 +酵 +融 +盆 +锡 +庙 +筹 +冻 +辅 +摄 +袭 +筋 +拒 +僚 +旱 +钾 +鸟 +漆 +沈 +眉 +疏 +添 +棒 +穗 +硝 +韩 +逼 +扭 +侨 +凉 +挺 +碗 +栽 +炒 +杯 +患 +馏 +劝 +豪 +辽 +勃 +鸿 +旦 +吏 +拜 +狗 +埋 +辊 +掩 +饮 +搬 +骂 +辞 +勾 +扣 +估 +蒋 +绒 +雾 +丈 +朵 +姆 +拟 +宇 +辑 +陕 +雕 +偿 +蓄 +崇 +剪 +倡 +厅 +咬 +驶 +薯 +刷 +斥 +番 +赋 +奉 +佛 +浇 +漫 +曼 +扇 +钙 +桃 +扶 +仔 +返 +俗 +亏 +腔 +鞋 +棱 +覆 +框 +悄 +叔 +撞 +骗 +勘 +旺 +沸 +孤 +吐 +孟 +渠 +屈 +疾 +妙 +惜 +仰 +狠 +胀 +谐 +抛 +霉 +桑 +岗 +嘛 +衰 +盗 +渗 +脏 +赖 +涌 +甜 +曹 +阅 +肌 +哩 +厉 +烃 +纬 +毅 +昨 +伪 +症 +煮 +叹 +钉 +搭 +茎 +笼 +酷 +偷 +弓 +锥 +恒 +杰 +坑 +鼻 +翼 +纶 +叙 +狱 +逮 +罐 +络 +棚 +抑 +膨 +蔬 +寺 +骤 +穆 +冶 +枯 +册 +尸 +凸 +绅 +坯 +牺 +焰 +轰 +欣 +晋 +瘦 +御 +锭 +锦 +丧 +旬 +锻 +垄 +搜 +扑 +邀 +亭 +酯 +迈 +舒 +脆 +酶 +闲 +忧 +酚 +顽 +羽 +涨 +卸 +仗 +陪 +辟 +惩 +杭 +姚 +肚 +捉 +飘 +漂 +昆 +欺 +吾 +郎 +烷 +汁 +呵 +饰 +萧 +雅 +邮 +迁 +燕 +撒 +姻 +赴 +宴 +烦 +债 +帐 +斑 +铃 +旨 +醇 +董 +饼 +雏 +姿 +拌 +傅 +腹 +妥 +揉 +贤 +拆 +歪 +葡 +胺 +丢 +浩 +徽 +昂 +垫 +挡 +览 +贪 +慰 +缴 +汪 +慌 +冯 +诺 +姜 +谊 +凶 +劣 +诬 +耀 +昏 +躺 +盈 +骑 +乔 +溪 +丛 +卢 +抹 +闷 +咨 +刮 +驾 +缆 +悟 +摘 +铒 +掷 +颇 +幻 +柄 +惠 +惨 +佳 +仇 +腊 +窝 +涤 +剑 +瞧 +堡 +泼 +葱 +罩 +霍 +捞 +胎 +苍 +滨 +俩 +捅 +湘 +砍 +霞 +邵 +萄 +疯 +淮 +遂 +熊 +粪 +烘 +宿 +档 +戈 +驳 +嫂 +裕 +徙 +箭 +捐 +肠 +撑 +晒 +辨 +殿 +莲 +摊 +搅 +酱 +屏 +疫 +哀 +蔡 +堵 +沫 +皱 +畅 +叠 +阁 +莱 +敲 +辖 +钩 +痕 +坝 +巷 +饿 +祸 +丘 +玄 +溜 +曰 +逻 +彭 +尝 +卿 +妨 +艇 +吞 +韦 +怨 +矮 +歇 diff --git a/packages/wordlists/input/lang-zh_tw.txt b/packages/wordlists/input/lang-zh_tw.txt new file mode 100644 index 000000000..9b0204792 --- /dev/null +++ b/packages/wordlists/input/lang-zh_tw.txt @@ -0,0 +1,2048 @@ +的 +一 +是 +在 +不 +了 +有 +和 +人 +這 +中 +大 +為 +上 +個 +國 +我 +以 +要 +他 +時 +來 +用 +們 +生 +到 +作 +地 +於 +出 +就 +分 +對 +成 +會 +可 +主 +發 +年 +動 +同 +工 +也 +能 +下 +過 +子 +說 +產 +種 +面 +而 +方 +後 +多 +定 +行 +學 +法 +所 +民 +得 +經 +十 +三 +之 +進 +著 +等 +部 +度 +家 +電 +力 +裡 +如 +水 +化 +高 +自 +二 +理 +起 +小 +物 +現 +實 +加 +量 +都 +兩 +體 +制 +機 +當 +使 +點 +從 +業 +本 +去 +把 +性 +好 +應 +開 +它 +合 +還 +因 +由 +其 +些 +然 +前 +外 +天 +政 +四 +日 +那 +社 +義 +事 +平 +形 +相 +全 +表 +間 +樣 +與 +關 +各 +重 +新 +線 +內 +數 +正 +心 +反 +你 +明 +看 +原 +又 +麼 +利 +比 +或 +但 +質 +氣 +第 +向 +道 +命 +此 +變 +條 +只 +沒 +結 +解 +問 +意 +建 +月 +公 +無 +系 +軍 +很 +情 +者 +最 +立 +代 +想 +已 +通 +並 +提 +直 +題 +黨 +程 +展 +五 +果 +料 +象 +員 +革 +位 +入 +常 +文 +總 +次 +品 +式 +活 +設 +及 +管 +特 +件 +長 +求 +老 +頭 +基 +資 +邊 +流 +路 +級 +少 +圖 +山 +統 +接 +知 +較 +將 +組 +見 +計 +別 +她 +手 +角 +期 +根 +論 +運 +農 +指 +幾 +九 +區 +強 +放 +決 +西 +被 +幹 +做 +必 +戰 +先 +回 +則 +任 +取 +據 +處 +隊 +南 +給 +色 +光 +門 +即 +保 +治 +北 +造 +百 +規 +熱 +領 +七 +海 +口 +東 +導 +器 +壓 +志 +世 +金 +增 +爭 +濟 +階 +油 +思 +術 +極 +交 +受 +聯 +什 +認 +六 +共 +權 +收 +證 +改 +清 +美 +再 +採 +轉 +更 +單 +風 +切 +打 +白 +教 +速 +花 +帶 +安 +場 +身 +車 +例 +真 +務 +具 +萬 +每 +目 +至 +達 +走 +積 +示 +議 +聲 +報 +鬥 +完 +類 +八 +離 +華 +名 +確 +才 +科 +張 +信 +馬 +節 +話 +米 +整 +空 +元 +況 +今 +集 +溫 +傳 +土 +許 +步 +群 +廣 +石 +記 +需 +段 +研 +界 +拉 +林 +律 +叫 +且 +究 +觀 +越 +織 +裝 +影 +算 +低 +持 +音 +眾 +書 +布 +复 +容 +兒 +須 +際 +商 +非 +驗 +連 +斷 +深 +難 +近 +礦 +千 +週 +委 +素 +技 +備 +半 +辦 +青 +省 +列 +習 +響 +約 +支 +般 +史 +感 +勞 +便 +團 +往 +酸 +歷 +市 +克 +何 +除 +消 +構 +府 +稱 +太 +準 +精 +值 +號 +率 +族 +維 +劃 +選 +標 +寫 +存 +候 +毛 +親 +快 +效 +斯 +院 +查 +江 +型 +眼 +王 +按 +格 +養 +易 +置 +派 +層 +片 +始 +卻 +專 +狀 +育 +廠 +京 +識 +適 +屬 +圓 +包 +火 +住 +調 +滿 +縣 +局 +照 +參 +紅 +細 +引 +聽 +該 +鐵 +價 +嚴 +首 +底 +液 +官 +德 +隨 +病 +蘇 +失 +爾 +死 +講 +配 +女 +黃 +推 +顯 +談 +罪 +神 +藝 +呢 +席 +含 +企 +望 +密 +批 +營 +項 +防 +舉 +球 +英 +氧 +勢 +告 +李 +台 +落 +木 +幫 +輪 +破 +亞 +師 +圍 +注 +遠 +字 +材 +排 +供 +河 +態 +封 +另 +施 +減 +樹 +溶 +怎 +止 +案 +言 +士 +均 +武 +固 +葉 +魚 +波 +視 +僅 +費 +緊 +愛 +左 +章 +早 +朝 +害 +續 +輕 +服 +試 +食 +充 +兵 +源 +判 +護 +司 +足 +某 +練 +差 +致 +板 +田 +降 +黑 +犯 +負 +擊 +范 +繼 +興 +似 +餘 +堅 +曲 +輸 +修 +故 +城 +夫 +夠 +送 +筆 +船 +佔 +右 +財 +吃 +富 +春 +職 +覺 +漢 +畫 +功 +巴 +跟 +雖 +雜 +飛 +檢 +吸 +助 +昇 +陽 +互 +初 +創 +抗 +考 +投 +壞 +策 +古 +徑 +換 +未 +跑 +留 +鋼 +曾 +端 +責 +站 +簡 +述 +錢 +副 +盡 +帝 +射 +草 +衝 +承 +獨 +令 +限 +阿 +宣 +環 +雙 +請 +超 +微 +讓 +控 +州 +良 +軸 +找 +否 +紀 +益 +依 +優 +頂 +礎 +載 +倒 +房 +突 +坐 +粉 +敵 +略 +客 +袁 +冷 +勝 +絕 +析 +塊 +劑 +測 +絲 +協 +訴 +念 +陳 +仍 +羅 +鹽 +友 +洋 +錯 +苦 +夜 +刑 +移 +頻 +逐 +靠 +混 +母 +短 +皮 +終 +聚 +汽 +村 +雲 +哪 +既 +距 +衛 +停 +烈 +央 +察 +燒 +迅 +境 +若 +印 +洲 +刻 +括 +激 +孔 +搞 +甚 +室 +待 +核 +校 +散 +侵 +吧 +甲 +遊 +久 +菜 +味 +舊 +模 +湖 +貨 +損 +預 +阻 +毫 +普 +穩 +乙 +媽 +植 +息 +擴 +銀 +語 +揮 +酒 +守 +拿 +序 +紙 +醫 +缺 +雨 +嗎 +針 +劉 +啊 +急 +唱 +誤 +訓 +願 +審 +附 +獲 +茶 +鮮 +糧 +斤 +孩 +脫 +硫 +肥 +善 +龍 +演 +父 +漸 +血 +歡 +械 +掌 +歌 +沙 +剛 +攻 +謂 +盾 +討 +晚 +粒 +亂 +燃 +矛 +乎 +殺 +藥 +寧 +魯 +貴 +鐘 +煤 +讀 +班 +伯 +香 +介 +迫 +句 +豐 +培 +握 +蘭 +擔 +弦 +蛋 +沉 +假 +穿 +執 +答 +樂 +誰 +順 +煙 +縮 +徵 +臉 +喜 +松 +腳 +困 +異 +免 +背 +星 +福 +買 +染 +井 +概 +慢 +怕 +磁 +倍 +祖 +皇 +促 +靜 +補 +評 +翻 +肉 +踐 +尼 +衣 +寬 +揚 +棉 +希 +傷 +操 +垂 +秋 +宜 +氫 +套 +督 +振 +架 +亮 +末 +憲 +慶 +編 +牛 +觸 +映 +雷 +銷 +詩 +座 +居 +抓 +裂 +胞 +呼 +娘 +景 +威 +綠 +晶 +厚 +盟 +衡 +雞 +孫 +延 +危 +膠 +屋 +鄉 +臨 +陸 +顧 +掉 +呀 +燈 +歲 +措 +束 +耐 +劇 +玉 +趙 +跳 +哥 +季 +課 +凱 +胡 +額 +款 +紹 +卷 +齊 +偉 +蒸 +殖 +永 +宗 +苗 +川 +爐 +岩 +弱 +零 +楊 +奏 +沿 +露 +桿 +探 +滑 +鎮 +飯 +濃 +航 +懷 +趕 +庫 +奪 +伊 +靈 +稅 +途 +滅 +賽 +歸 +召 +鼓 +播 +盤 +裁 +險 +康 +唯 +錄 +菌 +純 +借 +糖 +蓋 +橫 +符 +私 +努 +堂 +域 +槍 +潤 +幅 +哈 +竟 +熟 +蟲 +澤 +腦 +壤 +碳 +歐 +遍 +側 +寨 +敢 +徹 +慮 +斜 +薄 +庭 +納 +彈 +飼 +伸 +折 +麥 +濕 +暗 +荷 +瓦 +塞 +床 +築 +惡 +戶 +訪 +塔 +奇 +透 +梁 +刀 +旋 +跡 +卡 +氯 +遇 +份 +毒 +泥 +退 +洗 +擺 +灰 +彩 +賣 +耗 +夏 +擇 +忙 +銅 +獻 +硬 +予 +繁 +圈 +雪 +函 +亦 +抽 +篇 +陣 +陰 +丁 +尺 +追 +堆 +雄 +迎 +泛 +爸 +樓 +避 +謀 +噸 +野 +豬 +旗 +累 +偏 +典 +館 +索 +秦 +脂 +潮 +爺 +豆 +忽 +托 +驚 +塑 +遺 +愈 +朱 +替 +纖 +粗 +傾 +尚 +痛 +楚 +謝 +奮 +購 +磨 +君 +池 +旁 +碎 +骨 +監 +捕 +弟 +暴 +割 +貫 +殊 +釋 +詞 +亡 +壁 +頓 +寶 +午 +塵 +聞 +揭 +炮 +殘 +冬 +橋 +婦 +警 +綜 +招 +吳 +付 +浮 +遭 +徐 +您 +搖 +谷 +贊 +箱 +隔 +訂 +男 +吹 +園 +紛 +唐 +敗 +宋 +玻 +巨 +耕 +坦 +榮 +閉 +灣 +鍵 +凡 +駐 +鍋 +救 +恩 +剝 +凝 +鹼 +齒 +截 +煉 +麻 +紡 +禁 +廢 +盛 +版 +緩 +淨 +睛 +昌 +婚 +涉 +筒 +嘴 +插 +岸 +朗 +莊 +街 +藏 +姑 +貿 +腐 +奴 +啦 +慣 +乘 +夥 +恢 +勻 +紗 +扎 +辯 +耳 +彪 +臣 +億 +璃 +抵 +脈 +秀 +薩 +俄 +網 +舞 +店 +噴 +縱 +寸 +汗 +掛 +洪 +賀 +閃 +柬 +爆 +烯 +津 +稻 +牆 +軟 +勇 +像 +滾 +厘 +蒙 +芳 +肯 +坡 +柱 +盪 +腿 +儀 +旅 +尾 +軋 +冰 +貢 +登 +黎 +削 +鑽 +勒 +逃 +障 +氨 +郭 +峰 +幣 +港 +伏 +軌 +畝 +畢 +擦 +莫 +刺 +浪 +秘 +援 +株 +健 +售 +股 +島 +甘 +泡 +睡 +童 +鑄 +湯 +閥 +休 +匯 +舍 +牧 +繞 +炸 +哲 +磷 +績 +朋 +淡 +尖 +啟 +陷 +柴 +呈 +徒 +顏 +淚 +稍 +忘 +泵 +藍 +拖 +洞 +授 +鏡 +辛 +壯 +鋒 +貧 +虛 +彎 +摩 +泰 +幼 +廷 +尊 +窗 +綱 +弄 +隸 +疑 +氏 +宮 +姐 +震 +瑞 +怪 +尤 +琴 +循 +描 +膜 +違 +夾 +腰 +緣 +珠 +窮 +森 +枝 +竹 +溝 +催 +繩 +憶 +邦 +剩 +幸 +漿 +欄 +擁 +牙 +貯 +禮 +濾 +鈉 +紋 +罷 +拍 +咱 +喊 +袖 +埃 +勤 +罰 +焦 +潛 +伍 +墨 +欲 +縫 +姓 +刊 +飽 +仿 +獎 +鋁 +鬼 +麗 +跨 +默 +挖 +鏈 +掃 +喝 +袋 +炭 +污 +幕 +諸 +弧 +勵 +梅 +奶 +潔 +災 +舟 +鑑 +苯 +訟 +抱 +毀 +懂 +寒 +智 +埔 +寄 +屆 +躍 +渡 +挑 +丹 +艱 +貝 +碰 +拔 +爹 +戴 +碼 +夢 +芽 +熔 +赤 +漁 +哭 +敬 +顆 +奔 +鉛 +仲 +虎 +稀 +妹 +乏 +珍 +申 +桌 +遵 +允 +隆 +螺 +倉 +魏 +銳 +曉 +氮 +兼 +隱 +礙 +赫 +撥 +忠 +肅 +缸 +牽 +搶 +博 +巧 +殼 +兄 +杜 +訊 +誠 +碧 +祥 +柯 +頁 +巡 +矩 +悲 +灌 +齡 +倫 +票 +尋 +桂 +鋪 +聖 +恐 +恰 +鄭 +趣 +抬 +荒 +騰 +貼 +柔 +滴 +猛 +闊 +輛 +妻 +填 +撤 +儲 +簽 +鬧 +擾 +紫 +砂 +遞 +戲 +吊 +陶 +伐 +餵 +療 +瓶 +婆 +撫 +臂 +摸 +忍 +蝦 +蠟 +鄰 +胸 +鞏 +擠 +偶 +棄 +槽 +勁 +乳 +鄧 +吉 +仁 +爛 +磚 +租 +烏 +艦 +伴 +瓜 +淺 +丙 +暫 +燥 +橡 +柳 +迷 +暖 +牌 +秧 +膽 +詳 +簧 +踏 +瓷 +譜 +呆 +賓 +糊 +洛 +輝 +憤 +競 +隙 +怒 +粘 +乃 +緒 +肩 +籍 +敏 +塗 +熙 +皆 +偵 +懸 +掘 +享 +糾 +醒 +狂 +鎖 +淀 +恨 +牲 +霸 +爬 +賞 +逆 +玩 +陵 +祝 +秒 +浙 +貌 +役 +彼 +悉 +鴨 +趨 +鳳 +晨 +畜 +輩 +秩 +卵 +署 +梯 +炎 +灘 +棋 +驅 +篩 +峽 +冒 +啥 +壽 +譯 +浸 +泉 +帽 +遲 +矽 +疆 +貸 +漏 +稿 +冠 +嫩 +脅 +芯 +牢 +叛 +蝕 +奧 +鳴 +嶺 +羊 +憑 +串 +塘 +繪 +酵 +融 +盆 +錫 +廟 +籌 +凍 +輔 +攝 +襲 +筋 +拒 +僚 +旱 +鉀 +鳥 +漆 +沈 +眉 +疏 +添 +棒 +穗 +硝 +韓 +逼 +扭 +僑 +涼 +挺 +碗 +栽 +炒 +杯 +患 +餾 +勸 +豪 +遼 +勃 +鴻 +旦 +吏 +拜 +狗 +埋 +輥 +掩 +飲 +搬 +罵 +辭 +勾 +扣 +估 +蔣 +絨 +霧 +丈 +朵 +姆 +擬 +宇 +輯 +陝 +雕 +償 +蓄 +崇 +剪 +倡 +廳 +咬 +駛 +薯 +刷 +斥 +番 +賦 +奉 +佛 +澆 +漫 +曼 +扇 +鈣 +桃 +扶 +仔 +返 +俗 +虧 +腔 +鞋 +棱 +覆 +框 +悄 +叔 +撞 +騙 +勘 +旺 +沸 +孤 +吐 +孟 +渠 +屈 +疾 +妙 +惜 +仰 +狠 +脹 +諧 +拋 +黴 +桑 +崗 +嘛 +衰 +盜 +滲 +臟 +賴 +湧 +甜 +曹 +閱 +肌 +哩 +厲 +烴 +緯 +毅 +昨 +偽 +症 +煮 +嘆 +釘 +搭 +莖 +籠 +酷 +偷 +弓 +錐 +恆 +傑 +坑 +鼻 +翼 +綸 +敘 +獄 +逮 +罐 +絡 +棚 +抑 +膨 +蔬 +寺 +驟 +穆 +冶 +枯 +冊 +屍 +凸 +紳 +坯 +犧 +焰 +轟 +欣 +晉 +瘦 +禦 +錠 +錦 +喪 +旬 +鍛 +壟 +搜 +撲 +邀 +亭 +酯 +邁 +舒 +脆 +酶 +閒 +憂 +酚 +頑 +羽 +漲 +卸 +仗 +陪 +闢 +懲 +杭 +姚 +肚 +捉 +飄 +漂 +昆 +欺 +吾 +郎 +烷 +汁 +呵 +飾 +蕭 +雅 +郵 +遷 +燕 +撒 +姻 +赴 +宴 +煩 +債 +帳 +斑 +鈴 +旨 +醇 +董 +餅 +雛 +姿 +拌 +傅 +腹 +妥 +揉 +賢 +拆 +歪 +葡 +胺 +丟 +浩 +徽 +昂 +墊 +擋 +覽 +貪 +慰 +繳 +汪 +慌 +馮 +諾 +姜 +誼 +兇 +劣 +誣 +耀 +昏 +躺 +盈 +騎 +喬 +溪 +叢 +盧 +抹 +悶 +諮 +刮 +駕 +纜 +悟 +摘 +鉺 +擲 +頗 +幻 +柄 +惠 +慘 +佳 +仇 +臘 +窩 +滌 +劍 +瞧 +堡 +潑 +蔥 +罩 +霍 +撈 +胎 +蒼 +濱 +倆 +捅 +湘 +砍 +霞 +邵 +萄 +瘋 +淮 +遂 +熊 +糞 +烘 +宿 +檔 +戈 +駁 +嫂 +裕 +徙 +箭 +捐 +腸 +撐 +曬 +辨 +殿 +蓮 +攤 +攪 +醬 +屏 +疫 +哀 +蔡 +堵 +沫 +皺 +暢 +疊 +閣 +萊 +敲 +轄 +鉤 +痕 +壩 +巷 +餓 +禍 +丘 +玄 +溜 +曰 +邏 +彭 +嘗 +卿 +妨 +艇 +吞 +韋 +怨 +矮 +歇 diff --git a/packages/wordlists/package.json b/packages/wordlists/package.json new file mode 100644 index 000000000..a5bcc99a1 --- /dev/null +++ b/packages/wordlists/package.json @@ -0,0 +1,38 @@ +{ + "author": "Richard Moore ", + "dependencies": { + "@ethersproject/bytes": "^6.0.0-beta.1", + "@ethersproject/logger": "^6.0.0-beta.1", + "@ethersproject/properties": "^6.0.0-beta.1", + "@ethersproject/strings": "^6.0.0-beta.1" + }, + "description": "BIP-39 Wordlists for ethers.", + "engines" : { "node" : ">=12.17.0" }, + "ethereum": "donations.ethers.eth", + "__exports": { + "./": "./lib/" + }, + "keywords": [ + "Ethereum", + "ethers" + ], + "license": "MIT", + "main": "./lib/index.js", + "name": "@ethersproject/wordlists", + "publishConfig": { + "access": "public", + "tag": "beta" + }, + "repository": { + "directory": "packages/wordlists", + "type": "git", + "url": "git://github.com/ethers-io/ethers.js.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "sideEffects": false, + "type": "module", + "types": "./lib/index.d.ts", + "version": "6.0.0-beta.1" +} diff --git a/packages/wordlists/src.ts/_version.ts b/packages/wordlists/src.ts/_version.ts new file mode 100644 index 000000000..52afe29a3 --- /dev/null +++ b/packages/wordlists/src.ts/_version.ts @@ -0,0 +1 @@ +export const version = "@ethersproject/wordlists@6.0.0-beta.1"; \ No newline at end of file diff --git a/packages/wordlists/src.ts/bit-reader.ts b/packages/wordlists/src.ts/bit-reader.ts new file mode 100644 index 000000000..984a0002c --- /dev/null +++ b/packages/wordlists/src.ts/bit-reader.ts @@ -0,0 +1,31 @@ +const Base64 = ")!@#$%^&*(ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_"; +export function decodeBits(width: number, data: string): Array { + const maxValue = (1 << width) - 1; + const result: Array = [ ]; + let accum = 0, bits = 0, flood = 0; + for (let i = 0; i < data.length; i++) { + + // Accumulate 6 bits of data + accum = ((accum << 6) | Base64.indexOf(data[i])); + bits += 6; + + // While we have enough for a word... + while (bits >= width) { + // ...read the word + const value = (accum >> (bits - width)); + accum &= (1 << (bits - width)) - 1; + bits -= width; + + // A value of 0 indicates we exceeded maxValue, it + // floods over into the next value + if (value === 0) { + flood += maxValue; + } else { + result.push(value + flood); + flood = 0; + } + } + } + + return result; +} diff --git a/packages/wordlists/src.ts/decode-owl.ts b/packages/wordlists/src.ts/decode-owl.ts new file mode 100644 index 000000000..7677b1f73 --- /dev/null +++ b/packages/wordlists/src.ts/decode-owl.ts @@ -0,0 +1,47 @@ + +const subsChrs = " !#$%&'()*+,-./<=>?@[]^_`{|}~"; +const Word = /^[a-z]*$/i; + +function unfold(words: Array, sep: string): Array { + let initial = 97; + return words.reduce((accum, word) => { + if (word === sep) { + initial++; + } else if (word.match(Word)) { + accum.push(String.fromCharCode(initial) + word); + } else { + initial = 97; + accum.push(word); + } + return accum; + }, >[]); +} + +export function decode(data: string, subs: string): Array { + + // Replace all the substitutions with their expanded form + for (let i = subsChrs.length - 1; i >= 0; i--) { + data = data.split(subsChrs[i]).join(subs.substring(2 * i, 2 * i + 2)); + } + + // Get all tle clumps; each suffix, first-increment and second-increment + const clumps: Array = [ ]; + const leftover = data.replace(/(:|([0-9])|([A-Z][a-z]*))/g, (all, item, semi, word) => { + if (semi) { + for (let i = parseInt(semi); i >= 0; i--) { clumps.push(";"); } + } else { + clumps.push(item.toLowerCase()); + } + return ""; + }); + if (leftover) { throw new Error(`leftovers: ${ JSON.stringify(leftover) }`); } + + return unfold(unfold(clumps, ";"), ":"); +} + +export function decodeOwl(data: string): Array { + if (data[0] !== "0") { throw TypeError("unsupported auwl data"); } + return decode( + data.substring(1 + 2 * subsChrs.length), + data.substring(1, 1 + 2 * subsChrs.length)); +} diff --git a/packages/wordlists/src.ts/decode-owla.ts b/packages/wordlists/src.ts/decode-owla.ts new file mode 100644 index 000000000..4ea2a1557 --- /dev/null +++ b/packages/wordlists/src.ts/decode-owla.ts @@ -0,0 +1,27 @@ +import { decodeBits } from "./bit-reader.js"; +import { decodeOwl } from "./decode-owl.js"; + +export function decodeOwlA(data: string, accents: string): Array { + let words = decodeOwl(data).join(","); + + // Inject the accents + accents.split(/,/g).forEach((accent) => { + const match = accent.match(/^([a-z]*)([0-9]+)([0-9])(.*)$/); + if (!match) { throw new Error("internal error parsing accents"); } + + let posOffset = 0; + const positions = decodeBits(parseInt(match[3]), match[4]); + const charCode = parseInt(match[2]); + const regex = new RegExp(`([${ match[1] }])`, "g"); + words = words.replace(regex, (all, letter) => { + const rem = --positions[posOffset]; + if (rem === 0) { + letter = String.fromCharCode(letter.charCodeAt(0), charCode); + posOffset++; + } + return letter; + }); + }); + + return words.split(","); +} diff --git a/packages/wordlists/src.ts/generation/encode-latin.ts b/packages/wordlists/src.ts/generation/encode-latin.ts new file mode 100644 index 000000000..b39e8d6cb --- /dev/null +++ b/packages/wordlists/src.ts/generation/encode-latin.ts @@ -0,0 +1,370 @@ + +// OWL Data Format +// +// The Official WordList data format exported by this encoder +// encodes sorted latin-1 words (letters only) based on the +// fact that sorted words have prefixes with substantial +// overlap. +// +// For example, the words: +// [ Another, Apple, Apricot, Bread ] +// could be folded once with a single special character, such +// as ":" to yield: +// [ nother, pple, pricot, :, read ]. +// The First letter has been removed, but can be inferred by +// starting at A and incrementing to the next letter when ":" +// is encountered. +// +// The fold operation can be repeated for large sets as even within +// each folded set, there is substatial overlap in prefix. With the +// second special symbol ";", we get: +// [ ; x 13, other, :, ple, ricot, :, ; x 18, ead ] +// which can be further compressed by using numbers instead of the +// special character: +// [ 13, other, :, ple, ricot, :, 18, ead ] +// and to keep all values within a single byte, we only allow a +// maximum value of 10 (using 0 through 9 to represent 1 through 10), +// we get: +// [ 9, 2, other, :, ple, ricot, :, 9, 7, ead ] +// and we use camel-case to imply the bounrary, giving the final string: +// "92Other:PleRicot:97Ead" +// +// Once the entire latin-1 set has been collapsed, we use the remaining +// printable characters (except " and \, which require 2 bytes to represent +// in string) to substiture for the most common 2-letter pairs of letters +// in the string. +// +// OWLA Accent Format +// +// OWLA first removes all accents, and encodes that data using the OWL +// data format and encodes the accents as a base-64 series of 6-bit +// packed bits representing the distance from one followed letter to the +// next. +// +// For example, the acute accent in a given language may follow either +// a or e, in which case the follow-set is "ae". Each letter in the entire +// set is indexed, so the set of words with the accents: +// "thisA/ppleDoe/sNotMa/tterToMe/" +// " 1^ 2^ 3^ 4^ 5^ 6^ " <-- follow-set members, ALL a's and e's +// which gives the positions: +// [ 0, 2, 3, 4, 6 ] +// which then reduce to the distances +// [ 0, 2, 1, 1, 2 ] +// each of which fit into a 2-bit value, so this can be encoded as the +// base-64 encoded string: +// 00 10 01 01 10 = 001001 1010xx +// +// The base-64 set used has all number replaced with their +// shifted-counterparts to prevent comflicting with the numbers used in +// the fold operation to indicate the number of ";". + +import fs from "fs"; + +import { id } from "@ethersproject/hash"; + +import { decodeOwl } from "../decode-owl.js"; +import { decodeOwlA } from "../decode-owla.js"; + +const subsChrs = " !#$%&'()*+,-./<=>?@[]^_`{|}~"; + +const Word = /^[a-z'`]*$/i; + +function fold(words: Array, sep: string): Array { + const output: Array = [ ]; + + let initial = 97; + for (const word of words) { + if (word.match(Word)) { + while (initial < word.charCodeAt(0)) { + initial++; + output.push(sep); + } + output.push(word.substring(1)); + } else { + initial = 97; + output.push(word); + } + } + + return output; +} + +function camelcase(words: Array): string { + return words.map((word) => { + if (word.match(Word)) { + return word[0].toUpperCase() + word.substring(1); + } else { + return word; + } + }).join(""); +} + +//let cc = 0, ce = 0; +/* +function getChar(c: string): string { + //if (c === "e") { ce++; } + if (c >= 'a' && c <= 'z') { return c; } + if (c.charCodeAt(1)) { + throw new Error(`bad char: "${ c }"`); + } + //cc++; + return ""; + if (c.charCodeAt(0) === 768) { return "`"; } + if (c.charCodeAt(0) === 769) { return "'"; } + if (c.charCodeAt(0) === 771) { return "~"; } + throw new Error(`Unsupported character: ${ c } (${ c.charCodeAt(0) }, ${ c.charCodeAt(1) })`); +} +function mangle(text: string): { word: string, special: string } { + const result: Array = [ ]; + for (let i = 0; i < text.length; i++) { + const c = getChar(text[i]); + result.push(c); + } + + const word = result.join(""); + if (word[1] >= 'a' && word[1] <= 'z') { return { word, special: " " }; } + return { word: word[0] + word.substring(2), special: word[1] }; +} +*/ +/* + Store: [ accent ][ targets ][ rle data; base64-tail ] + ` ae 3, 100 = (63, 37), 15 + ~ n 63, 64 = (63, 1), 27 +*/ + +const Base64 = ")!@#$%^&*(ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_"; +export class BitWriter { + readonly width: number; + readonly #data: Array; + + #bitLength: number; + + constructor(width: number) { + this.width = width; + this.#data = [ ]; + this.#bitLength = 0; + } + + write(value: number): void { + const maxValue = ((1 << this.width) - 1); + while (value > maxValue) { + this.#data.push(0); + this.#bitLength += this.width; + value -= maxValue; + } + this.#data.push(value); + this.#bitLength += this.width; + } + + get length(): number { + return 1 + Math.trunc((this.#bitLength + 5) / 6); + } + + get data(): string { + let result = String(this.width); + let bits = 0; + let accum = 0; + + const data = this.#data.slice(); + let bitMod = this.#bitLength % 6; + while (bitMod !== 0 && bitMod < 6) { + data.push(0); + bitMod += this.width; + } + + for (const value of data) { + accum <<= this.width; + accum |= value; + bits += this.width; + + if (bits < 6) { continue; } + + result += Base64[accum >> (bits - 6)]; + bits -= 6; + accum &= ((1 << bits) - 1); + } + + if (result.length !== this.length) { + throw new Error(`Hmm: ${ this.length } ${ result.length } ${ result }`); + } + return result; + } +} + +export interface AccentSet { + accent: number; + follows: string; + positions: Array; + positionsLength: number; + positionData: string; + positionDataLength: number; +}; + +function sorted(text: string): string { + const letters = text.split(""); + letters.sort(); + return letters.join(""); +} + +// if (c.charCodeAt(0) === 768) { return "`"; } +// if (c.charCodeAt(0) === 769) { return "'"; } +// if (c.charCodeAt(0) === 771) { return "~"; } +export function extractAccents(words: Array): { accents: Array, words: Array } { + + // Build a list that maps accents to the letters it can follow + const followsMap: Map = new Map(); + for (const word of words) { + for (let i = 0; i < word.length; i++) { + const c = word[i]; + if (c >= 'a' && c <= 'z') { continue; } + + // Make sure this positions and codepoint make sense + if (c.charCodeAt(1)) { throw new Error(`unsupported codepoint: "${ c }"`); } + if (i === 0) { throw new Error(`unmatched accent: ${ c }`); } + + const ac = c.charCodeAt(0), lastLetter = word[i - 1];; + const follows = (followsMap.get(ac) || ""); + if (follows.indexOf(lastLetter) === -1) { + followsMap.set(ac, sorted(follows + lastLetter)); + } + } + } + + // Build the positions of each follow-set for those accents + const positionsMap: Map> = new Map(); + for (const [ accent, follows ] of followsMap) { + let count = 0; + for (const word of words) { + for (let i = 0; i < word.length; i++) { + const c = word[i], ac = c.charCodeAt(0); + if (follows.indexOf(c) >= 0) { count++; } + if (ac === accent) { + const pos = positionsMap.get(ac) || [ ]; + pos.push(count); + positionsMap.set(ac, pos); + } + } + } + } + + const accents: Array = [ ]; + for (const [ accent, follows ] of followsMap) { + let last = -1; + const positions = (positionsMap.get(accent) || [ ]).map((value, index) => { + const delta = value - last; + last = value; + if (index === 0) { return value; } + return delta; + }); + + // Find the best encoding of the position data + let positionData = ""; + for (let i = 2; i < 7; i++) { + const bitWriter = new BitWriter(i); + for (const p of positions) { bitWriter.write(p); } + if (positionData === "" || bitWriter.length < positionData.length) { + positionData = bitWriter.data; + } + } + const positionsLength = positions.length; + const positionDataLength = positionData.length; + + accents.push({ accent, follows, positions, positionsLength, positionData, positionDataLength }); + } + + words = words.map((word) => { + let result = ""; + for (let i = 0; i < word.length; i++) { + const c = word[i]; + if (c >= 'a' && c <= 'z') { result += c } + } + return result; + }); + + return { accents, words }; +} + +// Encode Official WordList +export function encodeOwl(words: Array): { subs: string, data: string } { + + // Fold the sorted words by indicating delta for the first 2 letters + let data = camelcase(fold(fold(words, ":"), ";")); + + // Replace semicolons with counts (e.g. ";;;" with "3") + data = data.replace(/(;+)/g, (all, semis) => { + let result = ""; + while (semis.length) { + let count = semis.length; + if (count > 10) { count = 10; } + result += String(count - 1); + semis = semis.substring(count); + } + return result; + }); + + // Finds the best option for a shortcut replacement using the + // unused ascii7 characters + function findBest(): string { + const tally: Record = { }; + const l = 2; + for (let i = l; i < data.length; i++) { + const key = data.substring(i - l, i); + tally[key] = (tally[key] || 0) + 1; + } + + const sorted: Array<{ text: string, count: number, save: number }> = Object.keys(tally).map((text) => { + return { text, count: tally[text], save: (tally[text] * (text.length - 1)) } + }); + sorted.sort((a, b) => (b.save - a.save)); + + return sorted[0].text; + } + + // Make substitutions + let subs = ""; + for (let i = 0; i < subsChrs.length; i++) { + const n = subsChrs[i], o = findBest(); + subs += o; + data = data.split(o).join(n); + } + + return { data, subs }; +} + +// Returns either: +// - OWL data for accent-free latin-1: { data, accentds: "" } +// - OWLA data for accented latin-1: { data, accents } +function encodeWords(_words: Array): { data: string, accents: string } { + const { accents, words } = extractAccents(_words); + const { data, subs } = encodeOwl(words); + const accentData = accents.map(({ accent, follows, positionData }) => { + return `${ follows }${ accent }${ positionData }`; + }).join(","); + + return { + data: `0${ subs }${data}`, + accents: accentData + }; +} + +// CLI +const content = fs.readFileSync(process.argv[2]).toString(); +const words = content.split("\n").filter(Boolean); +const { data, accents } = encodeWords(words); + +if (accents) { + const rec = decodeOwlA(data, accents); + console.log("DATA: ", JSON.stringify(data)); + console.log("ACCENTS: ", JSON.stringify(accents)); + console.log("LENGTH: ", data.length); + console.log("CHECKSUM: ", id(content)); + console.log("RATIO: ", Math.trunc(100 * data.length / content.length) + "%"); + if (rec.join("\n") !== words.join("\n")) { throw new Error("no match!"); } +} else { + const rec = decodeOwl(data); + console.log("DATA: ", JSON.stringify(data)); + console.log("LENGTH: ", data.length); + console.log("CHECKSUM: ", id(content)); + console.log("RATIO: ", Math.trunc(100 * data.length / content.length) + "%"); + if (rec.join("\n") !== words.join("\n")) { throw new Error("no match!"); } +} diff --git a/packages/wordlists/src.ts/index.ts b/packages/wordlists/src.ts/index.ts new file mode 100644 index 000000000..776e4f86e --- /dev/null +++ b/packages/wordlists/src.ts/index.ts @@ -0,0 +1,7 @@ + +export { Wordlist } from "./wordlist.js"; +export { langEn, LangEn } from "./lang-en.js"; +export { wordlists } from "./wordlists.js"; + +export { WordlistOwl } from "./wordlist-owl.js"; +export { WordlistOwlA } from "./wordlist-owla.js"; diff --git a/packages/wordlists/src.ts/lang-cz.ts b/packages/wordlists/src.ts/lang-cz.ts new file mode 100644 index 000000000..debf6fedc --- /dev/null +++ b/packages/wordlists/src.ts/lang-cz.ts @@ -0,0 +1,10 @@ +import { WordlistOwl } from "./wordlist-owl.js"; + +const words = "0itatkastcenaovo$taouleraeki&chor*teci%enbalodaeladet'!Chn=0Di#%E%^1Resa2Rese3CeT'#0EjKohol0Pu)%0A&sDul#Ekdo)Ke)Ti#Ul|3}aOgan%0FaltI$@tPi,%TmaTronom0LasL{i#Ol0Tobus4Yl:B#}R'?TaUb_U/!U^U+Ur!Xer2A^v#Ambo,An#AtrEp)Ike)KoLohOnzOskevUn{#Usin#Z^Zy2Bl.Bn|})D _D#D'aF{Jar(Kv?LdokLvaN^NkrRzaTikVolZola3D+tL.T'#0Ukot:PartRev&3DrDu+J/JnLaLerLkemLn?N.Nn(N'#NtrumNzZ(2O&2KolivUv!4It_N(0Dn(Ke)KrPot0Ak~AlIkRkot2Kli$a:L-oRe[T_Tum1E,1B!a}'#Cib_Fic Fla%KlKr{Mokr!PreseRbyS#T-tiv3Kob,zKt|O^P]mSkSp+jV`]Vo/2AhaOuhoUhopis1Es0BroByt-C@t}ut DnesH+dHo^H,JemJn?Kl`KolaKtAzeDolObn(OgerieOzdSn(T Z(2B@}'noD-HaH'#S SnoT(0Oj?Or>2Nam :9O]gOnomie0EktronIpsa0AilIseO%P!ie2Izo^O/aOpejOs2EjEn%K<)Kymo0Ike)0FR&S]Zky3StOhOup(T!Ub.U/o)0AtO)Yz0IsOjivoOut0Bl.Boj}DinyDl!Dno)D|Jn(KejLin#L#LubMo+N [No,%RalR^RizontRkoRliv>RmonRn.RoskopR$voSpo^St.T'(U[UfUp!Us#V<2Ad[An?Av(Az^Bo+kD.D]D(N-Ob#Oma^OtOu^Oz@St#Ub(Yz!2B@(B~D[KotMrS aSto)0Ozd2Bn(D,ntGie&M&Sterik:2Yl#3Ned2O&0Uze0Un a0F-%Fla%KasoOva%Sp-%Tern{Vali^Ve$N)rRmarkRoSanSnoT#VD+Dn!_HlanKotL@L oMn(NomP?S{erV Zd>Zero3NakNdyNo/Sk,Sto)Trn?Zva3En|1Gurt5R):Bar{B_Bin{}&D{Did]HanJakJu)KaoKtusLam aLhotyLibrLn(Me,MkolivM&Ni[lNoeNtB#BlihaBylaC*rH=J@>KosKtejlLapsLe^LizeLoMandoMe)MikMn!aMo,MpasMun aN!N%ptNd?N>NfeseNgresN.NkursN)ktNzervaPan>PieP~Pr'#Rb_R-tSt#T_T+)T*lUk!Up_&Us-Uz]VbojZaZMe+cMivoOcanOkOni#Op OupaOv#T-Uh`]Up?Ut(Vin#Y/+Yp)Y$alYt2Dlan#FrJn(KlaLaj^Li/L#Lom{Ltu,NaPodivuRtRzV`]:B,d<})nDn(IkKom>M_aMpaN'#S?SoStu,Tin#V.3B#CkdyD@Dn?D'#Dv.G@^GieG,%H%Hk(H~KtvarNo/odNtil#P@#Pid]T`]T>TmoTokruhVhartV a%Vobok3B,}ot#DojedDsk(H'.Jav>L-M{#NieN#No+umStop`T.T|5Bi$aDivodGi#GopedKal aK{Mc|P!aPu/RdSosTrU^lUhU#Usk!V>3Tiv(1Cer&CiferMpSkSt,%0I%2RaRi#S.:DamD]Gi$rHagonJ{-J _J< aKakK'?Kr_aL[L.L|Lv?Min#Nd+NkoRn(SakrSkotSopu$T?Tri#Tur aZan>ZivoZl Zur#2Lo[0}anikD a%D'.LasaL*nNtol#TlaTo^TrZe,3G,%H~Hu+K.KrofonL@>Lim{rL(Mi#Nc'&Ni[rNom{Nul(S#StrX|2Ad(HaH'.OkS!Uv 1I/Ohem0BilCn(D_#Dl [HylaKroL-ulaM@t#Nar/aNoklN$rumNt|NzunSazSkytStTiva%T<#Ty#U/aUdr(Zai#Z-Zol2AmKevTvolaZ{Zut(0T _1DrcF]nL!MieN?S{Ta%ZeumZi#nt3Sliv>0Da:B*r!}yt!Da%Dbyt-DhozDobroDpisHlasHn!Hodi+H,d Iv aJedn*Ji$oJm=K]n Kon>Krm LevoMaz!Mluv Nom{rOkoOpakO$roP`!PevnoPln P~Pos+dPr(oRod RubyRy/]S` S-!S+poSt!TolikV@-Vr/VzdR&Ru[RysSahSluhaS)r!UvVazVin VodVyk+Yv!_Z<0AsElEn Hl` Ho)H,&It~0BojByt}odCiz Ebr!Esl!Evzd!EzvaH`%Hod J{JinudKazK*p LivLu#Ml#Oln(P`PisPl=PLivoLu[Mf+tMls-N@#Ni#N&N|N$voNtof+Pri#Rke)RodieR)Ru#Ry[Se#Siv aSt_#T@tTro&V*kZnehtZ*r-3C#DagogJs-K]LotonNal)Ndr-NzeRiskopRoStr(Tar^T?Tro+jVn.Xeso3Ani$aHaJav?K+KnikL.Ln(Lul#Nze)Pe)S!_Sto+Tev&Vn?V'ar2A%n)Ak!Am@Ane)A$i#At Avid]AzE/Em@oEn)EsEtivoEv_Iv!N NoO/aOd.Om[OutUkYn2Bav Byt}odC Ctiv>D!D%n Deps!Dh+dDiv Dkl`Dman DnikDo[Dpo,D,zD$!aDvodDzimEzieHan#Hnut#H'S*d SpoluS)vaSud-SypTahT#nT+skTom-T,vaTupaTvo,U#zUtoUzdroVahaVidlaVlakVozVr/V$!VykVzde/Zd,vZem-Zn!-ZAp<-AseAv^IncipKnoObud O%ntoOdejOfeseOh,Oj-tO]m Omi+Onik!Op`OrokOs[OtonOut-OvazS#v#St@Udk(UtV-VohOvodTruh0Actvo0Ber)}DlKav>Kl.Kr+LtMpaNcP@SaSin#St.T|Ty#3Rami^SkT_::C-}otDia%Dn?DonFtGbyKe)K'.M@oMp*/NdeRa/R aS'&StrTo+$Zan%Zid]3Ag|Ak%CeptDaktMizd!Mo)N #Rdin#San#T_ Z[Z@?0Or0H|1B,n#CeseD`]Dim@tD]Hn!Jm=Ke,K)Kun^KvojeM@oNoRvisS` Sho,SkokSl!St,SuvSyp!T[T.Tk!T~Trv!VerZ&m2O^R~0FonLn?R#Rot-RupTua%1AfandrAliskoAnz@AutEptikIcaL`[L@?LoLuzO[O#nOroRip)RzUp.V(Vr&0Abi#Adid]An.A$Avn(Ed|Ep>EvaEz.IbI&Izn?OnOup-OvoU/UhaUn%Up#Za0A,gdE)&Il$voL*vaOgR`RkRt#Ut-Ysl0AdAhaOb0Bo)}aD'#KolP#TvaUbojUc Ud%UhlasUl`Um,kUp,vaUsedUtokUvis{0Al'&As _IsLavOd-Oj@>OluOnzOvn!P@StUb1An?Ar(aAti#Av[EhnoEz#OdolaO+kOpaOrnoOup!Ra/ResRh~RomRu&Ud&Upn?VolYk0Bj-tBtropy}arD(KnoNd!N=Rik!aR'.0AhAl$voEtrAt[Az-Is+It-Obo^Odid]Or#Rab2Kav#KotN-N'>P!Pk(R'(S_T(:B+t#Bu+H*nJemnoJfunJgaJ Jn(Kti#Mh+MponNc|N>NkerPe)V@.Z!_3}ni#HdyKut.LefonMno)Nd@%Ni$aNU/l Uhl?UsV!2DyH~H(Nd,Ri$aR&jZemsko0ArohOr[Rd(Rz2GrKev:0Oh(OzeR!R*s-RusYt'&0HoTiv(0Iv 3R` 1Edn!I$ M=0Az!_Lidn Lon Otv Roj 0I%I)Ov 0Yv`]0Av IfR*s 1Al Oln Oz'#3D,v ElEn.L.N!:GonL/aL*nNaN^lNil#RanRhanyR|1ElkuHod0Ova0DroGe)%J%Lbl*dL{rhL _LmocLry[Nk'Ran^RzeS_#SkrzeSn?SpoduS)Ter.Ver#3B,%}rDeoh,D.D+LaN?S{Tal aZeZ #0Ezd0L`Us0Aj#AkAs>EvoHk(IvN'#Oup!1Uc|Uk0DaDiv(Doz&kD$voJ@skyJ&JskoLantL[L LnoSk'#Zid]Z'&0Ravo1Ab>A%tAhA)Ba}o+kH!StvaTu+0Ad T*p Tup0Ip4Bav Br!}|D!D,Fot H+d!H~Hod H,d Hub Jasn J{Jm=K]p Kon!L-!Maz!Mez Miz{Mys+tNe/!Nik!Nut P`!Pl! P,v Pu$ Raz R'n!Rv!Sl' SokoS)v Su~Syp!Tas Tes!Tr! Vi~Vol!Vrh_Zdob Zn!0AduBud }op DJ{Ji$ K+p!K*p Lep Mez Mot!Mys+tNe/!Nik!Pl! Poj Ps!Raz S)v Su~Taj Temn Tk~Ujm=Val Ve+tVin Vol!Vrt!Zvon 0Av RusuUd|Yt-1A+#ArmaAtn(IvoOb RojVihYm`]0L@.ManM.Pt!Z`uZdola2At Lt~Lubo#Ot' Ru[0MaMn?0Emn 0Lam!Oum!R!#Umav#0AtoEh#O[OmO$Ozvyk0Ap|ArAt-IjeIz{Ocn Odr!Rzl.Ut|0AkAl(Am@!Ovu0B,z Tav Ub-Ufa+0Lod Omal RavaR( Rud#Rvu1A^An C`]N (NoOv&Y/l Zav(1I/aR! 0B'.Br0Ed~EnkuEs_aOnR!Uk'odYk"; +const checksum = "0x25f44555f4af25b51a711136e1c7d6e50ce9f8917d39d6b1f076b2bb4d2fac1a"; + +export class LangCz extends WordlistOwl { + constructor() { super("cz", words, checksum); } +} + +export const langCz = new LangCz(); diff --git a/packages/wordlists/src.ts/lang-en.ts b/packages/wordlists/src.ts/lang-en.ts new file mode 100644 index 000000000..9fa27bc0d --- /dev/null +++ b/packages/wordlists/src.ts/lang-en.ts @@ -0,0 +1,10 @@ +import { WordlistOwl } from "./wordlist-owl.js"; + +const words = "0erleonalorenseinceregesticitStanvetearctssi#ch2Athck&tneLl0And#Il.yLeOutO=S|S%b/ra@SurdU'0Ce[Cid|CountCu'Hie=IdOu,-Qui*Ro[TT]T%T*[Tu$0AptDD-tD*[Ju,M.UltV<)Vi)0Rob-0FairF%dRaid0A(EEntRee0Ead0MRRp%tS!_rmBumCoholErtI&LLeyLowMo,O}PhaReadySoT Ways0A>urAz(gOngOuntU'd0Aly,Ch%Ci|G G!GryIm$K!Noun)Nu$O` Sw T&naTiqueXietyY1ArtOlogyPe?P!Pro=Ril1ChCt-EaEnaGueMMedM%MyOundR<+Re,Ri=RowTTefa@Ti,Tw%k0KPe@SaultSetSi,SumeThma0H!>OmTa{T&dT.udeTra@0Ct]D.Gu,NtTh%ToTumn0Era+OcadoOid0AkeA*AyEsomeFulKw?d0Is:ByChel%C#D+GL<)Lc#y~MbooN_{Ad!AftAmA}AshAt AwlAzyEamEd.EekEwI{etImeIspIt-OpO[Ou^OwdUci$UelUi'Umb!Un^UshYY,$2BeLtu*PPbo?dRiousRr|Rta(R=Sh]/omTe3C!:DMa+MpN)Ng R(gShUght WnY3AlBa>BrisCadeCemb CideCl(eC%a>C*a'ErF&'F(eFyG*eLayLiv M3AgramAlAm#dAryCeE'lEtFf G.$Gn.yLemmaNn NosaurRe@RtSag*eScov Sea'ShSmi[S%d Splay/<)V tVideV%)Zzy5Ct%Cum|G~Lph(Ma(Na>NkeyN%OrSeUb!Ve_ftAg#AmaA,-AwEamE[IftIllInkIpI=OpUmY2CkMbNeR(g/T^Ty1Arf1Nam-:G G!RlyRnR`Sily/Sy1HoOlogyOnomy0GeItUca>1F%t0G1GhtTh 2BowD E@r-EgSe0B?kBodyBra)Er+Ot]PloyPow Pty0Ab!A@DD![D%'EmyErgyF%)Ga+G(eH<)JoyLi,OughR-hRollSu*T Ti*TryVelope1Isode0U$Uip0AA'OdeOs]R%Upt0CapeSayS&)Ta>0Ern$H-s1Id&)IlOkeOl=1A@Amp!Ce[Ch<+C.eCludeCu'Ecu>Erci'Hau,Hib.I!I,ItOt-PM&'Mu}Pa@Po'Pro=Pul'0ChCludeComeC*a'DexD-a>Do%Du,ryFN Noc|PutQuirySSue0Em1Ory:CketGu?RZz3AlousAns~yWel9BInKeUr}yY5D+I)MpNg!Ni%Nk/:Ng?oo3EnEpT^upY3CkDD}yNdNgdomSsTT^&TeTt&Wi4EeIfeO{Ow:BBelB%Dd DyKeMpNgua+PtopR+T T(UghUndryVaWWnWsu.Y Zy3Ad AfArnA=Ctu*FtGG$G&dIsu*M#NdNg`NsOp?dSs#Tt Vel3ArB tyBr?yC&'FeFtGhtKeMbM.NkOnQuid/Tt!VeZ?d5AdAnB, C$CkG-NelyNgOpTt yUdUn+VeY$5CkyGga+Mb N?N^Xury3R-s:Ch(eDG-G}tIdIlInJ%KeMm$NNa+Nda>NgoNs]Nu$P!Rb!R^Rg(R(eRketRria+SkSs/ T^T i$ThTrixTt XimumZe3AdowAnAsu*AtCh<-D$DiaLodyLtMb M%yNt]NuRcyR+R.RryShSsa+T$Thod3Dd!DnightLk~]M-NdNimumN%Nu>Rac!Rr%S ySs/akeXXedXtu*5Bi!DelDifyMM|N.%NkeyN, N`OnR$ReRn(gSqu.oTh T]T%Unta(U'VeVie5ChFf(LeLtiplySc!SeumShroomS-/Tu$3Self/ yTh:I=MePk(Rrow/yT]Tu*3ArCkEdGati=G!@I` PhewR=/TTw%kUtr$V WsXt3CeGht5B!I'M(eeOd!Rm$R`SeTab!TeTh(gTi)VelW5C!?Mb R'T:K0EyJe@Li+Scu*S =Ta(Vious0CurEAyEa'Ed+U{UgUn+2EmEtIntL?LeLi)NdNyOlPul?Rt]S.]Ssib!/TatoTt yV tyWd W _@i)Ai'Ed-tEf Epa*Es|EttyEv|I)IdeIm?yIntI%.yIs#Iva>IzeOb!mO)[Odu)Of.OgramOje@Omo>OofOp tyOsp O>@OudOvide2Bl-Dd(g~LpL'Mpk(N^PilPpyR^a'R.yRpo'R'ShTZz!3Ramid:99Al.yAntumArt E,]I{ItIzO>:Bb.Cco#CeCkD?DioIlInI'~yMpN^NdomN+PidReTeTh V&WZ%3AdyAlAs#BelBuildC$lCei=CipeC%dCyc!Du)F!@F%mFu'G]G*tGul?Je@LaxLea'LiefLyMa(Memb M(dMo=Nd NewNtOp&PairPeatPla)P%tQui*ScueSemb!Si,Sour)Sp#'SultTi*T*atTurnUn]Ve$ViewW?d2Y`m0BBb#CeChDeD+F!GhtGidNgOtPp!SkTu$V$V 5AdA,BotBu,CketM<)OfOkieOmSeTa>UghUndU>Y$5Bb DeGLeNNwayR$:DDd!D}[FeIlLadLm#L#LtLu>MeMp!NdTisfyToshiU)Usa+VeY1A!AnA*Att E}HemeHoolI&)I[%sOrp]OutRapRe&RiptRub1AAr^As#AtC#dC*tCt]Cur.yEdEkGm|Le@~M(?Ni%N'Nt&)RiesRvi)Ss]Tt!TupV&_dowAftAllowA*EdEllEriffIeldIftI}IpIv O{OeOotOpOrtOuld O=RimpRugUff!Y0Bl(gCkDeE+GhtGnL|Lk~yLv Mil?Mp!N)NgR&/ Tua>XZe1A>Et^IIllInIrtUll0AbAmEepEnd I)IdeIghtImOgAyEakEelEmEpE*oI{IllIngO{Oma^O}OolOryO=Ra>gyReetRikeR#gRugg!Ud|UffUmb!Y!0Bje@Bm.BwayC)[ChDd&Ff G?G+,ItMm NNnyN'tP PplyP*meReRfa)R+Rpri'RroundR=ySpe@/a(1AllowAmpApArmE?EetIftImIngIt^Ord1MbolMptomRup/em:B!Ck!GIlL|LkNkPeR+tSk/eTtooXi3A^Am~NNGradeHoldOnP Set1BOng::Rd3Ar~ow9UUngU`:3BraRo9NeO"; +const checksum = "0x3c8acc1e7b08d8e76f9fda015ef48dc8c710a73cb7e0f77b2c18a9b5a7adde60"; + +export class LangEn extends WordlistOwl { + constructor() { super("en", words, checksum); } +} + +export const langEn = new LangEn(); diff --git a/packages/wordlists/src.ts/lang-es.ts b/packages/wordlists/src.ts/lang-es.ts new file mode 100644 index 000000000..e2fa5ea9b --- /dev/null +++ b/packages/wordlists/src.ts/lang-es.ts @@ -0,0 +1,11 @@ +import { WordlistOwlA } from "./wordlist-owla.js"; + +const words = "0arertoiotadonoaRteirroenaNonaLsolocoiliaralaorrenadaChoN$n0A>Dom,EjaI!#Oga&O'Or#RazoR*Ue=U<0Ab Adem@CeLe%OmoRa!RozUn0DazD$GeLaM,#S,)T^0AlAnceA+EEl]`E`EstruzI.I<2ErU{U'0Af[nArO)Uc Uf_Ul:BaB^|eH@IleJ Lanz/c.LdeMbuN>Nd-oRb(>RnizR+Scu]S#nSu[Tal]T!@T*Tu%UlZ 3BeBid/=S SoSt@3|oEnNgo2An>OqueUsa2ABi`BoCaCi`DaDegaIn//!oLsaMb-{dNi#N}saiRdeRr SqueTeTinVe{Zal2AvoAzoEchaEveIl=In>IsaOcaOmaOnceO)UjaUs>U#2CeoCleE'EyFan{F.HoIt_L#Rbuj(l(+Sc TacaZ.:Bal=BezaBi`B[CaoDav!D,aErFeI{ImanJaJ.LLam Lc$L&Li{dLleLm/^LvoMaMb$Mel=Mi'Mp}c!Nd?Nel-gu+Nic-#N-.ObaOsPazPi%nPo)Pt Puch((b.RcelRe%Rg(i'RneRpe%R+R%SaS>S!oSpaS#rT^ceT_U{lUsaZo3Bol]D!D+Ld/eb_LoAmpuAnc]ApaAr]I>Is)IvoOqueOzaUle%Up 0Cl.EgoE=EnEr#F[G +M->NeN%P_sR>Rue]SneTaU{d2Am^AnA+AseAveI,)ImaInica2B_Cc~|i'Ci`CoDigoDoF_G!He)JinJoL/ch/eg$Lg Lin/l LmoLum`Mba)M!Mi{Mo&Mpr-deNej}g-oc!Nsej}t PaPi(az.Rba%RchoR&nR.(r!S!SmosS%2AneoAt!E Ec!Ei&EmaIaIm,Ip%IsisOmoOnicaOque%U&Uz2Ad+Ar#At+BoBr*| aEl=En#Er{Es%EvaId Lebr/p/#Mb_Mpl*N-e%O%P.Pul( R$Se'Sf[zVaVi'5BleCeL^Ming}N Ra&Rm*RAu%EchaOrO%U*UjoU^2B@CaGa%G.L$Lle#N&Rm(+Rtun(z SaTo2AcaA'AsaAtisAveIe%Il=IpeIsI#OG Gu!aJaMb_Ng}^Nr((mig('St?Yo5E>ElgaEr%ENgl-$Nt Pit!R S#V,?Zg :7Lo5A]:B$C$C[DoD+nG #GrimaGu`I>M!Mi`Mp --ch-gos%NzaPizRgoRvaStimaTaTexT*U_lV Zo3AlCc~|eC#rErG~Gumb_Ja'Ngu-#NaOnOp &S~TalT[VeY,{3B!%dB+C^D!Di EnzoGaG!oMaMi)M.Mp$NceN&Ne-go)N}t!`Qui&SoS%T!aT$T+2AgaAmaAn#AveEg En Ev Or Ov!Uv@2BoC~CoCu[GicaG+MbrizM}jaTe5|aC*G J}-esPaSt+ToZ:Ce%|oD!aD_Du+Est+F@G@GoIzL{dLe%Ll/oMaMboMutN>N&Nej Ng-iquiNj N}Re(f?Rg,Ri&RmolR+nR)sRzoSaSc aSivoT T!@TizTrizXimoY^Z^ca3|aDal]D$Du]J?]J^L,/.M^i-^NsajeN)NuRca&R,gueRi#SS.TaT!To&T+Zc]3E&ElEmb+G/Lag+Lit Ll.M}-!}im}u#OpeR SaS!@S?SmoTadTo5|?aC~DaDe=HoJ LdeL!Li'M,#Mi- c-ed-j-#NoRad(d!Re'R*R+Rs(%lScaStr TivoV!V?Zo5|oD EbleE]Er)Est[G_J!L/e%L%N&Nec(alRoScu=SeoSgoSicaS=:C C~D IpeRanj(izRr SalTalTivoTu[lUseaValVeVi{d3C$Ct G Goc$G+OnRv$ToUt+V V!a3|oDoEb]E#NezNoTi&Vel5Bleza|eMin(i(m()TaTic@Va#Ve]V$5BeCaCleoD?=DoE[EveEzLoM!oTr@:Sis0EC~E[In On!T TicaUes#1Ac~A&rAlBi%CaD,EjaGa'G@Gul=I,)Ig,Il]OQues%Uga0Ad@Cu+Ez'OT[0O'Ro1EjaU=1I&Ige'0En)0O':C#D_El]Gi`GoIsJ oLabr/>Le%Li&Lm/om/p NNalNi>Nt!-ue=PaPelP?]Que)R Rcel(edR*RoRpa&RqueR[foR)S SeoS~SoS%TaT$Tr@UsaU%VoYa<3A#nCa&C!a|oDalD*G IneL L{'Le/ig+LlejoLoLuc--s N.OnOrPi'Que'R(ch(d!Rez(f?Ri>Rl(mizEgun%Em$EnsaE|!oD^Eb=Er%Es#Lg/*Lm.LpoLrNd*N%P #Pet*PoN{PaP!oSaScaSt+T 5BiB^DoE{G*I&In/e%LoMboM^Ptu[TaTi`:Ba&B!B$BleC GazG[&L/&L!oL*Lm.L.Ls/#LudLv Mb-c~Ndi-e Ng_Ni{dN}#PoQueRdin()nSt_TanU`Xof.3Cc~CoC_#C%DGu*IsL=LvaMa`M?l-d-Re'Rg*S#T?:Ba>BiqueB]BuCoC#JoL L>L,#Ll/.Ma'Mb^Ng}quePaPe)P@P.Qu?l(deRe(if(je%RotR+R%TuajeU+ZaZ.3At+|oC]CnicaJa&J!Ji&L/efo'MaM^Mp=NazNd!N!NisNRmi'Rnur(+rSisSo+StigoT!aX#Z3B$Bu+nEmpoEn{Er[EPoR(.TanT!eTu=Za5Al]B?=C Ci'DoG/&M N}#P PeQueRaxR!oRm,%RneoRoRpe&R_RS!Xi>2AbajoAc#rA!Afi>AgoAjeAmoAnceA#AumaAz EbolEguaEin%EnEp EsIbuIgoIpaIs)IunfoOfeoOmpaOn>OpaO)OzoU>Ue'Ufa2B!@BoEr#MbaM^NelNic(bin(ismoR'T^:0Ic 9C!a0B[l0I{dIrIv! = null; + +function hex(word: string) { + return hexlify(toUtf8Bytes(word)); +} + +const KiYoKu = "0xe3818de38284e3818f"; +const KyoKu = "0xe3818de38283e3818f" + +function toString(data: Array): string { + return toUtf8String(new Uint8Array(data)); +} + +function loadWords(): Array { + if (_wordlist !== null) { return _wordlist; } + + const wordlist = []; + + // Transforms for normalizing (sort is a not quite UTF-8) + const transform: { [key: string]: string | boolean } = {}; + + // Delete the diacritic marks + transform[toString([227, 130, 154])] = false; + transform[toString([227, 130, 153])] = false; + + // Some simple transforms that sort out most of the order + transform[toString([227, 130, 133])] = toString([227, 130, 134]); + transform[toString([227, 129, 163])] = toString([227, 129, 164]); + transform[toString([227, 130, 131])] = toString([227, 130, 132]); + transform[toString([227, 130, 135])] = toString([227, 130, 136]); + + + // Normalize words using the transform + function normalize(word: string) { + let result = ""; + for (let i = 0; i < word.length; i++) { + let kana = word[i]; + const target = transform[kana]; + if (target === false) { continue; } + if (target) { kana = target; } + result += kana; + } + return result; + } + + // Sort how the Japanese list is sorted + function sortJapanese(a: string, b: string) { + a = normalize(a); + b = normalize(b); + if (a < b) { return -1; } + if (a > b) { return 1; } + return 0; + } + + // Load all the words + for (let length = 3; length <= 9; length++) { + const d = data[length - 3]; + for (let offset = 0; offset < d.length; offset += length) { + const word = []; + for (let i = 0; i < length; i++) { + const k = mapping.indexOf(d[offset + i]); + word.push(227); + word.push((k & 0x40) ? 130: 129); + word.push((k & 0x3f) + 128); + } + wordlist.push(toString(word)); + } + } + wordlist.sort(sortJapanese); + + // For some reason kyoku and kiyoku are flipped in node (!!). + // The order SHOULD be: + // - kyoku + // - kiyoku + + // This should ignore "if", but that doesn't work here?? + /* c8 ignore start */ + if (hex(wordlist[442]) === KiYoKu && hex(wordlist[443]) === KyoKu) { + const tmp = wordlist[442]; + wordlist[442] = wordlist[443]; + wordlist[443] = tmp; + } + /* c8 ignore stop */ + + // Verify the computed list matches the official list + /* istanbul ignore if */ + const checksum = id(wordlist.join("\n") + "\n"); + /* c8 ignore start */ + if (checksum !== "0xcb36b09e6baa935787fd762ce65e80b0c6a8dabdfbc3a7f86ac0e2c4fd111600") { + throw new Error("BIP39 Wordlist for ja (Japanese) FAILED"); + } + /* c8 ignore stop */ + + _wordlist = wordlist; + + return wordlist; +} + +class LangJa extends Wordlist { + constructor() { super("ja"); } + + getWord(index: number): string { + const words = loadWords(); + if (index < 0 || index >= words.length) { + logger.throwArgumentError(`invalid word index: ${ index }`, "index", index); + } + return words[index]; + } + + getWordIndex(word: string): number { + return loadWords().indexOf(word); + } + + split(mnemonic: string): Array { + //logger.assertNormalize(); + return mnemonic.split(/(?:\u3000| )+/g); + } + + join(words: Array): string { + return words.join("\u3000"); + } +} + +export const langJa = new LangJa(); diff --git a/packages/wordlists/src.ts/lang-ko.ts b/packages/wordlists/src.ts/lang-ko.ts new file mode 100644 index 000000000..f2b1a4a3f --- /dev/null +++ b/packages/wordlists/src.ts/lang-ko.ts @@ -0,0 +1,84 @@ +import { id } from "@ethersproject/hash"; +import { toUtf8String } from "@ethersproject/strings"; + +import { logger } from "./logger.js"; +import { Wordlist } from "./wordlist.js"; + + +const data = [ + "OYAa", + "ATAZoATBl3ATCTrATCl8ATDloATGg3ATHT8ATJT8ATJl3ATLlvATLn4ATMT8ATMX8ATMboATMgoAToLbAToMTATrHgATvHnAT3AnAT3JbAT3MTAT8DbAT8JTAT8LmAT8MYAT8MbAT#LnAUHT8AUHZvAUJXrAUJX8AULnrAXJnvAXLUoAXLgvAXMn6AXRg3AXrMbAX3JTAX3QbAYLn3AZLgvAZrSUAZvAcAZ8AaAZ8AbAZ8AnAZ8HnAZ8LgAZ8MYAZ8MgAZ8OnAaAboAaDTrAaFTrAaJTrAaJboAaLVoAaMXvAaOl8AaSeoAbAUoAbAg8AbAl4AbGnrAbMT8AbMXrAbMn4AbQb8AbSV8AbvRlAb8AUAb8AnAb8HgAb8JTAb8NTAb8RbAcGboAcLnvAcMT8AcMX8AcSToAcrAaAcrFnAc8AbAc8MgAfGgrAfHboAfJnvAfLV8AfLkoAfMT8AfMnoAfQb8AfScrAfSgrAgAZ8AgFl3AgGX8AgHZvAgHgrAgJXoAgJX8AgJboAgLZoAgLn4AgOX8AgoATAgoAnAgoCUAgoJgAgoLXAgoMYAgoSeAgrDUAgrJTAhrFnAhrLjAhrQgAjAgoAjJnrAkMX8AkOnoAlCTvAlCV8AlClvAlFg4AlFl6AlFn3AloSnAlrAXAlrAfAlrFUAlrFbAlrGgAlrOXAlvKnAlvMTAl3AbAl3MnAnATrAnAcrAnCZ3AnCl8AnDg8AnFboAnFl3AnHX4AnHbrAnHgrAnIl3AnJgvAnLXoAnLX4AnLbrAnLgrAnLhrAnMXoAnMgrAnOn3AnSbrAnSeoAnvLnAn3OnCTGgvCTSlvCTvAUCTvKnCTvNTCT3CZCT3GUCT3MTCT8HnCUCZrCULf8CULnvCU3HnCU3JUCY6NUCbDb8CbFZoCbLnrCboOTCboScCbrFnCbvLnCb8AgCb8HgCb$LnCkLfoClBn3CloDUDTHT8DTLl3DTSU8DTrAaDTrLXDTrLjDTrOYDTrOgDTvFXDTvFnDT3HUDT3LfDUCT9DUDT4DUFVoDUFV8DUFkoDUGgrDUJnrDULl8DUMT8DUMXrDUMX4DUMg8DUOUoDUOgvDUOg8DUSToDUSZ8DbDXoDbDgoDbGT8DbJn3DbLg3DbLn4DbMXrDbMg8DbOToDboJXGTClvGTDT8GTFZrGTLVoGTLlvGTLl3GTMg8GTOTvGTSlrGToCUGTrDgGTrJYGTrScGTtLnGTvAnGTvQgGUCZrGUDTvGUFZoGUHXrGULnvGUMT8GUoMgGXoLnGXrMXGXrMnGXvFnGYLnvGZOnvGZvOnGZ8LaGZ8LmGbAl3GbDYvGbDlrGbHX3GbJl4GbLV8GbLn3GbMn4GboJTGboRfGbvFUGb3GUGb4JnGgDX3GgFl$GgJlrGgLX6GgLZoGgLf8GgOXoGgrAgGgrJXGgrMYGgrScGgvATGgvOYGnAgoGnJgvGnLZoGnLg3GnLnrGnQn8GnSbrGnrMgHTClvHTDToHTFT3HTQT8HToJTHToJgHTrDUHTrMnHTvFYHTvRfHT8MnHT8SUHUAZ8HUBb4HUDTvHUoMYHXFl6HXJX6HXQlrHXrAUHXrMnHXrSbHXvFYHXvKXHX3LjHX3MeHYvQlHZrScHZvDbHbAcrHbFT3HbFl3HbJT8HbLTrHbMT8HbMXrHbMbrHbQb8HbSX3HboDbHboJTHbrFUHbrHgHbrJTHb8JTHb8MnHb8QgHgAlrHgDT3HgGgrHgHgrHgJTrHgJT8HgLX@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!Ln$CTGXMnCToLZ4CTrHT8CT3JTrCT3RZrCT#GTvCU6GgvCU8Db8CU8GZrCU8HT8CboLl3CbrGgrCbrMU8Cb8DT3Cb8GnrCb8LX4Cb8MT8Cb8ObrCgrGgvCgrKX4Cl8FZoDTrAbvDTrDboDTrGT6DTrJgrDTrMX3DTrRZrDTrRg8DTvAVvDTvFZoDT3DT8DT3Ln3DT4HZrDT4MT8DT8AlrDT8MT8DUAkGbDUDbJnDYLnQlDbDUOYDbMTAnDbMXSnDboAT3DboFn4DboLnvDj6JTrGTCgFTGTGgFnGTJTMnGTLnPlGToJT8GTrCT3GTrLVoGTrLnvGTrMX3GTrMboGTvKl3GZClFnGZrDT3GZ8DTrGZ8FZ8GZ8MXvGZ8On8GZ8ST3GbCnQXGbMbFnGboFboGboJg3GboMXoGb3JTvGb3JboGb3Mn6Gb3Qb8GgDXLjGgMnAUGgrDloGgrHX4GgrSToGgvAXrGgvAZvGgvFbrGgvLl3GgvMnvGnDnLXGnrATrGnrMboGnuLl3HTATMnHTAgCnHTCTCTHTrGTvHTrHTvHTrJX8HTrLl8HTrMT8HTrMgoHTrOTrHTuOn3HTvAZrHTvDTvHTvGboHTvJU8HTvLl3HTvMXrHTvQb4HT4GT6HT4JT8HT4Jb#HT8Al3HT8GZrHT8GgrHT8HX4HT8Jb8HT8JnoHT8LTrHT8LgvHT8SToHT8SV8HUoJUoHUoJX8HUoLnrHXrLZoHXvAl3HX3LnrHX4FkvHX4LhrHX4MXoHX4OnoHZrAZ8HZrDb8HZrGZ8HZrJnrHZvGZ8HZvLnvHZ8JnvHZ8LhrHbCXJlHbMTAnHboJl4HbpLl3HbrJX8HbrLnrHbrMnvHbvRYrHgoSTrHgrFV8HgrGZ8HgrJXoHgrRnvHgvBb!HgvGTrHgvHX4HgvHn!HgvLTrHgvSU8HnDnLbHnFbJbHnvDn8Hn6GgvHn!BTvJTCTLnJTQgFnJTrAnvJTrLX4JTrOUoJTvFn3JTvLnrJTvNToJT3AgoJT3Jn4JT3LhvJT3ObrJT8AcrJT8Al3JT8JT8JT8JnoJT8LX4JT8LnrJT8MX3JT8Rg3JT8Sc8JUoBTvJU8AToJU8GZ8JU8GgvJU8JTrJU8JXrJU8JnrJU8LnvJU8ScvJXHnJlJXrGgvJXrJU8JXrLhrJXrMT8JXrMXrJXrQUoJXvCTvJXvGZ8JXvGgrJXvQT8JX8Ab8JX8DT8JX8GZ8JX8HZvJX8LnrJX8MT8JX8MXoJX8MnvJX8ST3JYGnCTJbAkGbJbCTAnJbLTAcJboDT3JboLb6JbrAnvJbrCn3JbrDl8JbrGboJbrIZoJbrJnvJbrMnvJbrQb4Jb8RZrJeAbAnJgJnFbJgScAnJgrATrJgvHZ8JgvMn4JlJlFbJlLiQXJlLjOnJlRbOlJlvNXoJlvRl3Jl4AcrJl8AUoJl8MnrJnFnMlJnHgGbJnoDT8JnoFV8JnoGgvJnoIT8JnoQToJnoRg3JnrCZ3JnrGgrJnrHTvJnrLf8JnrOX8JnvAT3JnvFZoJnvGT8JnvJl4JnvMT8JnvMX8JnvOXrJnvPX6JnvSX3JnvSZrJn3MT8Jn3MX8Jn3RTrLTATKnLTJnLTLTMXKnLTRTQlLToGb8LTrAZ8LTrCZ8LTrDb8LTrHT8LT3PX6LT4FZoLT$CTvLT$GgrLUvHX3LVoATrLVoAgoLVoJboLVoMX3LVoRg3LV8CZ3LV8FZoLV8GTvLXrDXoLXrFbrLXvAgvLXvFlrLXvLl3LXvRn6LX4Mb8LX8GT8LYCXMnLYrMnrLZoSTvLZrAZvLZrAloLZrFToLZrJXvLZrJboLZrJl4LZrLnrLZrMT8LZrOgvLZrRnvLZrST4LZvMX8LZvSlvLZ8AgoLZ8CT3LZ8JT8LZ8LV8LZ8LZoLZ8Lg8LZ8SV8LZ8SbrLZ$HT8LZ$Mn4La6CTvLbFbMnLbRYFTLbSnFZLboJT8LbrAT9LbrGb3LbrQb8LcrJX8LcrMXrLerHTvLerJbrLerNboLgrDb8LgrGZ8LgrHTrLgrMXrLgrSU8LgvJTrLgvLl3Lg6Ll3LhrLnrLhrMT8LhvAl4LiLnQXLkoAgrLkoJT8LkoJn4LlrSU8Ll3FZoLl3HTrLl3JX8Ll3JnoLl3LToLmLeFbLnDUFbLnLVAnLnrATrLnrAZoLnrAb8LnrAlrLnrGgvLnrJU8LnrLZrLnrLhrLnrMb8LnrOXrLnrSZ8LnvAb4LnvDTrLnvDl8LnvHTrLnvHbrLnvJT8LnvJU8LnvJbrLnvLhvLnvMX8LnvMb8LnvNnoLnvSU8Ln3Al3Ln4FZoLn4GT6Ln4JgvLn4LhrLn4MT8Ln4SToMToCZrMToJX8MToLX4MToLf8MToRg3MTrEloMTvGb6MT3BTrMT3Lb6MT8AcrMT8AgrMT8GZrMT8JnoMT8LnrMT8MX3MUOUAnMXAbFnMXoAloMXoJX8MXoLf8MXoLl8MXrAb8MXrDTvMXrGT8MXrGgrMXrHTrMXrLf8MXrMU8MXrOXvMXrQb8MXvGT8MXvHTrMXvLVoMX3AX3MX3Jn3MX3LhrMX3MX3MX4AlrMX4OboMX8GTvMX8GZrMX8GgrMX8JT8MX8JX8MX8LhrMX8MT8MYDUFbMYMgDbMbGnFfMbvLX4MbvLl3Mb8Mb8Mb8ST4MgGXCnMg8ATrMg8AgoMg8CZrMg8DTrMg8DboMg8HTrMg8JgrMg8LT8MloJXoMl8AhrMl8JT8MnLgAUMnoJXrMnoLX4MnoLhrMnoMT8MnrAl4MnrDb8MnrOTvMnrOgvMnrQb8MnrSU8MnvGgrMnvHZ8Mn3MToMn4DTrMn4LTrMn4Mg8NnBXAnOTFTFnOToAToOTrGgvOTrJX8OT3JXoOT6MTrOT8GgrOT8HTpOT8MToOUoHT8OUoJT8OUoLn3OXrAgoOXrDg8OXrMT8OXvSToOX6CTvOX8CZrOX8OgrOb6HgvOb8AToOb8MT8OcvLZ8OgvAlrOgvHTvOgvJTrOgvJnrOgvLZrOgvLn4OgvMT8OgvRTrOg8AZoOg8DbvOnrOXoOnvJn4OnvLhvOnvRTrOn3GgoOn3JnvOn6JbvOn8OTrPTGYFTPbBnFnPbGnDnPgDYQTPlrAnvPlrETvPlrLnvPlrMXvPlvFX4QTMTAnQTrJU8QYCnJlQYJlQlQbGTQbQb8JnrQb8LZoQb8LnvQb8MT8Qb8Ml8Qb8ST4QloAl4QloHZvQloJX8QloMn8QnJZOlRTrAZvRTrDTrRTvJn4RTvLhvRT4Jb8RZrAZrRZ8AkrRZ8JU8RZ8LV8RZ8LnvRbJlQXRg3GboRg3MnvRg8AZ8Rg8JboRg8Jl4RnLTCbRnvFl3RnvQb8SToAl4SToCZrSToFZoSToHXrSToJU8SToJgvSToJl4SToLhrSToMX3STrAlvSTrCT9STrCgrSTrGgrSTrHXrSTrHboSTrJnoSTrNboSTvLnrST4AZoST8Ab8ST8JT8SUoJn3SU6HZ#SU6JTvSU8Db8SU8HboSU8LgrSV8JT8SZrAcrSZrAl3SZrJT8SZrJnvSZrMT8SZvLUoSZ4FZoSZ8JnoSZ8RZrScoLnrScoMT8ScoMX8ScrAT4ScrAZ8ScrLZ8ScrLkvScvDb8ScvLf8ScvNToSgrFZrShvKnrSloHUoSloLnrSlrMXoSl8HgrSmrJUoSn3BX6", + "ATFlOn3ATLgrDYAT4MTAnAT8LTMnAYJnRTrAbGgJnrAbLV8LnAbvNTAnAeFbLg3AgOYMXoAlQbFboAnDboAfAnJgoJTBToDgAnBUJbAl3BboDUAnCTDlvLnCTFTrSnCYoQTLnDTwAbAnDUDTrSnDUHgHgrDX8LXFnDbJXAcrETvLTLnGTFTQbrGTMnGToGT3DUFbGUJlPX3GbQg8LnGboJbFnGb3GgAYGgAg8ScGgMbAXrGgvAbAnGnJTLnvGnvATFgHTDT6ATHTrDlJnHYLnMn8HZrSbJTHZ8LTFnHbFTJUoHgSeMT8HgrLjAnHgvAbAnHlFUrDlHnDgvAnHnHTFT3HnQTGnrJTAaMXvJTGbCn3JTOgrAnJXvAXMnJbMg8SnJbMnRg3Jb8LTMnJnAl3OnJnGYrQlJnJlQY3LTDlCn3LTJjLg3LTLgvFXLTMg3GTLV8HUOgLXFZLg3LXNXrMnLX8QXFnLX9AlMYLYLXPXrLZAbJU8LZDUJU8LZMXrSnLZ$AgFnLaPXrDULbFYrMnLbMn8LXLboJgJgLeFbLg3LgLZrSnLgOYAgoLhrRnJlLkCTrSnLkOnLhrLnFX%AYLnFZoJXLnHTvJbLnLloAbMTATLf8MTHgJn3MTMXrAXMT3MTFnMUITvFnMXFX%AYMXMXvFbMXrFTDbMYAcMX3MbLf8SnMb8JbFnMgMXrMTMgvAXFnMgvGgCmMnAloSnMnFnJTrOXvMXSnOX8HTMnObJT8ScObLZFl3ObMXCZoPTLgrQXPUFnoQXPU3RXJlPX3RkQXPbrJXQlPlrJbFnQUAhrDbQXGnCXvQYLnHlvQbLfLnvRTOgvJbRXJYrQlRYLnrQlRbLnrQlRlFT8JlRlFnrQXSTClCn3STHTrAnSTLZQlrSTMnGTrSToHgGbSTrGTDnSTvGXCnST3HgFbSU3HXAXSbAnJn3SbFT8LnScLfLnv", + "AT3JgJX8AT8FZoSnAT8JgFV8AT8LhrDbAZ8JT8DbAb8GgLhrAb8SkLnvAe8MT8SnAlMYJXLVAl3GYDTvAl3LfLnvBUDTvLl3CTOn3HTrCT3DUGgrCU8MT8AbCbFTrJUoCgrDb8MTDTLV8JX8DTLnLXQlDT8LZrSnDUQb8FZ8DUST4JnvDb8ScOUoDj6GbJl4GTLfCYMlGToAXvFnGboAXvLnGgAcrJn3GgvFnSToGnLf8JnvGn#HTDToHTLnFXJlHTvATFToHTvHTDToHTvMTAgoHT3STClvHT4AlFl6HT8HTDToHUoDgJTrHUoScMX3HbRZrMXoHboJg8LTHgDb8JTrHgMToLf8HgvLnLnoHnHn3HT4Hn6MgvAnJTJU8ScvJT3AaQT8JT8HTrAnJXrRg8AnJbAloMXoJbrATFToJbvMnoSnJgDb6GgvJgDb8MXoJgSX3JU8JguATFToJlPYLnQlJlQkDnLbJlQlFYJlJl8Lf8OTJnCTFnLbJnLTHXMnJnLXGXCnJnoFfRg3JnrMYRg3Jn3HgFl3KT8Dg8LnLTRlFnPTLTvPbLbvLVoSbrCZLXMY6HT3LXNU7DlrLXNXDTATLX8DX8LnLZDb8JU8LZMnoLhrLZSToJU8LZrLaLnrLZvJn3SnLZ8LhrSnLaJnoMT8LbFlrHTvLbrFTLnrLbvATLlvLb6OTFn3LcLnJZOlLeAT6Mn4LeJT3ObrLg6LXFlrLhrJg8LnLhvDlPX4LhvLfLnvLj6JTFT3LnFbrMXoLnQluCTvLnrQXCY6LnvLfLnvLnvMgLnvLnvSeLf8MTMbrJn3MT3JgST3MT8AnATrMT8LULnrMUMToCZrMUScvLf8MXoDT8SnMX6ATFToMX8AXMT8MX8FkMT8MX8HTrDUMX8ScoSnMYJT6CTvMgAcrMXoMg8SToAfMlvAXLg3MnFl3AnvOT3AnFl3OUoATHT8OU3RnLXrOXrOXrSnObPbvFn6Og8HgrSnOg8OX8DbPTvAgoJgPU3RYLnrPXrDnJZrPb8CTGgvPlrLTDlvPlvFUJnoQUvFXrQlQeMnoAl3QlrQlrSnRTFTrJUoSTDlLiLXSTFg6HT3STJgoMn4STrFTJTrSTrLZFl3ST4FnMXoSUrDlHUoScvHTvSnSfLkvMXo", + "AUoAcrMXoAZ8HboAg8AbOg6ATFgAg8AloMXoAl3AT8JTrAl8MX8MXoCT3SToJU8Cl8Db8MXoDT8HgrATrDboOT8MXoGTOTrATMnGT8LhrAZ8GnvFnGnQXHToGgvAcrHTvAXvLl3HbrAZoMXoHgBlFXLg3HgMnFXrSnHgrSb8JUoHn6HT8LgvITvATrJUoJUoLZrRnvJU8HT8Jb8JXvFX8QT8JXvLToJTrJYrQnGnQXJgrJnoATrJnoJU8ScvJnvMnvMXoLTCTLgrJXLTJlRTvQlLbRnJlQYvLbrMb8LnvLbvFn3RnoLdCVSTGZrLeSTvGXCnLg3MnoLn3MToLlrETvMT8SToAl3MbrDU6GTvMb8LX4LhrPlrLXGXCnSToLf8Rg3STrDb8LTrSTvLTHXMnSb3RYLnMnSgOg6ATFg", + "HUDlGnrQXrJTrHgLnrAcJYMb8DULc8LTvFgGnCk3Mg8JbAnLX4QYvFYHnMXrRUoJnGnvFnRlvFTJlQnoSTrBXHXrLYSUJgLfoMT8Se8DTrHbDb", + "AbDl8SToJU8An3RbAb8ST8DUSTrGnrAgoLbFU6Db8LTrMg8AaHT8Jb8ObDl8SToJU8Pb3RlvFYoJl" +] + +const codes = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*" + +function getHangul(code: number): string { + if (code >= 40) { + code = code + 168 - 40; + } else if (code >= 19) { + code = code + 97 - 19; + } + + return toUtf8String(new Uint8Array([ 225, (code >> 6) + 132, (code & 0x3f) + 128])); +} + +let _wordlist: null | Array = null; + +function loadWords(): Array { + if (_wordlist != null) { return _wordlist; } + + const wordlist: Array = [ ]; + + data.forEach((data, length) => { + length += 4; + for (let i = 0; i < data.length; i += length) { + let word = ""; + for (let j = 0; j < length; j++) { + word += getHangul(codes.indexOf(data[i + j])); + } + wordlist.push(word) + } + }); + + wordlist.sort(); + + // Verify the computed list matches the official list + /* istanbul ignore if */ + const checksum = id(wordlist.join("\n") + "\n"); + /* c8 ignore start */ + if (checksum !== "0xf9eddeace9c5d3da9c93cf7d3cd38f6a13ed3affb933259ae865714e8a3ae71a") { + throw new Error("BIP39 Wordlist for ko (Korean) FAILED"); + } + /* c8 ignore stop */ + + _wordlist = wordlist; + + return wordlist; +} + + +class LangKo extends Wordlist { + constructor() { + super("ko"); + } + + getWord(index: number): string { + const words = loadWords(); + if (index < 0 || index >= words.length) { + logger.throwArgumentError(`invalid word index: ${ index }`, "index", index); + } + return words[index]; + } + + getWordIndex(word: string): number { + return loadWords().indexOf(word); + } +} + +export const langKo = new LangKo(); diff --git a/packages/wordlists/src.ts/lang-pt.ts b/packages/wordlists/src.ts/lang-pt.ts new file mode 100644 index 000000000..07807c96a --- /dev/null +++ b/packages/wordlists/src.ts/lang-pt.ts @@ -0,0 +1,10 @@ +import { WordlistOwl } from "./wordlist-owl.js"; + +const words = "0arad!ototealirertainrasoent hoandoaR#riareha!aroele'oronul0Aca%AixoAl A%rDuz'El]Er$IsmoO$ Rum S-&T(i&TigoVo[=0F&.Il#P' S?S* So&/Sun$Tr&0Ac#Adu+Al/A[f E End(Er_EuIng'Ir?IvoOl{oRac Revi=RizU&Um0Di$rM-.R>o+TismoT|@Tu 0Ali An%Ar@Ent&Es,I?Is Ul,1Ila1Ar E=Ei%Ulejo:B BosaC&]uCh `C@GagemI+c>~/Se#S)n%Ta)Te=rTidaTomTuc Unil]3B(IjoIr^IsebolLd!eLezaLgaLisc Ndi$Ng&aNz(RimbauRl*d>_Sou_XigaZ(_3CoCu=En&Foc&Furc G|naLhe%Mest[Mo$rOlog@OmboOsf(aPol Rr-$Scoi$Sne$SpoSsex$TolaZ _2Ind#OcoOque 2A$BagemC#CejoChec]Ico.L^LetimL]LoMb{oNdeNecoNi)Rb~h>d>e&R+c]V*oXe?2AncoAsaAvezaEuIgaIl/Inc OaOchu+Onze O$Uxo2C]DismoF LeRacoScaS$Z*a:Bimb Rn{oRpe%R['>)zRv&/SacoScaSeb[S%loS~oT a)Tiv UleUs?U%l V&oV(na3BolaDil]G}]Lebr L~ Nou+N,N%ioRc Rr#R%'oRvejaTimV^2Aco)Al{aAm#Ap^ArmeAticeAveEfeEg^E'oEqueIco%If[In`oOc&/Ov(UmboU.Uva0CatrizCl}eD!eD['aEn%Gcui$Rurg@T 2A[zaE_Ic OneUbe2A=Ag'Ba@B($rBr C^El/Ent_E,Gum`oIb'IfaIo%L L{aLh(Lid'Lme@L}oLunaM<=Mb* M-.MitivaMov(MplexoMumNc]N=rNec.Nfu,Ng` Nhec(Njug Nsum'Nt+$Nvi%Op( P{oPi?PoQue%lRagemRdi&Rne)R}h>p|&R[ioR%joRuj>voSs-oS%laT}e%U_UveVilZ*]2A%+AvoEcheE=rEmeErEspoI^Im*&Io~oIseItic Os)UaUz{o2B+m SafioSbo.Sc<,S-/Sfi#Sgas%Sigu&SlizeSmam SovaSpesaS)queSvi T&h T-$rT} Tri$UsaV(Vi=Vot#Z-a3Ag+maAle$Da)Fu,Gi.Lat#Lu-%M*u'Nast@Nh{oOceseRe$Sc[)Sf ceSp oSque%Ssip S)n%T?UrnoV(,Vi,rV~g Z(5Br?L|i=M?M*#NativoNz`>m-%Rs&SagemUr#U$r2EnagemIbleOg @2El EndeE$PloQues><%Vi=,:1Lod'O Olog@0Ific It&Uc#1Ei$Etiv 3E.1Ab| Eg(Ei$rEncoEv?Im* Ogi 0B goBol#Br~/Buti=EndaErg'Is,rPat@P-/P*#Polg P[goPurr Ul?0CaixeC-#Ch-%C}t_Deus Doss Faix Fei%FimGaj#G-/Glob Gom#G+x Gu@Jo La.Qu<$Raiz Rol#Rug SaioSe^S*oSop#T<$Te#Tid!eT|.Tr^T~/V(g Vi#Volv(XameX($Xof[Xu$1Id(me0Uip 0E$Gui=Ra)VaVil]0Bopeu0Acu Ap| AsivoEntu&Id-%Olu'1Ag(oAl Am* A$Aus$Ces,Ci.Clam Ecu.EmploIb'Ig-%On( Pof>p>tu+T@T|V|i)X*aZ-da3Ch#Ijo^I+n%L*oM**oNdaNoR>i#RrugemRv(S%j T&Ud&3ApoB_seC Ch{oGur#L{aL/LmeLtr RmezaSg^Ssu+TaV`aX?Xo2AcidezAm*goAn`aEch^O+Utu Uxo2C&C*/Foc GoGue%IceLg#Lhe$Rj Rmig>noR%ScoSsa2Aga)AldaAngoAscoA%rnoE'aEn%E.IezaI,Itu+On]Ustr U%'a2G'L+faSodu$S$TaTil/Ve)Z`a3L#Le@LoM^M(Mi=N(o,NgivaNi&NomaN_Ologi>?Rm* S,S$r3Nas)Nc*o2Aci&IcoseOb&Orio,2ElaIabaLfeLpe Rdu+Rje)R_S$,T{aV(n 2AcejoAdu&Afi%Al]AmpoAn^Atui$Ave$AxaEgoElh EveIloIs&/I.@Os,O%scoUd#Unhi=U)2AcheA+niAx*imEr[ I Inc/Is#LaLo,Ru:Bi.Rm}@S%V(3C.eRd Res@Si.3A$B(n D+.EnaNoPismoPnosePo%ca5JeLofo%MemNes$Nr#Rm}&Sped 5M|#:Te2E@O,2N|#RejaUdimR_SmimToV&iZida3Jum9An*]Elh^G?I>n&Rr Vem5BaDeuDocaIzLg?L/R#Ris)RoS)::B edaB|&C[C)n%Dril/G )GoaJeMb(M-.M* MpejoNchePid P,R{>gu+S<]St_T(&Ti=VfimRgemR*/Rmi)Ro$RquiseR[coR%loRujoSco%Sm|+SsagemStig Tag&T(noT*&Tu.Xil 3D&]DidaDusaGaf}eIgaLc/Sc~ SeuSic&:Ci}&D?JaMo_R*>r#Sc(TivaTu[zaV&]Veg Vio3Bl*aB~o,GativaGoci Gri$Rvo,TaUr&VascaVo{o3N N/TidezV` 5B[zaI%IvaMe M*&Rdes%R% T Tici TurnoV`oVil/Vo5Bl#DezM(&Pci&Tr'Vem:0Cec#Edec(JetivoRig#Scu_S%t+T(Tur 0Id-%Io,Orr(Ulis)Up#2Eg<%EnsivaEr-daIc*aUsc#0Iva4Ar@Eo,H Iv{a0B_Ele%Is,It'0D~#E_,Tem1Ci}&Er?On-%OrtunoOs$1ArBi.DemD*&Fci&Rd&RedeRtidaSmoSs#S%lTam T-%T* T_noUl^Us 3C~i D& Dest[D@t+D+G^I$r&IxeLeLicplexoRsi<>%nceRucaSc#SquisaS,aTisc 3AdaC#Ed!eGm-$Last+Lh#Lo.M-)Nc`NguimN]No%N.On{oPocaQue%ResRue)Sc S$laTg-$Rje)Tur Ud!eXof}eZ}&3C C~ DaD-$Di#Do,Du$rGm-$G[=Gun=IvaLe$LvagemM<&M-%N?N/rNsu&Nt#P #Rei>*g>+RvoTemb_T|3GiloLhue)Lic}eMetr@Mpat@M~ N&Nc(oNg~ NopseN$ni>-eRiTu#5B(fis)Rp[s>[&Rt'Sp'oS%n$:B`aBle%Bu^C/G `aLh(LoLvezMdioRef>j>+xaTuagemUr*oXativoXis)3Atr&C(Ci=Cl#Dio,IaIm Lef}eLh#Mp(oN-%N,rN.Rm&RnoRr-oSeSou+St#ToXtu+Xugo3A+G`aJoloMbr MidezNgi=N%'oRagemT~ 5Al]C]L( LiceM^Mil/N`Ntu+Pe%R>ci=RneioRqueRr!>$S.UcaUp{aX*a2Ab&/Acej Adu$rAfeg Aje$AmaAnc ApoAs{oAt?Av E*oEm(Epid EvoIagemIboIcicloId-%Ilog@Ind!eIploItur Iunf&Oc Ombe)OvaUnfoUque2B~ CquesaT` T|i&:7V 3Bigo0HaId!eIf|me3Olog@SoTigaUbu0A=InaUfru':C*aDi G o,I=,LaL-%Lid!eLo[sN)gemQu{oRe)Rr(Sc~ Sil]S,u+Z Zio3A=D Ge.Ic~ L{oLhiceLu=Nce=rNdav&N( Nt[Rb&Rd!eRe?Rg}h>m`/RnizRs R%n%SpaSti=T|i&3Adu$AgemAj Atu+Br?D{aDr @ElaGaG-%Gi G| L ejoNcoNhe)NilOle)R!>tudeSi.S$Tr&V{oZ*/5A=rArG&L<%LeibolL)gemLumo,Nt!e5L$Vuz`a::D[zRope3QueRe.Rife3Ng ::Ng#Rp 3BuL?9Mb Olog@5Mbi="; +const checksum = "0x2219000926df7b50d8aa0a3d495826b988287df4657fbd100e6fe596c8f737ac"; + +export class LangPt extends WordlistOwl { + constructor() { super("pt", words, checksum); } +} + +export const langPt = new LangPt(); diff --git a/packages/wordlists/src.ts/lang-zh.ts b/packages/wordlists/src.ts/lang-zh.ts new file mode 100644 index 000000000..4b8c7ba75 --- /dev/null +++ b/packages/wordlists/src.ts/lang-zh.ts @@ -0,0 +1,84 @@ +import { id } from "@ethersproject/hash"; +import { toUtf8String } from "@ethersproject/strings"; + +import { logger } from "./logger.js"; +import { Wordlist } from "./wordlist.js"; + + +const data = "}aE#4A=Yv&co#4N#6G=cJ&SM#66|/Z#4t&kn~46#4K~4q%b9=IR#7l,mB#7W_X2*dl}Uo~7s}Uf&Iw#9c&cw~6O&H6&wx&IG%v5=IQ~8a&Pv#47$PR&50%Ko&QM&3l#5f,D9#4L|/H&tQ;v0~6n]nN> = { + zh_cn: null, + zh_tw: null +} + +const Checks: Record = { + zh_cn: "0x17bcc4d8547e5a7135e365d1ab443aaae95e76d8230c2782c67305d4f21497a1", + zh_tw: "0x51e720e90c7b87bec1d70eb6e74a21a449bd3ec9c020b01d3a40ed991b60ce5d" +} + +const codes = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; +const style = "~!@#$%^&*_-=[]{}|;:,.()<>?" + +function loadWords(locale: string): Array { + if (_wordlist[locale] != null) { return _wordlist[locale] as Array; } + + const wordlist = []; + + let deltaOffset = 0; + for (let i = 0; i < 2048; i++) { + const s = style.indexOf(data[i * 3]); + const bytes = [ + 228 + (s >> 2), + 128 + codes.indexOf(data[i * 3 + 1]), + 128 + codes.indexOf(data[i * 3 + 2]), + ]; + + if (locale === "zh_tw") { + const common = s % 4; + for (let i = common; i < 3; i++) { + bytes[i] = codes.indexOf(deltaData[deltaOffset++]) + ((i == 0) ? 228: 128); + } + } + + wordlist.push(toUtf8String(new Uint8Array(bytes))); + } + + // Verify the computed list matches the official list + const checksum = id(wordlist.join("\n") + "\n"); + /* c8 ignore start */ + if (checksum !== Checks[locale]) { + throw new Error(`BIP39 Wordlist for ${ locale } (Chinese) FAILED`); + } + /* c8 ignore stop */ + + _wordlist[locale] = wordlist; + + return wordlist; +} + +class LangZh extends Wordlist { + constructor(country: string) { super("zh_" + country); } + + getWord(index: number): string { + const words = loadWords(this.locale); + if (index < 0 || index >= words.length) { + logger.throwArgumentError(`invalid word index: ${ index }`, "index", index); + } + return words[index]; + } + + getWordIndex(word: string): number { + return loadWords(this.locale).indexOf(word); + } + + split(mnemonic: string): Array { + mnemonic = mnemonic.replace(/(?:\u3000| )+/g, ""); + return mnemonic.split(""); + } +} + +export const langZhCn = new LangZh("cn"); +export const langZhTw = new LangZh("tw"); diff --git a/packages/wordlists/src.ts/logger.ts b/packages/wordlists/src.ts/logger.ts new file mode 100644 index 000000000..6fde778de --- /dev/null +++ b/packages/wordlists/src.ts/logger.ts @@ -0,0 +1,3 @@ +import { Logger } from "@ethersproject/logger"; +import { version } from "./_version.js"; +export const logger = new Logger(version); diff --git a/packages/wordlists/src.ts/tests/test-wordlists.ts b/packages/wordlists/src.ts/tests/test-wordlists.ts new file mode 100644 index 000000000..8dfa732e5 --- /dev/null +++ b/packages/wordlists/src.ts/tests/test-wordlists.ts @@ -0,0 +1,73 @@ +import assert from 'assert'; + +import { wordlists } from "../wordlists.js"; + +import { loadTests } from "./utils.js"; + +import type { TestCaseWordlist } from "./types.js"; + +import type { Wordlist } from "../wordlist.js"; + + +function checkWordlist(test: TestCaseWordlist, wordlist: Wordlist): void { + + it(`matches wordlists: ${ test.locale }`, function() { + const words = test.content.split('\n'); + + let check = ""; + for (let i = 0; i < 2048; i++) { + let word = wordlist.getWord(i); + check += (word + "\n"); + assert.equal(word, words[i]); + assert.equal(wordlist.getWordIndex(word), i); + } + + assert.equal(check, test.content); + }); + + it (`splitting and joining are equivalent: ${ test.locale }`, function() { + const words: Array = [ ]; + for (let i = 0; i < 12; i++) { + words.push(wordlist.getWord(i)); + } + + const phrase = wordlist.join(words); + + const words2 = wordlist.split(phrase); + const phrase2 = wordlist.join(words2); + + assert.deepStrictEqual(words2, words, "split words"); + assert.deepStrictEqual(phrase2, phrase, "re-joined words"); + }); + + it(`handles out-of-range values: ${ test.locale }`, function() { + assert.equal(wordlist.getWordIndex("foobar"), -1); + + assert.throws(() => { + wordlist.getWord(-1); + }, (error) => { + return (error.code === "INVALID_ARGUMENT" && + error.message.match(/^invalid word index/) && + error.argument === "index" && + error.value === -1); + }); + + assert.throws(() => { + wordlist.getWord(2048); + }, (error) => { + return (error.code === "INVALID_ARGUMENT" && + error.message.match(/^invalid word index/) && + error.argument === "index" && + error.value === 2048); + }); + }); +} + +describe('Check Wordlists', function() { + const tests = loadTests("wordlists"); + tests.forEach((test) => { + let wordlist = wordlists[test.locale]; + if (wordlist == null) { return; } + checkWordlist(test, wordlist); + }); +}); diff --git a/packages/wordlists/src.ts/tests/types.ts b/packages/wordlists/src.ts/tests/types.ts new file mode 100644 index 000000000..f06cc2251 --- /dev/null +++ b/packages/wordlists/src.ts/tests/types.ts @@ -0,0 +1,7 @@ + +export interface TestCaseWordlist { + name: string; + filename: string, + locale: string; + content: string; +} diff --git a/packages/wordlists/src.ts/tests/utils.ts b/packages/wordlists/src.ts/tests/utils.ts new file mode 100644 index 000000000..0b1da525d --- /dev/null +++ b/packages/wordlists/src.ts/tests/utils.ts @@ -0,0 +1,25 @@ + +import fs from "fs" +import path from "path"; +import zlib from 'zlib'; + +// Find the package root (based on the nyc output/ folder) +const root = (function() { + let root = process.cwd(); + + while (true) { + if (fs.existsSync(path.join(root, "output"))) { return root; } + const parent = path.join(root, ".."); + if (parent === root) { break; } + root = parent; + } + + throw new Error("could not find root"); +})(); + +// Load the tests +export function loadTests(tag: string): Array { + const filename = path.resolve(root, "testcases", tag + ".json.gz"); + return JSON.parse(zlib.gunzipSync(fs.readFileSync(filename)).toString()); +} + diff --git a/packages/wordlists/src.ts/wordlist-owl.ts b/packages/wordlists/src.ts/wordlist-owl.ts new file mode 100644 index 000000000..88831c1a3 --- /dev/null +++ b/packages/wordlists/src.ts/wordlist-owl.ts @@ -0,0 +1,57 @@ + +// Use the encode-latin.js script to create the necessary +// data files to be consumed by this class + +import { id } from "@ethersproject/hash"; + +import { decodeOwl } from "./decode-owl.js"; +import { logger } from "./logger.js"; +import { Wordlist } from "./wordlist.js"; + +export class WordlistOwl extends Wordlist { + #data: string; + #checksum: string; + + constructor(locale: string, data: string, checksum: string) { + super(locale); + this.#data = data; + this.#checksum = checksum; + this.#words = null; + } + + get _data(): string { return this.#data; } + + _decodeWords(): Array { + return decodeOwl(this.#data); + } + + #words: null | Array; + #loadWords(): Array { + if (this.#words == null) { + const words = this._decodeWords(); + + // Verify the computed list matches the official list + const checksum = id(words.join("\n") + "\n"); + /* c8 ignore start */ + if (checksum !== this.#checksum) { + throw new Error(`BIP39 Wordlist for ${ this.locale } FAILED`); + } + /* c8 ignore stop */ + + this.#words = words; + } + return this.#words; + } + + getWord(index: number): string { + const words = this.#loadWords(); + if (index < 0 || index >= words.length) { + logger.throwArgumentError(`invalid word index: ${ index }`, "index", index); + } + return words[index]; + } + + getWordIndex(word: string): number { + return this.#loadWords().indexOf(word); + } +} diff --git a/packages/wordlists/src.ts/wordlist-owla.ts b/packages/wordlists/src.ts/wordlist-owla.ts new file mode 100644 index 000000000..750905bc4 --- /dev/null +++ b/packages/wordlists/src.ts/wordlist-owla.ts @@ -0,0 +1,18 @@ + +import { WordlistOwl } from "./wordlist-owl.js"; +import { decodeOwlA } from "./decode-owla.js"; + +export class WordlistOwlA extends WordlistOwl { + #accent: string; + + constructor(locale: string, data: string, accent: string, checksum: string) { + super(locale, data, checksum); + this.#accent = accent; + } + + get _accent(): string { return this.#accent; } + + _decodeWords(): Array { + return decodeOwlA(this._data, this._accent); + } +} diff --git a/packages/wordlists/src.ts/wordlist.ts b/packages/wordlists/src.ts/wordlist.ts new file mode 100644 index 000000000..0fb2df8ff --- /dev/null +++ b/packages/wordlists/src.ts/wordlist.ts @@ -0,0 +1,22 @@ +import { defineProperties } from "@ethersproject/properties"; + +export abstract class Wordlist { + locale!: string; + + constructor(locale: string) { + defineProperties(this, { locale }); + } + + // Subclasses may override this + split(mnemonic: string): Array { + return mnemonic.toLowerCase().split(/ +/g) + } + + // Subclasses may override this + join(words: Array): string { + return words.join(" "); + } + + abstract getWord(index: number): string; + abstract getWordIndex(word: string): number; +} diff --git a/packages/wordlists/src.ts/wordlists-en.ts b/packages/wordlists/src.ts/wordlists-en.ts new file mode 100644 index 000000000..472ba6477 --- /dev/null +++ b/packages/wordlists/src.ts/wordlists-en.ts @@ -0,0 +1,8 @@ + +import { langEn as en } from "./lang-en.js"; + +import type { Wordlist } from "./wordlist.js"; + +export const wordlists: Record = Object.freeze({ + en +}); diff --git a/packages/wordlists/src.ts/wordlists-extra.ts b/packages/wordlists/src.ts/wordlists-extra.ts new file mode 100644 index 000000000..ad3d88994 --- /dev/null +++ b/packages/wordlists/src.ts/wordlists-extra.ts @@ -0,0 +1,31 @@ + +import { langCz as cz } from "./lang-cz.js"; +import { langEs as es } from "./lang-es.js"; +import { langFr as fr } from "./lang-fr.js"; +import { langJa as ja } from "./lang-ja.js"; +import { langKo as ko } from "./lang-ko.js"; +import { langIt as it } from "./lang-it.js"; +import { langPt as pt } from "./lang-pt.js"; +import { langZhCn as zh_cn, langZhTw as zh_tw } from "./lang-zh.js"; + +import type { Wordlist } from "./wordlist.js"; + +// These are used by the hijacked imports in the rollup version +// of the extra wordlists. Users should: +// import { ethers } from "./ethers.js"; +// import { attachEthers, wordlists } from "./ethers-wordlists.js"; +// attachEthers(ethers); +let _ethers: any = null; +export function attachEthers(ethers: any): void { + if (_ethers) { throw new Error("already attached"); } + _ethers = ethers; +} +export function getEthers(): any { + if (_ethers) { throw new Error("no ethers attached; please use attachEthers"); } + return _ethers; +} + + +export const wordlists: Record = Object.freeze({ + cz, es, fr, ja, ko, it, pt, zh_cn, zh_tw +}); diff --git a/packages/wordlists/src.ts/wordlists.ts b/packages/wordlists/src.ts/wordlists.ts new file mode 100644 index 000000000..8e68edbe2 --- /dev/null +++ b/packages/wordlists/src.ts/wordlists.ts @@ -0,0 +1,16 @@ + +import { langCz as cz } from "./lang-cz.js"; +import { langEn as en } from "./lang-en.js"; +import { langEs as es } from "./lang-es.js"; +import { langFr as fr } from "./lang-fr.js"; +import { langJa as ja } from "./lang-ja.js"; +import { langKo as ko } from "./lang-ko.js"; +import { langIt as it } from "./lang-it.js"; +import { langPt as pt } from "./lang-pt.js"; +import { langZhCn as zh_cn, langZhTw as zh_tw } from "./lang-zh.js"; + +import type { Wordlist } from "./wordlist.js"; + +export const wordlists: Record = Object.freeze({ + cz, en, es, fr, ja, ko, it, pt, zh_cn, zh_tw +}); diff --git a/packages/wordlists/tsconfig.json b/packages/wordlists/tsconfig.json new file mode 100644 index 000000000..cb28b18cd --- /dev/null +++ b/packages/wordlists/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./lib/", + "rootDir": "./src.ts" + }, + "exclude": [], + "extends": "../../tsconfig.common.json", + "include": [ + "./src.ts/**/*.ts" + ] +} diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 000000000..730997942 --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,72 @@ +import { nodeResolve } from '@rollup/plugin-node-resolve'; +import replace from "@rollup/plugin-replace"; +import { terser } from "rollup-plugin-terser"; + + +function getDistConfig({ suffix, format, minify }) { + if (suffix == null) { suffix = ""; } + if (format == null) { format = "es"; } + if (minify == null) { minify = false; } + + + const replacements = { + preventAssignment: false, + delimiters: [ '', '' ], + values: { + // sepc256k1; kill the require + "import nodeCrypto from 'crypto';": "const nodeCrypto = undefined; /* ethers:rollup */", + + // Get our browser-friendly versions in here + '"crypto"; /*-browser*/': '"./crypto-browser.js";', + '"./base64.js"; /*-browser*/': '"./base64-browser.js";', + '"./get-url.js"; /*-browser*/': '"./get-url-browser.js";', + '"./provider-ipcsocket.js"; /*-browser*/': '"./provider-ipcsocket-browser.js";', + '"ws"; /*-browser*/': '"./ws-browser.js";', + + // Default dist builds only include English + '"./wordlists.js"': '"./wordlists-en.js"' + } + }; + + const plugins = [ + replace(replacements), + nodeResolve({ }), + ]; + + if (minify) { plugins.push(terser()); } + + return { + input: "./packages/ethers/lib/index.js", + output: [ + { + file: `./packages/ethers/dist/ethers${ suffix }.js`, + format, + name: ((format === "umd") ? "ethers": undefined), + sourcemap: true + }, + ], + context: "window", + plugins + } +}; + +function getExtraWordlistConfig() { + return { + input: "./packages/wordlists/lib/wordlists-extra.js", + output: [ + { + file: 'packages/ethers/dist/ethers-wordlists.min.js', + format: 'es' + }, + ], + context: "window", + plugins: [ terser() ] + } +} + +export default [ + getDistConfig({ minify: false }), + getDistConfig({ suffix: ".min", minify: true }), + getDistConfig({ suffix: ".umd.min", format: "umd", minify: true }), + getExtraWordlistConfig(), +]; diff --git a/testcases/accounts.json.gz b/testcases/accounts.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..867fc98a3d4fb1a7d477837b8345bede958f501a GIT binary patch literal 26153 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 M7oPUl;3eV!0D-dHtN;K2 literal 0 HcmV?d00001 diff --git a/testcases/create.json.gz b/testcases/create.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..d6385b44f5b282874c2e877b7b5865da021f4db1 GIT binary patch literal 5810 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 literal 0 HcmV?d00001 diff --git a/testcases/create2.json.gz b/testcases/create2.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..47bdeba4504caeb8f0c60998049e0870426c278e GIT binary patch literal 21247 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 literal 0 HcmV?d00001 diff --git a/testcases/hashes.json.gz b/testcases/hashes.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..67ab3865183643dc5fef7512ac99471573b4b1b8 GIT binary patch literal 68270 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 YT79b@X8C{qumAIZ0})wmHM}VT0F3DDr2qf` literal 0 HcmV?d00001 diff --git a/testcases/hmac.json.gz b/testcases/hmac.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..2c129d24bd52509178e52afc47983f936d8497d0 GIT binary patch literal 34364 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 MKWTYh>Rk;10F|CxUH||9 literal 0 HcmV?d00001 diff --git a/testcases/mnemonics.json.gz b/testcases/mnemonics.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..a6251912e0cd2074ea1e0f46ccc02fd7e4634d76 GIT binary patch literal 857561 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%0D7I2)_gd&7xlgrh=mZgT3cV;ZfrL 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%0D5nSaQO2Nzq(*bH|pv`rSCM0iV(b7Q1YN<5jD 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%0Ae|yB!_fJdsy>CabZ+{ZtYr~)4jjm+hIy~R` z#J_tu|MH9%-*tYzdBu}&ze#=b9pnG*`k;H+w|>*x?d;pn_||R0xg7qX@1qkgg;D0L zrCtCYw;r+}ix#plkqY|}aBdyI0gsME9D*@;I1Iu_NU(o;oBaic`9J^d>)kQ5*ky@x z04CZdI7%o|AK*IYNcgnj(MVy?Aj-g#@aYGEf`7a( zL|A6OGcx+oW1brUIGsW&)FcRO{e<_1Ph^lIQKl(S2A?Kc>tq>m9N06|V<_`FSjs+1 z3+d$GZ>bRqMcurQ$dm|0iC~gpPvR{*9U@RggQ|n@BQvzk13KY>jsJRgjJ^2DcL(>w z&2j{2nr-R0(z3SZ`<*={p*6yO_s^jy`;b@`dt^Y{|vP+cD@6#8U5TB z0zeCRf)T2*qsnFW%>_CrI6)8-KuG{>001Va6(+UGoMA}6oI#zT&kB`-b6`yxzFWfA z2RNFL^_)+J0pVA{3E?0$2gsIqr-SNW0T@2~28DZ}*$0Ai?cLkWQas!m`q0~#*QZW8 z7PZ5up#g?%EWst+&(OI@sZX_aB$q;!+#r z`LO%bEuD{jp}?3AxF!%iR1nC62GBf-2GKgVXz&dI>Me0dcCf+6i3YU7ur(6Du<-ud zeW71Pr8K~#z4>^V2qjfPmPbYC$Z$W|3og-I1!%a^iQvXCuy!cA5KhrsRA38G{ERY| zLKJ;o%`pir8jZ|?j}gidRs}esP^Ka80@o98R5`G0G?gO38&qcnW}ci!56kRlQMoVK zy`t;N?ixz;(Ku}nqOs}JOXE7P%KfG{TQ&!TjJCVV_%uupmBdA?r|pikhrHBy-e!&b zSRYS1&%u0hX>R1S-;(SycCj^U>fII9qF+CW%Ejx^9n`DM28m179_*(*rE2TtrR|$~ z>GjUk{q1>a$lHdN7S&Cz@1tg3{VIl+yEvjq0%nP7@(UB@A^2};sJ_dfWA1odPBSdQi

>lU7Hm>$v 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%0D^yNZ7cwePzM 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

ix9a^3}=dIRxJ(p=d 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 n&El|mZBaJ>r*Ikh!5K@J^B3vQOj93$A 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 literal 0 HcmV?d00001 diff --git a/testcases/rlp.json.gz b/testcases/rlp.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..b39749ce4f6cedcaccfef54c19650196fd6dd075 GIT binary patch literal 1763 zcmYL>2{aoB9>y&xwzN`5)zQWgY~8}dm5HJ&43W0(BN4Yai&k5=QVfD>#aZJBY1L7T zqAA8v$}~YyN+WI}2#qU_+U@La_y2qE``-KB`~5-b{9J#X$OhUnWWh|ZW5odgUnyP5 z7;_0xdo^u&{%1gX_lTzmR#$ypG^Xsd9gN5U&6{Vg=Qa%>7R({$yS!9;W`2w`l$sUg+yhJ+0=)0T-TCsQmqz01|i0KzUWKiYbP+Kn9Ay18jmV zgMP0|B zzBsq9>?Dahx713&v^}BwRl(Z>*0Zv`6!3Ue4RJJ>Y+TYvtEt>R=k&{}2Tr7LvZ_|6 z$N-7MLd+JTQNC?zPF}5Uy{inX23BYT-5pZy?zW=7<{@ON&`}i*E?59IUkFrdpuS8> z^c*j?ra+|XhyXo|ePC`APPQlX73* zSC3R=$eF@(ZWe5M`j-RWJI;QxWIBI>SbK0(fJqOB42)RRUY=T5w}c2sp8->7GBIl` zqNrzz9ZldbuFdTvQ~6+!{g`52iqfMD1KedORGNyCWJA_0yKXgqm1L2f`U(&9a<==l z1dANavv_ZY&8l5720LvLBbc;^*U$nw9H@OM#R-!kTId0*gHd$HO_`lb)G46IhPX^Vyy4o^k!oI@v~9B3?*ZVzXt8rS%| zWJ=Hq&xED2!Q=_UZM&kQx|z}O9d3DGf%p&Z!PtbEV>{6fl@9jP>!;)q`&N)W>bHuk z0$=i$nGi#%<>{31Lk<~0nJGz=qT6o;o%s<PB`4? z_-lWjM#~TraoSCNB9X2skoi

YwzT^RU5rRjj>OF!XnwN3q=R?q0xg7 z%9vc%VX>N*1bGutzNaQeG20L~a=$IgE=2K*_YJPat~)}L7Ph6x2Il!uP?Pw`Q2v2coQX0?pL#O4w&)thEPAeBG&( z_VhV3dzbQO3zae_ZKw^XkE#mXDC#kGf*q-abUvvHf*1EAIcMVUU(Rhmi{Q96zvUPG zt*MVMmmt6K_+!?uNs67i%(s%6(;d}}8_6|Q-ttS_v608erGEaHW25Z#2NiUS!y7?R z(9!t8YXzabM^4Q!cX|I^l1~h=J-424{k8|pPiJ&J-W}u+koCNZ+EbRdF1$70tC{abYmB2G~6XL*~K!}a7>(if^GD2C1QBop&tWeK9FWud9rRp z+(@;Dno3-qA(#&Q=KAcIGC$j7>&SNy+S$~@erlXAl}xuBh02v&E+w7sKE8Hba?7o= zlZ$g!)|ESL!eyc7m-?jJ!~;){vOE*LsfP>DrnP3EEdm|$<`4uBZ^i4?b8-C(ew$;Y literal 0 HcmV?d00001 diff --git a/testcases/transaction.json.gz b/testcases/transaction.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..3039ffaa8cd8063a6ccddad5fdb973848ad40770 GIT binary patch literal 346037 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%0A}Kr< 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 RhTjWl+gj4YhZ+;m{{h1XZjJx| literal 0 HcmV?d00001 diff --git a/testcases/transactions.json.gz b/testcases/transactions.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..7168d7dcdc660fce4cc6e78f9003adaa7e54f86b GIT binary patch literal 317255 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

%h%b6%Sv2U;<6H#mH2N^?y?g9 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 j^zS1( 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

m5MNRM_tr9peh5H)d)lONBc;H#obu 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ʝ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

(=3J^6%J7P&1>IDyl*gx0b&5?@H1PYgPB+;_t3p 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Յ|Eb7Du3P2FQA*WPk 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