From 9733c931d12bd7eafd751bf26621d6cbd0dbf5b8 Mon Sep 17 00:00:00 2001 From: Amie Date: Tue, 16 Apr 2024 13:59:37 -0700 Subject: [PATCH] Migrate to Amoy testnet (#742) * amoy migration -- rename step only * add amoy USDC contract and chain id * update contracts.json * remove some deploy dependencies * first successful deployment -- no verification * remove oklink stuff * real artifacts * skip bpnori deployments for live networks * need dummy values for missing contracts config * new artifacts that correctly reflect defender --------- Co-authored-by: amiecorso --- .env.defaults | 5 +- .openzeppelin/unknown-80002.json | 987 ++++++++++++++ README.md | 28 +- config/etherscan.ts | 12 +- config/networks.ts | 12 +- constants/addresses.ts | 2 +- contracts.json | 16 +- deploy/configure-assets-after-deployment.ts | 4 +- deploy/deploy-bridged-polygon-nori.ts | 6 +- deploy/deploy-certificate.ts | 2 +- deploy/deploy-locked-nori.ts | 4 +- deploy/deploy-market.ts | 14 +- deploy/deploy-nori-usdc.ts | 1 - deploy/deploy-removal.ts | 2 +- deployments/amoy/.chainId | 1 + deployments/amoy/Certificate.json | 1185 +++++++++++++++++ deployments/amoy/Market.json | 1324 +++++++++++++++++++ deployments/amoy/Removal.json | 1292 ++++++++++++++++++ foundry.toml | 2 +- plugins/index.ts | 2 +- script/BuyNRT.s.sol | 8 +- tasks/bridged-polygon-nori.ts | 2 +- tasks/certificate.ts | 2 +- tasks/defender.ts | 2 +- tasks/list-remaining-migrated-removals.ts | 8 +- tasks/locked-nori.ts | 2 +- tasks/market.ts | 2 +- tasks/migrate-certificates.ts | 6 +- tasks/migrate-removals.ts | 4 +- tasks/removal.ts | 2 +- tasks/simulate-txn-alchemy.ts | 22 +- types/node/process.d.ts | 3 + utils/deploy.ts | 16 +- yarn.lock | 426 ++++-- 34 files changed, 5214 insertions(+), 192 deletions(-) create mode 100644 .openzeppelin/unknown-80002.json create mode 100644 deployments/amoy/.chainId create mode 100644 deployments/amoy/Certificate.json create mode 100644 deployments/amoy/Market.json create mode 100644 deployments/amoy/Removal.json diff --git a/.env.defaults b/.env.defaults index 77bad9199..8f9bcb7f8 100644 --- a/.env.defaults +++ b/.env.defaults @@ -3,8 +3,7 @@ # Alchemy ETHEREUM_RPC_URL=NULL -GOERLI_RPC_URL=NULL -MUMBAI_RPC_URL=NULL +AMOY_RPC_URL=NULL POLYGON_RPC_URL=NULL # Ethernal @@ -12,7 +11,7 @@ ETHERNAL_EMAIL=NULL ETHERNAL_PASSWORD=NULL ETHERNAL=false -# Etherscan +# Block Explorer APIs ETHERSCAN_API_KEY=NULL POLYGONSCAN_API_KEY=NULL diff --git a/.openzeppelin/unknown-80002.json b/.openzeppelin/unknown-80002.json new file mode 100644 index 000000000..d9aeb5d5b --- /dev/null +++ b/.openzeppelin/unknown-80002.json @@ -0,0 +1,987 @@ +{ + "manifestVersion": "3.2", + "admin": { + "address": "0x23574070246dA747418B088fc7091E720C2956dc", + "txHash": "0xc0180566128eaa85c7abeea5af63c2a3e596d00801787b23f2da825fdd53f6b3" + }, + "proxies": [ + { + "address": "0x9A7833C90bB3577730Bbc5d5b669aF63bdB3cd46", + "txHash": "0x913ae45ff402dc43fdc2d3f0ee0b11a2dc455c7f81a9d70b81889fedc829f1e2", + "kind": "transparent" + }, + { + "address": "0x1bFD3e01498abf464dD1918Cfb0571716775513C", + "txHash": "0xd29a9830856fbd9f222524cd37525fe5068c4b7225081ee8f9e16749f3ab658a", + "kind": "transparent" + }, + { + "address": "0xfC77384950DB6769e1815c88b26b3eB06B8621Be", + "txHash": "0x65448f25e38e59a1d06f41380019c8e07122341f7b09f051d671413736bb7bcf", + "kind": "transparent" + }, + { + "address": "0x06049AB990338d2260b3052115039405C410e201", + "txHash": "0xc76e6595840e59032967dbd4f2d2fd08bb62a4778ab551b7334ed58ea680d37e", + "kind": "transparent" + }, + { + "address": "0x24EB36eac27bf97CC3EA573A525c46e51b01d710", + "txHash": "0xafdbe28261a5a4fb51be4924318fab1c25329d7adeb958cd4996690af19d1d60", + "kind": "transparent" + }, + { + "address": "0xda681d144F7D839aDbE5FF457bD32613f9D8d26a", + "txHash": "0xdabc39c57395a79ca71ede2c96b5000db6002c62ef5467ed006d40db605879f2", + "kind": "transparent" + } + ], + "impls": { + "a0a82021299d1212725359d192f53e3cdc5243d45f29b371b5deb254d2a3c099": { + "address": "0x12672b73d1A85E9103A852f0cF6fECAFB4e18c54", + "txHash": "0x9f4ce4d6b71396cd83278f4f54cd7cc44118bec363157674e86222695a6a06a8", + "layout": { + "solcVersion": "0.8.17", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "MulticallUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol:50" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_paused", + "offset": 0, + "slot": "101", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "__gap", + "offset": 0, + "slot": "151", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC165Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" + }, + { + "label": "_roles", + "offset": 0, + "slot": "201", + "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", + "contract": "AccessControlUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage", + "contract": "AccessControlUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:259" + }, + { + "label": "_roleMembers", + "offset": 0, + "slot": "251", + "type": "t_mapping(t_bytes32,t_struct(AddressSet)2731_storage)", + "contract": "AccessControlEnumerableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "252", + "type": "t_array(t_uint256)49_storage", + "contract": "AccessControlEnumerableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" + }, + { + "label": "_purchaseAmounts", + "offset": 0, + "slot": "301", + "type": "t_mapping(t_uint256,t_uint256)", + "contract": "Certificate", + "src": "contracts/Certificate.sol:96" + }, + { + "label": "_nrtDeficit", + "offset": 0, + "slot": "302", + "type": "t_uint256", + "contract": "Certificate", + "src": "contracts/Certificate.sol:105" + }, + { + "label": "_removal", + "offset": 0, + "slot": "303", + "type": "t_contract(IRemoval)3972", + "contract": "Certificate", + "src": "contracts/Certificate.sol:110" + }, + { + "label": "_baseURIValue", + "offset": 0, + "slot": "304", + "type": "t_string_storage", + "contract": "Certificate", + "src": "contracts/Certificate.sol:115" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IRemoval)3972": { + "label": "contract IRemoval", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(AddressSet)2731_storage)": { + "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)2731_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)2416_storage", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "64" + }, + "t_struct(RoleData)179_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "0" + }, + { + "label": "adminRole", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Set)2416_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "3a120a2b5e646d68dc7b49119a0432c16feede56f828c14d03fb357a57e77139": { + "address": "0x30EdFA66ff249B182a0F4ce7CeB9907F44CbFB89", + "txHash": "0xb5bea3fbe37b7fd6827d95cd2baca2d1786b57c94269a95f5d69c5f1096d838e", + "layout": { + "solcVersion": "0.8.17", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_paused", + "offset": 0, + "slot": "51", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC165Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" + }, + { + "label": "_balances", + "offset": 0, + "slot": "151", + "type": "t_mapping(t_uint256,t_mapping(t_address,t_uint256))", + "contract": "ERC1155Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol:25" + }, + { + "label": "_operatorApprovals", + "offset": 0, + "slot": "152", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "contract": "ERC1155Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol:28" + }, + { + "label": "_uri", + "offset": 0, + "slot": "153", + "type": "t_string_storage", + "contract": "ERC1155Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol:31" + }, + { + "label": "__gap", + "offset": 0, + "slot": "154", + "type": "t_array(t_uint256)47_storage", + "contract": "ERC1155Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol:528" + }, + { + "label": "_totalSupply", + "offset": 0, + "slot": "201", + "type": "t_mapping(t_uint256,t_uint256)", + "contract": "ERC1155SupplyUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC1155/extensions/ERC1155SupplyUpgradeable.sol:23" + }, + { + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage", + "contract": "ERC1155SupplyUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC1155/extensions/ERC1155SupplyUpgradeable.sol:76" + }, + { + "label": "_roles", + "offset": 0, + "slot": "251", + "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", + "contract": "AccessControlUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "label": "__gap", + "offset": 0, + "slot": "252", + "type": "t_array(t_uint256)49_storage", + "contract": "AccessControlUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:259" + }, + { + "label": "_roleMembers", + "offset": 0, + "slot": "301", + "type": "t_mapping(t_bytes32,t_struct(AddressSet)4331_storage)", + "contract": "AccessControlEnumerableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "302", + "type": "t_array(t_uint256)49_storage", + "contract": "AccessControlEnumerableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" + }, + { + "label": "__gap", + "offset": 0, + "slot": "351", + "type": "t_array(t_uint256)50_storage", + "contract": "MulticallUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol:50" + }, + { + "label": "_market", + "offset": 0, + "slot": "401", + "type": "t_contract(IMarket)4859", + "contract": "Removal", + "src": "contracts/Removal.sol:139" + }, + { + "label": "_certificate", + "offset": 0, + "slot": "402", + "type": "t_contract(ICertificate)4850", + "contract": "Removal", + "src": "contracts/Removal.sol:144" + }, + { + "label": "_projectIdToHoldbackPercentage", + "offset": 0, + "slot": "403", + "type": "t_mapping(t_uint256,t_uint8)", + "contract": "Removal", + "src": "contracts/Removal.sol:149" + }, + { + "label": "_removalIdToProjectId", + "offset": 0, + "slot": "404", + "type": "t_mapping(t_uint256,t_uint256)", + "contract": "Removal", + "src": "contracts/Removal.sol:154" + }, + { + "label": "_addressToOwnedTokenIds", + "offset": 0, + "slot": "405", + "type": "t_mapping(t_address,t_struct(UintSet)4488_storage)", + "contract": "Removal", + "src": "contracts/Removal.sol:159" + }, + { + "label": "_currentMarketBalance", + "offset": 0, + "slot": "406", + "type": "t_uint256", + "contract": "Removal", + "src": "contracts/Removal.sol:165" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)47_storage": { + "label": "uint256[47]", + "numberOfBytes": "1504" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(ICertificate)4850": { + "label": "contract ICertificate", + "numberOfBytes": "20" + }, + "t_contract(IMarket)4859": { + "label": "contract IMarket", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UintSet)4488_storage)": { + "label": "mapping(address => struct EnumerableSetUpgradeable.UintSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(AddressSet)4331_storage)": { + "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_mapping(t_address,t_uint256))": { + "label": "mapping(uint256 => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint8)": { + "label": "mapping(uint256 => uint8)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)4331_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)4016_storage", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "64" + }, + "t_struct(RoleData)179_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "0" + }, + { + "label": "adminRole", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Set)4016_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UintSet)4488_storage": { + "label": "struct EnumerableSetUpgradeable.UintSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)4016_storage", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "30deb40d11bdfcb2c98992ab724365d2ba9df6cb527db420ca2c0cb885a4d10f": { + "address": "0x3D7035F3cF333deAe544Bf318223A2182FC7B852", + "txHash": "0x57114072483b52192ca8943041427ce9601824a5ee187338b6e9fbd71400c0f3", + "layout": { + "solcVersion": "0.8.17", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_paused", + "offset": 0, + "slot": "51", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC165Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" + }, + { + "label": "_roles", + "offset": 0, + "slot": "151", + "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", + "contract": "AccessControlUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "AccessControlUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:259" + }, + { + "label": "_roleMembers", + "offset": 0, + "slot": "201", + "type": "t_mapping(t_bytes32,t_struct(AddressSet)7814_storage)", + "contract": "AccessControlEnumerableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage", + "contract": "AccessControlEnumerableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" + }, + { + "label": "__gap", + "offset": 0, + "slot": "251", + "type": "t_array(t_uint256)50_storage", + "contract": "MulticallUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol:50" + }, + { + "label": "_removal", + "offset": 0, + "slot": "301", + "type": "t_contract(Removal)15316", + "contract": "Market", + "src": "contracts/Market.sol:130" + }, + { + "label": "_certificate", + "offset": 0, + "slot": "302", + "type": "t_contract(Certificate)9001", + "contract": "Market", + "src": "contracts/Market.sol:135" + }, + { + "label": "_purchasingToken", + "offset": 0, + "slot": "303", + "type": "t_contract(IERC20WithPermit)9244", + "contract": "Market", + "src": "contracts/Market.sol:140" + }, + { + "label": "_restrictedNORI", + "offset": 0, + "slot": "304", + "type": "t_address", + "contract": "Market", + "src": "contracts/Market.sol:146" + }, + { + "label": "_priceMultiple", + "offset": 0, + "slot": "305", + "type": "t_uint256", + "contract": "Market", + "src": "contracts/Market.sol:154" + }, + { + "label": "_noriFeeWallet", + "offset": 0, + "slot": "306", + "type": "t_address", + "contract": "Market", + "src": "contracts/Market.sol:159" + }, + { + "label": "_noriFeePercentage", + "offset": 0, + "slot": "307", + "type": "t_uint256", + "contract": "Market", + "src": "contracts/Market.sol:164" + }, + { + "label": "_priorityRestrictedThreshold", + "offset": 0, + "slot": "308", + "type": "t_uint256", + "contract": "Market", + "src": "contracts/Market.sol:169" + }, + { + "label": "_currentSupplierAddress", + "offset": 0, + "slot": "309", + "type": "t_address", + "contract": "Market", + "src": "contracts/Market.sol:174" + }, + { + "label": "_suppliers", + "offset": 0, + "slot": "310", + "type": "t_mapping(t_address,t_struct(LinkedListNode)11084_storage)", + "contract": "Market", + "src": "contracts/Market.sol:179" + }, + { + "label": "_listedSupply", + "offset": 0, + "slot": "311", + "type": "t_mapping(t_address,t_struct(RemovalsByYear)15865_storage)", + "contract": "Market", + "src": "contracts/Market.sol:185" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(Certificate)9001": { + "label": "contract Certificate", + "numberOfBytes": "20" + }, + "t_contract(IERC20WithPermit)9244": { + "label": "contract IERC20WithPermit", + "numberOfBytes": "20" + }, + "t_contract(Removal)15316": { + "label": "contract Removal", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(LinkedListNode)11084_storage)": { + "label": "mapping(address => struct Market.LinkedListNode)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(RemovalsByYear)15865_storage)": { + "label": "mapping(address => struct RemovalsByYear)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(AddressSet)7814_storage)": { + "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(UintSet)7971_storage)": { + "label": "mapping(uint256 => struct EnumerableSetUpgradeable.UintSet)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)7814_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)7499_storage", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "64" + }, + "t_struct(LinkedListNode)11084_storage": { + "label": "struct Market.LinkedListNode", + "members": [ + { + "label": "previous", + "type": "t_address", + "offset": 0, + "slot": "0" + }, + { + "label": "next", + "type": "t_address", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(RemovalsByYear)15865_storage": { + "label": "struct RemovalsByYear", + "members": [ + { + "label": "yearToRemovals", + "type": "t_mapping(t_uint256,t_struct(UintSet)7971_storage)", + "offset": 0, + "slot": "0" + }, + { + "label": "earliestYear", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "latestYear", + "type": "t_uint256", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(RoleData)179_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "0" + }, + { + "label": "adminRole", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Set)7499_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(UintSet)7971_storage": { + "label": "struct EnumerableSetUpgradeable.UintSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)7499_storage", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + } + } +} diff --git a/README.md b/README.md index 1820635ae..790b94ccb 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ yarn add -D @nori-dot-com/contracts Then, in your solidity code, you can import the contracts you need: ```solidity -import "@nori-dot-com/contracts/dist/solidity/Market.sol"; +import '@nori-dot-com/contracts/dist/solidity/Market.sol'; ``` ### Solidity @@ -38,7 +38,7 @@ yarn add -D @nori-dot-com/contracts @openzeppelin/contracts-upgradeable@4.8.2 er Then, in your solidity code, you can import the contracts you need: ```solidity -import "@nori-dot-com/contracts/dist/solidity/Market.sol"; +import '@nori-dot-com/contracts/dist/solidity/Market.sol'; ``` ## :notebook_with_decorative_cover: Documentation @@ -152,14 +152,14 @@ hardhat NORI \
- Example: Deposit 100 bpNORI on mumbai + Example: Deposit 100 bpNORI on amoy ```bash hardhat BridgedPolygonNORI \ --func deposit \ 0x6dc772f80495f47d8000530a59ee975b67b7c646 \ "0x0000000000000000000000000000000000000000000000056bc75e2d63100000" \ - --network mumbai + --network amoy ``` > :information_source: Note that the final argument (`0x0000000000000000000000000000000000000000000000056bc75e2d63100000`) is a `uint256` bytes-encoded representation of 100 bpNORI. @@ -226,22 +226,22 @@ For an overview, checkout the official tutorial [here](https://book.getfoundry.s For these scripts to work, the following environment variables must be set in your environment: ``` -MUMBAI_RPC_URL # The RPC URL for the mumbai network +AMOY_RPC_URL # The RPC URL for the amoy network MNEMONIC # The mnemonic you want to use to sign your transaction with ``` > :information_source: The first index of the `$MNEMONIC` HD path needs to be funded with MATIC, have the correct permissions to make the contract calls, etc. -> :information_source: Our on-chain market on mumbai was deployed with a fireblocks signer, so we have been using the fireblocks signer from the command line with hardhat tasks to grant necessary permissions to other addresses that we may want to use. +> :information_source: Our on-chain market on amoy was deployed with a fireblocks signer, so we have been using the fireblocks signer from the command line with hardhat tasks to grant necessary permissions to other addresses that we may want to use. Here is the hardhat command for granting the `CONSIGNOR_ROLE` to an address (hardhat is currently required to use a fireblocks signer): ```bash hardhat \ - --network mumbai \ + --network amoy \ Removal \ --func grantRole \ - `cast call 0xa051E9EeaC803d2fCA1DbF415b78AD9BfEB723b0 "CONSIGNOR_ROLE()" --rpc-url mumbai` `# The bytes32 representation of the CONSIGNOR_ROLE` \ + `cast call 0xa051E9EeaC803d2fCA1DbF415b78AD9BfEB723b0 "CONSIGNOR_ROLE()" --rpc-url amoy` `# The bytes32 representation of the CONSIGNOR_ROLE` \ 0x465d5a3fFeA4CD109043499Fa576c3E16f918463 ``` @@ -253,18 +253,18 @@ A description of how to run some example scripts can be found in the examples be
- Example: Minting and listing new removals on mumbai + Example: Minting and listing new removals on amoy ```bash forge script \ script/MintAndListRemovals.s.sol:MintAndListRemovals \ - --rpc-url mumbai \ + --rpc-url amoy \ --mnemonics=$MNEMONIC \ --broadcast \ -vvvvv ``` -> :information_source: Transactions for minting removals have at times seemed really slow on mumbai (taking almost 15 minutes to get included). +> :information_source: Transactions for minting removals have at times seemed really slow on amoy (taking almost 15 minutes to get included).
@@ -275,7 +275,7 @@ forge script \ ```bash forge script \ script/MintBPNori.s.sol:MintBPNori.sol \ - --rpc-url mumbai \ + --rpc-url amoy \ --mnemonics=$MNEMONIC \ --broadcast \ -vvvv @@ -293,12 +293,12 @@ You can use `cast send` to send transactions and interact with deployed contract Example: Deposit/mint bpNORI -The following deposits 100 bpNORI to `$TO_ADDRESS` on mumbai (the first account of the `$MNEMONIC` **must** have the `DEPOSITOR_ROLE` role). +The following deposits 100 bpNORI to `$TO_ADDRESS` on amoy (the first account of the `$MNEMONIC` **must** have the `DEPOSITOR_ROLE` role). ```bash cast send \ --mnemonic=$MNEMONIC - --rpc-url mumbai \ + --rpc-url amoy \ $TO_ADDRESS \ "deposit(address,bytes)" \ $BP_NORI_ADDRESS \ diff --git a/config/etherscan.ts b/config/etherscan.ts index bf5ee5d44..d52a9af25 100644 --- a/config/etherscan.ts +++ b/config/etherscan.ts @@ -9,10 +9,20 @@ const apiKeysAreDefined = export const etherscan: HardhatUserConfig['etherscan'] = apiKeysAreDefined ? { apiKey: { - polygonMumbai: POLYGONSCAN_API_KEY, + amoy: POLYGONSCAN_API_KEY, polygon: POLYGONSCAN_API_KEY, mainnet: ETHERSCAN_API_KEY, goerli: ETHERSCAN_API_KEY, }, + customChains: [ + { + network: 'amoy', + chainId: 80_002, + urls: { + apiURL: 'https://api-amoy.polygonscan.com/api', + browserURL: 'https://amoy.polygonscan.com', + }, + }, + ], } : undefined; diff --git a/config/networks.ts b/config/networks.ts index 83ff99479..7c5f4fecc 100644 --- a/config/networks.ts +++ b/config/networks.ts @@ -14,7 +14,7 @@ export type SupportedNetworks = keyof typeof networks; const { ETHEREUM_RPC_URL, GOERLI_RPC_URL, - MUMBAI_RPC_URL, + AMOY_RPC_URL, POLYGON_RPC_URL, MNEMONIC, LOG_HARDHAT_NETWORK, @@ -60,9 +60,9 @@ const goerli: NetworkUserConfig = { fireblocks, }; -const mumbai: NetworkUserConfig = { - chainId: 80_001, - url: MUMBAI_RPC_URL, +const amoy: NetworkUserConfig = { + chainId: 80_002, + url: AMOY_RPC_URL, gasPrice: 35_000_000_000, live: true, tags: ['polygon', 'staging'], @@ -87,14 +87,14 @@ const mainnet: NetworkUserConfig = { gasPrice: 50_000_000_000, live: true, tags: ['mainnet', 'prod'], - fireblocks + fireblocks, }; export const networks = { hardhat, ...(Boolean(MNEMONIC) && { localhost }), ...(Boolean(GOERLI_RPC_URL) && { goerli }), - ...(Boolean(MUMBAI_RPC_URL) && { mumbai }), + ...(Boolean(AMOY_RPC_URL) && { amoy }), ...(Boolean(ETHEREUM_RPC_URL) && { mainnet }), ...(Boolean(POLYGON_RPC_URL) && { polygon }), } as const; diff --git a/constants/addresses.ts b/constants/addresses.ts index 23204a029..0798538b4 100644 --- a/constants/addresses.ts +++ b/constants/addresses.ts @@ -15,4 +15,4 @@ export const PROD_USDC_TOKEN_ADDRESS = '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359'; // https://developers.circle.com/developer/docs/usdc-on-testnet#bridged-usdc-on-polygon-testnet export const STAGING_USDC_TOKEN_ADDRESS = - '0x9999f7Fea5938fD3b1E26A12c3f2fb024e194f97'; + '0x41e94eb019c0762f9bfcf9fb1e58725bfb0e7582'; diff --git a/contracts.json b/contracts.json index cc41ccb51..127de67e2 100644 --- a/contracts.json +++ b/contracts.json @@ -76,21 +76,21 @@ "proxyAddress": "0xFAdEDFe89B5A530C0a7f69bE442E190751a13093" } }, - "mumbai": { - "BridgedPolygonNORI": { - "proxyAddress": "0xd768Df6475a853194dB4afF2dDbDC0ea29F05c66" - }, + "amoy": { "Removal": { - "proxyAddress": "0x8a696730b53925d4118D96C45d53BC1Cf6925bB5" + "proxyAddress": "0x24EB36eac27bf97CC3EA573A525c46e51b01d710" }, "Certificate": { - "proxyAddress": "0xdE41AdFe4F369626925dD989b3ED0893088Fa2a4" + "proxyAddress": "0x06049AB990338d2260b3052115039405C410e201" }, "Market": { - "proxyAddress": "0xE239B41B0B6e8da4E1910fF7FE573629efd5255e" + "proxyAddress": "0xda681d144F7D839aDbE5FF457bD32613f9D8d26a" + }, + "BridgedPolygonNORI": { + "proxyAddress": "0x0" }, "LockedNORI": { - "proxyAddress": "0xCdcB43CB7B668F0C1cA04FE4b60DA7F8C62Be393" + "proxyAddress": "0x0" } }, "goerli": { diff --git a/deploy/configure-assets-after-deployment.ts b/deploy/configure-assets-after-deployment.ts index 6ab8ddc2d..ff64a5dce 100644 --- a/deploy/configure-assets-after-deployment.ts +++ b/deploy/configure-assets-after-deployment.ts @@ -58,7 +58,7 @@ export const deploy: DeployFunction = async (environment) => { purchaseTokenAddress: PROD_USDC_TOKEN_ADDRESS, feeWalletAddress: PROD_NORI_FEE_WALLET_ADDRESS, }, - mumbai: { + amoy: { priceMultiple: 2000, feePercentage: 25, purchaseTokenAddress: STAGING_USDC_TOKEN_ADDRESS, @@ -142,5 +142,5 @@ deploy.tags = ['configure']; deploy.dependencies = ['Market', 'Removal', 'market']; deploy.skip = async (hre) => Promise.resolve( - !['polygon', 'mumbai', 'localhost', 'hardhat'].includes(hre.network.name) + !['polygon', 'amoy', 'localhost', 'hardhat'].includes(hre.network.name) ); diff --git a/deploy/deploy-bridged-polygon-nori.ts b/deploy/deploy-bridged-polygon-nori.ts index a70ed0b88..8e27fff90 100644 --- a/deploy/deploy-bridged-polygon-nori.ts +++ b/deploy/deploy-bridged-polygon-nori.ts @@ -12,6 +12,10 @@ import { export const deploy: DeployFunction = async (environment) => { const hre = environment as unknown as CustomHardHatRuntimeEnvironment; + if (['mainnet', 'polygon', 'amoy'].includes(hre.network.name)) { + hre.trace('Skipping BridgedPolygonNORI deployment on live network'); + return; + } Logger.setLogLevel(Logger.levels.DEBUG); hre.trace(`deploy-bridged-polygon-nori`); const childChainManagerProxyAddress = @@ -33,5 +37,5 @@ deploy.tags = ['BridgedPolygonNORI', 'assets']; deploy.dependencies = ['preconditions']; deploy.skip = async (hre) => Promise.resolve( - !['polygon', 'mumbai', 'localhost', 'hardhat'].includes(hre.network.name) + !['polygon', 'amoy', 'localhost', 'hardhat'].includes(hre.network.name) ); diff --git a/deploy/deploy-certificate.ts b/deploy/deploy-certificate.ts index 960a5e1d5..91f81c9cc 100644 --- a/deploy/deploy-certificate.ts +++ b/deploy/deploy-certificate.ts @@ -18,5 +18,5 @@ deploy.tags = ['Certificate', 'market']; deploy.dependencies = ['preconditions']; deploy.skip = async (hre) => Promise.resolve( - !['polygon', 'mumbai', 'localhost', 'hardhat'].includes(hre.network.name) + !['polygon', 'amoy', 'localhost', 'hardhat'].includes(hre.network.name) ); diff --git a/deploy/deploy-locked-nori.ts b/deploy/deploy-locked-nori.ts index a7640fc13..8e951a264 100644 --- a/deploy/deploy-locked-nori.ts +++ b/deploy/deploy-locked-nori.ts @@ -15,8 +15,8 @@ export const deploy: DeployFunction = async (environment) => { export default deploy; deploy.tags = ['LockedNORI']; -deploy.dependencies = ['preconditions', 'BridgedPolygonNORI']; +deploy.dependencies = ['BridgedPolygonNORI', 'preconditions']; deploy.skip = async (hre) => Promise.resolve( - !['polygon', 'mumbai', 'localhost', 'hardhat'].includes(hre.network.name) + !['polygon', 'amoy', 'localhost', 'hardhat'].includes(hre.network.name) ); diff --git a/deploy/deploy-market.ts b/deploy/deploy-market.ts index 58d6c9d38..62f5494d0 100644 --- a/deploy/deploy-market.ts +++ b/deploy/deploy-market.ts @@ -4,6 +4,8 @@ import type { DeployFunction } from 'hardhat-deploy/types'; import { STAGING_NORI_FEE_WALLET_ADDRESS, PROD_NORI_FEE_WALLET_ADDRESS, + STAGING_USDC_TOKEN_ADDRESS, + PROD_USDC_TOKEN_ADDRESS, } from '@/constants/addresses'; import { deployMarketContract, finalizeDeployments } from '@/utils/deploy'; @@ -16,11 +18,21 @@ export const deploy: DeployFunction = async (environment) => { : hre.network.name === 'polygon' ? PROD_NORI_FEE_WALLET_ADDRESS : STAGING_NORI_FEE_WALLET_ADDRESS; + const deployments = await hre.deployments.all>(); + const purchasingTokenAddress = ['hardhat', 'localhost'].includes( + hre.network.name + ) + ? deployments.BridgedPolygonNORI.address + : hre.network.name === 'polygon' + ? PROD_USDC_TOKEN_ADDRESS + : STAGING_USDC_TOKEN_ADDRESS; + const contract = await deployMarketContract({ hre, feeWallet, feePercentage: 25, priceMultiple: 2000, + purchasingTokenAddress, }); await finalizeDeployments({ hre, contracts: { Market: contract } }); }; @@ -38,5 +50,5 @@ if (hre.network.name !== 'polygon') { } deploy.skip = async (hre) => Promise.resolve( - !['polygon', 'mumbai', 'localhost', 'hardhat'].includes(hre.network.name) + !['polygon', 'amoy', 'localhost', 'hardhat'].includes(hre.network.name) ); diff --git a/deploy/deploy-nori-usdc.ts b/deploy/deploy-nori-usdc.ts index dbad0966f..4a9e5d362 100644 --- a/deploy/deploy-nori-usdc.ts +++ b/deploy/deploy-nori-usdc.ts @@ -15,6 +15,5 @@ export const deploy = async ( export default deploy; deploy.tags = ['NoriUSDC', 'assets']; -deploy.dependencies = ['preconditions']; deploy.skip = async (hre: CustomHardHatRuntimeEnvironment) => Promise.resolve(!['localhost', 'hardhat'].includes(hre.network.name)); diff --git a/deploy/deploy-removal.ts b/deploy/deploy-removal.ts index f6db6625d..26807c032 100644 --- a/deploy/deploy-removal.ts +++ b/deploy/deploy-removal.ts @@ -18,5 +18,5 @@ deploy.tags = ['Removal', 'market']; deploy.dependencies = ['preconditions']; deploy.skip = async (hre) => Promise.resolve( - !['polygon', 'mumbai', 'localhost', 'hardhat'].includes(hre.network.name) + !['polygon', 'amoy', 'localhost', 'hardhat'].includes(hre.network.name) ); diff --git a/deployments/amoy/.chainId b/deployments/amoy/.chainId new file mode 100644 index 000000000..b8ca3095d --- /dev/null +++ b/deployments/amoy/.chainId @@ -0,0 +1 @@ +80002 \ No newline at end of file diff --git a/deployments/amoy/Certificate.json b/deployments/amoy/Certificate.json new file mode 100644 index 000000000..27955d6ce --- /dev/null +++ b/deployments/amoy/Certificate.json @@ -0,0 +1,1185 @@ +{ + "address": "0x06049AB990338d2260b3052115039405C410e201", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "ApprovalCallerNotOwnerNorApproved", + "type": "error" + }, + { + "inputs": [], + "name": "ApprovalQueryForNonexistentToken", + "type": "error" + }, + { + "inputs": [], + "name": "ApproveToCaller", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "array1Name", + "type": "string" + }, + { + "internalType": "string", + "name": "array2Name", + "type": "string" + } + ], + "name": "ArrayLengthMismatch", + "type": "error" + }, + { + "inputs": [], + "name": "BalanceQueryForZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "ForbiddenTransferAfterMinting", + "type": "error" + }, + { + "inputs": [], + "name": "FunctionDisabled", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidQueryRange", + "type": "error" + }, + { + "inputs": [], + "name": "MintERC2309QuantityExceedsLimit", + "type": "error" + }, + { + "inputs": [], + "name": "MintToZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "MintZeroQuantity", + "type": "error" + }, + { + "inputs": [], + "name": "OwnerQueryForNonexistentToken", + "type": "error" + }, + { + "inputs": [], + "name": "OwnershipNotInitializedForExtraData", + "type": "error" + }, + { + "inputs": [], + "name": "SenderNotRemovalContract", + "type": "error" + }, + { + "inputs": [], + "name": "TransferCallerNotOwnerNorApproved", + "type": "error" + }, + { + "inputs": [], + "name": "TransferFromIncorrectOwner", + "type": "error" + }, + { + "inputs": [], + "name": "TransferToNonERC721ReceiverImplementer", + "type": "error" + }, + { + "inputs": [], + "name": "TransferToZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "URIQueryForNonexistentToken", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "fromTokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toTokenId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "ConsecutiveTransfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "certificateId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "certificateAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "removalIds", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "removalAmounts", + "type": "uint256[]" + }, + { + "indexed": true, + "internalType": "address", + "name": "purchasingTokenAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "priceMultiple", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "noriFeePercentage", + "type": "uint256" + } + ], + "name": "CreateCertificate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract IRemoval", + "name": "removal", + "type": "address" + } + ], + "name": "RegisterContractAddresses", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "CERTIFICATE_OPERATOR_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PAUSER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "explicitOwnershipOf", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "uint64", + "name": "startTimestamp", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "burned", + "type": "bool" + }, + { + "internalType": "uint24", + "name": "extraData", + "type": "uint24" + } + ], + "internalType": "struct IERC721AUpgradeable.TokenOwnership", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + } + ], + "name": "explicitOwnershipsOf", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "uint64", + "name": "startTimestamp", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "burned", + "type": "bool" + }, + { + "internalType": "uint24", + "name": "extraData", + "type": "uint24" + } + ], + "internalType": "struct IERC721AUpgradeable.TokenOwnership[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNrtDeficit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "certificateId", + "type": "uint256" + } + ], + "name": "getPurchaseAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRemovalAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getRoleMember", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleMemberCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "incrementNrtDeficit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "baseURI", + "type": "string" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "removalIds", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "removalAmounts", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "onERC1155BatchReceived", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IRemoval", + "name": "removal", + "type": "address" + } + ], + "name": "registerContractAddresses", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "tokensOfOwner", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stop", + "type": "uint256" + } + ], + "name": "tokensOfOwnerIn", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalMinted", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "numDeployments": 2, + "bytecode": "0x60808060405234620000c6576000549060ff8260081c1662000074575060ff8082161062000038575b604051613e269081620000cc8239f35b60ff90811916176000557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498602060405160ff8152a13862000028565b62461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608490fd5b600080fdfe60806040526004361015610013575b600080fd5b60003560e01c806301ffc9a71461034757806306fdde031461033e578063081812fc14610335578063095ea7b31461032c57806318160ddd1461032357806323b872dd1461031a578063248a9ca31461031157806326c6da4f146103085780632f2ff15d146102ff57806336568abe146102f65780633f4ba83a146102ed57806342842e0e146102e457806342966c68146102db5780634b66f665146102d25780635bbb2177146102c95780635c975abb146102c05780636352211e146102b757806370a08231146102ae57806379fcc08a146102a55780638456cb591461029c5780638462151c146102935780639010d07c1461028a57806391d148541461028157806395d89b411461027857806399a2557a1461026f578063a217fddf14610266578063a22cb4651461025d578063a2309ff814610254578063ac9650d81461024b578063b88d4fde14610242578063bc197c8114610239578063c23dc68f14610230578063c87b56dd14610227578063ca15c8731461021e578063d2f3ea4314610215578063d547741f1461020c578063dd39c75014610203578063e63ab1e9146101fa578063e985e9c5146101f1578063f62d1888146101e85763fc641373146101e057600080fd5b61000e611b2b565b5061000e6119c3565b5061000e611956565b5061000e61191a565b5061000e6118fa565b5061000e61180d565b5061000e6117df565b5061000e6117b2565b5061000e61166b565b5061000e611605565b5061000e611548565b5061000e6114df565b5061000e61136d565b5061000e6112df565b5061000e6112a5565b5061000e61127b565b5061000e61123e565b5061000e611175565b5061000e61111d565b5061000e6110d6565b5061000e611017565b5061000e610f81565b5061000e610f22565b5061000e610ef2565b5061000e610ec2565b5061000e610e9e565b5061000e610de9565b5061000e610ce0565b5061000e610a57565b5061000e610a0f565b5061000e610971565b5061000e610825565b5061000e61071e565b5061000e6106e2565b5061000e6106b2565b5061000e610698565b5061000e61061c565b5061000e6105ed565b5061000e610567565b5061000e61045d565b5061000e610362565b6001600160e01b031981160361000e57565b503461000e57602036600319011261000e57602060043561038281610350565b63ffffffff60e01b16635a05180f60e01b81149081156103d8575b81156103c7575b81156103b6575b506040519015158152f35b635b5e139f60e01b149050386103ab565b6380ac58cd60e01b811491506103a4565b9050637965db0b60e01b811480156103f1575b9061039d565b506301ffc9a760e01b81146103eb565b60005b8381106104145750506000910152565b8181015183820152602001610404565b9060209161043d81518092818552858086019101610401565b601f01601f1916010190565b90602061045a928181520190610424565b90565b503461000e576000806003193601126105645760405190807f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c42908154906104a38261289a565b8086529260019280841690811561053757506001146104dd575b6104d9866104cd8188038261145b565b60405191829182610449565b0390f35b815292507f933ecf8acb7824b680a8d16f3ff3db8864228d986aa4c2ebab1eeb2703b4beb35b82841061051f5750505081016020016104cd826104d9386104bd565b80546020858701810191909152909301928101610503565b90508695506104d9969350602092506104cd94915060ff191682840152151560051b8201019293386104bd565b80fd5b503461000e57602036600319011261000e5760043561058581613500565b156105ca576000527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4660205260206001600160a01b0360406000205416604051908152f35b6040516333d1c03960e21b8152600490fd5b6001600160a01b0381160361000e57565b503461000e57604036600319011261000e5761060a6004356105dc565b6040516317e4829160e31b8152600490fd5b503461000e57600036600319011261000e576020600080516020613db1833981519152547f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c41549003604051908152f35b606090600319011261000e57600435610684816105dc565b90602435610691816105dc565b9060443590565b503461000e576106b06106aa3661066c565b91613543565b005b503461000e57602036600319011261000e5760043560005260c96020526020600160406000200154604051908152f35b503461000e57600036600319011261000e5760206040517fb6eeb50d1ea0d876d560efb18b8017323347ce323ef4b05d5a0322c9c7869f8f8152f35b503461000e57604036600319011261000e576004356107ae602435610742816105dc565b6107a960009380855260c96020526107606001604087200154611ce5565b610768612303565b80855260c960205260ff6107928460408820906001600160a01b0316600052602052604060002090565b5416156107b25760005260fb602052604060002090565b612572565b5080f35b80855260c96020526107da8360408720906001600160a01b0316600052602052604060002090565b805460ff19166001179055336001600160a01b038416827f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8880a460005260fb602052604060002090565b503461000e57604036600319011261000e57602435600435610846826105dc565b6001600160a01b03821691338303610906576107ae91610864612303565b60009381855260c960205260ff6108918460408820906001600160a01b0316600052602052604060002090565b54166108a9575b50835260fb6020526040832061262a565b81855260c96020526108d18360408720906001600160a01b0316600052602052604060002090565b805460ff191690553390827ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b8780a438610898565b60405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608490fd5b503461000e57600036600319011261000e5761098b611c90565b60655460ff8116156109ca5760ff19166065557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b60405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606490fd5b503461000e576106b0610a213661066c565b90604051926020840184811067ffffffffffffffff821117610a4a575b60405260008452613897565b610a5261141b565b610a3e565b503461000e57602036600319011261000e57600435610a7581613476565b6001600160a01b038116610ab5836000527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c46602052604060002090815490565b9290610ad46001600160a01b03841633908114908614171590565b1590565b610c64575b600093610ae5846137ab565b610c5b575b50610b27826001600160a01b03166000527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c45602052604060002090565b80546fffffffffffffffffffffffffffffffff0190556000848152600080516020613dd1833981519152602052604090204260a01b8317600360e01b179055600160e11b811615610bea575b507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8280a46106b0610bc67f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c415460010190565b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4155565b60018401610c0f81600052600080516020613dd1833981519152602052604060002090565b5415610c1c575b50610b73565b600080516020613db1833981519152548114610c1657610c5390600052600080516020613dd1833981519152602052604060002090565b553880610c16565b83905538610aea565b610cc9610ad0610cc233610caa876001600160a01b03166000527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c47602052604060002090565b906001600160a01b0316600052602052604060002090565b5460ff1690565b15610ad957604051632ce44b5f60e11b8152600490fd5b503461000e57600036600319011261000e5760206001600160a01b0361012f5416604051908152f35b9181601f8401121561000e5782359167ffffffffffffffff831161000e576020808501948460051b01011161000e57565b602060031982011261000e576004359067ffffffffffffffff821161000e57610d6591600401610d09565b9091565b6020908160408183019282815285518094520193019160005b828110610d90575050505090565b9091929382608082610ddd600194895162ffffff606080926001600160a01b03815116855267ffffffffffffffff6020820151166020860152604081015115156040860152015116910152565b01950193929101610d82565b503461000e57610df836610d3a565b610e0181611dcd565b91610e0f604051938461145b565b818352601f19610e1e83611dcd565b0160005b818110610e8757505060005b828103610e4357604051806104d98682610d69565b80836001921015610e7a575b610e5e8160051b840135613b79565b610e688287611e8a565b52610e738186611e8a565b5001610e2e565b610e82611e23565b610e4f565b602090610e92613b35565b82828801015201610e22565b503461000e57600036600319011261000e57602060ff606554166040519015158152f35b503461000e57602036600319011261000e5760206001600160a01b03610ee9600435613476565b16604051908152f35b503461000e57602036600319011261000e576020610f1a600435610f15816105dc565b61340b565b604051908152f35b503461000e57602036600319011261000e57610f3c612303565b6001600160a01b0361012f54163303610f6f5761012e8054906004358201809211610f645755005b610f6c611df4565b55005b604051639a5ed74b60e01b8152600490fd5b503461000e57600036600319011261000e57610f9b611c90565b610fa3612303565b600160ff1960655416176065557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b6020908160408183019282815285518094520193019160005b828110611003575050505090565b835185529381019392810192600101610ff5565b503461000e57602036600319011261000e57600435611035816105dc565b6000806110418361340b565b9161104b83613c3d565b93611054613b35565b506001600160a01b0390811691835b85850361107857604051806104d98982610fdc565b61108181613bd4565b60408101516110cd57516001600160a01b03168381166110c4575b5060019084848416146110b0575b01611063565b806110be838801978a611e8a565b526110aa565b9150600161109c565b506001906110aa565b503461000e57604036600319011261000e5760043560005260fb60205260206001600160a01b0361110d60243560406000206122dd565b9190546040519260031b1c168152f35b503461000e57604036600319011261000e57602060ff611169602435611142816105dc565b60043560005260c984526040600020906001600160a01b0316600052602052604060002090565b54166040519015158152f35b503461000e576000806003193601126105645760405190807f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c43908154906111bb8261289a565b8086529260019280841690811561053757506001146111e4576104d9866104cd8188038261145b565b815292507f617167b76dcc8247761fd21f427ad8ec3be6b3be203aed34e3aac08b4d31817c5b8284106112265750505081016020016104cd826104d9386104bd565b8054602085870181019190915290930192810161120a565b503461000e57606036600319011261000e576104d961126f600435611262816105dc565b6044359060243590613c6f565b60405191829182610fdc565b503461000e57600036600319011261000e57602060405160008152f35b3590811515820361000e57565b503461000e57604036600319011261000e576112c26004356105dc565b6024358015150361000e576040516317e4829160e31b8152600490fd5b503461000e57600036600319011261000e576020600080516020613db183398151915254604051908152f35b602080820190808352835180925260408301928160408460051b8301019501936000915b84831061133f5750505050505090565b909192939495848061135d600193603f198682030187528a51610424565b980193019301919493929061132f565b503461000e5761137c36610d3a565b9061138682611dcd565b91611394604051938461145b565b808352601f196113a382611dcd565b0160005b81811061140a57505060005b8181106113c857604051806104d9868261130b565b806113ea6113e46113dd611405948688611e3a565b36916114a8565b30611f0e565b6113f48287611e8a565b526113ff8186611e8a565b50611e0b565b6113b3565b8060606020809388010152016113a7565b50634e487b7160e01b600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761144e57604052565b61145661141b565b604052565b90601f8019910116810190811067ffffffffffffffff82111761144e57604052565b60209067ffffffffffffffff811161149b575b601f01601f19160190565b6114a361141b565b611490565b9291926114b48261147d565b916114c2604051938461145b565b82948184528183011161000e578281602093846000960137010152565b503461000e57608036600319011261000e576004356114fd816105dc565b602435611509816105dc565b6064359167ffffffffffffffff831161000e573660238401121561000e5761153e6106b09336906024816004013591016114a8565b9160443591613897565b503461000e5760a036600319011261000e576115656004356105dc565b6115706024356105dc565b67ffffffffffffffff60443581811161000e57611591903690600401610d09565b9160643581811161000e576115aa903690600401610d09565b608435939183851161000e573660238601121561000e57846004013593841161000e57366024858701011161000e576104d99560246115ea960193612ef3565b6040516001600160e01b031990911681529081906020820190565b503461000e57602036600319011261000e576080611624600435613b79565b611669604051809262ffffff606080926001600160a01b03815116855267ffffffffffffffff6020820151166020860152604081015115156040860152015116910152565bf35b503461000e5760208060031936011261000e5760043561168a81613500565b156117a057604051908282600061013080546116a58161289a565b8085529160019180831690811561177d5750600114611720575b5050506116ce9250038361145b565b81511561170d576104d9926116ff6116e86104cd93613acd565b6116f9604051958694850190611db6565b90611db6565b03601f19810183528261145b565b5050506104d961171b611eac565b6104cd565b60009081527f2f605e086faac1d93117bbfbc18835d434e9405fadc1ca66faf4b864746daf3495935091905b8183106117655750879450508201016116ce38806116bf565b8554888401850152948501948794509183019161174c565b925050506116ce94925060ff191682840152151560051b820101859238806116bf565b604051630a14c4b560e41b8152600490fd5b503461000e57602036600319011261000e5760043560005260fb6020526020604060002054604051908152f35b503461000e57602036600319011261000e5760043560005261012d6020526020604060002054604051908152f35b503461000e57604036600319011261000e576004356107ae602435611831816105dc565b60009280845260c960205261184c6001604086200154611ce5565b611854612303565b80845260c960205260ff61187e8360408720906001600160a01b0316600052602052604060002090565b5416611895575b835260fb6020526040832061262a565b80845260c96020526118bd8260408620906001600160a01b0316600052602052604060002090565b805460ff19169055336001600160a01b038316827ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b8780a4611885565b503461000e57600036600319011261000e57602061012e54604051908152f35b503461000e57600036600319011261000e5760206040517f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8152f35b503461000e57604036600319011261000e57602060ff61116960043561197b816105dc565b610caa6024359161198b836105dc565b6001600160a01b03166000527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c47602052604060002090565b503461000e57602036600319011261000e5760043567ffffffffffffffff811161000e573660238201121561000e57611a069036906024816004013591016114a8565b7fee151c8401928dc223602bb187aff91b9a56c7cae5476ef1b3287b085a16c85f5460ff8160081c169081600014611b225750303b155b15611ab757611a5290159182611a8457612761565b611a5857005b7fee151c8401928dc223602bb187aff91b9a56c7cae5476ef1b3287b085a16c85f805461ff0019169055005b7fee151c8401928dc223602bb187aff91b9a56c7cae5476ef1b3287b085a16c85f805461ffff1916610101179055612761565b60405162461bcd60e51b815260206004820152603760248201527f455243373231415f5f496e697469616c697a61626c653a20636f6e747261637460448201527f20697320616c726561647920696e697469616c697a65640000000000000000006064820152608490fd5b60ff1615611a3d565b503461000e57602036600319011261000e57600435611b49816105dc565b611b51612303565b3360009081527f81fe90a866a48a634a12852c1be675b683a22307409932a7443b8029347be756602052604090205460ff1615611be95760206001600160a01b037fb1baf34c07e5c91807f2e3dd3326873be3e2406ef6703ddb0946280f1b895f8b921661012f817fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055604051908152a1005b611c8c6048611c74611bfa33612141565b6116ff611c056121de565b6040519485937f416363657373436f6e74726f6c3a206163636f756e74200000000000000000006020860152611c45815180926020603789019101610401565b84017f206973206d697373696e6720726f6c652000000000000000000000000000000060378201520190611db6565b60405162461bcd60e51b815291829160048301610449565b0390fd5b3360009081527f69740cd0ab091be8193e004660c49ef128fdf47ef95c5cc8c747e37ac0379df8602052604090205460ff1615611cc957565b611c8c6048611c74611cda33612141565b6116ff611c0561224e565b8060005260c960205260ff611d11336040600020906001600160a01b0316600052602052604060002090565b541615611d1b5750565b611d2433612141565b90611d2d61205b565b906030611d3983612095565b536078611d45836120ab565b5360415b60018111611d6857611c8c6048611c74866116ff87611c0588156120f6565b90806f181899199a1a9b1b9c1cb0b131b232b360811b600f611da493166010811015611da9575b1a611d9a84866120bc565b5360041c916120db565b611d49565b611db1611e23565b611d8f565b90611dc960209282815194859201610401565b0190565b60209067ffffffffffffffff8111611de7575b60051b0190565b611def61141b565b611de0565b50634e487b7160e01b600052601160045260246000fd5b6001906000198114611e1b570190565b611dc9611df4565b50634e487b7160e01b600052603260045260246000fd5b9190811015611e7d575b60051b81013590601e198136030182121561000e57019081359167ffffffffffffffff831161000e57602001823603811361000e579190565b611e85611e23565b611e44565b6020918151811015611e9f575b60051b010190565b611ea7611e23565b611e97565b604051906020820182811067ffffffffffffffff821117611ed1575b60405260008252565b611ed961141b565b611ec8565b3d15611f09573d90611eef8261147d565b91611efd604051938461145b565b82523d6000602084013e565b606090565b90813b15611fb05760008161045a9360208394519201905af4611f2f611ede565b604051916060830183811067ffffffffffffffff821117611fa3575b604052602783527f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c60208401527f206661696c656400000000000000000000000000000000000000000000000000604084015261201b565b611fab61141b565b611f4b565b60405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608490fd5b90919015612027575090565b8151156120375750805190602001fd5b60405162461bcd60e51b815260206004820152908190611c8c906024830190610424565b604051906080820182811067ffffffffffffffff821117612088575b604052604282526060366020840137565b61209061141b565b612077565b6020908051156120a3570190565b611dc9611e23565b6021908051600110156120a3570190565b9060209180518210156120ce57010190565b6120d6611e23565b010190565b80156120e9575b6000190190565b6120f1611df4565b6120e2565b156120fd57565b606460405162461bcd60e51b815260206004820152602060248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b604051906060820182811067ffffffffffffffff8211176121d1575b604052602a82526040366020840137603061217783612095565b536078612183836120ab565b536029905b6001821161219b5761045a9150156120f6565b806f181899199a1a9b1b9c1cb0b131b232b360811b600f6121cb93166010811015611da9571a611d9a84866120bc565b90612188565b6121d961141b565b61215d565b60006121e861205b565b9060306121f483612095565b536078612200836120ab565b536041905b600182116122185761045a9150156120f6565b806f181899199a1a9b1b9c1cb0b131b232b360811b600f61224893166010811015611da9571a611d9a84866120bc565b90612205565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61227761205b565b90603061228383612095565b53607861228f836120ab565b536041905b600182116122a75761045a9150156120f6565b806f181899199a1a9b1b9c1cb0b131b232b360811b600f6122d793166010811015611da9571a611d9a84866120bc565b90612294565b80548210156122f6575b60005260206000200190600090565b6122fe611e23565b6122e7565b60ff6065541661230f57565b60405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606490fd5b6123b790612360612303565b6001600160a01b0381811660009081527f81fe90a866a48a634a12852c1be675b683a22307409932a7443b8029347be75660205260408082205490919060ff16156123ba575b80805260fb602052209116906125a5565b50565b80805260c96020526123e184838320906001600160a01b0316600052602052604060002090565b805460ff1916600117905533848416827f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a46123a6565b6123b790612426612303565b6001600160a01b0381811660009081527f69740cd0ab091be8193e004660c49ef128fdf47ef95c5cc8c747e37ac0379df860205260408082209091907f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a9060ff905b5416156124a0575b815260fb602052209116906125a5565b80825260c96020526124c785848420906001600160a01b0316600052602052604060002090565b805460ff1916600117905533858516827f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8580a4612490565b6123b79061250c612303565b6001600160a01b0381811660009081527fa65068d46483e09e8cfdb7d90215cca5eb137b30699be6445b5905c4a0f9730360205260408082209091907fb6eeb50d1ea0d876d560efb18b8017323347ce323ef4b05d5a0322c9c7869f8f9060ff90612488565b6001600160a01b0361045a9216906125a5565b916125a19183549060031b600019811b9283911b169119161790565b9055565b600181019082600052816020526040600020541560001461262257826126006125e7835468010000000000000000811015612615575b600181018555846122dd565b819391549060031b600019811b9283911b169119161790565b90555491600052602052604060002055600190565b61261d61141b565b6125db565b505050600090565b6001600160a01b0361045a921690612694565b9190820391821161264a57565b612652611df4565b565b805490811561267e576000199182019161266e83836122dd565b909182549160031b1b1916905555565b634e487b7160e01b600052603160045260246000fd5b6001810191806000528260205260406000205492831515600014612758576126e66126f593600095861980820182811161274b575b835491820191821161273e575b8082036126fb575b505050612654565b90600052602052604060002090565b55600190565b61272561271f9161270f61273594876122dd565b90549060031b1c928391876122dd565b90612585565b8590600052602052604060002090565b553880806126de565b612746611df4565b6126d6565b612753611df4565b6126c9565b50505050600090565b6000549060ff8260081c16158092819361288c575b811561286c575b5015612801576127a3908261279a600160ff196000541617600055565b6127e857612bf7565b6127a957565b6127b961ff001960005416600055565b604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602090a1565b6127fc61010061ff00196000541617600055565b612bf7565b60405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608490fd5b303b1591508161287e575b503861277d565b6001915060ff161438612877565b600160ff8216109150612776565b90600182811c921680156128ca575b60208310146128b457565b634e487b7160e01b600052602260045260246000fd5b91607f16916128a9565b601f81116128e0575050565b60009061013082527f2f605e086faac1d93117bbfbc18835d434e9405fadc1ca66faf4b864746daf34906020601f850160051c8301941061293c575b601f0160051c01915b82811061293157505050565b818155600101612925565b909250829061291c565b601f8111612952575050565b6000907f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4282527f933ecf8acb7824b680a8d16f3ff3db8864228d986aa4c2ebab1eeb2703b4beb3906020601f850160051c830194106129cc575b601f0160051c01915b8281106129c157505050565b8181556001016129b5565b90925082906129ac565b601f81116129e2575050565b6000907f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4382527f617167b76dcc8247761fd21f427ad8ec3be6b3be203aed34e3aac08b4d31817c906020601f850160051c83019410612a5c575b601f0160051c01915b828110612a5157505050565b818155600101612a45565b9092508290612a3c565b90815167ffffffffffffffff8111612b91575b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4390612aae81612aa9845461289a565b6129d6565b602080601f8311600114612aea575081929394600092612adf575b50508160011b916000199060031b1c1916179055565b015190503880612ac9565b90601f19831695612b3c7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c436000527f617167b76dcc8247761fd21f427ad8ec3be6b3be203aed34e3aac08b4d31817c90565b926000905b888210612b7957505083600195969710612b60575b505050811b019055565b015160001960f88460031b161c19169055388080612b56565b80600185968294968601518155019501930190612b41565b612b9961141b565b612a79565b60405190612bab82611432565b600b82527f43657274696669636174650000000000000000000000000000000000000000006020830152565b60405190612be482611432565b60048252632721a1a960e11b6020830152565b90815167ffffffffffffffff8111612d5c575b61013090612c2181612c1c845461289a565b6128d4565b602080601f8311600114612cd0575081929394600092612cc5575b50508160011b916000199060031b1c19161790555b612c59612ddb565b612c61612ddb565b612c7a612c6c612b9e565b612c74612bd7565b9061327c565b612c82613b05565b612c8a613b05565b612c92612dec565b612c9a612ddb565b612ca2612ddb565b612caa612ddb565b612cb333612354565b612cbc3361241a565b61265233612500565b015190503880612c3c565b90601f19831695612d046101306000527f2f605e086faac1d93117bbfbc18835d434e9405fadc1ca66faf4b864746daf3490565b926000905b888210612d4457505083600195969710612d2b575b505050811b019055612c51565b015160001960f88460031b161c19169055388080612d1e565b80600185968294968601518155019501930190612d09565b612d6461141b565b612c0a565b15612d7057565b60405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608490fd5b61265260ff60005460081c16612d69565b612dfd60ff60005460081c16612d69565b60ff1960655416606555565b9081602091031261000e5761045a90611298565b908160c091031261000e5760a06040519160c0830183811067ffffffffffffffff821117612e98575b604052612e5281611298565b83526020810135612e62816105dc565b6020840152604081013560408401526060810135612e7f816105dc565b606084015260808101356080840152013560a082015290565b612ea061141b565b612e46565b9291612eb082611dcd565b91612ebe604051938461145b565b829481845260208094019160051b810192831161000e57905b828210612ee45750505050565b81358152908301908301612ed7565b9194939092936001600160a01b0361012f54163303612fac57810190612f198282612e09565b15612f565750505050612f3c612f37612f4b93612f45933691612ea5565b612ff1565b61012e5461263d565b61012e55565b63bc197c8160e01b90565b612fa795939491612f6691612e1d565b92612f7b60208501516001600160a01b031690565b94604085015193612f9660608701516001600160a01b031690565b9460a06080880151970151976130b2565b612f4b565b60405162461bcd60e51b815260206004820152601f60248201527f43657274696669636174653a2053656e646572206e6f742052656d6f76616c006044820152606490fd5b80516000929160209160051b8101820190849083015b8281106130145750505050565b85815101958610613026578301613007565b5080fd5b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831161000e5760209260051b809284830137010190565b94926130a89460a097936001600160a01b0361309a949c9b9a9c168852602088015260c0604088015260c087019161302a565b91848303606086015261302a565b9460808201520152565b9790959296939193866130c9612f37368987612ea5565b036131c55785880361314c577fc75c026f88960a2ba4c2eb0bad4326d77c1116b7e40c22b88077c38535a7982d9561314793600080516020613db18339815191525499896131228c60005261012d602052604060002090565b5561312c8c6139c8565b6040519788976001600160a01b038091169d169a3389613067565b0390a4565b60c460405163616c411360e01b815260406004820152600a60448201527f72656d6f76616c49647300000000000000000000000000000000000000000000606482015260806024820152600e60848201527f72656d6f76616c416d6f756e747300000000000000000000000000000000000060a4820152fd5b60405162461bcd60e51b815260206004820152601b60248201527f496e636f727265637420737570706c7920616c6c6f636174696f6e00000000006044820152606490fd5b1561321157565b60405162461bcd60e51b815260206004820152603460248201527f455243373231415f5f496e697469616c697a61626c653a20636f6e747261637460448201527f206973206e6f7420696e697469616c697a696e670000000000000000000000006064820152608490fd5b91906132ae60ff7fee151c8401928dc223602bb187aff91b9a56c7cae5476ef1b3287b085a16c85f5460081c1661320a565b825167ffffffffffffffff81116133fe575b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c42906132f5816132f0845461289a565b612946565b602080601f831160011461334e5750819061332c9596600092613343575b50508160011b916000199060031b1c1916179055612a66565b6126526000600080516020613db183398151915255565b015190503880613313565b90601f198316966133a07f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c426000527f933ecf8acb7824b680a8d16f3ff3db8864228d986aa4c2ebab1eeb2703b4beb390565b926000905b8982106133e65750509083929160019461332c9899106133cd575b505050811b019055612a66565b015160001960f88460031b161c191690553880806133c0565b806001859682949686015181550195019301906133a5565b61340661141b565b6132c0565b6001600160a01b038116156134645761345f67ffffffffffffffff916001600160a01b03166000527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c45602052604060002090565b541690565b6040516323d3ad8160e21b8152600490fd5b80600080516020613db18339815191525481106134a0575b604051636f96cda160e11b8152600490fd5b600052600080516020613dd183398151915260205260406000205490600160e01b821661348e575b81156134d2575090565b9050600019016134f981600052600080516020613dd1833981519152602052604060002090565b54906134c8565b600080516020613db1833981519152548110908161351c575090565b9050600052600080516020613dd1833981519152602052600160e01b604060002054161590565b9061354d83613476565b6001600160a01b0380841692838284160361379a5760008681527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4660205260409020805490926135ac6001600160a01b03881633908114908414171590565b61373d575b821695861561372b5761364a9361360a926135cc858461382a565b613721575b506001600160a01b03166000527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c45602052604060002090565b80546000190190556001600160a01b03166000527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c45602052604060002090565b80546001019055600160e11b804260a01b85171761367f86600052600080516020613dd1833981519152602052604060002090565b558116156136b0575b507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4565b600184016136d581600052600080516020613dd1833981519152602052604060002090565b54156136e2575b50613688565b600080516020613db18339815191525481146136dc5761371990600052600080516020613dd1833981519152602052604060002090565b5538806136dc565b60009055386135d1565b604051633a954ecd60e21b8152600490fd5b613783610ad0610cc233610caa8b6001600160a01b03166000527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c47602052604060002090565b156135b157604051632ce44b5f60e11b8152600490fd5b60405162a1148160e81b8152600490fd5b6001600160a01b03906137bc612303565b3360009081527fa65068d46483e09e8cfdb7d90215cca5eb137b30699be6445b5905c4a0f973036020526040902054911615159060ff161581613821575b81613819575b5061380757565b604051630175e5a960e41b8152600490fd5b905038613800565b600091506137fa565b90613833612303565b3360009081527fa65068d46483e09e8cfdb7d90215cca5eb137b30699be6445b5905c4a0f97303602052604090206001600160a01b039283161515929060ff90541615918361388b575b505081613819575061380757565b1615159150388061387d565b9291906138a5828286613543565b803b6138b2575b50505050565b6138bb9361391f565b156138c957388080806138ac565b6040516368d2bf6b60e11b8152600490fd5b9081602091031261000e575161045a81610350565b909261045a94936080936001600160a01b03809216845216602083015260408201528160608201520190610424565b926020916139509360006001600160a01b03604051809781968295630a85bd0160e11b9b8c855233600486016138f0565b0393165af160009181613998575b5061398a5761396b611ede565b80519081613985576040516368d2bf6b60e11b8152600490fd5b602001fd5b6001600160e01b0319161490565b6139ba91925060203d81116139c1575b6139b2818361145b565b8101906138db565b903861395e565b503d6139a8565b600080516020613db1833981519152546139e0612303565b6001600160a01b0380831660009081527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c45602052604081209093906801000000000000000181540190551690600160e11b4260a01b831717613a5982600052600080516020613dd1833981519152602052604060002090565b55600190818101937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef918482848180a4845b858103613abe575050505015613aad57600080516020613db183398151915255565b604051622e076360e81b8152600490fd5b8084918684868180a401613a8b565b90604051608081019283604052925b6000190192600a906030828206018553049283613adc57809350608091030191601f1901918252565b61265260ff7fee151c8401928dc223602bb187aff91b9a56c7cae5476ef1b3287b085a16c85f5460081c1661320a565b604051906080820182811067ffffffffffffffff821117613b6c575b60405260006060838281528260208201528260408201520152565b613b7461141b565b613b51565b613b81613b35565b50613b8a613b35565b600080516020613db183398151915254821015613bcf5750613bab81613bd4565b6040810151613bcf5750613bca61045a91613bc4613b35565b50613476565b613bfc565b905090565b613bdc613b35565b50600052600080516020613dd183398151915260205261045a6040600020545b90613c05613b35565b916001600160a01b038116835267ffffffffffffffff8160a01c166020840152600160e01b81161515604084015260e81c6060830152565b90613c4782611dcd565b613c54604051918261145b565b8281528092613c65601f1991611dcd565b0190602036910137565b9082811015613d9e57600091600080516020613db183398151915254808511613d96575b50613c9d8161340b565b84831015613d8f57828503818110613d87575b505b613cbb81613c3d565b958115613d7f57613ccb84613b79565b918594604093613ce0610ad086830151151590565b613d6d575b505b8781141580613d63575b15613d5657613cff81613bd4565b80850151613d4d57516001600160a01b0390811680613d44575b509081600192871690881614613d30575b01613ce7565b80613d3e838a01998c611e8a565b52613d2a565b96506001613d19565b50600190613d2a565b5050959450505050815290565b5081871415613cf1565b516001600160a01b0316955038613ce5565b945050505050565b905038613cb0565b5082613cb2565b935038613c93565b604051631960ccad60e11b8152600490fdfe2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c402569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c44a26469706673582212201f1f95efb2912fe80c53e8e2fbe9c4d408261276bca00a5b7545f16e314fef6364736f6c63430008110033", + "deployedBytecode": "0x60806040526004361015610013575b600080fd5b60003560e01c806301ffc9a71461034757806306fdde031461033e578063081812fc14610335578063095ea7b31461032c57806318160ddd1461032357806323b872dd1461031a578063248a9ca31461031157806326c6da4f146103085780632f2ff15d146102ff57806336568abe146102f65780633f4ba83a146102ed57806342842e0e146102e457806342966c68146102db5780634b66f665146102d25780635bbb2177146102c95780635c975abb146102c05780636352211e146102b757806370a08231146102ae57806379fcc08a146102a55780638456cb591461029c5780638462151c146102935780639010d07c1461028a57806391d148541461028157806395d89b411461027857806399a2557a1461026f578063a217fddf14610266578063a22cb4651461025d578063a2309ff814610254578063ac9650d81461024b578063b88d4fde14610242578063bc197c8114610239578063c23dc68f14610230578063c87b56dd14610227578063ca15c8731461021e578063d2f3ea4314610215578063d547741f1461020c578063dd39c75014610203578063e63ab1e9146101fa578063e985e9c5146101f1578063f62d1888146101e85763fc641373146101e057600080fd5b61000e611b2b565b5061000e6119c3565b5061000e611956565b5061000e61191a565b5061000e6118fa565b5061000e61180d565b5061000e6117df565b5061000e6117b2565b5061000e61166b565b5061000e611605565b5061000e611548565b5061000e6114df565b5061000e61136d565b5061000e6112df565b5061000e6112a5565b5061000e61127b565b5061000e61123e565b5061000e611175565b5061000e61111d565b5061000e6110d6565b5061000e611017565b5061000e610f81565b5061000e610f22565b5061000e610ef2565b5061000e610ec2565b5061000e610e9e565b5061000e610de9565b5061000e610ce0565b5061000e610a57565b5061000e610a0f565b5061000e610971565b5061000e610825565b5061000e61071e565b5061000e6106e2565b5061000e6106b2565b5061000e610698565b5061000e61061c565b5061000e6105ed565b5061000e610567565b5061000e61045d565b5061000e610362565b6001600160e01b031981160361000e57565b503461000e57602036600319011261000e57602060043561038281610350565b63ffffffff60e01b16635a05180f60e01b81149081156103d8575b81156103c7575b81156103b6575b506040519015158152f35b635b5e139f60e01b149050386103ab565b6380ac58cd60e01b811491506103a4565b9050637965db0b60e01b811480156103f1575b9061039d565b506301ffc9a760e01b81146103eb565b60005b8381106104145750506000910152565b8181015183820152602001610404565b9060209161043d81518092818552858086019101610401565b601f01601f1916010190565b90602061045a928181520190610424565b90565b503461000e576000806003193601126105645760405190807f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c42908154906104a38261289a565b8086529260019280841690811561053757506001146104dd575b6104d9866104cd8188038261145b565b60405191829182610449565b0390f35b815292507f933ecf8acb7824b680a8d16f3ff3db8864228d986aa4c2ebab1eeb2703b4beb35b82841061051f5750505081016020016104cd826104d9386104bd565b80546020858701810191909152909301928101610503565b90508695506104d9969350602092506104cd94915060ff191682840152151560051b8201019293386104bd565b80fd5b503461000e57602036600319011261000e5760043561058581613500565b156105ca576000527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4660205260206001600160a01b0360406000205416604051908152f35b6040516333d1c03960e21b8152600490fd5b6001600160a01b0381160361000e57565b503461000e57604036600319011261000e5761060a6004356105dc565b6040516317e4829160e31b8152600490fd5b503461000e57600036600319011261000e576020600080516020613db1833981519152547f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c41549003604051908152f35b606090600319011261000e57600435610684816105dc565b90602435610691816105dc565b9060443590565b503461000e576106b06106aa3661066c565b91613543565b005b503461000e57602036600319011261000e5760043560005260c96020526020600160406000200154604051908152f35b503461000e57600036600319011261000e5760206040517fb6eeb50d1ea0d876d560efb18b8017323347ce323ef4b05d5a0322c9c7869f8f8152f35b503461000e57604036600319011261000e576004356107ae602435610742816105dc565b6107a960009380855260c96020526107606001604087200154611ce5565b610768612303565b80855260c960205260ff6107928460408820906001600160a01b0316600052602052604060002090565b5416156107b25760005260fb602052604060002090565b612572565b5080f35b80855260c96020526107da8360408720906001600160a01b0316600052602052604060002090565b805460ff19166001179055336001600160a01b038416827f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8880a460005260fb602052604060002090565b503461000e57604036600319011261000e57602435600435610846826105dc565b6001600160a01b03821691338303610906576107ae91610864612303565b60009381855260c960205260ff6108918460408820906001600160a01b0316600052602052604060002090565b54166108a9575b50835260fb6020526040832061262a565b81855260c96020526108d18360408720906001600160a01b0316600052602052604060002090565b805460ff191690553390827ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b8780a438610898565b60405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608490fd5b503461000e57600036600319011261000e5761098b611c90565b60655460ff8116156109ca5760ff19166065557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b60405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606490fd5b503461000e576106b0610a213661066c565b90604051926020840184811067ffffffffffffffff821117610a4a575b60405260008452613897565b610a5261141b565b610a3e565b503461000e57602036600319011261000e57600435610a7581613476565b6001600160a01b038116610ab5836000527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c46602052604060002090815490565b9290610ad46001600160a01b03841633908114908614171590565b1590565b610c64575b600093610ae5846137ab565b610c5b575b50610b27826001600160a01b03166000527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c45602052604060002090565b80546fffffffffffffffffffffffffffffffff0190556000848152600080516020613dd1833981519152602052604090204260a01b8317600360e01b179055600160e11b811615610bea575b507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8280a46106b0610bc67f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c415460010190565b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4155565b60018401610c0f81600052600080516020613dd1833981519152602052604060002090565b5415610c1c575b50610b73565b600080516020613db1833981519152548114610c1657610c5390600052600080516020613dd1833981519152602052604060002090565b553880610c16565b83905538610aea565b610cc9610ad0610cc233610caa876001600160a01b03166000527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c47602052604060002090565b906001600160a01b0316600052602052604060002090565b5460ff1690565b15610ad957604051632ce44b5f60e11b8152600490fd5b503461000e57600036600319011261000e5760206001600160a01b0361012f5416604051908152f35b9181601f8401121561000e5782359167ffffffffffffffff831161000e576020808501948460051b01011161000e57565b602060031982011261000e576004359067ffffffffffffffff821161000e57610d6591600401610d09565b9091565b6020908160408183019282815285518094520193019160005b828110610d90575050505090565b9091929382608082610ddd600194895162ffffff606080926001600160a01b03815116855267ffffffffffffffff6020820151166020860152604081015115156040860152015116910152565b01950193929101610d82565b503461000e57610df836610d3a565b610e0181611dcd565b91610e0f604051938461145b565b818352601f19610e1e83611dcd565b0160005b818110610e8757505060005b828103610e4357604051806104d98682610d69565b80836001921015610e7a575b610e5e8160051b840135613b79565b610e688287611e8a565b52610e738186611e8a565b5001610e2e565b610e82611e23565b610e4f565b602090610e92613b35565b82828801015201610e22565b503461000e57600036600319011261000e57602060ff606554166040519015158152f35b503461000e57602036600319011261000e5760206001600160a01b03610ee9600435613476565b16604051908152f35b503461000e57602036600319011261000e576020610f1a600435610f15816105dc565b61340b565b604051908152f35b503461000e57602036600319011261000e57610f3c612303565b6001600160a01b0361012f54163303610f6f5761012e8054906004358201809211610f645755005b610f6c611df4565b55005b604051639a5ed74b60e01b8152600490fd5b503461000e57600036600319011261000e57610f9b611c90565b610fa3612303565b600160ff1960655416176065557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b6020908160408183019282815285518094520193019160005b828110611003575050505090565b835185529381019392810192600101610ff5565b503461000e57602036600319011261000e57600435611035816105dc565b6000806110418361340b565b9161104b83613c3d565b93611054613b35565b506001600160a01b0390811691835b85850361107857604051806104d98982610fdc565b61108181613bd4565b60408101516110cd57516001600160a01b03168381166110c4575b5060019084848416146110b0575b01611063565b806110be838801978a611e8a565b526110aa565b9150600161109c565b506001906110aa565b503461000e57604036600319011261000e5760043560005260fb60205260206001600160a01b0361110d60243560406000206122dd565b9190546040519260031b1c168152f35b503461000e57604036600319011261000e57602060ff611169602435611142816105dc565b60043560005260c984526040600020906001600160a01b0316600052602052604060002090565b54166040519015158152f35b503461000e576000806003193601126105645760405190807f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c43908154906111bb8261289a565b8086529260019280841690811561053757506001146111e4576104d9866104cd8188038261145b565b815292507f617167b76dcc8247761fd21f427ad8ec3be6b3be203aed34e3aac08b4d31817c5b8284106112265750505081016020016104cd826104d9386104bd565b8054602085870181019190915290930192810161120a565b503461000e57606036600319011261000e576104d961126f600435611262816105dc565b6044359060243590613c6f565b60405191829182610fdc565b503461000e57600036600319011261000e57602060405160008152f35b3590811515820361000e57565b503461000e57604036600319011261000e576112c26004356105dc565b6024358015150361000e576040516317e4829160e31b8152600490fd5b503461000e57600036600319011261000e576020600080516020613db183398151915254604051908152f35b602080820190808352835180925260408301928160408460051b8301019501936000915b84831061133f5750505050505090565b909192939495848061135d600193603f198682030187528a51610424565b980193019301919493929061132f565b503461000e5761137c36610d3a565b9061138682611dcd565b91611394604051938461145b565b808352601f196113a382611dcd565b0160005b81811061140a57505060005b8181106113c857604051806104d9868261130b565b806113ea6113e46113dd611405948688611e3a565b36916114a8565b30611f0e565b6113f48287611e8a565b526113ff8186611e8a565b50611e0b565b6113b3565b8060606020809388010152016113a7565b50634e487b7160e01b600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761144e57604052565b61145661141b565b604052565b90601f8019910116810190811067ffffffffffffffff82111761144e57604052565b60209067ffffffffffffffff811161149b575b601f01601f19160190565b6114a361141b565b611490565b9291926114b48261147d565b916114c2604051938461145b565b82948184528183011161000e578281602093846000960137010152565b503461000e57608036600319011261000e576004356114fd816105dc565b602435611509816105dc565b6064359167ffffffffffffffff831161000e573660238401121561000e5761153e6106b09336906024816004013591016114a8565b9160443591613897565b503461000e5760a036600319011261000e576115656004356105dc565b6115706024356105dc565b67ffffffffffffffff60443581811161000e57611591903690600401610d09565b9160643581811161000e576115aa903690600401610d09565b608435939183851161000e573660238601121561000e57846004013593841161000e57366024858701011161000e576104d99560246115ea960193612ef3565b6040516001600160e01b031990911681529081906020820190565b503461000e57602036600319011261000e576080611624600435613b79565b611669604051809262ffffff606080926001600160a01b03815116855267ffffffffffffffff6020820151166020860152604081015115156040860152015116910152565bf35b503461000e5760208060031936011261000e5760043561168a81613500565b156117a057604051908282600061013080546116a58161289a565b8085529160019180831690811561177d5750600114611720575b5050506116ce9250038361145b565b81511561170d576104d9926116ff6116e86104cd93613acd565b6116f9604051958694850190611db6565b90611db6565b03601f19810183528261145b565b5050506104d961171b611eac565b6104cd565b60009081527f2f605e086faac1d93117bbfbc18835d434e9405fadc1ca66faf4b864746daf3495935091905b8183106117655750879450508201016116ce38806116bf565b8554888401850152948501948794509183019161174c565b925050506116ce94925060ff191682840152151560051b820101859238806116bf565b604051630a14c4b560e41b8152600490fd5b503461000e57602036600319011261000e5760043560005260fb6020526020604060002054604051908152f35b503461000e57602036600319011261000e5760043560005261012d6020526020604060002054604051908152f35b503461000e57604036600319011261000e576004356107ae602435611831816105dc565b60009280845260c960205261184c6001604086200154611ce5565b611854612303565b80845260c960205260ff61187e8360408720906001600160a01b0316600052602052604060002090565b5416611895575b835260fb6020526040832061262a565b80845260c96020526118bd8260408620906001600160a01b0316600052602052604060002090565b805460ff19169055336001600160a01b038316827ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b8780a4611885565b503461000e57600036600319011261000e57602061012e54604051908152f35b503461000e57600036600319011261000e5760206040517f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8152f35b503461000e57604036600319011261000e57602060ff61116960043561197b816105dc565b610caa6024359161198b836105dc565b6001600160a01b03166000527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c47602052604060002090565b503461000e57602036600319011261000e5760043567ffffffffffffffff811161000e573660238201121561000e57611a069036906024816004013591016114a8565b7fee151c8401928dc223602bb187aff91b9a56c7cae5476ef1b3287b085a16c85f5460ff8160081c169081600014611b225750303b155b15611ab757611a5290159182611a8457612761565b611a5857005b7fee151c8401928dc223602bb187aff91b9a56c7cae5476ef1b3287b085a16c85f805461ff0019169055005b7fee151c8401928dc223602bb187aff91b9a56c7cae5476ef1b3287b085a16c85f805461ffff1916610101179055612761565b60405162461bcd60e51b815260206004820152603760248201527f455243373231415f5f496e697469616c697a61626c653a20636f6e747261637460448201527f20697320616c726561647920696e697469616c697a65640000000000000000006064820152608490fd5b60ff1615611a3d565b503461000e57602036600319011261000e57600435611b49816105dc565b611b51612303565b3360009081527f81fe90a866a48a634a12852c1be675b683a22307409932a7443b8029347be756602052604090205460ff1615611be95760206001600160a01b037fb1baf34c07e5c91807f2e3dd3326873be3e2406ef6703ddb0946280f1b895f8b921661012f817fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055604051908152a1005b611c8c6048611c74611bfa33612141565b6116ff611c056121de565b6040519485937f416363657373436f6e74726f6c3a206163636f756e74200000000000000000006020860152611c45815180926020603789019101610401565b84017f206973206d697373696e6720726f6c652000000000000000000000000000000060378201520190611db6565b60405162461bcd60e51b815291829160048301610449565b0390fd5b3360009081527f69740cd0ab091be8193e004660c49ef128fdf47ef95c5cc8c747e37ac0379df8602052604090205460ff1615611cc957565b611c8c6048611c74611cda33612141565b6116ff611c0561224e565b8060005260c960205260ff611d11336040600020906001600160a01b0316600052602052604060002090565b541615611d1b5750565b611d2433612141565b90611d2d61205b565b906030611d3983612095565b536078611d45836120ab565b5360415b60018111611d6857611c8c6048611c74866116ff87611c0588156120f6565b90806f181899199a1a9b1b9c1cb0b131b232b360811b600f611da493166010811015611da9575b1a611d9a84866120bc565b5360041c916120db565b611d49565b611db1611e23565b611d8f565b90611dc960209282815194859201610401565b0190565b60209067ffffffffffffffff8111611de7575b60051b0190565b611def61141b565b611de0565b50634e487b7160e01b600052601160045260246000fd5b6001906000198114611e1b570190565b611dc9611df4565b50634e487b7160e01b600052603260045260246000fd5b9190811015611e7d575b60051b81013590601e198136030182121561000e57019081359167ffffffffffffffff831161000e57602001823603811361000e579190565b611e85611e23565b611e44565b6020918151811015611e9f575b60051b010190565b611ea7611e23565b611e97565b604051906020820182811067ffffffffffffffff821117611ed1575b60405260008252565b611ed961141b565b611ec8565b3d15611f09573d90611eef8261147d565b91611efd604051938461145b565b82523d6000602084013e565b606090565b90813b15611fb05760008161045a9360208394519201905af4611f2f611ede565b604051916060830183811067ffffffffffffffff821117611fa3575b604052602783527f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c60208401527f206661696c656400000000000000000000000000000000000000000000000000604084015261201b565b611fab61141b565b611f4b565b60405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608490fd5b90919015612027575090565b8151156120375750805190602001fd5b60405162461bcd60e51b815260206004820152908190611c8c906024830190610424565b604051906080820182811067ffffffffffffffff821117612088575b604052604282526060366020840137565b61209061141b565b612077565b6020908051156120a3570190565b611dc9611e23565b6021908051600110156120a3570190565b9060209180518210156120ce57010190565b6120d6611e23565b010190565b80156120e9575b6000190190565b6120f1611df4565b6120e2565b156120fd57565b606460405162461bcd60e51b815260206004820152602060248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b604051906060820182811067ffffffffffffffff8211176121d1575b604052602a82526040366020840137603061217783612095565b536078612183836120ab565b536029905b6001821161219b5761045a9150156120f6565b806f181899199a1a9b1b9c1cb0b131b232b360811b600f6121cb93166010811015611da9571a611d9a84866120bc565b90612188565b6121d961141b565b61215d565b60006121e861205b565b9060306121f483612095565b536078612200836120ab565b536041905b600182116122185761045a9150156120f6565b806f181899199a1a9b1b9c1cb0b131b232b360811b600f61224893166010811015611da9571a611d9a84866120bc565b90612205565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61227761205b565b90603061228383612095565b53607861228f836120ab565b536041905b600182116122a75761045a9150156120f6565b806f181899199a1a9b1b9c1cb0b131b232b360811b600f6122d793166010811015611da9571a611d9a84866120bc565b90612294565b80548210156122f6575b60005260206000200190600090565b6122fe611e23565b6122e7565b60ff6065541661230f57565b60405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606490fd5b6123b790612360612303565b6001600160a01b0381811660009081527f81fe90a866a48a634a12852c1be675b683a22307409932a7443b8029347be75660205260408082205490919060ff16156123ba575b80805260fb602052209116906125a5565b50565b80805260c96020526123e184838320906001600160a01b0316600052602052604060002090565b805460ff1916600117905533848416827f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a46123a6565b6123b790612426612303565b6001600160a01b0381811660009081527f69740cd0ab091be8193e004660c49ef128fdf47ef95c5cc8c747e37ac0379df860205260408082209091907f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a9060ff905b5416156124a0575b815260fb602052209116906125a5565b80825260c96020526124c785848420906001600160a01b0316600052602052604060002090565b805460ff1916600117905533858516827f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8580a4612490565b6123b79061250c612303565b6001600160a01b0381811660009081527fa65068d46483e09e8cfdb7d90215cca5eb137b30699be6445b5905c4a0f9730360205260408082209091907fb6eeb50d1ea0d876d560efb18b8017323347ce323ef4b05d5a0322c9c7869f8f9060ff90612488565b6001600160a01b0361045a9216906125a5565b916125a19183549060031b600019811b9283911b169119161790565b9055565b600181019082600052816020526040600020541560001461262257826126006125e7835468010000000000000000811015612615575b600181018555846122dd565b819391549060031b600019811b9283911b169119161790565b90555491600052602052604060002055600190565b61261d61141b565b6125db565b505050600090565b6001600160a01b0361045a921690612694565b9190820391821161264a57565b612652611df4565b565b805490811561267e576000199182019161266e83836122dd565b909182549160031b1b1916905555565b634e487b7160e01b600052603160045260246000fd5b6001810191806000528260205260406000205492831515600014612758576126e66126f593600095861980820182811161274b575b835491820191821161273e575b8082036126fb575b505050612654565b90600052602052604060002090565b55600190565b61272561271f9161270f61273594876122dd565b90549060031b1c928391876122dd565b90612585565b8590600052602052604060002090565b553880806126de565b612746611df4565b6126d6565b612753611df4565b6126c9565b50505050600090565b6000549060ff8260081c16158092819361288c575b811561286c575b5015612801576127a3908261279a600160ff196000541617600055565b6127e857612bf7565b6127a957565b6127b961ff001960005416600055565b604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602090a1565b6127fc61010061ff00196000541617600055565b612bf7565b60405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608490fd5b303b1591508161287e575b503861277d565b6001915060ff161438612877565b600160ff8216109150612776565b90600182811c921680156128ca575b60208310146128b457565b634e487b7160e01b600052602260045260246000fd5b91607f16916128a9565b601f81116128e0575050565b60009061013082527f2f605e086faac1d93117bbfbc18835d434e9405fadc1ca66faf4b864746daf34906020601f850160051c8301941061293c575b601f0160051c01915b82811061293157505050565b818155600101612925565b909250829061291c565b601f8111612952575050565b6000907f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4282527f933ecf8acb7824b680a8d16f3ff3db8864228d986aa4c2ebab1eeb2703b4beb3906020601f850160051c830194106129cc575b601f0160051c01915b8281106129c157505050565b8181556001016129b5565b90925082906129ac565b601f81116129e2575050565b6000907f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4382527f617167b76dcc8247761fd21f427ad8ec3be6b3be203aed34e3aac08b4d31817c906020601f850160051c83019410612a5c575b601f0160051c01915b828110612a5157505050565b818155600101612a45565b9092508290612a3c565b90815167ffffffffffffffff8111612b91575b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4390612aae81612aa9845461289a565b6129d6565b602080601f8311600114612aea575081929394600092612adf575b50508160011b916000199060031b1c1916179055565b015190503880612ac9565b90601f19831695612b3c7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c436000527f617167b76dcc8247761fd21f427ad8ec3be6b3be203aed34e3aac08b4d31817c90565b926000905b888210612b7957505083600195969710612b60575b505050811b019055565b015160001960f88460031b161c19169055388080612b56565b80600185968294968601518155019501930190612b41565b612b9961141b565b612a79565b60405190612bab82611432565b600b82527f43657274696669636174650000000000000000000000000000000000000000006020830152565b60405190612be482611432565b60048252632721a1a960e11b6020830152565b90815167ffffffffffffffff8111612d5c575b61013090612c2181612c1c845461289a565b6128d4565b602080601f8311600114612cd0575081929394600092612cc5575b50508160011b916000199060031b1c19161790555b612c59612ddb565b612c61612ddb565b612c7a612c6c612b9e565b612c74612bd7565b9061327c565b612c82613b05565b612c8a613b05565b612c92612dec565b612c9a612ddb565b612ca2612ddb565b612caa612ddb565b612cb333612354565b612cbc3361241a565b61265233612500565b015190503880612c3c565b90601f19831695612d046101306000527f2f605e086faac1d93117bbfbc18835d434e9405fadc1ca66faf4b864746daf3490565b926000905b888210612d4457505083600195969710612d2b575b505050811b019055612c51565b015160001960f88460031b161c19169055388080612d1e565b80600185968294968601518155019501930190612d09565b612d6461141b565b612c0a565b15612d7057565b60405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608490fd5b61265260ff60005460081c16612d69565b612dfd60ff60005460081c16612d69565b60ff1960655416606555565b9081602091031261000e5761045a90611298565b908160c091031261000e5760a06040519160c0830183811067ffffffffffffffff821117612e98575b604052612e5281611298565b83526020810135612e62816105dc565b6020840152604081013560408401526060810135612e7f816105dc565b606084015260808101356080840152013560a082015290565b612ea061141b565b612e46565b9291612eb082611dcd565b91612ebe604051938461145b565b829481845260208094019160051b810192831161000e57905b828210612ee45750505050565b81358152908301908301612ed7565b9194939092936001600160a01b0361012f54163303612fac57810190612f198282612e09565b15612f565750505050612f3c612f37612f4b93612f45933691612ea5565b612ff1565b61012e5461263d565b61012e55565b63bc197c8160e01b90565b612fa795939491612f6691612e1d565b92612f7b60208501516001600160a01b031690565b94604085015193612f9660608701516001600160a01b031690565b9460a06080880151970151976130b2565b612f4b565b60405162461bcd60e51b815260206004820152601f60248201527f43657274696669636174653a2053656e646572206e6f742052656d6f76616c006044820152606490fd5b80516000929160209160051b8101820190849083015b8281106130145750505050565b85815101958610613026578301613007565b5080fd5b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831161000e5760209260051b809284830137010190565b94926130a89460a097936001600160a01b0361309a949c9b9a9c168852602088015260c0604088015260c087019161302a565b91848303606086015261302a565b9460808201520152565b9790959296939193866130c9612f37368987612ea5565b036131c55785880361314c577fc75c026f88960a2ba4c2eb0bad4326d77c1116b7e40c22b88077c38535a7982d9561314793600080516020613db18339815191525499896131228c60005261012d602052604060002090565b5561312c8c6139c8565b6040519788976001600160a01b038091169d169a3389613067565b0390a4565b60c460405163616c411360e01b815260406004820152600a60448201527f72656d6f76616c49647300000000000000000000000000000000000000000000606482015260806024820152600e60848201527f72656d6f76616c416d6f756e747300000000000000000000000000000000000060a4820152fd5b60405162461bcd60e51b815260206004820152601b60248201527f496e636f727265637420737570706c7920616c6c6f636174696f6e00000000006044820152606490fd5b1561321157565b60405162461bcd60e51b815260206004820152603460248201527f455243373231415f5f496e697469616c697a61626c653a20636f6e747261637460448201527f206973206e6f7420696e697469616c697a696e670000000000000000000000006064820152608490fd5b91906132ae60ff7fee151c8401928dc223602bb187aff91b9a56c7cae5476ef1b3287b085a16c85f5460081c1661320a565b825167ffffffffffffffff81116133fe575b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c42906132f5816132f0845461289a565b612946565b602080601f831160011461334e5750819061332c9596600092613343575b50508160011b916000199060031b1c1916179055612a66565b6126526000600080516020613db183398151915255565b015190503880613313565b90601f198316966133a07f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c426000527f933ecf8acb7824b680a8d16f3ff3db8864228d986aa4c2ebab1eeb2703b4beb390565b926000905b8982106133e65750509083929160019461332c9899106133cd575b505050811b019055612a66565b015160001960f88460031b161c191690553880806133c0565b806001859682949686015181550195019301906133a5565b61340661141b565b6132c0565b6001600160a01b038116156134645761345f67ffffffffffffffff916001600160a01b03166000527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c45602052604060002090565b541690565b6040516323d3ad8160e21b8152600490fd5b80600080516020613db18339815191525481106134a0575b604051636f96cda160e11b8152600490fd5b600052600080516020613dd183398151915260205260406000205490600160e01b821661348e575b81156134d2575090565b9050600019016134f981600052600080516020613dd1833981519152602052604060002090565b54906134c8565b600080516020613db1833981519152548110908161351c575090565b9050600052600080516020613dd1833981519152602052600160e01b604060002054161590565b9061354d83613476565b6001600160a01b0380841692838284160361379a5760008681527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4660205260409020805490926135ac6001600160a01b03881633908114908414171590565b61373d575b821695861561372b5761364a9361360a926135cc858461382a565b613721575b506001600160a01b03166000527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c45602052604060002090565b80546000190190556001600160a01b03166000527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c45602052604060002090565b80546001019055600160e11b804260a01b85171761367f86600052600080516020613dd1833981519152602052604060002090565b558116156136b0575b507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4565b600184016136d581600052600080516020613dd1833981519152602052604060002090565b54156136e2575b50613688565b600080516020613db18339815191525481146136dc5761371990600052600080516020613dd1833981519152602052604060002090565b5538806136dc565b60009055386135d1565b604051633a954ecd60e21b8152600490fd5b613783610ad0610cc233610caa8b6001600160a01b03166000527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c47602052604060002090565b156135b157604051632ce44b5f60e11b8152600490fd5b60405162a1148160e81b8152600490fd5b6001600160a01b03906137bc612303565b3360009081527fa65068d46483e09e8cfdb7d90215cca5eb137b30699be6445b5905c4a0f973036020526040902054911615159060ff161581613821575b81613819575b5061380757565b604051630175e5a960e41b8152600490fd5b905038613800565b600091506137fa565b90613833612303565b3360009081527fa65068d46483e09e8cfdb7d90215cca5eb137b30699be6445b5905c4a0f97303602052604090206001600160a01b039283161515929060ff90541615918361388b575b505081613819575061380757565b1615159150388061387d565b9291906138a5828286613543565b803b6138b2575b50505050565b6138bb9361391f565b156138c957388080806138ac565b6040516368d2bf6b60e11b8152600490fd5b9081602091031261000e575161045a81610350565b909261045a94936080936001600160a01b03809216845216602083015260408201528160608201520190610424565b926020916139509360006001600160a01b03604051809781968295630a85bd0160e11b9b8c855233600486016138f0565b0393165af160009181613998575b5061398a5761396b611ede565b80519081613985576040516368d2bf6b60e11b8152600490fd5b602001fd5b6001600160e01b0319161490565b6139ba91925060203d81116139c1575b6139b2818361145b565b8101906138db565b903861395e565b503d6139a8565b600080516020613db1833981519152546139e0612303565b6001600160a01b0380831660009081527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c45602052604081209093906801000000000000000181540190551690600160e11b4260a01b831717613a5982600052600080516020613dd1833981519152602052604060002090565b55600190818101937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef918482848180a4845b858103613abe575050505015613aad57600080516020613db183398151915255565b604051622e076360e81b8152600490fd5b8084918684868180a401613a8b565b90604051608081019283604052925b6000190192600a906030828206018553049283613adc57809350608091030191601f1901918252565b61265260ff7fee151c8401928dc223602bb187aff91b9a56c7cae5476ef1b3287b085a16c85f5460081c1661320a565b604051906080820182811067ffffffffffffffff821117613b6c575b60405260006060838281528260208201528260408201520152565b613b7461141b565b613b51565b613b81613b35565b50613b8a613b35565b600080516020613db183398151915254821015613bcf5750613bab81613bd4565b6040810151613bcf5750613bca61045a91613bc4613b35565b50613476565b613bfc565b905090565b613bdc613b35565b50600052600080516020613dd183398151915260205261045a6040600020545b90613c05613b35565b916001600160a01b038116835267ffffffffffffffff8160a01c166020840152600160e01b81161515604084015260e81c6060830152565b90613c4782611dcd565b613c54604051918261145b565b8281528092613c65601f1991611dcd565b0190602036910137565b9082811015613d9e57600091600080516020613db183398151915254808511613d96575b50613c9d8161340b565b84831015613d8f57828503818110613d87575b505b613cbb81613c3d565b958115613d7f57613ccb84613b79565b918594604093613ce0610ad086830151151590565b613d6d575b505b8781141580613d63575b15613d5657613cff81613bd4565b80850151613d4d57516001600160a01b0390811680613d44575b509081600192871690881614613d30575b01613ce7565b80613d3e838a01998c611e8a565b52613d2a565b96506001613d19565b50600190613d2a565b5050959450505050815290565b5081871415613cf1565b516001600160a01b0316955038613ce5565b945050505050565b905038613cb0565b5082613cb2565b935038613c93565b604051631960ccad60e11b8152600490fdfe2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c402569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c44a26469706673582212201f1f95efb2912fe80c53e8e2fbe9c4d408261276bca00a5b7545f16e314fef6364736f6c63430008110033" +} \ No newline at end of file diff --git a/deployments/amoy/Market.json b/deployments/amoy/Market.json new file mode 100644 index 000000000..8df2697fe --- /dev/null +++ b/deployments/amoy/Market.json @@ -0,0 +1,1324 @@ +{ + "address": "0xda681d144F7D839aDbE5FF457bD32613f9D8d26a", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "CertificateNotYetMinted", + "type": "error" + }, + { + "inputs": [], + "name": "ERC20TransferFailed", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientSupply", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "InvalidCertificateAmount", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidNoriFeePercentage", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidPriceMultiple", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "decimals", + "type": "uint256" + } + ], + "name": "InvalidPurchasingTokenDecimals", + "type": "error" + }, + { + "inputs": [], + "name": "LowSupplyAllowlistRequired", + "type": "error" + }, + { + "inputs": [], + "name": "NoriFeeWalletZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "removalId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "year", + "type": "uint256" + } + ], + "name": "RemovalNotFoundInYear", + "type": "error" + }, + { + "inputs": [], + "name": "ReplacementAmountExceedsNrtDeficit", + "type": "error" + }, + { + "inputs": [], + "name": "ReplacementAmountMismatch", + "type": "error" + }, + { + "inputs": [], + "name": "SenderNotRemovalContract", + "type": "error" + }, + { + "inputs": [], + "name": "UnauthorizedWithdrawal", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "supplierAddress", + "type": "address" + } + ], + "name": "AddRemoval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "added", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "next", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "previous", + "type": "address" + } + ], + "name": "AddSupplier", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract Removal", + "name": "removal", + "type": "address" + }, + { + "indexed": false, + "internalType": "contract Certificate", + "name": "certificate", + "type": "address" + }, + { + "indexed": false, + "internalType": "contract IERC20WithPermit", + "name": "purchasingToken", + "type": "address" + } + ], + "name": "RegisterContractAddresses", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "removed", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "next", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "previous", + "type": "address" + } + ], + "name": "RemoveSupplier", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "priceMultiple", + "type": "uint256" + } + ], + "name": "SetPriceMultiple", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "threshold", + "type": "uint256" + } + ], + "name": "SetPriorityRestrictedThreshold", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract IERC20WithPermit", + "name": "purchasingToken", + "type": "address" + } + ], + "name": "SetPurchasingToken", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "certificateId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "removalIds", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "removalIdsBeingReplaced", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "amountsBeingReplaced", + "type": "uint256[]" + }, + { + "indexed": true, + "internalType": "address", + "name": "purchasingTokenAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "priceMultiple", + "type": "uint256" + } + ], + "name": "UpdateCertificate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "updatedFeePercentage", + "type": "uint256" + } + ], + "name": "UpdateNoriFeePercentage", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "updatedWalletAddress", + "type": "address" + } + ], + "name": "UpdateNoriFeeWalletAddress", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MARKET_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PAUSER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PRIORITY_ALLOWLIST_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "SWAP_ALLOWLIST_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "purchaseTotal", + "type": "uint256" + } + ], + "name": "calculateCertificateAmountFromPurchaseTotal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "purchaseTotal", + "type": "uint256" + } + ], + "name": "calculateCertificateAmountFromPurchaseTotalWithoutFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "calculateCheckoutTotal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "priceMultiple", + "type": "uint256" + } + ], + "name": "calculateCheckoutTotalWithoutFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "calculateNoriFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "purchasingTokenAmount", + "type": "uint256" + } + ], + "name": "convertPurchasingTokenDecimalsToRemovalDecimals", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "removalAmount", + "type": "uint256" + } + ], + "name": "convertRemovalDecimalsToPurchasingTokenDecimals", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getActiveSuppliers", + "outputs": [ + { + "internalType": "address[]", + "name": "suppliers", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getCertificateAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNoriFeePercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNoriFeeWallet", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPriceMultiple", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPriorityRestrictedThreshold", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPurchasingTokenAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRemovalAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "supplier", + "type": "address" + } + ], + "name": "getRemovalIdsForSupplier", + "outputs": [ + { + "internalType": "uint256[]", + "name": "removalIds", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getRoleMember", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleMemberCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract Removal", + "name": "removal", + "type": "address" + }, + { + "internalType": "contract IERC20WithPermit", + "name": "purchasingToken", + "type": "address" + }, + { + "internalType": "contract Certificate", + "name": "certificate", + "type": "address" + }, + { + "internalType": "address", + "name": "noriFeeWalletAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "noriFeePercentage_", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "priceMultiple_", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155BatchReceived", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract Removal", + "name": "removal", + "type": "address" + }, + { + "internalType": "contract Certificate", + "name": "certificate", + "type": "address" + }, + { + "internalType": "contract IERC20WithPermit", + "name": "purchasingToken", + "type": "address" + } + ], + "name": "registerContractAddresses", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "removalId", + "type": "uint256" + } + ], + "name": "release", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "treasury", + "type": "address" + }, + { + "internalType": "uint256", + "name": "certificateId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalAmountToReplace", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "removalIdsBeingReplaced", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amountsBeingReplaced", + "type": "uint256[]" + } + ], + "name": "replace", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "noriFeePercentage_", + "type": "uint256" + } + ], + "name": "setNoriFeePercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "noriFeeWalletAddress", + "type": "address" + } + ], + "name": "setNoriFeeWallet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "threshold", + "type": "uint256" + } + ], + "name": "setPriorityRestrictedThreshold", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20WithPermit", + "name": "purchasingToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "priceMultiple", + "type": "uint256" + } + ], + "name": "setPurchasingTokenAndPriceMultiple", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "swap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "swap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "address", + "name": "purchaser", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "customFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "customPriceMultiple", + "type": "uint256" + }, + { + "internalType": "address", + "name": "supplier", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "vintages", + "type": "uint256[]" + } + ], + "name": "swapWithoutFeeSpecialOrder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "removalId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "numDeployments": 2, + "bytecode": "0x60808060405234620000c6576000549060ff8260081c1662000074575060ff8082161062000038575b6040516155eb9081620000cc8239f35b60ff90811916176000557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498602060405160ff8152a13862000028565b62461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608490fd5b600080fdfe60806040526004361015610013575b600080fd5b60003560e01c8062f714ce146103be57806301ffc9a7146103b557806302e0affa146103ac5780631ce08c0b146103a3578063248a9ca31461039a57806325fbff7a146103915780632c9fcbd7146103885780632f2ff15d1461037f578063327860491461037657806336568abe1461036d57806337bdc99b146103645780633f4ba83a1461035b5780634b66f66514610352578063596abe94146103495780635c975abb14610340578063652b0525146103375780636cf250e21461032e57806375ccff41146103255780637f49f7381461031c5780638456cb591461031357806384e043221461030a5780638c6b8d98146103015780638d73f9ef146102f85780639010d07c146102ef57806391d14854146102e65780639b7d4af5146102dd5780639d1fbcf5146102d4578063a217fddf146102cb578063a5758566146102c2578063a8f881c0146102b9578063ac9650d8146102b0578063b9054257146102a7578063bc197c811461029e578063c0c7028c14610295578063ca15c8731461028c578063ce0ec47414610283578063d004f0f71461027a578063d547741f14610271578063d6f0d39f14610268578063d797462f1461025f578063d7c41c7914610256578063dfa4bb0f1461024d578063e63ab1e914610244578063e6e0a0381461023b578063e7f78c7214610232578063f23a6e61146102295763f9c285281461022157600080fd5b61000e6122c0565b5061000e61223a565b5061000e612211565b5061000e61213c565b5061000e612100565b5061000e612067565b5061000e611f46565b5061000e611ef0565b5061000e611eb4565b5061000e611dc7565b5061000e611d41565b5061000e611c52565b5061000e611c1a565b5061000e611b78565b5061000e611ab9565b5061000e611a6b565b5061000e61199b565b5061000e6118d1565b5061000e6117cf565b5061000e6117b2565b5061000e611793565b5061000e611757565b5061000e6116ff565b5061000e6116b8565b5061000e61167c565b5061000e611343565b5061000e611191565b5061000e611136565b5061000e61110d565b5061000e611083565b5061000e611063565b5061000e610ea7565b5061000e610e52565b5061000e610cd7565b5061000e610c6a565b5061000e610bcc565b5061000e610afc565b5061000e6109b0565b5061000e61093f565b5061000e610838565b5061000e61080f565b5061000e61070a565b5061000e610692565b5061000e61066b565b5061000e6105c0565b5061000e61054f565b5061000e6103d8565b6001600160a01b0381160361000e57565b503461000e57604036600319011261000e576004356024356103f9816103c7565b610401612d13565b6104186001600160a01b038360201c169182614354565b1561053d57610427818361420c565b61044961043d61012d546001600160a01b031690565b6001600160a01b031690565b604051627eeac760e11b81523060048201526024810184905290602082604481845afa918215610530575b600092610500575b50803b1561000e57604051637921219560e11b81523060048201526001600160a01b039390931660248401526044830193909352606482015260a06084820152600060a482018190529091829060c490829084905af180156104f3575b6104e0575b005b806104ed6104de926111e9565b80610804565b6104fb6133f9565b6104d9565b61052291925060203d8111610529575b61051a8183611242565b8101906133ea565b903861047c565b503d610510565b6105386133f9565b610474565b6040516360b39bc560e01b8152600490fd5b503461000e57602036600319011261000e5760043563ffffffff60e01b811680910361000e57602090635a05180f60e01b8114908115610595575b506040519015158152f35b637965db0b60e01b8114915081156105af575b503861058a565b6301ffc9a760e01b149050386105a8565b503461000e57602036600319011261000e5761062f61061f604051639d1fbcf560e01b81526004356004820152602081602481305afa90811561065e575b600091610640575b50610131549081606402916064830403610633576135a0565b6040519081529081906020820190565b0390f35b61063b6126a8565b6135a0565b610658915060203d81116105295761051a8183611242565b38610606565b6106666133f9565b6105fe565b503461000e57602036600319011261000e57602061068a600435613729565b604051908152f35b503461000e57602036600319011261000e5760043560005260976020526020600160406000200154604051908152f35b90815180825260208080930193019160005b8281106106e2575050505090565b8351855293810193928101926001016106d4565b9060206107079281815201906106c2565b90565b503461000e5760208060031936011261000e576004359061072a826103c7565b6001600160a01b03600092168252610137815260408083209260028401549080948190600196878201549081975b868311156107df575061076b915061385d565b955b848111156107825785518061062f89826106f6565b86610797828490600052602052604060002090565b8054908a875b8381106107b75750505050506107b2906126bf565b61076d565b829394976107d36107c9838596612cff565b918481019a6127a0565b5201908a93929161079d565b906107f76107fd918488528584528988205490612979565b926126bf565b9190610758565b600091031261000e57565b503461000e57600036600319011261000e5760206001600160a01b0361012f5416604051908152f35b503461000e57604036600319011261000e576004356108c860243561085c816103c7565b6108c3600093808552609760205261087a60016040872001546125c7565b610882612d13565b808552609760205260ff6108ac8460408820906001600160a01b0316600052602052604060002090565b5416156108cc5760005260c9602052604060002090565b612ff4565b5080f35b80855260976020526108f48360408720906001600160a01b0316600052602052604060002090565b805460ff19166001179055336001600160a01b038416827f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8880a460005260c9602052604060002090565b503461000e57602036600319011261000e5760043561095c61235e565b610964612d13565b6064811161099e576020817fb9768ed0b3c8d7421842f14094358b08617bad6081b469cd89de35a8d46678589261013355604051908152a1005b60405163edb7340760e01b8152600490fd5b503461000e57604036600319011261000e576024356004356109d1826103c7565b6001600160a01b03821691338303610a91576108c8916109ef612d13565b600093818552609760205260ff610a1c8460408820906001600160a01b0316600052602052604060002090565b5416610a34575b50835260c9602052604083206130ac565b8185526097602052610a5c8360408720906001600160a01b0316600052602052604060002090565b805460ff191690553390827ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b8780a438610a23565b60405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608490fd5b503461000e57602036600319011261000e57600435610b19612d13565b610b2f61043d61012d546001600160a01b031690565b906001600160a01b03918281163303610bba57604051627eeac760e11b81523060048201526024810183905290602090829060449082905afa908115610bad575b600091610b8f575b5015610b8057005b6104de918160201c169061420c565b610ba7915060203d81116105295761051a8183611242565b38610b78565b610bb56133f9565b610b70565b604051639a5ed74b60e01b8152600490fd5b503461000e57600036600319011261000e57610be6612448565b60335460ff811615610c255760ff19166033557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b60405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606490fd5b503461000e57600036600319011261000e5760206001600160a01b0361012d5416604051908152f35b6020908160408183019282815285518094520193019160005b828110610cba575050505090565b83516001600160a01b031685529381019392810192600101610cac565b503461000e57600036600319011261000e576000610cfe610135546001600160a01b031690565b906001600160a01b03600181610d3a82610d2c876001600160a01b0316600052610136602052604060002090565b01546001600160a01b031690565b16610de6575b5050610d4b8161385d565b91610d72610d6d826001600160a01b0316600052610136602052604060002090565b61388f565b6000915b838310610d8b576040518061062f8782610c93565b610dbb91610dad602092610d9f86896127a0565b906001600160a01b03169052565b01516001600160a01b031690565b610ddf6107f7610d6d836001600160a01b0316600052610136602052604060002090565b9190610d76565b80925091610e0c81610d2c866001600160a01b0316600052610136602052604060002090565b828516905b8184821603610e21575050610d40565b6107f783610d2c610e4a93979596976001600160a01b0316600052610136602052604060002090565b939291610e11565b503461000e57600036600319011261000e57602060ff603354166040519015158152f35b9181601f8401121561000e5782359167ffffffffffffffff831161000e576020808501948460051b01011161000e57565b503461000e5760e036600319011261000e57600435610ec5816103c7565b60243590610ed2826103c7565b60a43590604435610ee2836103c7565b60c4359367ffffffffffffffff851161000e57610fee610ff893610f0d6104de973690600401610e76565b96610f16612d13565b610f1e61235e565b610131978854986084359055610f3387614276565b610f3b613f8d565b50610f44613f8d565b508061103c575090506001600160a01b0381166110295750610fa460046020610f7961043d61012d546001600160a01b031690565b604051630964eec760e41b815292839182905afa90811561101c575b600091610ffe575b50856145ca565b610fde610fb0856145e3565b935b610fba611264565b95600087526064356020880152604087015260608601906001600160a01b03169052565b6001600160a01b03166080840152565b60a0820152613e1d565b61013155565b611016915060203d81116105295761051a8183611242565b38610f9d565b6110246133f9565b610f95565b611036610fde91866148e5565b93610fb2565b610fde926001600160a01b03831661105957611036925087614b48565b6110369288614e4d565b503461000e57600036600319011261000e57602061013354604051908152f35b503461000e57604036600319011261000e5760206110af6004356110a681614276565b6024359061362a565b60405190631ce08c0b60e01b825260048201528181602481305afa908115611100575b6000916110e3575b50604051908152f35b6110fa9150823d81116105295761051a8183611242565b386110da565b6111086133f9565b6110d2565b503461000e57600036600319011261000e5760206001600160a01b036101325416604051908152f35b503461000e57600036600319011261000e57611150612448565b611158612d13565b600160ff1960335416176033557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b503461000e57604036600319011261000e576111c76004356111b2816103c7565b6111ba612d13565b6111c261235e565b6138d8565b6104de6024356139d7565b50634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff81116111fd57604052565b6112056111d2565b604052565b60c0810190811067ffffffffffffffff8211176111fd57604052565b6020810190811067ffffffffffffffff8211176111fd57604052565b90601f8019910116810190811067ffffffffffffffff8211176111fd57604052565b604051906112718261120a565b565b604051906080820182811067ffffffffffffffff8211176111fd57604052565b604051906040820182811067ffffffffffffffff8211176111fd57604052565b60209067ffffffffffffffff81116112cd575b60051b0190565b6112d56111d2565b6112c6565b92916112e5826112b3565b916112f36040519384611242565b829481845260208094019160051b810192831161000e57905b8282106113195750505050565b8135815290830190830161130c565b9080601f8301121561000e57816020610707933591016112da565b503461000e5760a036600319011261000e576004803590611363826103c7565b6024359067ffffffffffffffff9060443560643583811161000e5761138b9036908401611328565b9260843590811161000e576113a39036908401611328565b926113ac612d13565b6113b461235e565b61012e906113cc61043d83546001600160a01b031690565b9460409182519663d2f3ea4360e01b88526020978881806113f48d8c83019190602083019252565b0381855afa90811561166f575b600091611652575b501561163357878791855192838092630dd39c7560e41b82525afa908115611626575b600091611609575b5085116115f95761012d611481878961145761043d85546001600160a01b031690565b8751630964eec760e41b815292839182905afa9081156115ec575b6000916115cf575b50876145ca565b61148a866145e3565b9988848c805192839101519061149f916134a7565b9c8288820151906114af916134a7565b998a92836114bc9261454e565b60600151916114ca93613a4a565b546001600160a01b03166001600160a01b031693546001600160a01b03166001600160a01b03168351809881016115046001602083019252565b03601f19810189526115169089611242565b843b1561000e5760008a6115aa968893836001600160a01b039b6115717f40a27cbb002b48214250b00c6c1b15ff8276b363217ca42c7b1720bcf269a76c9e8b5198899788968795631759616b60e11b875230908701613406565b03925af180156115c2575b6115af575b5061159861043d61012f546001600160a01b031690565b94610131549351968796169986613455565b0390a3005b806104ed6115bc926111e9565b38611581565b6115ca6133f9565b61157c565b6115e691508a3d8c116105295761051a8183611242565b3861147a565b6115f46133f9565b611472565b825163b106efdf60e01b81528690fd5b6116209150883d8a116105295761051a8183611242565b38611434565b61162e6133f9565b61142c565b8351630165035b60e71b81528088018a815281906020010390fd5b0390fd5b6116699150893d8b116105295761051a8183611242565b38611409565b6116776133f9565b611401565b503461000e57600036600319011261000e5760206040517f42608067b0bf67dbb5cd52cbd32a7797b31a5a621ecdc484ee82e05952de64638152f35b503461000e57604036600319011261000e5760043560005260c960205260206001600160a01b036116ef6024356040600020612cd9565b9190546040519260031b1c168152f35b503461000e57604036600319011261000e57602060ff61174b602435611724816103c7565b600435600052609784526040600020906001600160a01b0316600052602052604060002090565b54166040519015158152f35b503461000e57600036600319011261000e5760206040517fa41464e222c873935a35e8d3fd7cd44e0e6847c2388d0873d52cbaebdcb51b8b8152f35b503461000e57602036600319011261000e57602061068a6004356137c4565b503461000e57600036600319011261000e57602060405160008152f35b503461000e5760208060031936011261000e5761061f61062f916004356117f581614276565b6118268280611807610131548561362a565b60405180948192631ce08c0b60e01b8352600483019190602083019252565b0381305afa9182156118c4575b6000926118a3575b5060405163dfa4bb0f60e01b815260048101939093529091908180602481015b0381305afa928315611896575b600093611877575b5050612979565b61188e929350803d106105295761051a8183611242565b903880611870565b61189e6133f9565b611868565b61185b92506118be90823d84116105295761051a8183611242565b9161183b565b6118cc6133f9565b611833565b503461000e57600036600319011261000e57602061013154604051908152f35b60005b8381106119045750506000910152565b81810151838201526020016118f4565b9060209161192d815180928185528580860191016118f1565b601f01601f1916010190565b602080820190808352835180925260408301928160408460051b8301019501936000915b84831061196d5750505050505090565b909192939495848061198b600193603f198682030187528a51611914565b980193019301919493929061195d565b503461000e5760208060031936011261000e5760043567ffffffffffffffff811161000e576119ce903690600401610e76565b6119d7816112b3565b926119e56040519485611242565b818452601f196119f4836112b3565b0160005b818110611a5c5750505060005b818110611a1a576040518061062f8682611939565b80611a3c611a36611a2f611a579486886126ee565b3691612769565b30612840565b611a4682876127a0565b52611a5181866127a0565b506126bf565b611a05565b606086820184015282016119f8565b503461000e57600036600319011261000e57602061013454604051908152f35b9181601f8401121561000e5782359167ffffffffffffffff831161000e576020838186019501011161000e57565b503461000e5760a036600319011261000e57611ad66004356103c7565b611ae16024356103c7565b67ffffffffffffffff60443581811161000e57611b02903690600401610e76565b60649291923582811161000e57611b1d903690600401610e76565b505060843591821161000e5761062f92611b3e611b45933690600401611a8b565b50506134cb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681529081906020820190565b503461000e57602036600319011261000e5761062f61061f604051639d1fbcf560e01b81526004356004820152602081602481305afa908115611c0d575b600091611bef575b50611bdc6101335460640180606411611be2575b6101315490612942565b906135a0565b611bea6126a8565b611bd2565b611c07915060203d81116105295761051a8183611242565b38611bbe565b611c156133f9565b611bb6565b503461000e57602036600319011261000e5760043560005260c96020526020604060002054604051908152f35b60ff81160361000e57565b503461000e5760c036600319011261000e576104de600435611c73816103c7565b60243590610fee60643591611c8783611c47565b611c8f612d13565b611c9761249d565b611ca084614276565b611cef611cac85613fd1565b6040516352bac2b360e11b815260048101879052909490602081602481305afa908115611d34575b600091611d16575b5060a435916084359160443590336140aa565b6101335493611cfc611264565b600181529460208601526040850152336060850152610fde565b611d2e915060203d81116105295761051a8183611242565b38611cdc565b611d3c6133f9565b611cd4565b503461000e57604036600319011261000e576104de600435611d62816103c7565b60243590611d6e612d13565b611d7661249d565b611d7f82614276565b6001600160a01b03611d9083613fd1565b91610133549360405194611da38661120a565b600186526020860152604085015233606085015216608083015260a0820152613e1d565b503461000e57604036600319011261000e576004356108c8602435611deb816103c7565b6000928084526097602052611e0660016040862001546125c7565b611e0e612d13565b808452609760205260ff611e388360408720906001600160a01b0316600052602052604060002090565b5416611e4f575b835260c9602052604083206130ac565b8084526097602052611e778260408620906001600160a01b0316600052602052604060002090565b805460ff19169055336001600160a01b038316827ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b8780a4611e3f565b503461000e57600036600319011261000e5760206040517f3fb0aaa9e8051cfc6c234a5d843bed33910f70c647055f27247c10144c7552e18152f35b503461000e57602036600319011261000e577fa01a3b548ccd65893a6acee4ea0da2602fbd2aef7e3040483b026d9544d8074c6020600435611f30612d13565b611f3861235e565b8061013455604051908152a1005b503461000e5760c036600319011261000e57600435611f64816103c7565b611fd6602435611f73816103c7565b60443592611f80846103c7565b606435611f8c816103c7565b60005494611fb160ff8760081c161580978198612059575b8115612039575b506131e7565b85611fc4600160ff196000541617600055565b612020575b60a4359360843593613259565b611fdc57005b611fec61ff001960005416600055565b604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989080602081015b0390a1005b61203461010061ff00196000541617600055565b611fc9565b303b1591508161204b575b5038611fab565b6001915060ff161438612044565b600160ff8216109150611fa4565b503461000e57602036600319011261000e5761062f612098612090610131546101335490612942565b600435613690565b60405190631ce08c0b60e01b82526004820152602081602481305afa9081156120f3575b6000916120d5575b506040519081529081906020820190565b6120ed915060203d81116105295761051a8183611242565b386120c4565b6120fb6133f9565b6120bc565b503461000e57600036600319011261000e5760206040517f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8152f35b503461000e57606036600319011261000e577f35586385f29ca78c095aefba70466838737342adc742949a3a63f91bc021b6d160043561217b816103c7565b60243590612188826103c7565b61201b60443592612198846103c7565b6121a06124f2565b6121a8612d13565b6001600160a01b0380931692806001600160a01b03199261012d8685825416179055169461012e868482541617905516908161012f918254161790556040519384938491604091949360608401956001600160a01b039283809216865216602085015216910152565b503461000e57600036600319011261000e5760206001600160a01b0361012e5416604051908152f35b503461000e5760a036600319011261000e576122576004356103c7565b6122626024356103c7565b60843567ffffffffffffffff811161000e57612282903690600401611a8b565b505061228c612d13565b6122a36001600160a01b0361012d54163314613520565b6122ae604435614115565b60405163f23a6e6160e01b8152602090f35b503461000e57602036600319011261000e576001600160a01b036004356122e6816103c7565b6122ee61235e565b6122f6612d13565b16801561233d5760207fe846164b6756d387276a93f2200cfd28f5792fffe3530e65d95d7535cd43dab491610132816001600160a01b0319825416179055604051908152a1005b604051632de6d64560e21b8152600490fd5b90600052602052604060002090565b3360009081527fb34b648d285118a9ee5f8cc4675698367f99ed092c20555b8b9380d41d2fafb5602052604090205460ff161561239757565b61164e60486124306123a833612a6c565b6124226123b3612b09565b6040519485937f416363657373436f6e74726f6c3a206163636f756e742000000000000000000060208601526123f38151809260206037890191016118f1565b84017f206973206d697373696e6720726f6c652000000000000000000000000000000060378201520190612680565b03601f198101835282611242565b60405162461bcd60e51b815291829160048301612697565b3360009081527f793844da0378ca0230b21a4013ef02cf55735b90b39c85241478ff94b5eceb28602052604090205460ff161561248157565b61164e604861243061249233612a6c565b6124226123b3612b98565b3360009081527f023d1dfe360df7b21961cef7fff4938a9828ddbe51fae255e431bd158b76ae3b602052604090205460ff16156124d657565b61164e60486124306124e733612a6c565b6124226123b3612c27565b3360009081527f683723e34a772b6e4f2c919bba7fa32ed8ea11a8325f54da7db716e9d9dd98c7602052604090205460ff161561252b57565b61253433612a6c565b600061253e612986565b90603061254a836129c0565b536078612556836129d6565b5360415b600181116125795761164e604861243086612422876123b38815612a21565b90806f181899199a1a9b1b9c1cb0b131b232b360811b600f6125b5931660108110156125ba575b1a6125ab84866129e7565b5360041c91612a06565b61255a565b6125c26126d7565b6125a0565b80600052609760205260ff6125f3336040600020906001600160a01b0316600052602052604060002090565b5416156125fd5750565b61260633612a6c565b9061260f612986565b90603061261b836129c0565b536078612627836129d6565b5360415b6001811161264a5761164e604861243086612422876123b38815612a21565b90806f181899199a1a9b1b9c1cb0b131b232b360811b600f61267b931660108110156125ba571a6125ab84866129e7565b61262b565b90612693602092828151948592016118f1565b0190565b906020610707928181520190611914565b50634e487b7160e01b600052601160045260246000fd5b60019060001981146126cf570190565b6126936126a8565b50634e487b7160e01b600052603260045260246000fd5b9190811015612731575b60051b81013590601e198136030182121561000e57019081359167ffffffffffffffff831161000e57602001823603811361000e579190565b6127396126d7565b6126f8565b60209067ffffffffffffffff811161275c575b601f01601f19160190565b6127646111d2565b612751565b9291926127758261273e565b916127836040519384611242565b82948184528183011161000e578281602093846000960137010152565b60209181518110156127b5575b60051b010190565b6127bd6126d7565b6127ad565b604051906060820182811067ffffffffffffffff821117612833575b604052602782527f206661696c6564000000000000000000000000000000000000000000000000006040837f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c60208201520152565b61283b6111d2565b6127de565b90813b15612897576000816107079360208394519201905af43d15612890573d6128698161273e565b906128776040519283611242565b81523d6000602083013e5b61288a6127c2565b91612902565b6060612882565b60405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608490fd5b9091901561290e575090565b81511561291e5750805190602001fd5b60405162461bcd60e51b81526020600482015290819061164e906024830190611914565b8181029291811591840414171561295557565b6112716126a8565b906002820180921161295557565b906001820180921161295557565b9190820180921161295557565b604051906080820182811067ffffffffffffffff8211176129b3575b604052604282526060366020840137565b6129bb6111d2565b6129a2565b6020908051156129ce570190565b6126936126d7565b6021908051600110156129ce570190565b9060209180518210156129f957010190565b612a016126d7565b010190565b8015612a14575b6000190190565b612a1c6126a8565b612a0d565b15612a2857565b606460405162461bcd60e51b815260206004820152602060248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b604051906060820182811067ffffffffffffffff821117612afc575b604052602a825260403660208401376030612aa2836129c0565b536078612aae836129d6565b536029905b60018211612ac657610707915015612a21565b806f181899199a1a9b1b9c1cb0b131b232b360811b600f612af6931660108110156125ba571a6125ab84866129e7565b90612ab3565b612b046111d2565b612a88565b7f3fb0aaa9e8051cfc6c234a5d843bed33910f70c647055f27247c10144c7552e1612b32612986565b906030612b3e836129c0565b536078612b4a836129d6565b536041905b60018211612b6257610707915015612a21565b806f181899199a1a9b1b9c1cb0b131b232b360811b600f612b92931660108110156125ba571a6125ab84866129e7565b90612b4f565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a612bc1612986565b906030612bcd836129c0565b536078612bd9836129d6565b536041905b60018211612bf157610707915015612a21565b806f181899199a1a9b1b9c1cb0b131b232b360811b600f612c21931660108110156125ba571a6125ab84866129e7565b90612bde565b7f42608067b0bf67dbb5cd52cbd32a7797b31a5a621ecdc484ee82e05952de6463612c50612986565b906030612c5c836129c0565b536078612c68836129d6565b536041905b60018211612c8057610707915015612a21565b806f181899199a1a9b1b9c1cb0b131b232b360811b600f612cb0931660108110156125ba571a6125ab84866129e7565b90612c6d565b805415612ccc575b600052602060002090600090565b612cd46126d7565b612cbe565b8054821015612cf2575b60005260206000200190600090565b612cfa6126d7565b612ce3565b90612d0991612cd9565b90549060031b1c90565b60ff60335416612d1f57565b60405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606490fd5b612dc790612d70612d13565b6001600160a01b0381811660009081527f683723e34a772b6e4f2c919bba7fa32ed8ea11a8325f54da7db716e9d9dd98c760205260408082205490919060ff1615612dca575b80805260c960205220911690613027565b50565b8080526097602052612df184838320906001600160a01b0316600052602052604060002090565b805460ff1916600117905533848416827f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4612db6565b612dc790612e36612d13565b6001600160a01b0381811660009081527f0e0ee6959fd583d0bdb8c46ba6cdbcd38e0eb4ccd036d927cdf9c104046b2eef60205260408082209091907fa41464e222c873935a35e8d3fd7cd44e0e6847c2388d0873d52cbaebdcb51b8b9060ff905b541615612eb0575b815260c960205220911690613027565b8082526097602052612ed785848420906001600160a01b0316600052602052604060002090565b805460ff1916600117905533858516827f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8580a4612ea0565b612dc790612f1c612d13565b6001600160a01b0381811660009081527f023d1dfe360df7b21961cef7fff4938a9828ddbe51fae255e431bd158b76ae3b60205260408082209091907f42608067b0bf67dbb5cd52cbd32a7797b31a5a621ecdc484ee82e05952de64639060ff90612e98565b612dc790612f8e612d13565b6001600160a01b0381811660009081527fb34b648d285118a9ee5f8cc4675698367f99ed092c20555b8b9380d41d2fafb560205260408082209091907f3fb0aaa9e8051cfc6c234a5d843bed33910f70c647055f27247c10144c7552e19060ff90612e98565b6001600160a01b03610707921690613027565b916130239183549060031b600019811b9283911b169119161790565b9055565b60018101908260005281602052604060002054156000146130a45782613082613069835468010000000000000000811015613097575b60018101855584612cd9565b819391549060031b600019811b9283911b169119161790565b90555491600052602052604060002055600190565b61309f6111d2565b61305d565b505050600090565b6001600160a01b03610707921690613129565b601203906012821161295557565b60001981019190821161295557565b9190820391821161295557565b805490811561311357600019918201916131038383612cd9565b909182549160031b1b1916905555565b634e487b7160e01b600052603160045260246000fd5b60018101918060005282602052604060002054928315156000146131de5761234f61317b9360009586198082018281116131d1575b83549182019182116131c4575b808203613181575b5050506130e9565b55600190565b6131ab6131a5916131956131bb9487612cd9565b90549060031b1c92839187612cd9565b90613007565b8590600052602052604060002090565b55388080613173565b6131cc6126a8565b61316b565b6131d96126a8565b61315e565b50505050600090565b156131ee57565b60405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608490fd5b929493949190916001600160a01b03938482161561233d57613343966132f961331d946132ff9361333e9861328c6133d9565b6132946133d9565b6132a560ff60005460081c16613367565b60ff19603354166033556132b76133d9565b6132bf6133d9565b6132c76133d9565b61012d91166001600160a01b03198254161790556001600160a01b0361012e91166001600160a01b0319825416179055565b61013355565b6001600160a01b0361013291166001600160a01b0319825416179055565b613328600061013455565b6111c26101356001600160a01b03198154169055565b6139d7565b61334c33612d64565b61335533612e2a565b61335e33612f10565b61127133612f82565b1561336e57565b60405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608490fd5b61127160ff60005460081c16613367565b9081602091031261000e575190565b506040513d6000823e3d90fd5b9390610707959361343991613447946001600160a01b03809216885216602087015260a0604087015260a08601906106c2565b9084820360608601526106c2565b916080818403910152611914565b959493906080936134866134a2946134786134949460a08c5260a08c01906106c2565b908a820360208c01526106c2565b9088820360408a01526106c2565b9086820360608801526106c2565b930152565b90815181116134b557815290565b634e487b7160e01b600052600160045260246000fd5b6134d3612d13565b6134ea6001600160a01b0361012d54163314613520565b60005b828110613503575063bc197c8160e01b92915050565b8061351661351b9260051b840135614115565b6126bf565b6134ed565b1561352757565b60405162461bcd60e51b815260206004820152601a60248201527f4d61726b65743a2053656e646572206e6f742052656d6f76616c0000000000006044820152606490fd5b50634e487b7160e01b600052601260045260246000fd5b811561358d570490565b61359561356c565b0490565b1561000e57565b61271091600019838309928083029283808610950394808603951461361d579082916135cd868411613599565b096001821901821680920460028082600302188083028203028083028203028083028203028083028203028083028203028092029003029360018380600003040190848311900302920304170290565b5050906107079250613583565b6000198282098282029182808310920391808303921461368657816064111561000e577f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c29936064910990828211900360fe1b910360021c170290565b5050606491500490565b90600019818309818302918280831092039180830392146136ed57612710908282111561000e577fbc01a36e2eb1c432ca57a786c226809d495182a9930be0ded288ce703afb7e91940990828211900360fc1b910360041c170290565b505061271091500490565b9081602091031261000e575161070781611c47565b604d811161371c575b600a0a90565b6137246126a8565b613716565b60ff600460206001600160a01b0361012f54166040519283809263313ce56760e01b82525afa9081156137b7575b600091613789575b5016601281146137855761377561377a916130bf565b61370d565b90811561358d570490565b5090565b6137aa915060203d81116137b0575b6137a28183611242565b8101906136f8565b3861375f565b503d613798565b6137bf6133f9565b613757565b60ff600460206001600160a01b0361012f54166040519283809263313ce56760e01b82525afa908115613838575b60009161381a575b5016601281146137855790613814613775610707936130bf565b90612942565b613832915060203d81116137b0576137a28183611242565b386137fa565b6138406133f9565b6137f2565b60405161385181611226565b60008152906000368137565b90613867826112b3565b6138746040519182611242565b8281528092613885601f19916112b3565b0190602036910137565b906040516040810181811067ffffffffffffffff8211176138cb575b6040526020819360016001600160a01b0391828154168552015416910152565b6138d36111d2565b6138ab565b60405163313ce56760e01b81526020816004816001600160a01b0386165afa9081156139ca575b6000916139ac575b5060ff8116601281119081156139a1575b50613984575061397f816139657f94e2ca3c006ff5152db658db7f198e3606e0c8584958dbb13538cdd9b30ccb72936001600160a01b0361012f91166001600160a01b0319825416179055565b6040516001600160a01b0390911681529081906020820190565b0390a1565b6040516304a68c5760e11b815260ff919091166004820152602490fd5b600691501038613918565b6139c4915060203d81116137b0576137a28183611242565b38613907565b6139d26133f9565b6138ff565b80151580613a28575b613a16576020817f36a09eaea278b547d70faf65508009f5a7d32dfd33d27131e792f7e78bb421589261013155604051908152a1565b60405163b7b3e22f60e01b8152600490fd5b50606481106139e0565b9081602091031261000e5751801515810361000e5790565b92909160005b838110613a5e575050505050565b613a76613a6b82846127a0565b51610131549061362a565b60408051631ce08c0b60e01b8152600480820193909352602090613b1b9082908181602481305afa908115613baa575b600091613b8d575b50613ac561043d61012f546001600160a01b031690565b613adf613ad2898c6127a0565b516001600160a01b031690565b60008d8851968795869485936323b872dd60e01b85528d85016040919493929460608201956001600160a01b0380921683521660208201520152565b03925af1918215613b80575b600092613b53575b505015613b46575050613b41906126bf565b613a50565b51633c9fd93960e21b8152fd5b613b729250803d10613b79575b613b6a8183611242565b810190613a32565b3880613b2f565b503d613b60565b613b886133f9565b613b27565b613ba49150823d84116105295761051a8183611242565b38613aae565b613bb26133f9565b613aa6565b939290919260005b848110613bce57505050505050565b613bdb613a6b82856127a0565b60408051631ce08c0b60e01b8152600480820193909352602090818a8183602481305afa928315613e10575b600093613df1575b50613ccd575b613c7891613c2f61043d61012f546001600160a01b031690565b613c3c613ad2898b6127a0565b60008c8851968795869485936323b872dd60e01b85528d85016040919493929460608201956001600160a01b0380921683521660208201520152565b03925af1918215613cc0575b600092613ca3575b505015613b46575050613c9e906126bf565b613bbf565b613cb99250803d10613b7957613b6a8183611242565b3880613c8c565b613cc86133f9565b613c84565b613d1e90613ce761043d61012f546001600160a01b031690565b610132546001600160a01b03169082613d008a8d6127a0565b5188518096819263dfa4bb0f60e01b83528c83019190602083019252565b0381305afa938415613de4575b600094613dc5575b5086516323b872dd60e01b81526001600160a01b03808e16828b0190815293166020840152604083019490945283918290600090829060600103925af1908115613db8575b600091613d9b575b5015613d8c5781613c15565b505051633c9fd93960e21b8152fd5b613db29150833d8511613b7957613b6a8183611242565b38613d80565b613dc06133f9565b613d78565b613ddd919450833d85116105295761051a8183611242565b9238613d33565b613dec6133f9565b613d2b565b613e09919350823d84116105295761051a8183611242565b9138613c0f565b613e186133f9565b613c07565b60a08101613e33815160208101519051906134a7565b90613e7a613e49825160408101519051906134a7565b9182613e558651151590565b91613e6a60608801516001600160a01b031690565b9051906060825192015193613bb7565b613f08613e9160808501516001600160a01b031690565b613efa604086015195613eb061043d61012f546001600160a01b031690565b906020610131549101519160405198899560208701919594939060a09360c0840197600085526001600160a01b038093166020860152604085015216606083015260808201520152565b03601f198101855284611242565b613f1e61043d61012d546001600160a01b031690565b613f3461043d61012e546001600160a01b031690565b92813b1561000e5760008094613f6160405197889687958694631759616b60e11b86523060048701613406565b03925af18015613f80575b613f735750565b806104ed611271926111e9565b613f886133f9565b613f6c565b604051906080820182811067ffffffffffffffff821117613fc4575b60405260608083600081528160208201528160408201520152565b613fcc6111d2565b613fa9565b613fd9613f8d565b5061402281600460206001600160a01b0361012d541660405192838092630964eec760e41b82525afa90811561409d575b60009161407f575b5061401d81836145ca565b61433b565b90506101345411614037575b610707906145e3565b3360009081527f0e0ee6959fd583d0bdb8c46ba6cdbcd38e0eb4ccd036d927cdf9c104046b2eef602052604090205460ff1661402e57604051639ece8f2f60e01b8152600490fd5b614097915060203d81116105295761051a8183611242565b38614012565b6140a56133f9565b61400a565b9094926001600160a01b03938461012f541690813b1561000e5760009660ff889460e4976040519b8c9a8b9963d505accf60e01b8b521660048a01523060248a01526044890152606488015216608486015260a485015260c48401525af18015613f8057613f735750565b6001600160a01b0390818160201c1691826000526101376020526141708261416b604060002061ffff8360e01c16908160028201805480156000146141d057508160018401555590600052602052604060002090565b613027565b506141946001610d2c856001600160a01b0316600052610136602052604060002090565b16156141c2575b7f3f2e35daa045b6aa1cc1d76e5337f2bce6985b354b49e998d4ce29d683190d15600080a3565b6141cb826150d1565b61419b565b906001840191825484106000146141f35750505590600052602052604060002090565b9091508211614204575b505061234f565b5581386141fd565b6001600160a01b0382168060005261422f610137928360205260406000206153f8565b600052602052600260406000200154156142465750565b611271906152a3565b60ff166012039060ff821161295557565b811561426a570690565b61427261356c565b0690565b6142c860ff6142c26004602061429861043d61012f546001600160a01b031690565b60405163313ce56760e01b815292839182905afa90811561432e575b600091614310575b5061424f565b1661295d565b81159081156142f4575b506142da5750565b60405163277f4c2760e01b81526004810191909152602490fd5b61430891506143029061370d565b82614260565b1515386142d2565b614328915060203d81116137b0576137a28183611242565b386142bc565b6143366133f9565b6142b4565b919082811161434b576001920390565b50600091508190565b906001600160a01b0380831690813314938415614515575b841561447c575b5061438a61043d61012d546001600160a01b031690565b926143ec60405163c48c010560e01b81528260209682888160048296855afa90811561446f575b600091614452575b50604051809581948293632474521560e21b8452600484019092916001600160a01b036020916040840195845216910152565b03915afa948515614445575b600095614426575b5050831561441a575b50505081614415575090565b905090565b16149050388080614409565b61443d929550803d10613b7957613b6a8183611242565b923880614400565b61444d6133f9565b6143f8565b6144699150843d86116105295761051a8183611242565b386143b9565b6144776133f9565b6143b1565b6144ce91945060209061449b61043d61012d546001600160a01b031690565b60405163e985e9c560e01b81526001600160a01b0390921660048301523360248301529092839190829081906044820190565b03915afa908115614508575b6000916144ea575b509238614373565b614502915060203d8111613b7957613b6a8183611242565b386144e2565b6145106133f9565b6144da565b3360009081527fb34b648d285118a9ee5f8cc4675698367f99ed092c20555b8b9380d41d2fafb5602052604090205460ff16945061436c565b9061455b61456191614591565b92614591565b821491821592614586575b505061457457565b6040516324fc16d360e11b8152600490fd5b14159050388061456c565b80516000929160209160051b8101820190849083015b8281106145b45750505050565b858151019586106145c65783016145a7565b5080fd5b116145d157565b604051630cea840760e21b8152600490fd5b6145eb613f8d565b5061012d9061460461043d83546001600160a01b031690565b6040805163789e8cdf60e01b81523060048083019190915294909260209291908390859060249082905afa9384156148cb575b6000946148ac575b506146498461385d565b6146528561385d565b9361465c8661385d565b97614665611273565b976000895282890193845285890196875260608901998a526000905b888210614697575b505050505050505050905090565b906147208761043d888b96958f8f908b8b610135956146bd87546001600160a01b031690565b988c6146f86146e86146e38d6001600160a01b0316600052610137602052604060002090565b615555565b9a8b94546001600160a01b031690565b9151627eeac760e11b8152309181019182526020820193909352919a8b928391829160400190565b03915afa97881561489f575b8c600099614860575b50509161475f87610d9f61477d96948961475561477798518751906127a0565b52518451906127a0565b61476988836148d8565b928391829c519051906127a0565b526130dc565b938497146147af575b5050506147938b516126bf565b8b52156147aa576147a3906126bf565b9091614681565b614689565b6147bc836147c99361420c565b546001600160a01b031690565b906001600160a01b0380918184169283911614928361482e575b5050506147f3575b388080614786565b61482961013580546001600160a01b03196001600160a01b03808316600052610136602052600160406000200154169116179055565b6147eb565b61485591929350610d2c6001916001600160a01b0316600052610136602052604060002090565b1614153880806147e3565b61477794929950610d9f61477d96948961475561488e61475f96868f97903d106105295761051a8183611242565b9d969850505094965050508c614735565b6148a76133f9565b61472c565b6148c4919450833d85116105295761051a8183611242565b923861463f565b6148d36133f9565b614637565b9080821015614415575090565b906148ee613f8d565b5061490d816001600160a01b0316600052610137602052604060002090565b906000906001830154600284019081545b80821115614ae557505082156145d1576149378361385d565b906149418461385d565b9461494a613845565b94614953611273565b96600088526020908189019586526040998a8a0191825260608a019889526000905b8482106149a0575b505050505050505082935061499661499b92935161385d565b614b15565b905290565b908b8893928c6149af89615555565b916149c661043d61012d546001600160a01b031690565b9351627eeac760e11b8152306004808301919091526024820185905290948990869060449082905afa948515614ad8575b600095614ab9575b50614a0a85836148d8565b9284614a1a859a518351906127a0565b5283614a2989518351906127a0565b5251614a348b6130cd565b1480614ab0575b614aa0575090614a4a916130dc565b91829514614a7a575b50614a5e8c516126bf565b8c5215614a7557614a6e906126bf565b9091614975565b61497d565b614a8490886153f8565b875415614a92575b38614a53565b614a9b8a6152a3565b614a8c565b90508f51630cea840760e21b8152fd5b50848211614a3b565b614ad1919550893d8b116105295761051a8183611242565b93386149ff565b614ae06133f9565b6149f7565b9093614b09614b0f91614b02878990600052602052604060002090565b5490612979565b946126bf565b9061491e565b519190614b218361385d565b9260019182809201915b828110614b385750505050565b8082859260051b88015201614b2b565b9190614b52613f8d565b50614b6961043d61012d546001600160a01b031690565b9160409182519063789e8cdf60e01b8252602080836004978180614b9f308c83019190916001600160a01b036020820193169052565b03915afa928315614e40575b600093614e21575b50614bc08392979361385d565b90614bca8361385d565b91614bd48461385d565b98614bdd611273565b998a96600088528488019384528988019586526060880191825297614c0b610135546001600160a01b031690565b9260005b8c898210614c39575b5050505050505050505050614c2c57505090565b51630cea840760e21b8152fd5b909192939495969798999a8c614c77614c66896001600160a01b0316600052610137602052604060002090565b614c713689896112da565b9061556d565b928315614df55783614cc59493928c92614c9d61043d61012d546001600160a01b031690565b9151627eeac760e11b8152309181019182526020820193909352919586928391829160400190565b03915afa928315614de8575b600093614dc9575b50818d8a519051614ce9916127a0565b52878d88519051614cf9916127a0565b6001600160a01b039091169052614d1083826148d8565b80809e8d519051614d20916127a0565b52614d2a916130dc565b91829c14614d66575b508d614d3f81516126bf565b905215614d5e57614d4f906126bf565b908c9897969594939291614c0f565b8c988c614c18565b614d9387614d8d6001610d2c836001600160a01b0316600052610136602052604060002090565b9261420c565b614dbc614db4886001600160a01b0316600052610137602052604060002090565b600201541590565b15614d3357955038614d33565b614de19193508a3d8c116105295761051a8183611242565b9138614cd9565b614df06133f9565b614cd1565b50509a505093614b096001610d2c614d4f936001600160a01b0316600052610136602052604060002090565b81614e399294503d85116105295761051a8183611242565b9138614bb3565b614e486133f9565b614bab565b9190614e57613f8d565b50614e76816001600160a01b0316600052610137602052604060002090565b6000946001820154600283019081545b8082111561506257505086156145d157614ea58792939495969761385d565b90614eaf8361385d565b94614eb8613845565b97614ec1611273565b9960008b5260208b01948552604097888c015260608b01998a529560005b868110614f11575b50505050505050614f01575061499b90614996845161385d565b51630cea840760e21b8152600490fd5b614f2d614f279c9a989c9b99979b3684866112da565b8561556d565b8015615054579b8798999a9b9c614f5061043d61012d546001600160a01b031690565b8951627eeac760e11b81523060048201526024810183905292908e90602090859060449082905afa938415615047575b60009461501c575b50614fba916147779184614f9f8d518351906127a0565b52614faa86836148d8565b928391829e8101519051906127a0565b91829914614ff6575b50614fce8c516126bf565b8c5215614fea57614fde906126bf565b9a95969798999a614edf565b869798999a9b50614ee7565b61500090866153f8565b85541561500e575b38614fc3565b6150178a6152a3565b615008565b6147779194509161503e614fba9360203d6020116105295761051a8183611242565b94915091614f88565b61504f6133f9565b614f80565b5086989a509a96989a614ee7565b909761507f61508591614b028b8890600052602052604060002090565b986126bf565b90614e86565b815181546001600160a01b0319166001600160a01b03918216178255611271926001919060200151169101906001600160a01b03166001600160a01b0319825416179055565b610135906150e682546001600160a01b031690565b6001600160a01b039281841661517657505061013580546001600160a01b0319166001600160a01b03831617905561514c61511f611293565b6001600160a01b0383168082526020808301829052600091825261013690526040902061508b565b61508b565b1680807f3a35d42f4bce14f93a24ab2ec3c4dc4cd013e5f16abcd79d5c93afa2cebc0c72600080a4565b928061527683956151e96151a26147bc85976001600160a01b0316600052610136602052604060002090565b976151cb6151ae611293565b6001600160a01b038b168152916001600160a01b03166020830152565b615147886001600160a01b0316600052610136602052604060002090565b61522986600161520d8a6001600160a01b0316600052610136602052604060002090565b01906001600160a01b03166001600160a01b0319825416179055565b6147bc8661525b61524184546001600160a01b031690565b6001600160a01b0316600052610136602052604060002090565b906001600160a01b03166001600160a01b0319825416179055565b9416931691167f3a35d42f4bce14f93a24ab2ec3c4dc4cd013e5f16abcd79d5c93afa2cebc0c72600080a4565b6001600160a01b0390816152cb826001600160a01b0316600052610136602052604060002090565b5416916153458160016152f2856001600160a01b0316600052610136602052604060002090565b015416928281169283850361536c57506101356001600160a01b031981541690555b61514761531f611293565b9160008352600060208401526001600160a01b0316600052610136602052604060002090565b7fd853f0403f99e88d186f52744de8bd40a17410e4d2206e25ac3750410aa19737600080a4565b61539085600161520d896001600160a01b0316600052610136602052604060002090565b6153b28661525b876001600160a01b0316600052610136602052604060002090565b61013554168303615314576153f361013580546001600160a01b03196001600160a01b03808316600052610136602052600160406000200154169116179055565b615314565b61ffff8260e01c16916154256154218261541c868690600052602052604060002090565b613129565b1590565b61553257506154408282906000526020526040600020541590565b615448575050565b60018082019182546002820194855491828114600014615478575050505050906154756000926000199055565b55565b9395929381036154e15750508361548f845461296b565b905b61549d575b5050505050565b815481116154dc576154b9818490600052602052604060002090565b546154cd576154c7906126bf565b84615491565b93505050553880808080615496565b615496565b91939181146154f1575050505050565b6154fb85916130cd565b905b1561549657815481106154dc5761551e818490600052602052604060002090565b546154cd5761552c90612a06565b846154fd565b604051635a927b7f60e11b81526004810191909152602481019290925250604490fd5b6001810154600052602052612d096040600020612cb6565b60005b82518110156130a45761558381846127a0565b5160005281602052604080600020546155a557506155a0906126bf565b615570565b915050612d099150600020612cb656fea2646970667358221220e9545b4f0c540349d38908a030c84dadcf89add84d128457208429983e6ba83464736f6c63430008110033", + "deployedBytecode": "0x60806040526004361015610013575b600080fd5b60003560e01c8062f714ce146103be57806301ffc9a7146103b557806302e0affa146103ac5780631ce08c0b146103a3578063248a9ca31461039a57806325fbff7a146103915780632c9fcbd7146103885780632f2ff15d1461037f578063327860491461037657806336568abe1461036d57806337bdc99b146103645780633f4ba83a1461035b5780634b66f66514610352578063596abe94146103495780635c975abb14610340578063652b0525146103375780636cf250e21461032e57806375ccff41146103255780637f49f7381461031c5780638456cb591461031357806384e043221461030a5780638c6b8d98146103015780638d73f9ef146102f85780639010d07c146102ef57806391d14854146102e65780639b7d4af5146102dd5780639d1fbcf5146102d4578063a217fddf146102cb578063a5758566146102c2578063a8f881c0146102b9578063ac9650d8146102b0578063b9054257146102a7578063bc197c811461029e578063c0c7028c14610295578063ca15c8731461028c578063ce0ec47414610283578063d004f0f71461027a578063d547741f14610271578063d6f0d39f14610268578063d797462f1461025f578063d7c41c7914610256578063dfa4bb0f1461024d578063e63ab1e914610244578063e6e0a0381461023b578063e7f78c7214610232578063f23a6e61146102295763f9c285281461022157600080fd5b61000e6122c0565b5061000e61223a565b5061000e612211565b5061000e61213c565b5061000e612100565b5061000e612067565b5061000e611f46565b5061000e611ef0565b5061000e611eb4565b5061000e611dc7565b5061000e611d41565b5061000e611c52565b5061000e611c1a565b5061000e611b78565b5061000e611ab9565b5061000e611a6b565b5061000e61199b565b5061000e6118d1565b5061000e6117cf565b5061000e6117b2565b5061000e611793565b5061000e611757565b5061000e6116ff565b5061000e6116b8565b5061000e61167c565b5061000e611343565b5061000e611191565b5061000e611136565b5061000e61110d565b5061000e611083565b5061000e611063565b5061000e610ea7565b5061000e610e52565b5061000e610cd7565b5061000e610c6a565b5061000e610bcc565b5061000e610afc565b5061000e6109b0565b5061000e61093f565b5061000e610838565b5061000e61080f565b5061000e61070a565b5061000e610692565b5061000e61066b565b5061000e6105c0565b5061000e61054f565b5061000e6103d8565b6001600160a01b0381160361000e57565b503461000e57604036600319011261000e576004356024356103f9816103c7565b610401612d13565b6104186001600160a01b038360201c169182614354565b1561053d57610427818361420c565b61044961043d61012d546001600160a01b031690565b6001600160a01b031690565b604051627eeac760e11b81523060048201526024810184905290602082604481845afa918215610530575b600092610500575b50803b1561000e57604051637921219560e11b81523060048201526001600160a01b039390931660248401526044830193909352606482015260a06084820152600060a482018190529091829060c490829084905af180156104f3575b6104e0575b005b806104ed6104de926111e9565b80610804565b6104fb6133f9565b6104d9565b61052291925060203d8111610529575b61051a8183611242565b8101906133ea565b903861047c565b503d610510565b6105386133f9565b610474565b6040516360b39bc560e01b8152600490fd5b503461000e57602036600319011261000e5760043563ffffffff60e01b811680910361000e57602090635a05180f60e01b8114908115610595575b506040519015158152f35b637965db0b60e01b8114915081156105af575b503861058a565b6301ffc9a760e01b149050386105a8565b503461000e57602036600319011261000e5761062f61061f604051639d1fbcf560e01b81526004356004820152602081602481305afa90811561065e575b600091610640575b50610131549081606402916064830403610633576135a0565b6040519081529081906020820190565b0390f35b61063b6126a8565b6135a0565b610658915060203d81116105295761051a8183611242565b38610606565b6106666133f9565b6105fe565b503461000e57602036600319011261000e57602061068a600435613729565b604051908152f35b503461000e57602036600319011261000e5760043560005260976020526020600160406000200154604051908152f35b90815180825260208080930193019160005b8281106106e2575050505090565b8351855293810193928101926001016106d4565b9060206107079281815201906106c2565b90565b503461000e5760208060031936011261000e576004359061072a826103c7565b6001600160a01b03600092168252610137815260408083209260028401549080948190600196878201549081975b868311156107df575061076b915061385d565b955b848111156107825785518061062f89826106f6565b86610797828490600052602052604060002090565b8054908a875b8381106107b75750505050506107b2906126bf565b61076d565b829394976107d36107c9838596612cff565b918481019a6127a0565b5201908a93929161079d565b906107f76107fd918488528584528988205490612979565b926126bf565b9190610758565b600091031261000e57565b503461000e57600036600319011261000e5760206001600160a01b0361012f5416604051908152f35b503461000e57604036600319011261000e576004356108c860243561085c816103c7565b6108c3600093808552609760205261087a60016040872001546125c7565b610882612d13565b808552609760205260ff6108ac8460408820906001600160a01b0316600052602052604060002090565b5416156108cc5760005260c9602052604060002090565b612ff4565b5080f35b80855260976020526108f48360408720906001600160a01b0316600052602052604060002090565b805460ff19166001179055336001600160a01b038416827f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8880a460005260c9602052604060002090565b503461000e57602036600319011261000e5760043561095c61235e565b610964612d13565b6064811161099e576020817fb9768ed0b3c8d7421842f14094358b08617bad6081b469cd89de35a8d46678589261013355604051908152a1005b60405163edb7340760e01b8152600490fd5b503461000e57604036600319011261000e576024356004356109d1826103c7565b6001600160a01b03821691338303610a91576108c8916109ef612d13565b600093818552609760205260ff610a1c8460408820906001600160a01b0316600052602052604060002090565b5416610a34575b50835260c9602052604083206130ac565b8185526097602052610a5c8360408720906001600160a01b0316600052602052604060002090565b805460ff191690553390827ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b8780a438610a23565b60405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608490fd5b503461000e57602036600319011261000e57600435610b19612d13565b610b2f61043d61012d546001600160a01b031690565b906001600160a01b03918281163303610bba57604051627eeac760e11b81523060048201526024810183905290602090829060449082905afa908115610bad575b600091610b8f575b5015610b8057005b6104de918160201c169061420c565b610ba7915060203d81116105295761051a8183611242565b38610b78565b610bb56133f9565b610b70565b604051639a5ed74b60e01b8152600490fd5b503461000e57600036600319011261000e57610be6612448565b60335460ff811615610c255760ff19166033557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b60405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606490fd5b503461000e57600036600319011261000e5760206001600160a01b0361012d5416604051908152f35b6020908160408183019282815285518094520193019160005b828110610cba575050505090565b83516001600160a01b031685529381019392810192600101610cac565b503461000e57600036600319011261000e576000610cfe610135546001600160a01b031690565b906001600160a01b03600181610d3a82610d2c876001600160a01b0316600052610136602052604060002090565b01546001600160a01b031690565b16610de6575b5050610d4b8161385d565b91610d72610d6d826001600160a01b0316600052610136602052604060002090565b61388f565b6000915b838310610d8b576040518061062f8782610c93565b610dbb91610dad602092610d9f86896127a0565b906001600160a01b03169052565b01516001600160a01b031690565b610ddf6107f7610d6d836001600160a01b0316600052610136602052604060002090565b9190610d76565b80925091610e0c81610d2c866001600160a01b0316600052610136602052604060002090565b828516905b8184821603610e21575050610d40565b6107f783610d2c610e4a93979596976001600160a01b0316600052610136602052604060002090565b939291610e11565b503461000e57600036600319011261000e57602060ff603354166040519015158152f35b9181601f8401121561000e5782359167ffffffffffffffff831161000e576020808501948460051b01011161000e57565b503461000e5760e036600319011261000e57600435610ec5816103c7565b60243590610ed2826103c7565b60a43590604435610ee2836103c7565b60c4359367ffffffffffffffff851161000e57610fee610ff893610f0d6104de973690600401610e76565b96610f16612d13565b610f1e61235e565b610131978854986084359055610f3387614276565b610f3b613f8d565b50610f44613f8d565b508061103c575090506001600160a01b0381166110295750610fa460046020610f7961043d61012d546001600160a01b031690565b604051630964eec760e41b815292839182905afa90811561101c575b600091610ffe575b50856145ca565b610fde610fb0856145e3565b935b610fba611264565b95600087526064356020880152604087015260608601906001600160a01b03169052565b6001600160a01b03166080840152565b60a0820152613e1d565b61013155565b611016915060203d81116105295761051a8183611242565b38610f9d565b6110246133f9565b610f95565b611036610fde91866148e5565b93610fb2565b610fde926001600160a01b03831661105957611036925087614b48565b6110369288614e4d565b503461000e57600036600319011261000e57602061013354604051908152f35b503461000e57604036600319011261000e5760206110af6004356110a681614276565b6024359061362a565b60405190631ce08c0b60e01b825260048201528181602481305afa908115611100575b6000916110e3575b50604051908152f35b6110fa9150823d81116105295761051a8183611242565b386110da565b6111086133f9565b6110d2565b503461000e57600036600319011261000e5760206001600160a01b036101325416604051908152f35b503461000e57600036600319011261000e57611150612448565b611158612d13565b600160ff1960335416176033557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b503461000e57604036600319011261000e576111c76004356111b2816103c7565b6111ba612d13565b6111c261235e565b6138d8565b6104de6024356139d7565b50634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff81116111fd57604052565b6112056111d2565b604052565b60c0810190811067ffffffffffffffff8211176111fd57604052565b6020810190811067ffffffffffffffff8211176111fd57604052565b90601f8019910116810190811067ffffffffffffffff8211176111fd57604052565b604051906112718261120a565b565b604051906080820182811067ffffffffffffffff8211176111fd57604052565b604051906040820182811067ffffffffffffffff8211176111fd57604052565b60209067ffffffffffffffff81116112cd575b60051b0190565b6112d56111d2565b6112c6565b92916112e5826112b3565b916112f36040519384611242565b829481845260208094019160051b810192831161000e57905b8282106113195750505050565b8135815290830190830161130c565b9080601f8301121561000e57816020610707933591016112da565b503461000e5760a036600319011261000e576004803590611363826103c7565b6024359067ffffffffffffffff9060443560643583811161000e5761138b9036908401611328565b9260843590811161000e576113a39036908401611328565b926113ac612d13565b6113b461235e565b61012e906113cc61043d83546001600160a01b031690565b9460409182519663d2f3ea4360e01b88526020978881806113f48d8c83019190602083019252565b0381855afa90811561166f575b600091611652575b501561163357878791855192838092630dd39c7560e41b82525afa908115611626575b600091611609575b5085116115f95761012d611481878961145761043d85546001600160a01b031690565b8751630964eec760e41b815292839182905afa9081156115ec575b6000916115cf575b50876145ca565b61148a866145e3565b9988848c805192839101519061149f916134a7565b9c8288820151906114af916134a7565b998a92836114bc9261454e565b60600151916114ca93613a4a565b546001600160a01b03166001600160a01b031693546001600160a01b03166001600160a01b03168351809881016115046001602083019252565b03601f19810189526115169089611242565b843b1561000e5760008a6115aa968893836001600160a01b039b6115717f40a27cbb002b48214250b00c6c1b15ff8276b363217ca42c7b1720bcf269a76c9e8b5198899788968795631759616b60e11b875230908701613406565b03925af180156115c2575b6115af575b5061159861043d61012f546001600160a01b031690565b94610131549351968796169986613455565b0390a3005b806104ed6115bc926111e9565b38611581565b6115ca6133f9565b61157c565b6115e691508a3d8c116105295761051a8183611242565b3861147a565b6115f46133f9565b611472565b825163b106efdf60e01b81528690fd5b6116209150883d8a116105295761051a8183611242565b38611434565b61162e6133f9565b61142c565b8351630165035b60e71b81528088018a815281906020010390fd5b0390fd5b6116699150893d8b116105295761051a8183611242565b38611409565b6116776133f9565b611401565b503461000e57600036600319011261000e5760206040517f42608067b0bf67dbb5cd52cbd32a7797b31a5a621ecdc484ee82e05952de64638152f35b503461000e57604036600319011261000e5760043560005260c960205260206001600160a01b036116ef6024356040600020612cd9565b9190546040519260031b1c168152f35b503461000e57604036600319011261000e57602060ff61174b602435611724816103c7565b600435600052609784526040600020906001600160a01b0316600052602052604060002090565b54166040519015158152f35b503461000e57600036600319011261000e5760206040517fa41464e222c873935a35e8d3fd7cd44e0e6847c2388d0873d52cbaebdcb51b8b8152f35b503461000e57602036600319011261000e57602061068a6004356137c4565b503461000e57600036600319011261000e57602060405160008152f35b503461000e5760208060031936011261000e5761061f61062f916004356117f581614276565b6118268280611807610131548561362a565b60405180948192631ce08c0b60e01b8352600483019190602083019252565b0381305afa9182156118c4575b6000926118a3575b5060405163dfa4bb0f60e01b815260048101939093529091908180602481015b0381305afa928315611896575b600093611877575b5050612979565b61188e929350803d106105295761051a8183611242565b903880611870565b61189e6133f9565b611868565b61185b92506118be90823d84116105295761051a8183611242565b9161183b565b6118cc6133f9565b611833565b503461000e57600036600319011261000e57602061013154604051908152f35b60005b8381106119045750506000910152565b81810151838201526020016118f4565b9060209161192d815180928185528580860191016118f1565b601f01601f1916010190565b602080820190808352835180925260408301928160408460051b8301019501936000915b84831061196d5750505050505090565b909192939495848061198b600193603f198682030187528a51611914565b980193019301919493929061195d565b503461000e5760208060031936011261000e5760043567ffffffffffffffff811161000e576119ce903690600401610e76565b6119d7816112b3565b926119e56040519485611242565b818452601f196119f4836112b3565b0160005b818110611a5c5750505060005b818110611a1a576040518061062f8682611939565b80611a3c611a36611a2f611a579486886126ee565b3691612769565b30612840565b611a4682876127a0565b52611a5181866127a0565b506126bf565b611a05565b606086820184015282016119f8565b503461000e57600036600319011261000e57602061013454604051908152f35b9181601f8401121561000e5782359167ffffffffffffffff831161000e576020838186019501011161000e57565b503461000e5760a036600319011261000e57611ad66004356103c7565b611ae16024356103c7565b67ffffffffffffffff60443581811161000e57611b02903690600401610e76565b60649291923582811161000e57611b1d903690600401610e76565b505060843591821161000e5761062f92611b3e611b45933690600401611a8b565b50506134cb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681529081906020820190565b503461000e57602036600319011261000e5761062f61061f604051639d1fbcf560e01b81526004356004820152602081602481305afa908115611c0d575b600091611bef575b50611bdc6101335460640180606411611be2575b6101315490612942565b906135a0565b611bea6126a8565b611bd2565b611c07915060203d81116105295761051a8183611242565b38611bbe565b611c156133f9565b611bb6565b503461000e57602036600319011261000e5760043560005260c96020526020604060002054604051908152f35b60ff81160361000e57565b503461000e5760c036600319011261000e576104de600435611c73816103c7565b60243590610fee60643591611c8783611c47565b611c8f612d13565b611c9761249d565b611ca084614276565b611cef611cac85613fd1565b6040516352bac2b360e11b815260048101879052909490602081602481305afa908115611d34575b600091611d16575b5060a435916084359160443590336140aa565b6101335493611cfc611264565b600181529460208601526040850152336060850152610fde565b611d2e915060203d81116105295761051a8183611242565b38611cdc565b611d3c6133f9565b611cd4565b503461000e57604036600319011261000e576104de600435611d62816103c7565b60243590611d6e612d13565b611d7661249d565b611d7f82614276565b6001600160a01b03611d9083613fd1565b91610133549360405194611da38661120a565b600186526020860152604085015233606085015216608083015260a0820152613e1d565b503461000e57604036600319011261000e576004356108c8602435611deb816103c7565b6000928084526097602052611e0660016040862001546125c7565b611e0e612d13565b808452609760205260ff611e388360408720906001600160a01b0316600052602052604060002090565b5416611e4f575b835260c9602052604083206130ac565b8084526097602052611e778260408620906001600160a01b0316600052602052604060002090565b805460ff19169055336001600160a01b038316827ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b8780a4611e3f565b503461000e57600036600319011261000e5760206040517f3fb0aaa9e8051cfc6c234a5d843bed33910f70c647055f27247c10144c7552e18152f35b503461000e57602036600319011261000e577fa01a3b548ccd65893a6acee4ea0da2602fbd2aef7e3040483b026d9544d8074c6020600435611f30612d13565b611f3861235e565b8061013455604051908152a1005b503461000e5760c036600319011261000e57600435611f64816103c7565b611fd6602435611f73816103c7565b60443592611f80846103c7565b606435611f8c816103c7565b60005494611fb160ff8760081c161580978198612059575b8115612039575b506131e7565b85611fc4600160ff196000541617600055565b612020575b60a4359360843593613259565b611fdc57005b611fec61ff001960005416600055565b604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989080602081015b0390a1005b61203461010061ff00196000541617600055565b611fc9565b303b1591508161204b575b5038611fab565b6001915060ff161438612044565b600160ff8216109150611fa4565b503461000e57602036600319011261000e5761062f612098612090610131546101335490612942565b600435613690565b60405190631ce08c0b60e01b82526004820152602081602481305afa9081156120f3575b6000916120d5575b506040519081529081906020820190565b6120ed915060203d81116105295761051a8183611242565b386120c4565b6120fb6133f9565b6120bc565b503461000e57600036600319011261000e5760206040517f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8152f35b503461000e57606036600319011261000e577f35586385f29ca78c095aefba70466838737342adc742949a3a63f91bc021b6d160043561217b816103c7565b60243590612188826103c7565b61201b60443592612198846103c7565b6121a06124f2565b6121a8612d13565b6001600160a01b0380931692806001600160a01b03199261012d8685825416179055169461012e868482541617905516908161012f918254161790556040519384938491604091949360608401956001600160a01b039283809216865216602085015216910152565b503461000e57600036600319011261000e5760206001600160a01b0361012e5416604051908152f35b503461000e5760a036600319011261000e576122576004356103c7565b6122626024356103c7565b60843567ffffffffffffffff811161000e57612282903690600401611a8b565b505061228c612d13565b6122a36001600160a01b0361012d54163314613520565b6122ae604435614115565b60405163f23a6e6160e01b8152602090f35b503461000e57602036600319011261000e576001600160a01b036004356122e6816103c7565b6122ee61235e565b6122f6612d13565b16801561233d5760207fe846164b6756d387276a93f2200cfd28f5792fffe3530e65d95d7535cd43dab491610132816001600160a01b0319825416179055604051908152a1005b604051632de6d64560e21b8152600490fd5b90600052602052604060002090565b3360009081527fb34b648d285118a9ee5f8cc4675698367f99ed092c20555b8b9380d41d2fafb5602052604090205460ff161561239757565b61164e60486124306123a833612a6c565b6124226123b3612b09565b6040519485937f416363657373436f6e74726f6c3a206163636f756e742000000000000000000060208601526123f38151809260206037890191016118f1565b84017f206973206d697373696e6720726f6c652000000000000000000000000000000060378201520190612680565b03601f198101835282611242565b60405162461bcd60e51b815291829160048301612697565b3360009081527f793844da0378ca0230b21a4013ef02cf55735b90b39c85241478ff94b5eceb28602052604090205460ff161561248157565b61164e604861243061249233612a6c565b6124226123b3612b98565b3360009081527f023d1dfe360df7b21961cef7fff4938a9828ddbe51fae255e431bd158b76ae3b602052604090205460ff16156124d657565b61164e60486124306124e733612a6c565b6124226123b3612c27565b3360009081527f683723e34a772b6e4f2c919bba7fa32ed8ea11a8325f54da7db716e9d9dd98c7602052604090205460ff161561252b57565b61253433612a6c565b600061253e612986565b90603061254a836129c0565b536078612556836129d6565b5360415b600181116125795761164e604861243086612422876123b38815612a21565b90806f181899199a1a9b1b9c1cb0b131b232b360811b600f6125b5931660108110156125ba575b1a6125ab84866129e7565b5360041c91612a06565b61255a565b6125c26126d7565b6125a0565b80600052609760205260ff6125f3336040600020906001600160a01b0316600052602052604060002090565b5416156125fd5750565b61260633612a6c565b9061260f612986565b90603061261b836129c0565b536078612627836129d6565b5360415b6001811161264a5761164e604861243086612422876123b38815612a21565b90806f181899199a1a9b1b9c1cb0b131b232b360811b600f61267b931660108110156125ba571a6125ab84866129e7565b61262b565b90612693602092828151948592016118f1565b0190565b906020610707928181520190611914565b50634e487b7160e01b600052601160045260246000fd5b60019060001981146126cf570190565b6126936126a8565b50634e487b7160e01b600052603260045260246000fd5b9190811015612731575b60051b81013590601e198136030182121561000e57019081359167ffffffffffffffff831161000e57602001823603811361000e579190565b6127396126d7565b6126f8565b60209067ffffffffffffffff811161275c575b601f01601f19160190565b6127646111d2565b612751565b9291926127758261273e565b916127836040519384611242565b82948184528183011161000e578281602093846000960137010152565b60209181518110156127b5575b60051b010190565b6127bd6126d7565b6127ad565b604051906060820182811067ffffffffffffffff821117612833575b604052602782527f206661696c6564000000000000000000000000000000000000000000000000006040837f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c60208201520152565b61283b6111d2565b6127de565b90813b15612897576000816107079360208394519201905af43d15612890573d6128698161273e565b906128776040519283611242565b81523d6000602083013e5b61288a6127c2565b91612902565b6060612882565b60405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608490fd5b9091901561290e575090565b81511561291e5750805190602001fd5b60405162461bcd60e51b81526020600482015290819061164e906024830190611914565b8181029291811591840414171561295557565b6112716126a8565b906002820180921161295557565b906001820180921161295557565b9190820180921161295557565b604051906080820182811067ffffffffffffffff8211176129b3575b604052604282526060366020840137565b6129bb6111d2565b6129a2565b6020908051156129ce570190565b6126936126d7565b6021908051600110156129ce570190565b9060209180518210156129f957010190565b612a016126d7565b010190565b8015612a14575b6000190190565b612a1c6126a8565b612a0d565b15612a2857565b606460405162461bcd60e51b815260206004820152602060248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b604051906060820182811067ffffffffffffffff821117612afc575b604052602a825260403660208401376030612aa2836129c0565b536078612aae836129d6565b536029905b60018211612ac657610707915015612a21565b806f181899199a1a9b1b9c1cb0b131b232b360811b600f612af6931660108110156125ba571a6125ab84866129e7565b90612ab3565b612b046111d2565b612a88565b7f3fb0aaa9e8051cfc6c234a5d843bed33910f70c647055f27247c10144c7552e1612b32612986565b906030612b3e836129c0565b536078612b4a836129d6565b536041905b60018211612b6257610707915015612a21565b806f181899199a1a9b1b9c1cb0b131b232b360811b600f612b92931660108110156125ba571a6125ab84866129e7565b90612b4f565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a612bc1612986565b906030612bcd836129c0565b536078612bd9836129d6565b536041905b60018211612bf157610707915015612a21565b806f181899199a1a9b1b9c1cb0b131b232b360811b600f612c21931660108110156125ba571a6125ab84866129e7565b90612bde565b7f42608067b0bf67dbb5cd52cbd32a7797b31a5a621ecdc484ee82e05952de6463612c50612986565b906030612c5c836129c0565b536078612c68836129d6565b536041905b60018211612c8057610707915015612a21565b806f181899199a1a9b1b9c1cb0b131b232b360811b600f612cb0931660108110156125ba571a6125ab84866129e7565b90612c6d565b805415612ccc575b600052602060002090600090565b612cd46126d7565b612cbe565b8054821015612cf2575b60005260206000200190600090565b612cfa6126d7565b612ce3565b90612d0991612cd9565b90549060031b1c90565b60ff60335416612d1f57565b60405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606490fd5b612dc790612d70612d13565b6001600160a01b0381811660009081527f683723e34a772b6e4f2c919bba7fa32ed8ea11a8325f54da7db716e9d9dd98c760205260408082205490919060ff1615612dca575b80805260c960205220911690613027565b50565b8080526097602052612df184838320906001600160a01b0316600052602052604060002090565b805460ff1916600117905533848416827f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4612db6565b612dc790612e36612d13565b6001600160a01b0381811660009081527f0e0ee6959fd583d0bdb8c46ba6cdbcd38e0eb4ccd036d927cdf9c104046b2eef60205260408082209091907fa41464e222c873935a35e8d3fd7cd44e0e6847c2388d0873d52cbaebdcb51b8b9060ff905b541615612eb0575b815260c960205220911690613027565b8082526097602052612ed785848420906001600160a01b0316600052602052604060002090565b805460ff1916600117905533858516827f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8580a4612ea0565b612dc790612f1c612d13565b6001600160a01b0381811660009081527f023d1dfe360df7b21961cef7fff4938a9828ddbe51fae255e431bd158b76ae3b60205260408082209091907f42608067b0bf67dbb5cd52cbd32a7797b31a5a621ecdc484ee82e05952de64639060ff90612e98565b612dc790612f8e612d13565b6001600160a01b0381811660009081527fb34b648d285118a9ee5f8cc4675698367f99ed092c20555b8b9380d41d2fafb560205260408082209091907f3fb0aaa9e8051cfc6c234a5d843bed33910f70c647055f27247c10144c7552e19060ff90612e98565b6001600160a01b03610707921690613027565b916130239183549060031b600019811b9283911b169119161790565b9055565b60018101908260005281602052604060002054156000146130a45782613082613069835468010000000000000000811015613097575b60018101855584612cd9565b819391549060031b600019811b9283911b169119161790565b90555491600052602052604060002055600190565b61309f6111d2565b61305d565b505050600090565b6001600160a01b03610707921690613129565b601203906012821161295557565b60001981019190821161295557565b9190820391821161295557565b805490811561311357600019918201916131038383612cd9565b909182549160031b1b1916905555565b634e487b7160e01b600052603160045260246000fd5b60018101918060005282602052604060002054928315156000146131de5761234f61317b9360009586198082018281116131d1575b83549182019182116131c4575b808203613181575b5050506130e9565b55600190565b6131ab6131a5916131956131bb9487612cd9565b90549060031b1c92839187612cd9565b90613007565b8590600052602052604060002090565b55388080613173565b6131cc6126a8565b61316b565b6131d96126a8565b61315e565b50505050600090565b156131ee57565b60405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608490fd5b929493949190916001600160a01b03938482161561233d57613343966132f961331d946132ff9361333e9861328c6133d9565b6132946133d9565b6132a560ff60005460081c16613367565b60ff19603354166033556132b76133d9565b6132bf6133d9565b6132c76133d9565b61012d91166001600160a01b03198254161790556001600160a01b0361012e91166001600160a01b0319825416179055565b61013355565b6001600160a01b0361013291166001600160a01b0319825416179055565b613328600061013455565b6111c26101356001600160a01b03198154169055565b6139d7565b61334c33612d64565b61335533612e2a565b61335e33612f10565b61127133612f82565b1561336e57565b60405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608490fd5b61127160ff60005460081c16613367565b9081602091031261000e575190565b506040513d6000823e3d90fd5b9390610707959361343991613447946001600160a01b03809216885216602087015260a0604087015260a08601906106c2565b9084820360608601526106c2565b916080818403910152611914565b959493906080936134866134a2946134786134949460a08c5260a08c01906106c2565b908a820360208c01526106c2565b9088820360408a01526106c2565b9086820360608801526106c2565b930152565b90815181116134b557815290565b634e487b7160e01b600052600160045260246000fd5b6134d3612d13565b6134ea6001600160a01b0361012d54163314613520565b60005b828110613503575063bc197c8160e01b92915050565b8061351661351b9260051b840135614115565b6126bf565b6134ed565b1561352757565b60405162461bcd60e51b815260206004820152601a60248201527f4d61726b65743a2053656e646572206e6f742052656d6f76616c0000000000006044820152606490fd5b50634e487b7160e01b600052601260045260246000fd5b811561358d570490565b61359561356c565b0490565b1561000e57565b61271091600019838309928083029283808610950394808603951461361d579082916135cd868411613599565b096001821901821680920460028082600302188083028203028083028203028083028203028083028203028083028203028092029003029360018380600003040190848311900302920304170290565b5050906107079250613583565b6000198282098282029182808310920391808303921461368657816064111561000e577f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c29936064910990828211900360fe1b910360021c170290565b5050606491500490565b90600019818309818302918280831092039180830392146136ed57612710908282111561000e577fbc01a36e2eb1c432ca57a786c226809d495182a9930be0ded288ce703afb7e91940990828211900360fc1b910360041c170290565b505061271091500490565b9081602091031261000e575161070781611c47565b604d811161371c575b600a0a90565b6137246126a8565b613716565b60ff600460206001600160a01b0361012f54166040519283809263313ce56760e01b82525afa9081156137b7575b600091613789575b5016601281146137855761377561377a916130bf565b61370d565b90811561358d570490565b5090565b6137aa915060203d81116137b0575b6137a28183611242565b8101906136f8565b3861375f565b503d613798565b6137bf6133f9565b613757565b60ff600460206001600160a01b0361012f54166040519283809263313ce56760e01b82525afa908115613838575b60009161381a575b5016601281146137855790613814613775610707936130bf565b90612942565b613832915060203d81116137b0576137a28183611242565b386137fa565b6138406133f9565b6137f2565b60405161385181611226565b60008152906000368137565b90613867826112b3565b6138746040519182611242565b8281528092613885601f19916112b3565b0190602036910137565b906040516040810181811067ffffffffffffffff8211176138cb575b6040526020819360016001600160a01b0391828154168552015416910152565b6138d36111d2565b6138ab565b60405163313ce56760e01b81526020816004816001600160a01b0386165afa9081156139ca575b6000916139ac575b5060ff8116601281119081156139a1575b50613984575061397f816139657f94e2ca3c006ff5152db658db7f198e3606e0c8584958dbb13538cdd9b30ccb72936001600160a01b0361012f91166001600160a01b0319825416179055565b6040516001600160a01b0390911681529081906020820190565b0390a1565b6040516304a68c5760e11b815260ff919091166004820152602490fd5b600691501038613918565b6139c4915060203d81116137b0576137a28183611242565b38613907565b6139d26133f9565b6138ff565b80151580613a28575b613a16576020817f36a09eaea278b547d70faf65508009f5a7d32dfd33d27131e792f7e78bb421589261013155604051908152a1565b60405163b7b3e22f60e01b8152600490fd5b50606481106139e0565b9081602091031261000e5751801515810361000e5790565b92909160005b838110613a5e575050505050565b613a76613a6b82846127a0565b51610131549061362a565b60408051631ce08c0b60e01b8152600480820193909352602090613b1b9082908181602481305afa908115613baa575b600091613b8d575b50613ac561043d61012f546001600160a01b031690565b613adf613ad2898c6127a0565b516001600160a01b031690565b60008d8851968795869485936323b872dd60e01b85528d85016040919493929460608201956001600160a01b0380921683521660208201520152565b03925af1918215613b80575b600092613b53575b505015613b46575050613b41906126bf565b613a50565b51633c9fd93960e21b8152fd5b613b729250803d10613b79575b613b6a8183611242565b810190613a32565b3880613b2f565b503d613b60565b613b886133f9565b613b27565b613ba49150823d84116105295761051a8183611242565b38613aae565b613bb26133f9565b613aa6565b939290919260005b848110613bce57505050505050565b613bdb613a6b82856127a0565b60408051631ce08c0b60e01b8152600480820193909352602090818a8183602481305afa928315613e10575b600093613df1575b50613ccd575b613c7891613c2f61043d61012f546001600160a01b031690565b613c3c613ad2898b6127a0565b60008c8851968795869485936323b872dd60e01b85528d85016040919493929460608201956001600160a01b0380921683521660208201520152565b03925af1918215613cc0575b600092613ca3575b505015613b46575050613c9e906126bf565b613bbf565b613cb99250803d10613b7957613b6a8183611242565b3880613c8c565b613cc86133f9565b613c84565b613d1e90613ce761043d61012f546001600160a01b031690565b610132546001600160a01b03169082613d008a8d6127a0565b5188518096819263dfa4bb0f60e01b83528c83019190602083019252565b0381305afa938415613de4575b600094613dc5575b5086516323b872dd60e01b81526001600160a01b03808e16828b0190815293166020840152604083019490945283918290600090829060600103925af1908115613db8575b600091613d9b575b5015613d8c5781613c15565b505051633c9fd93960e21b8152fd5b613db29150833d8511613b7957613b6a8183611242565b38613d80565b613dc06133f9565b613d78565b613ddd919450833d85116105295761051a8183611242565b9238613d33565b613dec6133f9565b613d2b565b613e09919350823d84116105295761051a8183611242565b9138613c0f565b613e186133f9565b613c07565b60a08101613e33815160208101519051906134a7565b90613e7a613e49825160408101519051906134a7565b9182613e558651151590565b91613e6a60608801516001600160a01b031690565b9051906060825192015193613bb7565b613f08613e9160808501516001600160a01b031690565b613efa604086015195613eb061043d61012f546001600160a01b031690565b906020610131549101519160405198899560208701919594939060a09360c0840197600085526001600160a01b038093166020860152604085015216606083015260808201520152565b03601f198101855284611242565b613f1e61043d61012d546001600160a01b031690565b613f3461043d61012e546001600160a01b031690565b92813b1561000e5760008094613f6160405197889687958694631759616b60e11b86523060048701613406565b03925af18015613f80575b613f735750565b806104ed611271926111e9565b613f886133f9565b613f6c565b604051906080820182811067ffffffffffffffff821117613fc4575b60405260608083600081528160208201528160408201520152565b613fcc6111d2565b613fa9565b613fd9613f8d565b5061402281600460206001600160a01b0361012d541660405192838092630964eec760e41b82525afa90811561409d575b60009161407f575b5061401d81836145ca565b61433b565b90506101345411614037575b610707906145e3565b3360009081527f0e0ee6959fd583d0bdb8c46ba6cdbcd38e0eb4ccd036d927cdf9c104046b2eef602052604090205460ff1661402e57604051639ece8f2f60e01b8152600490fd5b614097915060203d81116105295761051a8183611242565b38614012565b6140a56133f9565b61400a565b9094926001600160a01b03938461012f541690813b1561000e5760009660ff889460e4976040519b8c9a8b9963d505accf60e01b8b521660048a01523060248a01526044890152606488015216608486015260a485015260c48401525af18015613f8057613f735750565b6001600160a01b0390818160201c1691826000526101376020526141708261416b604060002061ffff8360e01c16908160028201805480156000146141d057508160018401555590600052602052604060002090565b613027565b506141946001610d2c856001600160a01b0316600052610136602052604060002090565b16156141c2575b7f3f2e35daa045b6aa1cc1d76e5337f2bce6985b354b49e998d4ce29d683190d15600080a3565b6141cb826150d1565b61419b565b906001840191825484106000146141f35750505590600052602052604060002090565b9091508211614204575b505061234f565b5581386141fd565b6001600160a01b0382168060005261422f610137928360205260406000206153f8565b600052602052600260406000200154156142465750565b611271906152a3565b60ff166012039060ff821161295557565b811561426a570690565b61427261356c565b0690565b6142c860ff6142c26004602061429861043d61012f546001600160a01b031690565b60405163313ce56760e01b815292839182905afa90811561432e575b600091614310575b5061424f565b1661295d565b81159081156142f4575b506142da5750565b60405163277f4c2760e01b81526004810191909152602490fd5b61430891506143029061370d565b82614260565b1515386142d2565b614328915060203d81116137b0576137a28183611242565b386142bc565b6143366133f9565b6142b4565b919082811161434b576001920390565b50600091508190565b906001600160a01b0380831690813314938415614515575b841561447c575b5061438a61043d61012d546001600160a01b031690565b926143ec60405163c48c010560e01b81528260209682888160048296855afa90811561446f575b600091614452575b50604051809581948293632474521560e21b8452600484019092916001600160a01b036020916040840195845216910152565b03915afa948515614445575b600095614426575b5050831561441a575b50505081614415575090565b905090565b16149050388080614409565b61443d929550803d10613b7957613b6a8183611242565b923880614400565b61444d6133f9565b6143f8565b6144699150843d86116105295761051a8183611242565b386143b9565b6144776133f9565b6143b1565b6144ce91945060209061449b61043d61012d546001600160a01b031690565b60405163e985e9c560e01b81526001600160a01b0390921660048301523360248301529092839190829081906044820190565b03915afa908115614508575b6000916144ea575b509238614373565b614502915060203d8111613b7957613b6a8183611242565b386144e2565b6145106133f9565b6144da565b3360009081527fb34b648d285118a9ee5f8cc4675698367f99ed092c20555b8b9380d41d2fafb5602052604090205460ff16945061436c565b9061455b61456191614591565b92614591565b821491821592614586575b505061457457565b6040516324fc16d360e11b8152600490fd5b14159050388061456c565b80516000929160209160051b8101820190849083015b8281106145b45750505050565b858151019586106145c65783016145a7565b5080fd5b116145d157565b604051630cea840760e21b8152600490fd5b6145eb613f8d565b5061012d9061460461043d83546001600160a01b031690565b6040805163789e8cdf60e01b81523060048083019190915294909260209291908390859060249082905afa9384156148cb575b6000946148ac575b506146498461385d565b6146528561385d565b9361465c8661385d565b97614665611273565b976000895282890193845285890196875260608901998a526000905b888210614697575b505050505050505050905090565b906147208761043d888b96958f8f908b8b610135956146bd87546001600160a01b031690565b988c6146f86146e86146e38d6001600160a01b0316600052610137602052604060002090565b615555565b9a8b94546001600160a01b031690565b9151627eeac760e11b8152309181019182526020820193909352919a8b928391829160400190565b03915afa97881561489f575b8c600099614860575b50509161475f87610d9f61477d96948961475561477798518751906127a0565b52518451906127a0565b61476988836148d8565b928391829c519051906127a0565b526130dc565b938497146147af575b5050506147938b516126bf565b8b52156147aa576147a3906126bf565b9091614681565b614689565b6147bc836147c99361420c565b546001600160a01b031690565b906001600160a01b0380918184169283911614928361482e575b5050506147f3575b388080614786565b61482961013580546001600160a01b03196001600160a01b03808316600052610136602052600160406000200154169116179055565b6147eb565b61485591929350610d2c6001916001600160a01b0316600052610136602052604060002090565b1614153880806147e3565b61477794929950610d9f61477d96948961475561488e61475f96868f97903d106105295761051a8183611242565b9d969850505094965050508c614735565b6148a76133f9565b61472c565b6148c4919450833d85116105295761051a8183611242565b923861463f565b6148d36133f9565b614637565b9080821015614415575090565b906148ee613f8d565b5061490d816001600160a01b0316600052610137602052604060002090565b906000906001830154600284019081545b80821115614ae557505082156145d1576149378361385d565b906149418461385d565b9461494a613845565b94614953611273565b96600088526020908189019586526040998a8a0191825260608a019889526000905b8482106149a0575b505050505050505082935061499661499b92935161385d565b614b15565b905290565b908b8893928c6149af89615555565b916149c661043d61012d546001600160a01b031690565b9351627eeac760e11b8152306004808301919091526024820185905290948990869060449082905afa948515614ad8575b600095614ab9575b50614a0a85836148d8565b9284614a1a859a518351906127a0565b5283614a2989518351906127a0565b5251614a348b6130cd565b1480614ab0575b614aa0575090614a4a916130dc565b91829514614a7a575b50614a5e8c516126bf565b8c5215614a7557614a6e906126bf565b9091614975565b61497d565b614a8490886153f8565b875415614a92575b38614a53565b614a9b8a6152a3565b614a8c565b90508f51630cea840760e21b8152fd5b50848211614a3b565b614ad1919550893d8b116105295761051a8183611242565b93386149ff565b614ae06133f9565b6149f7565b9093614b09614b0f91614b02878990600052602052604060002090565b5490612979565b946126bf565b9061491e565b519190614b218361385d565b9260019182809201915b828110614b385750505050565b8082859260051b88015201614b2b565b9190614b52613f8d565b50614b6961043d61012d546001600160a01b031690565b9160409182519063789e8cdf60e01b8252602080836004978180614b9f308c83019190916001600160a01b036020820193169052565b03915afa928315614e40575b600093614e21575b50614bc08392979361385d565b90614bca8361385d565b91614bd48461385d565b98614bdd611273565b998a96600088528488019384528988019586526060880191825297614c0b610135546001600160a01b031690565b9260005b8c898210614c39575b5050505050505050505050614c2c57505090565b51630cea840760e21b8152fd5b909192939495969798999a8c614c77614c66896001600160a01b0316600052610137602052604060002090565b614c713689896112da565b9061556d565b928315614df55783614cc59493928c92614c9d61043d61012d546001600160a01b031690565b9151627eeac760e11b8152309181019182526020820193909352919586928391829160400190565b03915afa928315614de8575b600093614dc9575b50818d8a519051614ce9916127a0565b52878d88519051614cf9916127a0565b6001600160a01b039091169052614d1083826148d8565b80809e8d519051614d20916127a0565b52614d2a916130dc565b91829c14614d66575b508d614d3f81516126bf565b905215614d5e57614d4f906126bf565b908c9897969594939291614c0f565b8c988c614c18565b614d9387614d8d6001610d2c836001600160a01b0316600052610136602052604060002090565b9261420c565b614dbc614db4886001600160a01b0316600052610137602052604060002090565b600201541590565b15614d3357955038614d33565b614de19193508a3d8c116105295761051a8183611242565b9138614cd9565b614df06133f9565b614cd1565b50509a505093614b096001610d2c614d4f936001600160a01b0316600052610136602052604060002090565b81614e399294503d85116105295761051a8183611242565b9138614bb3565b614e486133f9565b614bab565b9190614e57613f8d565b50614e76816001600160a01b0316600052610137602052604060002090565b6000946001820154600283019081545b8082111561506257505086156145d157614ea58792939495969761385d565b90614eaf8361385d565b94614eb8613845565b97614ec1611273565b9960008b5260208b01948552604097888c015260608b01998a529560005b868110614f11575b50505050505050614f01575061499b90614996845161385d565b51630cea840760e21b8152600490fd5b614f2d614f279c9a989c9b99979b3684866112da565b8561556d565b8015615054579b8798999a9b9c614f5061043d61012d546001600160a01b031690565b8951627eeac760e11b81523060048201526024810183905292908e90602090859060449082905afa938415615047575b60009461501c575b50614fba916147779184614f9f8d518351906127a0565b52614faa86836148d8565b928391829e8101519051906127a0565b91829914614ff6575b50614fce8c516126bf565b8c5215614fea57614fde906126bf565b9a95969798999a614edf565b869798999a9b50614ee7565b61500090866153f8565b85541561500e575b38614fc3565b6150178a6152a3565b615008565b6147779194509161503e614fba9360203d6020116105295761051a8183611242565b94915091614f88565b61504f6133f9565b614f80565b5086989a509a96989a614ee7565b909761507f61508591614b028b8890600052602052604060002090565b986126bf565b90614e86565b815181546001600160a01b0319166001600160a01b03918216178255611271926001919060200151169101906001600160a01b03166001600160a01b0319825416179055565b610135906150e682546001600160a01b031690565b6001600160a01b039281841661517657505061013580546001600160a01b0319166001600160a01b03831617905561514c61511f611293565b6001600160a01b0383168082526020808301829052600091825261013690526040902061508b565b61508b565b1680807f3a35d42f4bce14f93a24ab2ec3c4dc4cd013e5f16abcd79d5c93afa2cebc0c72600080a4565b928061527683956151e96151a26147bc85976001600160a01b0316600052610136602052604060002090565b976151cb6151ae611293565b6001600160a01b038b168152916001600160a01b03166020830152565b615147886001600160a01b0316600052610136602052604060002090565b61522986600161520d8a6001600160a01b0316600052610136602052604060002090565b01906001600160a01b03166001600160a01b0319825416179055565b6147bc8661525b61524184546001600160a01b031690565b6001600160a01b0316600052610136602052604060002090565b906001600160a01b03166001600160a01b0319825416179055565b9416931691167f3a35d42f4bce14f93a24ab2ec3c4dc4cd013e5f16abcd79d5c93afa2cebc0c72600080a4565b6001600160a01b0390816152cb826001600160a01b0316600052610136602052604060002090565b5416916153458160016152f2856001600160a01b0316600052610136602052604060002090565b015416928281169283850361536c57506101356001600160a01b031981541690555b61514761531f611293565b9160008352600060208401526001600160a01b0316600052610136602052604060002090565b7fd853f0403f99e88d186f52744de8bd40a17410e4d2206e25ac3750410aa19737600080a4565b61539085600161520d896001600160a01b0316600052610136602052604060002090565b6153b28661525b876001600160a01b0316600052610136602052604060002090565b61013554168303615314576153f361013580546001600160a01b03196001600160a01b03808316600052610136602052600160406000200154169116179055565b615314565b61ffff8260e01c16916154256154218261541c868690600052602052604060002090565b613129565b1590565b61553257506154408282906000526020526040600020541590565b615448575050565b60018082019182546002820194855491828114600014615478575050505050906154756000926000199055565b55565b9395929381036154e15750508361548f845461296b565b905b61549d575b5050505050565b815481116154dc576154b9818490600052602052604060002090565b546154cd576154c7906126bf565b84615491565b93505050553880808080615496565b615496565b91939181146154f1575050505050565b6154fb85916130cd565b905b1561549657815481106154dc5761551e818490600052602052604060002090565b546154cd5761552c90612a06565b846154fd565b604051635a927b7f60e11b81526004810191909152602481019290925250604490fd5b6001810154600052602052612d096040600020612cb6565b60005b82518110156130a45761558381846127a0565b5160005281602052604080600020546155a557506155a0906126bf565b615570565b915050612d099150600020612cb656fea2646970667358221220e9545b4f0c540349d38908a030c84dadcf89add84d128457208429983e6ba83464736f6c63430008110033" +} \ No newline at end of file diff --git a/deployments/amoy/Removal.json b/deployments/amoy/Removal.json new file mode 100644 index 000000000..7bec6db5e --- /dev/null +++ b/deployments/amoy/Removal.json @@ -0,0 +1,1292 @@ +{ + "address": "0x24EB36eac27bf97CC3EA573A525c46e51b01d710", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "ForbiddenTransfer", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidData", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "methodology", + "type": "uint8" + } + ], + "name": "MethodologyTooLarge", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "methodologyVersion", + "type": "uint8" + } + ], + "name": "MethodologyVersionTooLarge", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "RemovalAlreadySoldOrConsigned", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "RemovalNotYetMinted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes2", + "name": "country", + "type": "bytes2" + }, + { + "internalType": "bytes2", + "name": "subdivision", + "type": "bytes2" + } + ], + "name": "UncapitalizedString", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "idVersion", + "type": "uint8" + } + ], + "name": "UnsupportedIdVersion", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "certificateRecipient", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "certificateAmount", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "certificateId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "removalIds", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "removalAmounts", + "type": "uint256[]" + } + ], + "name": "Migrate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract IMarket", + "name": "market", + "type": "address" + }, + { + "indexed": false, + "internalType": "contract ICertificate", + "name": "certificate", + "type": "address" + } + ], + "name": "RegisterContractAddresses", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "fromAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "ReleaseRemoval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "certificateRecipient", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "certificateAmount", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "certificateId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "removalIds", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "removalAmounts", + "type": "uint256[]" + } + ], + "name": "Retire", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + } + ], + "name": "TransferBatch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "TransferSingle", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "value", + "type": "string" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "URI", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "CONSIGNOR_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PAUSER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "RELEASER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + } + ], + "name": "addBalance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "accounts", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + } + ], + "name": "balanceOfBatch", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "consign", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "consignorBatchTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "decodeRemovalIdV0", + "outputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "idVersion", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "methodology", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "methodologyVersion", + "type": "uint8" + }, + { + "internalType": "uint16", + "name": "vintage", + "type": "uint16" + }, + { + "internalType": "bytes2", + "name": "country", + "type": "bytes2" + }, + { + "internalType": "bytes2", + "name": "subdivision", + "type": "bytes2" + }, + { + "internalType": "address", + "name": "supplierAddress", + "type": "address" + }, + { + "internalType": "uint32", + "name": "subIdentifier", + "type": "uint32" + } + ], + "internalType": "struct DecodedRemovalIdV0", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "exists", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getCertificateAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMarketAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMarketBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "getOwnedTokenIds", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "getProjectId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getRoleMember", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleMemberCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "baseURI", + "type": "string" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "components": [ + { + "internalType": "uint8", + "name": "idVersion", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "methodology", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "methodologyVersion", + "type": "uint8" + }, + { + "internalType": "uint16", + "name": "vintage", + "type": "uint16" + }, + { + "internalType": "bytes2", + "name": "country", + "type": "bytes2" + }, + { + "internalType": "bytes2", + "name": "subdivision", + "type": "bytes2" + }, + { + "internalType": "address", + "name": "supplierAddress", + "type": "address" + }, + { + "internalType": "uint32", + "name": "subIdentifier", + "type": "uint32" + } + ], + "internalType": "struct DecodedRemovalIdV0[]", + "name": "removals", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "projectId", + "type": "uint256" + } + ], + "name": "mintBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "numberOfTokensOwnedByAddress", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IMarket", + "name": "market", + "type": "address" + }, + { + "internalType": "contract ICertificate", + "name": "certificate", + "type": "address" + } + ], + "name": "registerContractAddresses", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "release", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "address", + "name": "certificateRecipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "certificateAmount", + "type": "uint256" + } + ], + "name": "retire", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeBatchTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "uri", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "numDeployments": 2, + "bytecode": "0x60808060405234620000c6576000549060ff8260081c1662000074575060ff8082161062000038575b604051614c4a9081620000cc8239f35b60ff90811916176000557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498602060405160ff8152a13862000028565b62461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608490fd5b600080fdfe6080604052600436101561001257600080fd5b6000803560e01c8062fdd58e1461274a57806301ffc9a7146126a75780630231c1c2146122c85780630e89341c146121e7578063248a9ca3146121ba5780632eb2c2d6146120eb5780632f2ff15d1461202657806334697f4514611f4157806336568abe14611e23578063366a4120146119345780633d932dfb146119095780633f4ba83a1461186b57806342c6281d1461177d5780634e1273f4146115ee5780634f558e79146115c25780634fac7e41146115365780635562a315146113945780635c975abb146113715780636b425fc8146112dd578063789e8cdf146112a45780638456cb59146112495780639010d07c1461120357806391d14854146111b657806393ae796d14610efe578063964eec7014610edf578063a217fddf14610ec3578063a22cb46514610dbe578063ac28af2414610d83578063ac9650d814610b08578063bd85b03914610ade578063c39e3d6514610a5c578063c48c010514610a21578063ca15c873146109f6578063d547741f1461092c578063e63ab1e9146108f1578063e7334fe5146108c9578063e7f78c72146108a1578063e985e9c51461084c578063f242432a146107945763f62d1888146101d457600080fd5b346107915760208060031936011261078d5767ffffffffffffffff9060043582811161078957366023820112156107895761021990369060248160040135910161295e565b91835460ff808260081c16159283809461077d575b8015610767575b156106fc5760019560ff19938588868316178a556106eb575b506102a983895460081c16610262816132d4565b61026b816132d4565b6102a46024604051856102888c83985192818492860191016127eb565b8101637b69647d60e01b8c82015203600481018652018461289c565b6132d4565b80519182116106d75781906102bf609954612e22565b601f8111610667575b508690601f83116001146105e85789926105dd575b5050600019600383901b1c191690861b176099555b61032881875460081c16610305816132d4565b8360335416603355610316816132d4565b61031f816132d4565b6102a4816132d4565b6103306130fa565b85805260fb9182855260408720336000528552816040600020541615610594575b86805261012d928386526103683360408a2061314b565b506103716130fa565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8089528187526040892033600052875283604060002054161561054b575b88528386526103c23360408a2061314b565b506103cb6130fa565b7fa269776b75ac4c5fa422bb11bec3ed3cee626848d07687372583174b209261fb80895281875260408920336000528752836040600020541615610502575b885283865261041c3360408a2061314b565b506104256130fa565b7f88f3509f0e42391f2d94ebfb2a37cbd0782b1b8f73715330017f4663290b8117928389528187526040892033600052875260406000205416156104b8575b505085528252610477336040862061314b565b50610480578280f35b825461ff00191683556040519182527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249891a138808280f35b828852855260408720336000528552856040600020918254161790553333827f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8980a43880610464565b80895281875260408920336000528752604060002088848254161790553333827f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8c80a461040a565b80895281875260408920336000528752604060002088848254161790553333827f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8c80a46103b0565b86805282855260408720336000528552604060002086828254161790553333887f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4610351565b0151905038806102dd565b60998a528893507f72a152ddfb8e864297c917af52ea6c1c68aead0fee1a62673fcc7e0c94979d009190601f1984168b5b8a8282106106515750508411610638575b505050811b016099556102f2565b015160001960f88460031b161c1916905538808061062a565b8385015186558c97909501949384019301610619565b909150609989527f72a152ddfb8e864297c917af52ea6c1c68aead0fee1a62673fcc7e0c94979d00601f840160051c8101918885106106cd575b84939291601f8b920160051c01915b8281106106be5750506102c8565b600081558594508a91016106b0565b90915081906106a1565b634e487b7160e01b88526041600452602488fd5b61ffff19166101011788553861024e565b60405162461bcd60e51b815260048101869052602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608490fd5b50303b1580156102355750600182841614610235565b5060018284161061022e565b8380fd5b5080fd5b80fd5b50346107915760a0366003190112610791576107ae61277a565b6107b6612790565b60843567ffffffffffffffff8111610789576107d6903690600401612995565b906001600160a01b0392836101915416330361083a576108139381163381148015610816575b61080691506146f7565b6064359160443591613ae4565b80f35b5085526098602052604085203360005260205261080660ff604060002054166107fc565b604051631d9d0a4f60e31b8152600490fd5b50346107915760403660031901126107915761086661277a565b6040610870612790565b926001600160a01b0380931681526098602052209116600052602052602060ff604060002054166040519015158152f35b503461079157806003193601126107915760206001600160a01b036101925416604051908152f35b503461079157806003193601126107915760206001600160a01b036101915416604051908152f35b503461079157806003193601126107915760206040517f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8152f35b5034610791576040366003190112610791576109a860043561012d61094f612790565b9180855260209060fb825261096a6001604088200154612d17565b6109726130fa565b80865260fb82526001600160a01b036040872094169384600052825260ff604060002054166109ac575b855252604083206131e4565b5080f35b80865260fb825260408620846000528252604060002060ff1981541690553384827ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b8980a461099c565b5034610791576020366003190112610791576040602091600435815261012d83522054604051908152f35b503461079157806003193601126107915760206040517fa269776b75ac4c5fa422bb11bec3ed3cee626848d07687372583174b209261fb8152f35b503461079157608036600319011261079157610a7661277a565b610a7e612790565b67ffffffffffffffff9190604435838111610ada57610aa1903690600401612924565b606435938411610ada57610abc610813943690600401612924565b91610ac56129e4565b60405193610ad285612864565b868552614121565b8480fd5b5034610791576020366003190112610791576040602091600435815260c983522054604051908152f35b50346107915760208060031936011261078d5767ffffffffffffffff6004358181116107895790610b3e849236906004016127ba565b9091610b49826128be565b92610b57604051948561289c565b828452601f19610b66846128be565b01855b818110610d74575050845b838110610bdb575050505060405191838301848452825180915260408401948060408360051b870101940192955b828710610baf5785850386f35b909192938280610bcb600193603f198a8203018652885161280e565b9601920196019592919092610ba2565b8060059796971b820135601e1983360301811215610d70578201803590848211610d6c5787018136038113610d6c57610c1591369161295e565b303b15610d01578781888293519101305af4903d15610cfa573d610c3881612942565b90610c46604051928361289c565b81523d898983013e5b604051606081019181831087841117610ce457610cdc94610cc193604052602783527f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c8b8401527f206661696c6564000000000000000000000000000000000000000000000000006040840152612f75565b610ccb8288612f4b565b52610cd68187612f4b565b50612f26565b959495610b74565b634e487b7160e01b600052604160045260246000fd5b6060610c4f565b60405162461bcd60e51b815260048101889052602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608490fd5b8880fd5b8780fd5b60608682018901528701610b69565b503461079157806003193601126107915760206040517f88f3509f0e42391f2d94ebfb2a37cbd0782b1b8f73715330017f4663290b81178152f35b503461079157604036600319011261079157610dd861277a565b60243590811515809203610ebf576001600160a01b0390610df76130fa565b1690813314610e545733835260986020526040832082600052602052604060002060ff1981541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a380f35b60405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c6600000000000000000000000000000000000000000000006064820152608490fd5b8280fd5b5034610791578060031936011261079157602090604051908152f35b5034610791578060031936011261079157602061019654604051908152f35b5034610791576040366003190112610791576004356001600160a01b03808216809203610ebf576024803591821680920361078957610f3b6130fa565b3360009081527fc88390e7e62175be0932452175b6a7222b6b094ab0ef984a5153c620345d8975602090815260409091205490919060ff1615610fe25750916040917fa948457069516ab10917665b0b5d6b8043d77b39f57ca760ef0d3d4104277547937fffffffffffffffffffffffff0000000000000000000000000000000000000000610191848282541617905582610192918254161790558351928352820152a180f35b90610fec33612fd3565b6000604051610ffa81612880565b604281528381019160603684378151156111a35760308353815160019081101561119057607860218401536041905b8082116111225750506110e05760486110dc936110b1936110c09360405195869376020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8a86015261107c815180928c6037890191016127eb565b8401917f206973206d697373696e6720726f6c65200000000000000000000000000000006037840152518093868401906127eb565b0103602881018452018261289c565b60405193849362461bcd60e51b8552600485015283019061280e565b0390fd5b606485856040519162461bcd60e51b83528160048401528201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b9091600f8116601081101561117b576f181899199a1a9b1b9c1cb0b131b232b360811b901a6111518486612fc2565b5360041c918015611166576000190190611029565b87634e487b7160e01b60005260116004526000fd5b88634e487b7160e01b60005260326004526000fd5b634e487b7160e01b825260326004528682fd5b634e487b7160e01b815260326004528590fd5b5034610791576040366003190112610791576001600160a01b0360406111da612790565b92600435815260fb602052209116600052602052602060ff604060002054166040519015158152f35b5034610791576040366003190112610791576001600160a01b03611239602092600435815261012d8452604060243591206130e2565b9190546040519260031b1c168152f35b5034610791578060031936011261079157611262612bd2565b61126a6130fa565b600160ff1960335416176033557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a180f35b50346107915760203660031901126107915760406020916001600160a01b036112cb61277a565b16815261019583522054604051908152f35b5034610791576060366003190112610791576112f761277a565b602435906113036129e4565b6001600160a01b03806101925416818316908114908115611362575b50611349579061081392916101915416916040519261133d84612864565b85845260443592613ae4565b60405163094f4a6b60e31b815260048101849052602490fd5b9050816101915416143861131f565b5034610791578060031936011261079157602060ff603354166040519015158152f35b50346107915760803660031901126107915767ffffffffffffffff600435818111610ebf576113c79036906004016127ba565b9091602435818111610ada576113e19036906004016127ba565b9092604435936001600160a01b039384861680960361153157606435946114066129e4565b6101925416946040519663144613ff60e31b88526020978a89826004818c5afa918215611524578b888c86938895966114e8575b50906114887fba5d618d168a3f9d48b5d1b95779e4cd5afa49565f8d387a128ec2f2ee0f589493926114796040519485946040865260408601916140e4565b90838203908401528d8c6140e4565b0390a48960405198890152604088015260608701528760808701528760a08701528760c087015260c0865260e086019086821090821117610ce457610813966114e1936114d99260405236916128d6565b9236916128d6565b9133614121565b9550935050505081813d831161151d575b611503818361289c565b81010312611519575182828b888c61148861143a565b8a80fd5b503d6114f9565b50604051903d90823e3d90fd5b600080fd5b50346107915760208060031936011261078d576001600160a01b0361155961277a565b16825261019581526040822091604051809384918482549182815201918452848420935b858282106115ac575050506115949250038361289c565b6115a86040519282849384528301906129b0565b0390f35b855484526001958601958895509301920161157d565b5034610791576020366003190112610791576040602091600435815260c9835220541515604051908152f35b50346107915760403660031901126107915767ffffffffffffffff600435818111610ebf5736602382011215610ebf5780600401359161162d836128be565b9161163b604051938461289c565b83835260209360248585019160051b83010191368311611779576024869101915b83831061176157505050506024359081116107895761167f903690600401612924565b9080518251036116f6576116938151612ef4565b935b81518110156116df57806116ca6001600160a01b036116b76116da9486612f4b565b51166116c38387612f4b565b5190612e5c565b6116d48288612f4b565b52612f26565b611695565b5050506115a86040519282849384528301906129b0565b60405162461bcd60e51b815260048101849052602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d6174636800000000000000000000000000000000000000000000006064820152608490fd5b819061176c846127a6565b815201910190859061165c565b8680fd5b50346107915760203660031901126107915760043561179a6146b9565b506117a36146b9565b508060f81c906040516117b581612847565b82815260208101908260f41c600f168252604081018360f01c600f1681526060820161ffff90818660e01c168152608084019161ffff60f01b928391828960201b16825260a0870193838a60301b16855260c08801966001600160a01b0398898c60201c16895260e0019963ffffffff809c168b526040519c8d525160ff1660208d01525160ff1660408c0152511660608a015251166080880152511660a0860152511660c0840152511660e082015261010090f35b5034610791578060031936011261079157611884612bd2565b60335460ff8116156118c45760ff19166033557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a180f35b60405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606490fd5b5034610791576020366003190112610791576040602091600435815261019483522054604051908152f35b5034610791576040366003190112610791576004356024908135907f88f3509f0e42391f2d94ebfb2a37cbd0782b1b8f73715330017f4663290b81179283855260209360fb855260408620338752855260ff60408720541615611cf2575084916001600160a01b03948582821c166119ac8382612e5c565b80611c9f575b50508484106119bf578680f35b60405163e7334fe560e01b808252908281600481305afa908115611b61576119f09185918b91611b44575b50612e5c565b80611b6c575b5050848410611a03578680f35b6040516373fbc63960e11b808252908281600481305afa908115611b6157611a339185918b91611b445750612e5c565b611a3c57508680f35b87611a5186611a4b818a6131d7565b986131d7565b946040519283528383600481305afa928315611b0a578293611b15575b50611a7a8686856147a4565b88610192541690813b15610ebf578291829160405180948193633cfe604560e11b83528b60048401525af18015611b0a57611af2575b505090611ae7967fa76ba9683000f0598aec5ed73132d1bdb673107c3e609fcbff0dfb9296467c43926040519586521693a3612fb5565b503880808080808680f35b611afe90939293612833565b610d7057908738611ab0565b6040513d84823e3d90fd5b611b36919350843d8611611b3d575b611b2e818361289c565b81019061469a565b9138611a6e565b503d611b24565b611b5b9150853d8711611b3d57611b2e818361289c565b386119ea565b6040513d8b823e3d90fd5b611b7a8688979394976131d7565b9080821015611c975750905b6040518381528681600481305afa8015611c6f57858491611bae938d91611c7a575b506147a4565b88886101915416803b1561078d57819087604051809481936337bdc99b60e01b83528a60048401525af18015611c6f57611c5c575b506040519283528583600481305afa8015611b6157611c37938a91611c3f575b50847fa76ba9683000f0598aec5ed73132d1bdb673107c3e609fcbff0dfb9296467c43888b604051948786521693a3612fb5565b9238806119f6565b611c569150873d8911611b3d57611b2e818361289c565b38611c03565b611c6890999199612833565b9738611be3565b6040513d8c823e3d90fd5b611c9191508a3d8c11611b3d57611b2e818361289c565b38611ba8565b905090611b86565b9194509080861015611cec575084905b611cba8284836147a4565b827fa76ba9683000f0598aec5ed73132d1bdb673107c3e609fcbff0dfb9296467c4386604051858152a39238806119b2565b90611caf565b849086611cfe33612fd3565b9160405190611d0c82612880565b60428252848201926060368537825115611e105760308453825190600191821015611dfd5790607860218501536041915b818311611d91575050506110e05760486110dc936110b1936110c09360405195869376020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8a86015261107c815180928c6037890191016127eb565b909192600f81166010811015611dea576f181899199a1a9b1b9c1cb0b131b232b360811b901a611dc18587612fc2565b5360041c928015611dd757600019019190611d3d565b634e487b7160e01b825260116004528882fd5b634e487b7160e01b835260326004528983fd5b634e487b7160e01b815260326004528790fd5b634e487b7160e01b815260326004528690fd5b5034610791576040366003190112610791576004356001600160a01b03611e48612790565b16338103611ed6576109a891611e5c6130fa565b80845260fb6020526040842082855260205260ff604085205416611e8c575b835261012d602052604083206131e4565b80845260fb602052604084208285526020526040842060ff1981541690553382827ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b8780a4611e7b565b60405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608490fd5b503461079157606036600319011261079157611f5b61277a565b67ffffffffffffffff91906024803584811161078957611f7f9036906004016127ba565b919094604435908111610ada57611f9a9036906004016127ba565b9091611fa46129e4565b855b828110611fd9575050946114d9611fc392610813969736916128d6565b9060405192611fd184612864565b8584526133dd565b611fe48184866139f0565b3587526101946020526040872054156120055761200090612f26565b611fa6565b6120109192846139f0565b60405163ac0522ad60e01b815290356004820152fd5b5034610791576040366003190112610791576109a860043561012d612049612790565b9180855260209060fb82526120646001604088200154612d17565b61206c6130fa565b80865260fb82526001600160a01b0360408720941693848752825260ff604087205416156120a1575b8552526040832061314b565b80865260fb8252604080872085885283528620805460ff191660011790553384827f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8980a4612095565b50346107915760a03660031901126107915761210561277a565b61210d612790565b67ffffffffffffffff604435818111610ada5761212e903690600401612924565b6064358281116121b657612146903690600401612924565b916084359081116121b65761215f903690600401612995565b926001600160a01b0394856101915416330361083a576108139581163381148015612194575b61218f91506146f7565b614121565b50875260986020526040872033885260205261218f60ff604089205416612185565b8580fd5b50346107915760203660031901126107915760016040602092600435815260fb8452200154604051908152f35b50346107915760208060031936011261078d5760405191828160995461220c81612e22565b938484526001918683821691826000146122a657505060011461224c575b50506122389250038361289c565b6115a860405192828493845283019061280e565b90859250609982527f72a152ddfb8e864297c917af52ea6c1c68aead0fee1a62673fcc7e0c94979d005b85831061228e5750506122389350820101388061222a565b80548389018501528794508693909201918101612276565b925093505061223894915060ff191682840152151560051b820101388061222a565b5034610791576080366003190112610791576122e261277a565b60243567ffffffffffffffff8111610ebf576123029036906004016127ba565b67ffffffffffffffff60449392933511610789573660236044350112156107895767ffffffffffffffff6044356004013511610789573660246044356004013560081b604435010111610789576123576129e4565b61236660443560040135612ef4565b90845b604435600401358110612386575061081393611fc39136916128d6565b6101006023198260081b60443501360301126121b6576040518061010081011067ffffffffffffffff610100830111176126935761010081016040526123d560248360081b6044350101614769565b8082526123ea60448460081b81350101614769565b602083015261240260648460081b6044350101614769565b604083015260848360081b60443501013561ffff81168103610d6c57606083015261243660a48460081b6044350101614777565b608083015261244e60c48460081b6044350101614777565b60a083015261246660e48460081b60443501016127a6565b60c0830152604435600884901b01610104013563ffffffff81169003610d705760ff906101048460081b60443501013560e0840152168061267b575060ff604082015116600f90818111612663575060ff60208301511690811161264b575061ffff60f01b80608083015116906124f6828060001a9060011a605b6040821191101690605b604082119110161690565b8061261c575b156125fa57505063ffffffff60e060f080602085015160041b1660ff6040860151161760ff60f81b855160f81b1661ffff841b6060870151851b16917bffff0000000000000000000000000000000000000000000000000000608088015160201c16931b17171779ffff00000000000000000000000000000000000000000000000060a085015160301c161777ffffffffffffffffffffffffffffffffffffffff0000000060c085015160201b161792015116179081875261019460205260408720546125e85781600192885261019460205260643560408920556125e18286612f4b565b5201612369565b604051635cb045db60e01b8152600490fd5b60a0604493015116604051916381036ebb60e01b835260048301526024820152fd5b506126468160a0850151168060001a9060011a605b6040821191101690605b604082119110161690565b6124fc565b602490604051906346ac6e0f60e01b82526004820152fd5b602490604051906324b1529d60e11b82526004820152fd5b60249060405190633e60769b60e21b82526004820152fd5b634e487b7160e01b87526041600452602487fd5b50346107915760203660031901126107915760043563ffffffff60e01b811680910361078d57602090635a05180f60e01b81149081156126ed575b506040519015158152f35b637965db0b60e01b811491508115612707575b50826126e2565b636cdb3d1360e11b811491508115612739575b8115612728575b5082612700565b6301ffc9a760e01b14905082612721565b6303a24d0760e21b8114915061271a565b503461079157604036600319011261079157602061277261276961277a565b60243590612e5c565b604051908152f35b600435906001600160a01b038216820361153157565b602435906001600160a01b038216820361153157565b35906001600160a01b038216820361153157565b9181601f840112156115315782359167ffffffffffffffff8311611531576020808501948460051b01011161153157565b60005b8381106127fe5750506000910152565b81810151838201526020016127ee565b90602091612827815180928185528580860191016127eb565b601f01601f1916010190565b67ffffffffffffffff8111610ce457604052565b610100810190811067ffffffffffffffff821117610ce457604052565b6020810190811067ffffffffffffffff821117610ce457604052565b6080810190811067ffffffffffffffff821117610ce457604052565b90601f8019910116810190811067ffffffffffffffff821117610ce457604052565b67ffffffffffffffff8111610ce45760051b60200190565b92916128e1826128be565b916128ef604051938461289c565b829481845260208094019160051b810192831161153157905b8282106129155750505050565b81358152908301908301612908565b9080601f830112156115315781602061293f933591016128d6565b90565b67ffffffffffffffff8111610ce457601f01601f191660200190565b92919261296a82612942565b91612978604051938461289c565b829481845281830111611531578281602093846000960137010152565b9080601f830112156115315781602061293f9335910161295e565b90815180825260208080930193019160005b8281106129d0575050505090565b8351855293810193928101926001016129c2565b3360009081527fba06a78ec98734fb5637b51b6458f4ba0a229fe2bbc86ce5d18073647cb408f3602090815260408083205490927fa269776b75ac4c5fa422bb11bec3ed3cee626848d07687372583174b209261fb9160ff1615612a485750505050565b612a5133612fd3565b91845190612a5e82612880565b60428252848201926060368537825115612bbe5760308453825190600191821015612bbe5790607860218501536041915b818311612b5057505050612b0e5760486110dc938693612af293612ae3985198899376020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8a86015261107c815180928c6037890191016127eb565b0103602881018752018561289c565b5192839262461bcd60e51b84526004840152602483019061280e565b60648486519062461bcd60e51b825280600483015260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b909192600f81166010811015612baa576f181899199a1a9b1b9c1cb0b131b232b360811b901a612b808587612fc2565b5360041c928015612b9657600019019190612a8f565b634e487b7160e01b82526011600452602482fd5b634e487b7160e01b83526032600452602483fd5b634e487b7160e01b81526032600452602490fd5b3360009081527fc81858b0fc5e8d7d2c7a341b4e13a62a27b51e1da1072bf5f7fee8fdef673e94602090815260408083205490927f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a9160ff1615612c365750505050565b612c3f33612fd3565b91845190612c4c82612880565b60428252848201926060368537825115612bbe5760308453825190600191821015612bbe5790607860218501536041915b818311612cd157505050612b0e5760486110dc938693612af293612ae3985198899376020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8a86015261107c815180928c6037890191016127eb565b909192600f81166010811015612baa576f181899199a1a9b1b9c1cb0b131b232b360811b901a612d018587612fc2565b5360041c928015612b9657600019019190612c7d565b60009080825260209060fb8252604092838120338252835260ff848220541615612d415750505050565b612d4a33612fd3565b91845190612d5782612880565b60428252848201926060368537825115612bbe5760308453825190600191821015612bbe5790607860218501536041915b818311612ddc57505050612b0e5760486110dc938693612af293612ae3985198899376020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8a86015261107c815180928c6037890191016127eb565b909192600f81166010811015612baa576f181899199a1a9b1b9c1cb0b131b232b360811b901a612e0c8587612fc2565b5360041c928015612b9657600019019190612d88565b90600182811c92168015612e52575b6020831014612e3c57565b634e487b7160e01b600052602260045260246000fd5b91607f1691612e31565b6001600160a01b0316908115612e8957600052609760205260406000209060005260205260406000205490565b60405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201527f616c6964206f776e6572000000000000000000000000000000000000000000006064820152608490fd5b90612efe826128be565b612f0b604051918261289c565b8281528092612f1c601f19916128be565b0190602036910137565b6000198114612f355760010190565b634e487b7160e01b600052601160045260246000fd5b8051821015612f5f5760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b90919015612f81575090565b815115612f915750805190602001fd5b60405162461bcd60e51b8152602060048201529081906110dc90602483019061280e565b91908201809211612f3557565b908151811015612f5f570160200190565b604051906060820182811067ffffffffffffffff821117610ce457604052602a8252602082016040368237825115612f5f57603090538151600190811015612f5f57607860218401536029905b8082116130745750506130305790565b606460405162461bcd60e51b815260206004820152602060248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b9091600f811660108110156130cd576f181899199a1a9b1b9c1cb0b131b232b360811b901a6130a38486612fc2565b5360041c9180156130b8576000190190613020565b60246000634e487b7160e01b81526011600452fd5b60246000634e487b7160e01b81526032600452fd5b8054821015612f5f5760005260206000200190600090565b60ff6033541661310657565b60405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606490fd5b919060018301600090828252806020526040822054156000146131d157845494680100000000000000008610156131bd57836131ad613194886001604098999a018555846130e2565b819391549060031b600019811b9283911b169119161790565b9055549382526020522055600190565b634e487b7160e01b83526041600452602483fd5b50925050565b91908203918211612f3557565b906001820190600092818452826020526040842054908115156000146132cd57600019918083018181116132b9578254908482019182116132a557808203613270575b5050508054801561325c5782019161323f83836130e2565b909182549160031b1b191690555582526020526040812055600190565b634e487b7160e01b86526031600452602486fd5b61329061328061319493866130e2565b90549060031b1c928392866130e2565b90558652846020526040862055388080613227565b634e487b7160e01b88526011600452602488fd5b634e487b7160e01b87526011600452602487fd5b5050505090565b156132db57565b60405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608490fd5b1561334d57565b60405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060448201527f6d69736d617463680000000000000000000000000000000000000000000000006064820152608490fd5b90916133cf61293f936040845260408401906129b0565b9160208184039101526129b0565b9091936001600160a01b0390818316918215908115916138f4576134048651895114613346565b61340c6130fa565b61019190808254169161019290828254169184881492839084156138ea575b84156138e1575b841561383f575b508a5195159160008e5b8d898310613777575050505050505050505060005b855181101561349f578061346f61349a928a612f4b565b5161347a8289612f4b565b5160005260c96020526134936040600020918254612fb5565b9055612f26565b613458565b509091929460005b85518110156134f357806134be6134ee928a612f4b565b516134c98289612f4b565b5160005261349360206097815260409081600020908a60005252600020918254612fb5565b6134a7565b509195909460409584600088517f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb33918061352f898d836133b8565b0390a484600052610195602052866000206000805286519160005b83811061374a57505050503b613562575b5050505050565b6135c492602092600087518096819582946135b56135a263bc197c8160e01b9c8d875233600488015287602488015260a0604488015260a48701906129b0565b60031993848783030160648801526129b0565b9184830301608485015261280e565b03925af16000918161371a575b5061369c57505060016135e2613963565b6308c379a014613666575b6135fd57505b388080808061355b565b5162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560448201527f526563656976657220696d706c656d656e7465720000000000000000000000006064820152608490fd5b61366e613981565b8061367957506135ed565b825162461bcd60e51b8152602060048201529081906110dc90602483019061280e565b6001600160e01b031916036136b157506135f3565b5162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e730000000000000000000000000000000000000000000000006064820152608490fd5b61373c91925060203d8111613743575b613734818361289c565b810190613943565b90386135d1565b503d61372a565b80826137586001938c612f4b565b5190613766575b500161354a565b613770908561314b565b503861375f565b826137858161378c93612f4b565b5192612f4b565b51888754168d148015613833575b156138245780151580613814575b1561083a5785856137ff575b6137e9575b5087871591826137d9575b505061083a576137d390612f26565b8e613443565b60201c168c1415905087386137c4565b6137f76101969182546131d7565b9055386137b9565b61019661380d838254612fb5565b90556137b4565b50655af3107a40008106156137a8565b655af3107a40008106156137a8565b50888454168d1461379a565b3360009081527fba06a78ec98734fb5637b51b6458f4ba0a229fe2bbc86ce5d18073647cb408f3602052604081205492955060ff909216917fa269776b75ac4c5fa422bb11bec3ed3cee626848d07687372583174b209261fb91836138a9575b5050509238613439565b8b1492509082156138bf575b505038808061389f565b60ff925090604091815260fb6020528181208b825260205220541638806138b5565b60009450613432565b898114945061342b565b60405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608490fd5b9081602091031261153157516001600160e01b0319811681036115315790565b60009060033d1161397057565b905060046000803e60005160e01c90565b600060443d1061293f57604051600319913d83016004833e815167ffffffffffffffff918282113d6024840111176139df578184019485519384116139e7573d850101602084870101116139df575061293f9291016020019061289c565b949350505050565b50949350505050565b9190811015612f5f5760051b0190565b15613a0757565b60405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608490fd5b15613a7957565b60405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e73666572000000000000000000000000000000000000000000006064820152608490fd5b9290916001600160a01b038316151594613afd86613a00565b613b06826140ae565b93613b10846140ae565b613b186130fa565b6001600160a01b0361019154166001600160a01b03610192541690806001600160a01b03851614908192821561409b575b8215614089575b8215613fd5575b5088519260005b848110613ed15750505050506001600160a01b0387169586159182613e8d575b6001600160a01b03841615613dc5575b509084600052602097609789526040998a600020896000528a52878b60002054613bba82821015613a72565b8860005260978c528c6000208b6000528c52038b600020558660005260978a528a6000206001600160a01b0386166000528a528a600020613bfc898254612fb5565b90558a8981518981528a8d8201527fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f626001600160a01b038916933392a46001600160a01b0385166000526101958a528a60002092896000528b6000209085519560009115915b878110613d74575050505050505050803b613c81575b50505050505050565b613ccc9360006001600160a01b0388958a519788968795869363f23a6e6160e01b9c8d865233600487015260248601526044850152606484015260a0608484015260a483019061280e565b0393165af160009181613d55575b50613d3e575050600190613cec613963565b6308c379a014613d0a575b506135fd57505b38808080808080613c78565b613d12613981565b9081613d1e5750613cf7565b6110dc845192839262461bcd60e51b84526004840152602483019061280e565b6001600160e01b0319160390506136b15750613cfe565b613d6d919250843d861161374357613734818361289c565b9038613cda565b808386613d8360019486612f4b565b5191613da7575b613d96575b5001613c62565b613da0908961314b565b5038613d8f565b613db1828a612e5c565b613d8a57613dbf82886131e4565b50613d8a565b9996939097949198959260005b8951811015613e7b578b613dea82613785818e612f4b565b518160005260c991602092808452604093846000205492848410613e265790613e2196959493929160005252039060002055612f26565b613dd2565b855162461bcd60e51b815260048101839052602860248201527f455243313135353a206275726e20616d6f756e74206578636565647320746f74604482015267616c537570706c7960c01b6064820152608490fd5b50929598919497909396995038613b8e565b9996939097949198959260005b8951811015613ec15780613eb1613ebc928e612f4b565b5161347a828d612f4b565b613e9a565b5092959891949790939699613b7e565b613edb818c612f4b565b51613ee68288612f4b565b516001600160a01b0361019154166001600160a01b038a16148015613fb7575b15613fa85780151580613f98575b1561083a57846001600160a01b038f86613f83575b1614613f6d575b5084159081613f4d575b5061083a57613f4890612f26565b613b5e565b6001600160a01b03915060201c166001600160a01b038816141538613f3a565b613f7b6101969182546131d7565b905538613f30565b610196613f91858254612fb5565b9055613f29565b50655af3107a4000810615613f14565b655af3107a4000810615613f14565b506001600160a01b0361019254166001600160a01b038a1614613f06565b3360009081527fba06a78ec98734fb5637b51b6458f4ba0a229fe2bbc86ce5d18073647cb408f3602052604081205492935060ff909216917fa269776b75ac4c5fa422bb11bec3ed3cee626848d07687372583174b209261fb918361403f575b5050509038613b57565b6001600160a01b03881614925090821561405e575b5050388080614035565b60ff925090604091815260fb6020528181206001600160a01b03881682526020522054163880614054565b6001600160a01b038616159250613b50565b6001600160a01b03861681149250613b49565b604051906040820182811067ffffffffffffffff821117610ce45760405260018252602082016020368237825115612f5f575290565b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83116115315760209260051b809284830137010190565b9161412f8151855114613346565b6141436001600160a01b0383161515613a00565b61414b6130fa565b6001600160a01b0361019154166001600160a01b03610192541690806001600160a01b038516149081928215614687575b8215614675575b82156145c1575b5083519260005b8481106144bd5750505050506001600160a01b038316928315958661447d575b6001600160a01b0384161561440a575b60005b835181101561425757806141db6142529286612f4b565b516134936141e9838b612f4b565b5191806000526097602090808252604092836000208d6000528352858d85600020549061421883831015613a72565b8360005284865286600020906000528552038460002055600052815281600020906001600160a01b038b1660005252600020918254612fb5565b6141c4565b5093949290956040968751876001600160a01b038516917f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb33918061429d8b8b836133b8565b0390a46001600160a01b0383166000526101956020528760002090876000528860002085519360009015905b8581106143b057505050505050803b6142e5575b505050505050565b6135a260006001600160a01b036135b59461432d6020978b51998a988997889563bc197c8160e01b9e8f8852336004890152602488015260a0604488015260a48701906129b0565b0393165af160009181614390575b5061437b575050600161434c613963565b6308c379a014614368575b6135fd57505b3880808080806142dd565b614370613981565b806136795750614357565b6001600160e01b031916036136b1575061435d565b6143a991925060203d811161374357613734818361289c565b903861433b565b80826143be6001938b612f4b565b51906143ec575b6001600160a01b0389166143db575b50016142c9565b6143e5908761314b565b50386143d4565b6143f68187612e5c565b6143c55761440481866131e4565b506143c5565b959290600097949295975b865181101561446f576144288188612f4b565b51614433828b612f4b565b518160005260c991602092808452604093846000205492848410613e26579061446a96959493929160005252039060002055612f26565b614415565b5090929596949193966141c1565b969260009692959491965b86518110156144af578061449f6144aa9288612f4b565b5161347a828a612f4b565b614488565b5092969590939491956141b1565b6144c78187612f4b565b516144d2828b612f4b565b516001600160a01b0361019154166001600160a01b038a161480156145a3575b156145945780151580614584575b1561083a578361456f575b846001600160a01b038b1614614559575b5084159081614539575b5061083a5761453490612f26565b614191565b6001600160a01b03915060201c166001600160a01b038816141538614526565b6145676101969182546131d7565b90553861451c565b61019661457d828254612fb5565b905561450b565b50655af3107a4000810615614500565b655af3107a4000810615614500565b506001600160a01b0361019254166001600160a01b038a16146144f2565b3360009081527fba06a78ec98734fb5637b51b6458f4ba0a229fe2bbc86ce5d18073647cb408f3602052604081205492935060ff909216917fa269776b75ac4c5fa422bb11bec3ed3cee626848d07687372583174b209261fb918361462b575b505050903861418a565b6001600160a01b03881614925090821561464a575b5050388080614621565b60ff925090604091815260fb6020528181206001600160a01b03881682526020522054163880614640565b6001600160a01b038616159250614183565b6001600160a01b0386168114925061417c565b9081602091031261153157516001600160a01b03811681036115315790565b604051906146c682612847565b8160e06000918281528260208201528260408201528260608201528260808201528260a08201528260c08201520152565b156146fe57565b60405162461bcd60e51b815260206004820152602e60248201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60448201527f6572206f7220617070726f7665640000000000000000000000000000000000006064820152608490fd5b359060ff8216820361153157565b35907fffff0000000000000000000000000000000000000000000000000000000000008216820361153157565b9091926001600160a01b03821615614bc3576147bf836140ae565b916147c9856140ae565b9460006040516147d881612864565b526147e16130fa565b6001600160a01b0361019154166101926001600160a01b038154169082159182908315614bba575b8315614bb1575b8315614b11575b508751936001600160a01b038716149060005b8b8a878310614a3f57505050505050505060005b84518110156148eb576148518186612f4b565b5161485c8289612f4b565b51908060005260c9602081815260406000205492848410614895579061489095949392916000525203604060002055612f26565b61483e565b60405162461bcd60e51b815260048101839052602860248201527f455243313135353a206275726e20616d6f756e74206578636565647320746f74604482015267616c537570706c7960c01b6064820152608490fd5b509194509192806000526020916097835260406000206001600160a01b03851660005283526040600020548181106149ee579181600092610195959483855260978652604085206001600160a01b03891686528652036040842055604051918252838201526001600160a01b038516907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6260403392a4600060405161498f81612864565b52526001600160a01b03811660005260406000209082519260005b8481106149b8575050505050565b806149c560019284612f4b565b516149d08186612e5c565b156149dd575b50016149aa565b6149e790866131e4565b50386149d6565b60405162461bcd60e51b8152600481018590526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b6064820152608490fd5b8261378581614a4d93612f4b565b516001600160a01b036101915416158015614aff575b15614af05780151580614ae0575b1561083a578484614acb575b614ab5575b5085159081614a9f575b5061083a57614a9a90612f26565b61482a565b6001600160a01b03915060201c16151538614a8c565b614ac36101969182546131d7565b905538614a82565b610196614ad9838254612fb5565b9055614a7d565b50655af3107a4000810615614a71565b655af3107a4000810615614a71565b506001600160a01b0386541615614a63565b3360009081527fba06a78ec98734fb5637b51b6458f4ba0a229fe2bbc86ce5d18073647cb408f3602052604090205491935060ff909116907fa269776b75ac4c5fa422bb11bec3ed3cee626848d07687372583174b209261fb9082614b7a575b50509138614817565b1591508115614b8c575b503880614b71565b905060005260fb60205260406000206000805260205260ff6040600020541638614b84565b60019350614810565b80159350614809565b60405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608490fdfea26469706673582212204db63cb87bb9dd1b784c54e687d4a134bedb26b52f28dd61d5ad95641c2589b064736f6c63430008110033", + "deployedBytecode": "0x6080604052600436101561001257600080fd5b6000803560e01c8062fdd58e1461274a57806301ffc9a7146126a75780630231c1c2146122c85780630e89341c146121e7578063248a9ca3146121ba5780632eb2c2d6146120eb5780632f2ff15d1461202657806334697f4514611f4157806336568abe14611e23578063366a4120146119345780633d932dfb146119095780633f4ba83a1461186b57806342c6281d1461177d5780634e1273f4146115ee5780634f558e79146115c25780634fac7e41146115365780635562a315146113945780635c975abb146113715780636b425fc8146112dd578063789e8cdf146112a45780638456cb59146112495780639010d07c1461120357806391d14854146111b657806393ae796d14610efe578063964eec7014610edf578063a217fddf14610ec3578063a22cb46514610dbe578063ac28af2414610d83578063ac9650d814610b08578063bd85b03914610ade578063c39e3d6514610a5c578063c48c010514610a21578063ca15c873146109f6578063d547741f1461092c578063e63ab1e9146108f1578063e7334fe5146108c9578063e7f78c72146108a1578063e985e9c51461084c578063f242432a146107945763f62d1888146101d457600080fd5b346107915760208060031936011261078d5767ffffffffffffffff9060043582811161078957366023820112156107895761021990369060248160040135910161295e565b91835460ff808260081c16159283809461077d575b8015610767575b156106fc5760019560ff19938588868316178a556106eb575b506102a983895460081c16610262816132d4565b61026b816132d4565b6102a46024604051856102888c83985192818492860191016127eb565b8101637b69647d60e01b8c82015203600481018652018461289c565b6132d4565b80519182116106d75781906102bf609954612e22565b601f8111610667575b508690601f83116001146105e85789926105dd575b5050600019600383901b1c191690861b176099555b61032881875460081c16610305816132d4565b8360335416603355610316816132d4565b61031f816132d4565b6102a4816132d4565b6103306130fa565b85805260fb9182855260408720336000528552816040600020541615610594575b86805261012d928386526103683360408a2061314b565b506103716130fa565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8089528187526040892033600052875283604060002054161561054b575b88528386526103c23360408a2061314b565b506103cb6130fa565b7fa269776b75ac4c5fa422bb11bec3ed3cee626848d07687372583174b209261fb80895281875260408920336000528752836040600020541615610502575b885283865261041c3360408a2061314b565b506104256130fa565b7f88f3509f0e42391f2d94ebfb2a37cbd0782b1b8f73715330017f4663290b8117928389528187526040892033600052875260406000205416156104b8575b505085528252610477336040862061314b565b50610480578280f35b825461ff00191683556040519182527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249891a138808280f35b828852855260408720336000528552856040600020918254161790553333827f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8980a43880610464565b80895281875260408920336000528752604060002088848254161790553333827f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8c80a461040a565b80895281875260408920336000528752604060002088848254161790553333827f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8c80a46103b0565b86805282855260408720336000528552604060002086828254161790553333887f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4610351565b0151905038806102dd565b60998a528893507f72a152ddfb8e864297c917af52ea6c1c68aead0fee1a62673fcc7e0c94979d009190601f1984168b5b8a8282106106515750508411610638575b505050811b016099556102f2565b015160001960f88460031b161c1916905538808061062a565b8385015186558c97909501949384019301610619565b909150609989527f72a152ddfb8e864297c917af52ea6c1c68aead0fee1a62673fcc7e0c94979d00601f840160051c8101918885106106cd575b84939291601f8b920160051c01915b8281106106be5750506102c8565b600081558594508a91016106b0565b90915081906106a1565b634e487b7160e01b88526041600452602488fd5b61ffff19166101011788553861024e565b60405162461bcd60e51b815260048101869052602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608490fd5b50303b1580156102355750600182841614610235565b5060018284161061022e565b8380fd5b5080fd5b80fd5b50346107915760a0366003190112610791576107ae61277a565b6107b6612790565b60843567ffffffffffffffff8111610789576107d6903690600401612995565b906001600160a01b0392836101915416330361083a576108139381163381148015610816575b61080691506146f7565b6064359160443591613ae4565b80f35b5085526098602052604085203360005260205261080660ff604060002054166107fc565b604051631d9d0a4f60e31b8152600490fd5b50346107915760403660031901126107915761086661277a565b6040610870612790565b926001600160a01b0380931681526098602052209116600052602052602060ff604060002054166040519015158152f35b503461079157806003193601126107915760206001600160a01b036101925416604051908152f35b503461079157806003193601126107915760206001600160a01b036101915416604051908152f35b503461079157806003193601126107915760206040517f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8152f35b5034610791576040366003190112610791576109a860043561012d61094f612790565b9180855260209060fb825261096a6001604088200154612d17565b6109726130fa565b80865260fb82526001600160a01b036040872094169384600052825260ff604060002054166109ac575b855252604083206131e4565b5080f35b80865260fb825260408620846000528252604060002060ff1981541690553384827ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b8980a461099c565b5034610791576020366003190112610791576040602091600435815261012d83522054604051908152f35b503461079157806003193601126107915760206040517fa269776b75ac4c5fa422bb11bec3ed3cee626848d07687372583174b209261fb8152f35b503461079157608036600319011261079157610a7661277a565b610a7e612790565b67ffffffffffffffff9190604435838111610ada57610aa1903690600401612924565b606435938411610ada57610abc610813943690600401612924565b91610ac56129e4565b60405193610ad285612864565b868552614121565b8480fd5b5034610791576020366003190112610791576040602091600435815260c983522054604051908152f35b50346107915760208060031936011261078d5767ffffffffffffffff6004358181116107895790610b3e849236906004016127ba565b9091610b49826128be565b92610b57604051948561289c565b828452601f19610b66846128be565b01855b818110610d74575050845b838110610bdb575050505060405191838301848452825180915260408401948060408360051b870101940192955b828710610baf5785850386f35b909192938280610bcb600193603f198a8203018652885161280e565b9601920196019592919092610ba2565b8060059796971b820135601e1983360301811215610d70578201803590848211610d6c5787018136038113610d6c57610c1591369161295e565b303b15610d01578781888293519101305af4903d15610cfa573d610c3881612942565b90610c46604051928361289c565b81523d898983013e5b604051606081019181831087841117610ce457610cdc94610cc193604052602783527f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c8b8401527f206661696c6564000000000000000000000000000000000000000000000000006040840152612f75565b610ccb8288612f4b565b52610cd68187612f4b565b50612f26565b959495610b74565b634e487b7160e01b600052604160045260246000fd5b6060610c4f565b60405162461bcd60e51b815260048101889052602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608490fd5b8880fd5b8780fd5b60608682018901528701610b69565b503461079157806003193601126107915760206040517f88f3509f0e42391f2d94ebfb2a37cbd0782b1b8f73715330017f4663290b81178152f35b503461079157604036600319011261079157610dd861277a565b60243590811515809203610ebf576001600160a01b0390610df76130fa565b1690813314610e545733835260986020526040832082600052602052604060002060ff1981541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a380f35b60405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c6600000000000000000000000000000000000000000000006064820152608490fd5b8280fd5b5034610791578060031936011261079157602090604051908152f35b5034610791578060031936011261079157602061019654604051908152f35b5034610791576040366003190112610791576004356001600160a01b03808216809203610ebf576024803591821680920361078957610f3b6130fa565b3360009081527fc88390e7e62175be0932452175b6a7222b6b094ab0ef984a5153c620345d8975602090815260409091205490919060ff1615610fe25750916040917fa948457069516ab10917665b0b5d6b8043d77b39f57ca760ef0d3d4104277547937fffffffffffffffffffffffff0000000000000000000000000000000000000000610191848282541617905582610192918254161790558351928352820152a180f35b90610fec33612fd3565b6000604051610ffa81612880565b604281528381019160603684378151156111a35760308353815160019081101561119057607860218401536041905b8082116111225750506110e05760486110dc936110b1936110c09360405195869376020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8a86015261107c815180928c6037890191016127eb565b8401917f206973206d697373696e6720726f6c65200000000000000000000000000000006037840152518093868401906127eb565b0103602881018452018261289c565b60405193849362461bcd60e51b8552600485015283019061280e565b0390fd5b606485856040519162461bcd60e51b83528160048401528201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b9091600f8116601081101561117b576f181899199a1a9b1b9c1cb0b131b232b360811b901a6111518486612fc2565b5360041c918015611166576000190190611029565b87634e487b7160e01b60005260116004526000fd5b88634e487b7160e01b60005260326004526000fd5b634e487b7160e01b825260326004528682fd5b634e487b7160e01b815260326004528590fd5b5034610791576040366003190112610791576001600160a01b0360406111da612790565b92600435815260fb602052209116600052602052602060ff604060002054166040519015158152f35b5034610791576040366003190112610791576001600160a01b03611239602092600435815261012d8452604060243591206130e2565b9190546040519260031b1c168152f35b5034610791578060031936011261079157611262612bd2565b61126a6130fa565b600160ff1960335416176033557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a180f35b50346107915760203660031901126107915760406020916001600160a01b036112cb61277a565b16815261019583522054604051908152f35b5034610791576060366003190112610791576112f761277a565b602435906113036129e4565b6001600160a01b03806101925416818316908114908115611362575b50611349579061081392916101915416916040519261133d84612864565b85845260443592613ae4565b60405163094f4a6b60e31b815260048101849052602490fd5b9050816101915416143861131f565b5034610791578060031936011261079157602060ff603354166040519015158152f35b50346107915760803660031901126107915767ffffffffffffffff600435818111610ebf576113c79036906004016127ba565b9091602435818111610ada576113e19036906004016127ba565b9092604435936001600160a01b039384861680960361153157606435946114066129e4565b6101925416946040519663144613ff60e31b88526020978a89826004818c5afa918215611524578b888c86938895966114e8575b50906114887fba5d618d168a3f9d48b5d1b95779e4cd5afa49565f8d387a128ec2f2ee0f589493926114796040519485946040865260408601916140e4565b90838203908401528d8c6140e4565b0390a48960405198890152604088015260608701528760808701528760a08701528760c087015260c0865260e086019086821090821117610ce457610813966114e1936114d99260405236916128d6565b9236916128d6565b9133614121565b9550935050505081813d831161151d575b611503818361289c565b81010312611519575182828b888c61148861143a565b8a80fd5b503d6114f9565b50604051903d90823e3d90fd5b600080fd5b50346107915760208060031936011261078d576001600160a01b0361155961277a565b16825261019581526040822091604051809384918482549182815201918452848420935b858282106115ac575050506115949250038361289c565b6115a86040519282849384528301906129b0565b0390f35b855484526001958601958895509301920161157d565b5034610791576020366003190112610791576040602091600435815260c9835220541515604051908152f35b50346107915760403660031901126107915767ffffffffffffffff600435818111610ebf5736602382011215610ebf5780600401359161162d836128be565b9161163b604051938461289c565b83835260209360248585019160051b83010191368311611779576024869101915b83831061176157505050506024359081116107895761167f903690600401612924565b9080518251036116f6576116938151612ef4565b935b81518110156116df57806116ca6001600160a01b036116b76116da9486612f4b565b51166116c38387612f4b565b5190612e5c565b6116d48288612f4b565b52612f26565b611695565b5050506115a86040519282849384528301906129b0565b60405162461bcd60e51b815260048101849052602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d6174636800000000000000000000000000000000000000000000006064820152608490fd5b819061176c846127a6565b815201910190859061165c565b8680fd5b50346107915760203660031901126107915760043561179a6146b9565b506117a36146b9565b508060f81c906040516117b581612847565b82815260208101908260f41c600f168252604081018360f01c600f1681526060820161ffff90818660e01c168152608084019161ffff60f01b928391828960201b16825260a0870193838a60301b16855260c08801966001600160a01b0398898c60201c16895260e0019963ffffffff809c168b526040519c8d525160ff1660208d01525160ff1660408c0152511660608a015251166080880152511660a0860152511660c0840152511660e082015261010090f35b5034610791578060031936011261079157611884612bd2565b60335460ff8116156118c45760ff19166033557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a180f35b60405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606490fd5b5034610791576020366003190112610791576040602091600435815261019483522054604051908152f35b5034610791576040366003190112610791576004356024908135907f88f3509f0e42391f2d94ebfb2a37cbd0782b1b8f73715330017f4663290b81179283855260209360fb855260408620338752855260ff60408720541615611cf2575084916001600160a01b03948582821c166119ac8382612e5c565b80611c9f575b50508484106119bf578680f35b60405163e7334fe560e01b808252908281600481305afa908115611b61576119f09185918b91611b44575b50612e5c565b80611b6c575b5050848410611a03578680f35b6040516373fbc63960e11b808252908281600481305afa908115611b6157611a339185918b91611b445750612e5c565b611a3c57508680f35b87611a5186611a4b818a6131d7565b986131d7565b946040519283528383600481305afa928315611b0a578293611b15575b50611a7a8686856147a4565b88610192541690813b15610ebf578291829160405180948193633cfe604560e11b83528b60048401525af18015611b0a57611af2575b505090611ae7967fa76ba9683000f0598aec5ed73132d1bdb673107c3e609fcbff0dfb9296467c43926040519586521693a3612fb5565b503880808080808680f35b611afe90939293612833565b610d7057908738611ab0565b6040513d84823e3d90fd5b611b36919350843d8611611b3d575b611b2e818361289c565b81019061469a565b9138611a6e565b503d611b24565b611b5b9150853d8711611b3d57611b2e818361289c565b386119ea565b6040513d8b823e3d90fd5b611b7a8688979394976131d7565b9080821015611c975750905b6040518381528681600481305afa8015611c6f57858491611bae938d91611c7a575b506147a4565b88886101915416803b1561078d57819087604051809481936337bdc99b60e01b83528a60048401525af18015611c6f57611c5c575b506040519283528583600481305afa8015611b6157611c37938a91611c3f575b50847fa76ba9683000f0598aec5ed73132d1bdb673107c3e609fcbff0dfb9296467c43888b604051948786521693a3612fb5565b9238806119f6565b611c569150873d8911611b3d57611b2e818361289c565b38611c03565b611c6890999199612833565b9738611be3565b6040513d8c823e3d90fd5b611c9191508a3d8c11611b3d57611b2e818361289c565b38611ba8565b905090611b86565b9194509080861015611cec575084905b611cba8284836147a4565b827fa76ba9683000f0598aec5ed73132d1bdb673107c3e609fcbff0dfb9296467c4386604051858152a39238806119b2565b90611caf565b849086611cfe33612fd3565b9160405190611d0c82612880565b60428252848201926060368537825115611e105760308453825190600191821015611dfd5790607860218501536041915b818311611d91575050506110e05760486110dc936110b1936110c09360405195869376020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8a86015261107c815180928c6037890191016127eb565b909192600f81166010811015611dea576f181899199a1a9b1b9c1cb0b131b232b360811b901a611dc18587612fc2565b5360041c928015611dd757600019019190611d3d565b634e487b7160e01b825260116004528882fd5b634e487b7160e01b835260326004528983fd5b634e487b7160e01b815260326004528790fd5b634e487b7160e01b815260326004528690fd5b5034610791576040366003190112610791576004356001600160a01b03611e48612790565b16338103611ed6576109a891611e5c6130fa565b80845260fb6020526040842082855260205260ff604085205416611e8c575b835261012d602052604083206131e4565b80845260fb602052604084208285526020526040842060ff1981541690553382827ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b8780a4611e7b565b60405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608490fd5b503461079157606036600319011261079157611f5b61277a565b67ffffffffffffffff91906024803584811161078957611f7f9036906004016127ba565b919094604435908111610ada57611f9a9036906004016127ba565b9091611fa46129e4565b855b828110611fd9575050946114d9611fc392610813969736916128d6565b9060405192611fd184612864565b8584526133dd565b611fe48184866139f0565b3587526101946020526040872054156120055761200090612f26565b611fa6565b6120109192846139f0565b60405163ac0522ad60e01b815290356004820152fd5b5034610791576040366003190112610791576109a860043561012d612049612790565b9180855260209060fb82526120646001604088200154612d17565b61206c6130fa565b80865260fb82526001600160a01b0360408720941693848752825260ff604087205416156120a1575b8552526040832061314b565b80865260fb8252604080872085885283528620805460ff191660011790553384827f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8980a4612095565b50346107915760a03660031901126107915761210561277a565b61210d612790565b67ffffffffffffffff604435818111610ada5761212e903690600401612924565b6064358281116121b657612146903690600401612924565b916084359081116121b65761215f903690600401612995565b926001600160a01b0394856101915416330361083a576108139581163381148015612194575b61218f91506146f7565b614121565b50875260986020526040872033885260205261218f60ff604089205416612185565b8580fd5b50346107915760203660031901126107915760016040602092600435815260fb8452200154604051908152f35b50346107915760208060031936011261078d5760405191828160995461220c81612e22565b938484526001918683821691826000146122a657505060011461224c575b50506122389250038361289c565b6115a860405192828493845283019061280e565b90859250609982527f72a152ddfb8e864297c917af52ea6c1c68aead0fee1a62673fcc7e0c94979d005b85831061228e5750506122389350820101388061222a565b80548389018501528794508693909201918101612276565b925093505061223894915060ff191682840152151560051b820101388061222a565b5034610791576080366003190112610791576122e261277a565b60243567ffffffffffffffff8111610ebf576123029036906004016127ba565b67ffffffffffffffff60449392933511610789573660236044350112156107895767ffffffffffffffff6044356004013511610789573660246044356004013560081b604435010111610789576123576129e4565b61236660443560040135612ef4565b90845b604435600401358110612386575061081393611fc39136916128d6565b6101006023198260081b60443501360301126121b6576040518061010081011067ffffffffffffffff610100830111176126935761010081016040526123d560248360081b6044350101614769565b8082526123ea60448460081b81350101614769565b602083015261240260648460081b6044350101614769565b604083015260848360081b60443501013561ffff81168103610d6c57606083015261243660a48460081b6044350101614777565b608083015261244e60c48460081b6044350101614777565b60a083015261246660e48460081b60443501016127a6565b60c0830152604435600884901b01610104013563ffffffff81169003610d705760ff906101048460081b60443501013560e0840152168061267b575060ff604082015116600f90818111612663575060ff60208301511690811161264b575061ffff60f01b80608083015116906124f6828060001a9060011a605b6040821191101690605b604082119110161690565b8061261c575b156125fa57505063ffffffff60e060f080602085015160041b1660ff6040860151161760ff60f81b855160f81b1661ffff841b6060870151851b16917bffff0000000000000000000000000000000000000000000000000000608088015160201c16931b17171779ffff00000000000000000000000000000000000000000000000060a085015160301c161777ffffffffffffffffffffffffffffffffffffffff0000000060c085015160201b161792015116179081875261019460205260408720546125e85781600192885261019460205260643560408920556125e18286612f4b565b5201612369565b604051635cb045db60e01b8152600490fd5b60a0604493015116604051916381036ebb60e01b835260048301526024820152fd5b506126468160a0850151168060001a9060011a605b6040821191101690605b604082119110161690565b6124fc565b602490604051906346ac6e0f60e01b82526004820152fd5b602490604051906324b1529d60e11b82526004820152fd5b60249060405190633e60769b60e21b82526004820152fd5b634e487b7160e01b87526041600452602487fd5b50346107915760203660031901126107915760043563ffffffff60e01b811680910361078d57602090635a05180f60e01b81149081156126ed575b506040519015158152f35b637965db0b60e01b811491508115612707575b50826126e2565b636cdb3d1360e11b811491508115612739575b8115612728575b5082612700565b6301ffc9a760e01b14905082612721565b6303a24d0760e21b8114915061271a565b503461079157604036600319011261079157602061277261276961277a565b60243590612e5c565b604051908152f35b600435906001600160a01b038216820361153157565b602435906001600160a01b038216820361153157565b35906001600160a01b038216820361153157565b9181601f840112156115315782359167ffffffffffffffff8311611531576020808501948460051b01011161153157565b60005b8381106127fe5750506000910152565b81810151838201526020016127ee565b90602091612827815180928185528580860191016127eb565b601f01601f1916010190565b67ffffffffffffffff8111610ce457604052565b610100810190811067ffffffffffffffff821117610ce457604052565b6020810190811067ffffffffffffffff821117610ce457604052565b6080810190811067ffffffffffffffff821117610ce457604052565b90601f8019910116810190811067ffffffffffffffff821117610ce457604052565b67ffffffffffffffff8111610ce45760051b60200190565b92916128e1826128be565b916128ef604051938461289c565b829481845260208094019160051b810192831161153157905b8282106129155750505050565b81358152908301908301612908565b9080601f830112156115315781602061293f933591016128d6565b90565b67ffffffffffffffff8111610ce457601f01601f191660200190565b92919261296a82612942565b91612978604051938461289c565b829481845281830111611531578281602093846000960137010152565b9080601f830112156115315781602061293f9335910161295e565b90815180825260208080930193019160005b8281106129d0575050505090565b8351855293810193928101926001016129c2565b3360009081527fba06a78ec98734fb5637b51b6458f4ba0a229fe2bbc86ce5d18073647cb408f3602090815260408083205490927fa269776b75ac4c5fa422bb11bec3ed3cee626848d07687372583174b209261fb9160ff1615612a485750505050565b612a5133612fd3565b91845190612a5e82612880565b60428252848201926060368537825115612bbe5760308453825190600191821015612bbe5790607860218501536041915b818311612b5057505050612b0e5760486110dc938693612af293612ae3985198899376020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8a86015261107c815180928c6037890191016127eb565b0103602881018752018561289c565b5192839262461bcd60e51b84526004840152602483019061280e565b60648486519062461bcd60e51b825280600483015260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b909192600f81166010811015612baa576f181899199a1a9b1b9c1cb0b131b232b360811b901a612b808587612fc2565b5360041c928015612b9657600019019190612a8f565b634e487b7160e01b82526011600452602482fd5b634e487b7160e01b83526032600452602483fd5b634e487b7160e01b81526032600452602490fd5b3360009081527fc81858b0fc5e8d7d2c7a341b4e13a62a27b51e1da1072bf5f7fee8fdef673e94602090815260408083205490927f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a9160ff1615612c365750505050565b612c3f33612fd3565b91845190612c4c82612880565b60428252848201926060368537825115612bbe5760308453825190600191821015612bbe5790607860218501536041915b818311612cd157505050612b0e5760486110dc938693612af293612ae3985198899376020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8a86015261107c815180928c6037890191016127eb565b909192600f81166010811015612baa576f181899199a1a9b1b9c1cb0b131b232b360811b901a612d018587612fc2565b5360041c928015612b9657600019019190612c7d565b60009080825260209060fb8252604092838120338252835260ff848220541615612d415750505050565b612d4a33612fd3565b91845190612d5782612880565b60428252848201926060368537825115612bbe5760308453825190600191821015612bbe5790607860218501536041915b818311612ddc57505050612b0e5760486110dc938693612af293612ae3985198899376020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8a86015261107c815180928c6037890191016127eb565b909192600f81166010811015612baa576f181899199a1a9b1b9c1cb0b131b232b360811b901a612e0c8587612fc2565b5360041c928015612b9657600019019190612d88565b90600182811c92168015612e52575b6020831014612e3c57565b634e487b7160e01b600052602260045260246000fd5b91607f1691612e31565b6001600160a01b0316908115612e8957600052609760205260406000209060005260205260406000205490565b60405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201527f616c6964206f776e6572000000000000000000000000000000000000000000006064820152608490fd5b90612efe826128be565b612f0b604051918261289c565b8281528092612f1c601f19916128be565b0190602036910137565b6000198114612f355760010190565b634e487b7160e01b600052601160045260246000fd5b8051821015612f5f5760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b90919015612f81575090565b815115612f915750805190602001fd5b60405162461bcd60e51b8152602060048201529081906110dc90602483019061280e565b91908201809211612f3557565b908151811015612f5f570160200190565b604051906060820182811067ffffffffffffffff821117610ce457604052602a8252602082016040368237825115612f5f57603090538151600190811015612f5f57607860218401536029905b8082116130745750506130305790565b606460405162461bcd60e51b815260206004820152602060248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b9091600f811660108110156130cd576f181899199a1a9b1b9c1cb0b131b232b360811b901a6130a38486612fc2565b5360041c9180156130b8576000190190613020565b60246000634e487b7160e01b81526011600452fd5b60246000634e487b7160e01b81526032600452fd5b8054821015612f5f5760005260206000200190600090565b60ff6033541661310657565b60405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606490fd5b919060018301600090828252806020526040822054156000146131d157845494680100000000000000008610156131bd57836131ad613194886001604098999a018555846130e2565b819391549060031b600019811b9283911b169119161790565b9055549382526020522055600190565b634e487b7160e01b83526041600452602483fd5b50925050565b91908203918211612f3557565b906001820190600092818452826020526040842054908115156000146132cd57600019918083018181116132b9578254908482019182116132a557808203613270575b5050508054801561325c5782019161323f83836130e2565b909182549160031b1b191690555582526020526040812055600190565b634e487b7160e01b86526031600452602486fd5b61329061328061319493866130e2565b90549060031b1c928392866130e2565b90558652846020526040862055388080613227565b634e487b7160e01b88526011600452602488fd5b634e487b7160e01b87526011600452602487fd5b5050505090565b156132db57565b60405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608490fd5b1561334d57565b60405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060448201527f6d69736d617463680000000000000000000000000000000000000000000000006064820152608490fd5b90916133cf61293f936040845260408401906129b0565b9160208184039101526129b0565b9091936001600160a01b0390818316918215908115916138f4576134048651895114613346565b61340c6130fa565b61019190808254169161019290828254169184881492839084156138ea575b84156138e1575b841561383f575b508a5195159160008e5b8d898310613777575050505050505050505060005b855181101561349f578061346f61349a928a612f4b565b5161347a8289612f4b565b5160005260c96020526134936040600020918254612fb5565b9055612f26565b613458565b509091929460005b85518110156134f357806134be6134ee928a612f4b565b516134c98289612f4b565b5160005261349360206097815260409081600020908a60005252600020918254612fb5565b6134a7565b509195909460409584600088517f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb33918061352f898d836133b8565b0390a484600052610195602052866000206000805286519160005b83811061374a57505050503b613562575b5050505050565b6135c492602092600087518096819582946135b56135a263bc197c8160e01b9c8d875233600488015287602488015260a0604488015260a48701906129b0565b60031993848783030160648801526129b0565b9184830301608485015261280e565b03925af16000918161371a575b5061369c57505060016135e2613963565b6308c379a014613666575b6135fd57505b388080808061355b565b5162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560448201527f526563656976657220696d706c656d656e7465720000000000000000000000006064820152608490fd5b61366e613981565b8061367957506135ed565b825162461bcd60e51b8152602060048201529081906110dc90602483019061280e565b6001600160e01b031916036136b157506135f3565b5162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e730000000000000000000000000000000000000000000000006064820152608490fd5b61373c91925060203d8111613743575b613734818361289c565b810190613943565b90386135d1565b503d61372a565b80826137586001938c612f4b565b5190613766575b500161354a565b613770908561314b565b503861375f565b826137858161378c93612f4b565b5192612f4b565b51888754168d148015613833575b156138245780151580613814575b1561083a5785856137ff575b6137e9575b5087871591826137d9575b505061083a576137d390612f26565b8e613443565b60201c168c1415905087386137c4565b6137f76101969182546131d7565b9055386137b9565b61019661380d838254612fb5565b90556137b4565b50655af3107a40008106156137a8565b655af3107a40008106156137a8565b50888454168d1461379a565b3360009081527fba06a78ec98734fb5637b51b6458f4ba0a229fe2bbc86ce5d18073647cb408f3602052604081205492955060ff909216917fa269776b75ac4c5fa422bb11bec3ed3cee626848d07687372583174b209261fb91836138a9575b5050509238613439565b8b1492509082156138bf575b505038808061389f565b60ff925090604091815260fb6020528181208b825260205220541638806138b5565b60009450613432565b898114945061342b565b60405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608490fd5b9081602091031261153157516001600160e01b0319811681036115315790565b60009060033d1161397057565b905060046000803e60005160e01c90565b600060443d1061293f57604051600319913d83016004833e815167ffffffffffffffff918282113d6024840111176139df578184019485519384116139e7573d850101602084870101116139df575061293f9291016020019061289c565b949350505050565b50949350505050565b9190811015612f5f5760051b0190565b15613a0757565b60405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608490fd5b15613a7957565b60405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e73666572000000000000000000000000000000000000000000006064820152608490fd5b9290916001600160a01b038316151594613afd86613a00565b613b06826140ae565b93613b10846140ae565b613b186130fa565b6001600160a01b0361019154166001600160a01b03610192541690806001600160a01b03851614908192821561409b575b8215614089575b8215613fd5575b5088519260005b848110613ed15750505050506001600160a01b0387169586159182613e8d575b6001600160a01b03841615613dc5575b509084600052602097609789526040998a600020896000528a52878b60002054613bba82821015613a72565b8860005260978c528c6000208b6000528c52038b600020558660005260978a528a6000206001600160a01b0386166000528a528a600020613bfc898254612fb5565b90558a8981518981528a8d8201527fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f626001600160a01b038916933392a46001600160a01b0385166000526101958a528a60002092896000528b6000209085519560009115915b878110613d74575050505050505050803b613c81575b50505050505050565b613ccc9360006001600160a01b0388958a519788968795869363f23a6e6160e01b9c8d865233600487015260248601526044850152606484015260a0608484015260a483019061280e565b0393165af160009181613d55575b50613d3e575050600190613cec613963565b6308c379a014613d0a575b506135fd57505b38808080808080613c78565b613d12613981565b9081613d1e5750613cf7565b6110dc845192839262461bcd60e51b84526004840152602483019061280e565b6001600160e01b0319160390506136b15750613cfe565b613d6d919250843d861161374357613734818361289c565b9038613cda565b808386613d8360019486612f4b565b5191613da7575b613d96575b5001613c62565b613da0908961314b565b5038613d8f565b613db1828a612e5c565b613d8a57613dbf82886131e4565b50613d8a565b9996939097949198959260005b8951811015613e7b578b613dea82613785818e612f4b565b518160005260c991602092808452604093846000205492848410613e265790613e2196959493929160005252039060002055612f26565b613dd2565b855162461bcd60e51b815260048101839052602860248201527f455243313135353a206275726e20616d6f756e74206578636565647320746f74604482015267616c537570706c7960c01b6064820152608490fd5b50929598919497909396995038613b8e565b9996939097949198959260005b8951811015613ec15780613eb1613ebc928e612f4b565b5161347a828d612f4b565b613e9a565b5092959891949790939699613b7e565b613edb818c612f4b565b51613ee68288612f4b565b516001600160a01b0361019154166001600160a01b038a16148015613fb7575b15613fa85780151580613f98575b1561083a57846001600160a01b038f86613f83575b1614613f6d575b5084159081613f4d575b5061083a57613f4890612f26565b613b5e565b6001600160a01b03915060201c166001600160a01b038816141538613f3a565b613f7b6101969182546131d7565b905538613f30565b610196613f91858254612fb5565b9055613f29565b50655af3107a4000810615613f14565b655af3107a4000810615613f14565b506001600160a01b0361019254166001600160a01b038a1614613f06565b3360009081527fba06a78ec98734fb5637b51b6458f4ba0a229fe2bbc86ce5d18073647cb408f3602052604081205492935060ff909216917fa269776b75ac4c5fa422bb11bec3ed3cee626848d07687372583174b209261fb918361403f575b5050509038613b57565b6001600160a01b03881614925090821561405e575b5050388080614035565b60ff925090604091815260fb6020528181206001600160a01b03881682526020522054163880614054565b6001600160a01b038616159250613b50565b6001600160a01b03861681149250613b49565b604051906040820182811067ffffffffffffffff821117610ce45760405260018252602082016020368237825115612f5f575290565b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83116115315760209260051b809284830137010190565b9161412f8151855114613346565b6141436001600160a01b0383161515613a00565b61414b6130fa565b6001600160a01b0361019154166001600160a01b03610192541690806001600160a01b038516149081928215614687575b8215614675575b82156145c1575b5083519260005b8481106144bd5750505050506001600160a01b038316928315958661447d575b6001600160a01b0384161561440a575b60005b835181101561425757806141db6142529286612f4b565b516134936141e9838b612f4b565b5191806000526097602090808252604092836000208d6000528352858d85600020549061421883831015613a72565b8360005284865286600020906000528552038460002055600052815281600020906001600160a01b038b1660005252600020918254612fb5565b6141c4565b5093949290956040968751876001600160a01b038516917f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb33918061429d8b8b836133b8565b0390a46001600160a01b0383166000526101956020528760002090876000528860002085519360009015905b8581106143b057505050505050803b6142e5575b505050505050565b6135a260006001600160a01b036135b59461432d6020978b51998a988997889563bc197c8160e01b9e8f8852336004890152602488015260a0604488015260a48701906129b0565b0393165af160009181614390575b5061437b575050600161434c613963565b6308c379a014614368575b6135fd57505b3880808080806142dd565b614370613981565b806136795750614357565b6001600160e01b031916036136b1575061435d565b6143a991925060203d811161374357613734818361289c565b903861433b565b80826143be6001938b612f4b565b51906143ec575b6001600160a01b0389166143db575b50016142c9565b6143e5908761314b565b50386143d4565b6143f68187612e5c565b6143c55761440481866131e4565b506143c5565b959290600097949295975b865181101561446f576144288188612f4b565b51614433828b612f4b565b518160005260c991602092808452604093846000205492848410613e26579061446a96959493929160005252039060002055612f26565b614415565b5090929596949193966141c1565b969260009692959491965b86518110156144af578061449f6144aa9288612f4b565b5161347a828a612f4b565b614488565b5092969590939491956141b1565b6144c78187612f4b565b516144d2828b612f4b565b516001600160a01b0361019154166001600160a01b038a161480156145a3575b156145945780151580614584575b1561083a578361456f575b846001600160a01b038b1614614559575b5084159081614539575b5061083a5761453490612f26565b614191565b6001600160a01b03915060201c166001600160a01b038816141538614526565b6145676101969182546131d7565b90553861451c565b61019661457d828254612fb5565b905561450b565b50655af3107a4000810615614500565b655af3107a4000810615614500565b506001600160a01b0361019254166001600160a01b038a16146144f2565b3360009081527fba06a78ec98734fb5637b51b6458f4ba0a229fe2bbc86ce5d18073647cb408f3602052604081205492935060ff909216917fa269776b75ac4c5fa422bb11bec3ed3cee626848d07687372583174b209261fb918361462b575b505050903861418a565b6001600160a01b03881614925090821561464a575b5050388080614621565b60ff925090604091815260fb6020528181206001600160a01b03881682526020522054163880614640565b6001600160a01b038616159250614183565b6001600160a01b0386168114925061417c565b9081602091031261153157516001600160a01b03811681036115315790565b604051906146c682612847565b8160e06000918281528260208201528260408201528260608201528260808201528260a08201528260c08201520152565b156146fe57565b60405162461bcd60e51b815260206004820152602e60248201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60448201527f6572206f7220617070726f7665640000000000000000000000000000000000006064820152608490fd5b359060ff8216820361153157565b35907fffff0000000000000000000000000000000000000000000000000000000000008216820361153157565b9091926001600160a01b03821615614bc3576147bf836140ae565b916147c9856140ae565b9460006040516147d881612864565b526147e16130fa565b6001600160a01b0361019154166101926001600160a01b038154169082159182908315614bba575b8315614bb1575b8315614b11575b508751936001600160a01b038716149060005b8b8a878310614a3f57505050505050505060005b84518110156148eb576148518186612f4b565b5161485c8289612f4b565b51908060005260c9602081815260406000205492848410614895579061489095949392916000525203604060002055612f26565b61483e565b60405162461bcd60e51b815260048101839052602860248201527f455243313135353a206275726e20616d6f756e74206578636565647320746f74604482015267616c537570706c7960c01b6064820152608490fd5b509194509192806000526020916097835260406000206001600160a01b03851660005283526040600020548181106149ee579181600092610195959483855260978652604085206001600160a01b03891686528652036040842055604051918252838201526001600160a01b038516907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6260403392a4600060405161498f81612864565b52526001600160a01b03811660005260406000209082519260005b8481106149b8575050505050565b806149c560019284612f4b565b516149d08186612e5c565b156149dd575b50016149aa565b6149e790866131e4565b50386149d6565b60405162461bcd60e51b8152600481018590526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b6064820152608490fd5b8261378581614a4d93612f4b565b516001600160a01b036101915416158015614aff575b15614af05780151580614ae0575b1561083a578484614acb575b614ab5575b5085159081614a9f575b5061083a57614a9a90612f26565b61482a565b6001600160a01b03915060201c16151538614a8c565b614ac36101969182546131d7565b905538614a82565b610196614ad9838254612fb5565b9055614a7d565b50655af3107a4000810615614a71565b655af3107a4000810615614a71565b506001600160a01b0386541615614a63565b3360009081527fba06a78ec98734fb5637b51b6458f4ba0a229fe2bbc86ce5d18073647cb408f3602052604090205491935060ff909116907fa269776b75ac4c5fa422bb11bec3ed3cee626848d07687372583174b209261fb9082614b7a575b50509138614817565b1591508115614b8c575b503880614b71565b905060005260fb60205260406000206000805260205260ff6040600020541638614b84565b60019350614810565b80159350614809565b60405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608490fdfea26469706673582212204db63cb87bb9dd1b784c54e687d4a134bedb26b52f28dd61d5ad95641c2589b064736f6c63430008110033" +} \ No newline at end of file diff --git a/foundry.toml b/foundry.toml index 947ec3ee5..f7d6d42ff 100644 --- a/foundry.toml +++ b/foundry.toml @@ -26,7 +26,7 @@ optimizer = false sparse_mode = true [rpc_endpoints] -mumbai = "${MUMBAI_RPC_URL}" +amoy = "${AMOY_RPC_URL}" mainnet = "${ETHEREUM_RPC_URL}" goerli = "${GOERLI_RPC_URL}" polygon = "${POLYGON_RPC_URL}" diff --git a/plugins/index.ts b/plugins/index.ts index b77be1dd0..54a309d95 100644 --- a/plugins/index.ts +++ b/plugins/index.ts @@ -22,8 +22,8 @@ import { lazyFunction, lazyObject } from 'hardhat/plugins'; import type { FactoryOptions } from '@nomiclabs/hardhat-ethers/types'; import type { HardhatNetworkHDAccountsConfig } from 'hardhat/types'; import { Wallet } from 'ethers'; -import type { FireblocksSigner } from 'plugins/fireblocks/fireblocks-signer'; +import type { FireblocksSigner } from 'plugins/fireblocks/fireblocks-signer'; import { Eip2612Signer } from '@/signers/eip-26126'; import { namedAccountIndices, namedAccounts } from '@/config/accounts'; import { trace, log } from '@/utils/log'; diff --git a/script/BuyNRT.s.sol b/script/BuyNRT.s.sol index 11c6d3241..a82bdc084 100644 --- a/script/BuyNRT.s.sol +++ b/script/BuyNRT.s.sol @@ -9,14 +9,14 @@ import "@/contracts/Market.sol"; /** * @notice Example script demonstrating a purchase interaction with Nori's Market contract. * - * Contextual information is bound in using environment variables, i.e. for Mumbai: + * Contextual information is bound in using environment variables, i.e. for Amoy: * * export PURCHASING_TOKEN_ADDRESS="0x9999f7Fea5938fD3b1E26A12c3f2fb024e194f97" # USDC * export NRTS=1 * export MNEMONIC="..." * export RECIPIENT_ADDRESS="<0x00>" - * export MUMBAI_RPC_URL="https://..." - * export NETWORK_NAME="mumbai" + * export AMOY_RPC_URL="https://..." + * export NETWORK_NAME="amoy" * * forge script script/BuyNRT.s.sol:BuyNRT --rpc-url="$NETWORK_NAME" --mnemonics="$MNEMONIC" --broadcast -vvvv */ @@ -27,7 +27,7 @@ contract BuyNRT is Script { Market( vm.parseJsonAddress( vm.readFile(string.concat(vm.projectRoot(), "/contracts.json")), - ".mumbai.Market.proxyAddress" + ".amoy.Market.proxyAddress" ) ); diff --git a/tasks/bridged-polygon-nori.ts b/tasks/bridged-polygon-nori.ts index d1747a798..752894cc1 100644 --- a/tasks/bridged-polygon-nori.ts +++ b/tasks/bridged-polygon-nori.ts @@ -31,7 +31,7 @@ export const TASK = { !( network === 'polygon' || network === 'hardhat' || - network === 'mumbai' || + network === 'amoy' || network === 'localhost' ) ) { diff --git a/tasks/certificate.ts b/tasks/certificate.ts index 1e5390a34..b997dfd13 100644 --- a/tasks/certificate.ts +++ b/tasks/certificate.ts @@ -29,7 +29,7 @@ export const TASK = { const network = hre.network.name; if ( !( - network === 'mumbai' || + network === 'amoy' || network === 'hardhat' || network === 'polygon' || network === 'localhost' diff --git a/tasks/defender.ts b/tasks/defender.ts index eb3d5b93b..42ed19a6e 100644 --- a/tasks/defender.ts +++ b/tasks/defender.ts @@ -21,7 +21,7 @@ const isDefenderNetwork = (network: string): network is Network => { 'fantomtest', 'moonbase', 'matic', - 'mumbai', + 'amoy', ].includes(network); }; diff --git a/tasks/list-remaining-migrated-removals.ts b/tasks/list-remaining-migrated-removals.ts index d300fbadb..a9903f6b0 100644 --- a/tasks/list-remaining-migrated-removals.ts +++ b/tasks/list-remaining-migrated-removals.ts @@ -1,4 +1,4 @@ -import { readFileSync, writeFileSync } from 'fs'; +import { readFileSync, writeFileSync } from 'node:fs'; import { task, types } from 'hardhat/config'; import chalk from 'chalk'; @@ -35,9 +35,9 @@ export const GET_LIST_MIGRATED_REMOVALS_TASK = () => dryRun, } = options as ParsedListMigratedRemovalsTaskOptions; const network = await hre.network.name; - if (![`localhost`, `mumbai`, `polygon`].includes(network)) { + if (![`localhost`, `amoy`, `polygon`].includes(network)) { throw new Error( - `Network ${network} is not supported. Please use localhost, mumbai, or polygon.` + `Network ${network} is not supported. Please use localhost, amoy, or polygon.` ); } @@ -188,7 +188,7 @@ export const GET_LIST_MIGRATED_REMOVALS_TASK = () => if (maybePendingTx === undefined) { throw new Error(`No pending transaction returned`); } else { - pendingTx = maybePendingTx as ContractTransaction; + pendingTx = maybePendingTx; } hre.log(`txHash: ${chalk.green(pendingTx.hash)}`); hre.log(chalk.white('\n👷 Waiting for transaction to finalize...')); diff --git a/tasks/locked-nori.ts b/tasks/locked-nori.ts index ac07eddc6..544f4ac11 100644 --- a/tasks/locked-nori.ts +++ b/tasks/locked-nori.ts @@ -31,7 +31,7 @@ export const TASK = { !( network === 'polygon' || network === 'hardhat' || - network === 'mumbai' || + network === 'amoy' || network === 'localhost' ) ) { diff --git a/tasks/market.ts b/tasks/market.ts index 0fa76700e..c715fd8fd 100644 --- a/tasks/market.ts +++ b/tasks/market.ts @@ -29,7 +29,7 @@ export const TASK = { const network = hre.network.name; if ( !( - network === 'mumbai' || + network === 'amoy' || network === 'hardhat' || network === 'polygon' || network === 'localhost' diff --git a/tasks/migrate-certificates.ts b/tasks/migrate-certificates.ts index 1a187628c..f69a10118 100644 --- a/tasks/migrate-certificates.ts +++ b/tasks/migrate-certificates.ts @@ -396,9 +396,9 @@ export const GET_MIGRATE_CERTIFICATES_TASK = () => const outputFileName = dryRun === true ? `dryRun-${outputFile}` : outputFile; const network = await hre.network.name; - if (![`localhost`, `mumbai`, `polygon`].includes(network)) { + if (![`localhost`, `amoy`, `polygon`].includes(network)) { throw new Error( - `Network ${network} is not supported. Please use localhost, mumbai, or polygon.` + `Network ${network} is not supported. Please use localhost, amoy, or polygon.` ); } const originalInputData: MigratedCertificates = readJsonSync(file); @@ -616,7 +616,7 @@ export const GET_MIGRATE_CERTIFICATES_TASK = () => transactionHash: txReceipt?.transactionHash, status: txReceipt?.status, }, - tokenId: tokenIds![certificateIndex], + tokenId: tokenIds[certificateIndex], }); certificateIndex += 1; } diff --git a/tasks/migrate-removals.ts b/tasks/migrate-removals.ts index d091846fa..bd59dccdf 100644 --- a/tasks/migrate-removals.ts +++ b/tasks/migrate-removals.ts @@ -207,9 +207,9 @@ export const GET_MIGRATE_REMOVALS_TASK = () => const outputFileName = dryRun === true ? `dryRun-${outputFile}` : outputFile; const network = hre.network.name; - if (![`localhost`, `mumbai`, `polygon`].includes(network)) { + if (![`localhost`, `amoy`, `polygon`].includes(network)) { throw new Error( - `Network ${network} is not supported. Please use localhost, mumbai, or polygon.` + `Network ${network} is not supported. Please use localhost, amoy, or polygon.` ); } const fullInputData: InputData[] = readJsonSync(file); diff --git a/tasks/removal.ts b/tasks/removal.ts index a9f25a528..637956fb8 100644 --- a/tasks/removal.ts +++ b/tasks/removal.ts @@ -30,7 +30,7 @@ export const TASK = { if ( !( network === 'localhost' || - network === 'mumbai' || + network === 'amoy' || network === 'hardhat' || network === 'polygon' ) diff --git a/tasks/simulate-txn-alchemy.ts b/tasks/simulate-txn-alchemy.ts index d3b35e13b..844efdd47 100644 --- a/tasks/simulate-txn-alchemy.ts +++ b/tasks/simulate-txn-alchemy.ts @@ -1,11 +1,9 @@ -/* eslint-disable no-await-in-loop -- need to submit transactions synchronously to avoid nonce collisions */ - import { BigNumber, FixedNumber } from 'ethers'; import { task } from 'hardhat/config'; +import { Alchemy, Network, Utils } from 'alchemy-sdk'; import { getLogger } from '@/utils/log'; import { getMarket, getRemoval } from '@/utils/contracts'; -import { Alchemy, Network, Utils } from 'alchemy-sdk'; export const GET_SIMULATE_TXN_TASK = () => ({ @@ -20,9 +18,9 @@ export const GET_SIMULATE_TXN_TASK = () => hre, }); const network = hre.network.name; - if (![`localhost`, `mumbai`, `polygon`].includes(network)) { + if (![`localhost`, `amoy`, `polygon`].includes(network)) { throw new Error( - `Network ${network} is not supported. Please use localhost, mumbai, or polygon.` + `Network ${network} is not supported. Please use localhost, amoy, or polygon.` ); } const [signer] = await hre.getSigners(); @@ -51,7 +49,7 @@ export const GET_SIMULATE_TXN_TASK = () => const marketBalance = await removalContract.getMarketBalance(); const marketBalanceInEth = FixedNumber.fromValue(marketBalance, 18); console.log( - 'CURRENT MARKET BALANCE (TONNES): ', + 'CURRENT MARKET BALANCE (TONNES):', marketBalanceInEth.toString() ); @@ -59,7 +57,7 @@ export const GET_SIMULATE_TXN_TASK = () => marketContract.MARKET_ADMIN_ROLE(), polygonRelayerAddress ); - console.log('RELAYER HAS `MARKET_ADMIN_ROLE`? ', hasRole); + console.log('RELAYER HAS `MARKET_ADMIN_ROLE`?', hasRole); const latestBlock = await hre.ethers.provider.getBlock('latest'); const latestBlockGasLimit = Utils.hexStripZeros( @@ -69,16 +67,16 @@ export const GET_SIMULATE_TXN_TASK = () => const fastGasPriceHexString = Utils.hexStripZeros( latestFastGasPrice.toHexString() ); - console.log('LATEST BLOCK GAS LIMIT: ', latestBlockGasLimit); - console.log('LATEST FAST GAS PRICE: ', fastGasPriceHexString); + console.log('LATEST BLOCK GAS LIMIT:', latestBlockGasLimit); + console.log('LATEST FAST GAS PRICE:', fastGasPriceHexString); - const purchaseAmountEth = 9_000; + const purchaseAmountEth = 9000; const purchaseAmountWei = ethers.utils.parseUnits( purchaseAmountEth.toString(), 18 ); - console.log('PURCHASE AMOUNT (ETH): ', purchaseAmountEth); - console.log('PURCHASE AMOUNT (WEI): ', purchaseAmountWei); + console.log('PURCHASE AMOUNT (ETH):', purchaseAmountEth); + console.log('PURCHASE AMOUNT (WEI):', purchaseAmountWei); const gasEstimation = await marketContract.estimateGas.swapWithoutFeeSpecialOrder( signerAddress, // recipient diff --git a/types/node/process.d.ts b/types/node/process.d.ts index 4838ccc6d..833f07ca1 100644 --- a/types/node/process.d.ts +++ b/types/node/process.d.ts @@ -3,6 +3,9 @@ declare namespace NodeJS { interface ProcessEnv { MNEMONIC?: string; ALCHEMY_API_KEY?: string; + ETHEREUM_RPC_URL?: string; + AMOY_RPC_URL?: string; + POLYGON_RPC_URL?: string; ETHERNAL_EMAIL?: string; ETHERNAL_PASSWORD?: string; ETHERNAL: boolean; diff --git a/utils/deploy.ts b/utils/deploy.ts index 7bc254c5d..725850a59 100644 --- a/utils/deploy.ts +++ b/utils/deploy.ts @@ -1,4 +1,4 @@ -import path from 'path'; +import path from 'node:path'; import { readJsonSync, writeJsonSync } from 'fs-extra'; import type { Address } from 'hardhat-deploy/types'; @@ -26,9 +26,7 @@ import type { import { formatTokenAmount } from '@/utils/units'; import { mockDepositNoriToPolygon } from '@/test/helpers'; -interface ContractConfig { - [key: string]: { proxyAddress: string }; -} +type ContractConfig = Record; export const readContractsConfig = (): Record => { return readJsonSync(path.join(__dirname, '../contracts.json')); @@ -179,18 +177,20 @@ export const deployMarketContract = async ({ feeWallet, feePercentage, priceMultiple, + purchasingTokenAddress, }: { hre: CustomHardHatRuntimeEnvironment; feeWallet: Address; feePercentage: number; priceMultiple: number; + purchasingTokenAddress: Address; }): Promise> => { const deployments = await hre.deployments.all>(); return hre.deployOrUpgradeProxy({ contractName: 'Market', args: [ deployments.Removal.address, - deployments.BridgedPolygonNORI.address, + purchasingTokenAddress, deployments.Certificate.address, feeWallet, feePercentage, @@ -258,9 +258,7 @@ export const deployNoriUSDC = async ({ }: { hre: CustomHardHatRuntimeEnvironment; }): Promise> => { - const isTestnet = ['mumbai', 'localhost', 'hardhat'].includes( - hre.network.name - ); + const isTestnet = ['amoy', 'localhost', 'hardhat'].includes(hre.network.name); if (!isTestnet) { throw new Error('Testnet USDC contract can only be deployed on testnets'); } @@ -281,7 +279,7 @@ export const deployTestContracts = async ({ hre: CustomHardHatRuntimeEnvironment; contractNames: (keyof Contracts)[]; }): Promise => { - const isTestnet = ['mumbai', 'goerli'].includes(hre.network.name); + const isTestnet = ['amoy', 'goerli'].includes(hre.network.name); const scheduleTestHarnessInstance = isTestnet !== null && contracts.includes('LockedNORILibTestHarness') ? await hre.deployNonUpgradeable< diff --git a/yarn.lock b/yarn.lock index 418c3381b..dcedf55cd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1352,23 +1352,26 @@ resolved "https://registry.yarnpkg.com/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.7.0.tgz#a928358aac3aca652f417c402950d05a7a81d256" integrity sha512-4ACd/c6ushrLuhn0+yjB9hznhnsc2IML6pf0Ulb1Q7w8SvR1jNGPu/Y7i4kvOm6R+WJkMHwyy5z3i3gN+Tawug== -"@fireblocks/fireblocks-web3-provider@^1.2.2", "@fireblocks/fireblocks-web3-provider@^1.2.4": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@fireblocks/fireblocks-web3-provider/-/fireblocks-web3-provider-1.2.4.tgz#ebe4c348f1405ab4cf53adbcc0ce22daa4326c41" - integrity sha512-nP4zQYVzhmTPX1Xi+QufGgYiaCLmnR0M368mCRrAfKVn3bWv9VF9sItH58p29UXi8Z8VABJnOKAmuSv29yPrkQ== +"@fireblocks/fireblocks-web3-provider@^1.2.4", "@fireblocks/fireblocks-web3-provider@^1.3.4": + version "1.3.6" + resolved "https://registry.yarnpkg.com/@fireblocks/fireblocks-web3-provider/-/fireblocks-web3-provider-1.3.6.tgz#5bf49251a0364ed91d3728ae045ac904c74897ce" + integrity sha512-mkS2jV14HMaEdi2ASv8xrx574sc2K1ogRPdLYXtl1UYajaWy2Yb9RXb+NRahrjhZqPkGx3fvD7HLKzIlx9haaQ== dependencies: "@ethersproject/units" "^5.7.0" + axios "^1.6.2" debug "^4.3.4" ethers "^5.7.2" - fireblocks-sdk "^3.1.4" + fireblocks-sdk "^5.18.0" + https-proxy-agent "^7.0.2" web3-providers-http "1.8.0" "@fireblocks/hardhat-fireblocks@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@fireblocks/hardhat-fireblocks/-/hardhat-fireblocks-1.2.2.tgz#4942cdd109a49355c5a5bcd69b3b8f2ab4b44c7f" - integrity sha512-kinf4AWi6HXLLsBKip29t0ap06HcI0RlIaYUBf7ssaRu8OqRcFsCW9qSEw2oMUgwkv8BC8IDGsI7gsrHi6Hqcg== + version "1.3.5" + resolved "https://registry.yarnpkg.com/@fireblocks/hardhat-fireblocks/-/hardhat-fireblocks-1.3.5.tgz#062330c07cc2ca7e3336506675b6e9c09128bc02" + integrity sha512-YqHBIS1ghJ5Y0p2khfKtwkAsxqwlKjluhdpSVd49sm7rzyLkXlN1eiDH+WkGsk3M6he28fRBD9ZQU5CIgOvrSA== dependencies: - "@fireblocks/fireblocks-web3-provider" "^1.2.2" + "@fireblocks/fireblocks-web3-provider" "^1.3.4" + undici "^6.6.2" "@graphql-eslint/eslint-plugin@^3.20.1": version "3.20.1" @@ -1704,6 +1707,11 @@ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== +"@noble/hashes@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" + integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== + "@noble/secp256k1@1.6.3", "@noble/secp256k1@~1.6.0": version "1.6.3" resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.6.3.tgz#7eed12d9f4404b416999d0c87686836c4c5c9b94" @@ -2025,6 +2033,29 @@ tslib "^2.5.0" uuid "^9.0.0" +"@notabene/pii-sdk@^1.17.0": + version "1.17.0" + resolved "https://registry.yarnpkg.com/@notabene/pii-sdk/-/pii-sdk-1.17.0.tgz#e319fafd7df4148470a9f8920232c5e5f9185bab" + integrity sha512-3fccyWmODK+TK9XS6S7Nitq7tvvJc8ALdzraypkZXly88nWAQkVDkxxQL9a9LScIxLnMSVIQrjw2n52UopmfKQ== + dependencies: + "@ethersproject/bytes" "5.7.0" + "@noble/curves" "^1.1.0" + "@stablelib/ed25519" "1.0.3" + axios "^1.6.0" + axios-oauth-client "^1.5.0" + axios-token-interceptor "^0.2.0" + base64url "3.0.1" + bs58 "5.0.0" + debug "^4.3.4" + did-jwt "6.11.6" + dotenv "^16.0.3" + lodash "^4.17.21" + multibase "4.0.6" + multicodec "3.2.1" + node-fetch "^3.3.1" + tslib "^2.5.0" + uuid "^9.0.0" + "@octokit/auth-token@^3.0.0": version "3.0.3" resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.3.tgz#ce7e48a3166731f26068d7a7a7996b5da58cbe0c" @@ -2737,7 +2768,7 @@ dependencies: fs-extra "^9.1.0" -"@types/bn.js@*", "@types/bn.js@^5.1.0": +"@types/bn.js@*": version "5.1.0" resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.0.tgz#32c5d271503a12653c62cf4d2b45e6eab8cebc68" integrity sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA== @@ -2751,6 +2782,13 @@ dependencies: "@types/node" "*" +"@types/bn.js@^5.1.0": + version "5.1.5" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.5.tgz#2e0dacdcce2c0f16b905d20ff87aedbc6f7b4bf0" + integrity sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A== + dependencies: + "@types/node" "*" + "@types/cacheable-request@^6.0.1": version "6.0.3" resolved "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" @@ -2918,7 +2956,14 @@ "@types/node" "*" form-data "^3.0.0" -"@types/node@*", "@types/node@>=12.12.47", "@types/node@>=13.7.0": +"@types/node@*": + version "20.12.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384" + integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== + dependencies: + undici-types "~5.26.4" + +"@types/node@>=12.12.47", "@types/node@>=13.7.0": version "17.0.38" resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.38.tgz#f8bb07c371ccb1903f3752872c89f44006132947" integrity sha512-5jY9RhV7c0Z4Jy09G+NIDTsCZ5G0L5n+Z+p+Y7t5VJHM30bgwzSjVtlcBxqAj+6L/swIlvtOSzr8rBk/aNyV2g== @@ -2939,9 +2984,9 @@ integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== "@types/pbkdf2@^3.0.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" - integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== + version "3.1.2" + resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.2.tgz#2dc43808e9985a2c69ff02e2d2027bd4fe33e8dc" + integrity sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew== dependencies: "@types/node" "*" @@ -2990,9 +3035,9 @@ integrity sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow== "@types/secp256k1@^4.0.1": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" - integrity sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w== + version "4.0.6" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.6.tgz#d60ba2349a51c2cbc5e816dcd831a42029d376bf" + integrity sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ== dependencies: "@types/node" "*" @@ -3240,9 +3285,9 @@ abort-controller@^3.0.0: event-target-shim "^5.0.0" abortcontroller-polyfill@^1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz#1b5b487bd6436b5b764fd52a612509702c3144b5" - integrity sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q== + version "1.7.5" + resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz#6738495f4e901fbb57b6c0611d0c75f76c485bed" + integrity sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ== abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3: version "1.0.3" @@ -3345,6 +3390,13 @@ agent-base@6: dependencies: debug "4" +agent-base@^7.0.2: + version "7.1.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317" + integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA== + dependencies: + debug "^4.3.4" + aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -3813,7 +3865,7 @@ async@^2.4.0: asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== at-least-node@^1.0.0: version "1.0.0" @@ -3889,6 +3941,15 @@ axios@^0.27.2: follow-redirects "^1.14.9" form-data "^4.0.0" +axios@^1.6.0, axios@^1.6.2: + version "1.6.8" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" + integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + axios@^1.6.5: version "1.6.7" resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.7.tgz#7b48c2e27c96f9c68a2f8f31e2ab19f59b06b0a7" @@ -4446,7 +4507,14 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base-x@^3.0.2, base-x@^3.0.8: +base-x@^3.0.2: + version "3.0.9" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" + integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== + dependencies: + safe-buffer "^5.0.1" + +base-x@^3.0.8: version "3.0.8" resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.8.tgz#1e1106c2537f0162e8b52474a557ebb09000018d" integrity sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA== @@ -4542,9 +4610,9 @@ bip39@2.5.0: unorm "^1.3.3" blakejs@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.1.tgz#bf313053978b2cd4c444a48795710be05c785702" - integrity sha512-bLG6PHOCZJKNshTjGRBvET0vTciwQE6zFKOKKXPDJfwFBd4Ac0yBfPZqcGvGJap50l7ktvlpFqc2jGVaUgbJgg== + version "1.2.1" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" + integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== bluebird@^3.5.0, bluebird@^3.5.1, bluebird@^3.5.2: version "3.7.2" @@ -4554,19 +4622,19 @@ bluebird@^3.5.0, bluebird@^3.5.1, bluebird@^3.5.2: bn.js@4.11.6: version "4.11.6" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" - integrity sha1-UzRK2xRhehP26N0s4okF0cC6MhU= + integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.10.0, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9, bn.js@^4.8.0: version "4.12.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== -bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.2, bn.js@^5.1.3: +bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.3: version "5.2.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== -bn.js@^5.2.0, bn.js@^5.2.1: +bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== @@ -4660,7 +4728,7 @@ braces@^3.0.1, braces@^3.0.2, braces@~3.0.2: brorand@^1.0.1, brorand@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== browser-level@^1.0.1: version "1.0.1" @@ -4749,7 +4817,7 @@ bs58@5.0.0: bs58@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" - integrity sha1-vhYedsNU9veIrkBx9j806MTwpCo= + integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== dependencies: base-x "^3.0.2" @@ -4765,7 +4833,7 @@ bs58check@^2.1.2: buffer-equal-constant-time@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" - integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= + integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== buffer-from@^1.0.0: version "1.1.2" @@ -4780,7 +4848,7 @@ buffer-to-arraybuffer@^0.0.5: buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== buffer-xor@^2.0.1: version "2.0.2" @@ -4932,7 +5000,18 @@ cachedown@1.0.0: abstract-leveldown "^2.4.1" lru-cache "^3.2.0" -call-bind@^1.0.0, call-bind@^1.0.2, call-bind@~1.0.2: +call-bind@^1.0.0, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" + +call-bind@^1.0.2, call-bind@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== @@ -5662,11 +5741,11 @@ cross-fetch@^2.1.0, cross-fetch@^2.1.1: whatwg-fetch "^2.0.4" cross-fetch@^3.1.4: - version "3.1.5" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" - integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== + version "3.1.8" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" + integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== dependencies: - node-fetch "2.6.7" + node-fetch "^2.6.12" cross-spawn@^6.0.5: version "6.0.5" @@ -5946,6 +6025,15 @@ deferred-leveldown@~4.0.0: abstract-leveldown "~5.0.0" inherits "^2.0.3" +define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + define-lazy-prop@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" @@ -6010,7 +6098,7 @@ del@^6.0.0: delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== depd@2.0.0: version "2.0.0" @@ -6250,7 +6338,7 @@ elegant-spinner@^1.0.1: resolved "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" integrity sha512-B+ZM+RXvRqQaAmkMlO/oSe5nMUOaUnyfGYCEHoR8wrXsZR2mA0XVibsxV1bvTwxdRWah1PkQqso2EzhILGHtEQ== -elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4: +elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.3: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== @@ -6263,6 +6351,19 @@ elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5 minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" +elliptic@^6.5.2, elliptic@^6.5.4: + version "6.5.5" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.5.tgz#c715e09f78b6923977610d4c2346d6ce22e6dded" + integrity sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + emittery@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.4.1.tgz#abe9d3297389ba424ac87e53d1c701962ce7433d" @@ -6480,6 +6581,18 @@ es-array-method-boxes-properly@^1.0.0: resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + es-set-tostringtag@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" @@ -7273,11 +7386,11 @@ ethashjs@~0.0.7: miller-rabin "^4.0.0" ethereum-bloom-filters@^1.0.6: - version "1.0.10" - resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" - integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== + version "1.1.0" + resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.1.0.tgz#b3fc1eb789509ee30db0bf99a2988ccacb8d0397" + integrity sha512-J1gDRkLpuGNvWYzWslBQR9cDV4nd4kfvVTE/Wy4Kkm4yb3EYRSlyi0eB/inTsSTTVyA0+HyzHgbr95Fn/Z1fSw== dependencies: - js-sha3 "^0.8.0" + "@noble/hashes" "^1.4.0" ethereum-common@0.2.0: version "0.2.0" @@ -7473,7 +7586,7 @@ ethereumjs-util@^5.0.0, ethereumjs-util@^5.0.1, ethereumjs-util@^5.1.1, ethereum rlp "^2.0.0" safe-buffer "^5.1.1" -ethereumjs-util@^7.0.10, ethereumjs-util@^7.0.3, ethereumjs-util@^7.1.0: +ethereumjs-util@^7.0.10, ethereumjs-util@^7.0.3: version "7.1.0" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.0.tgz#e2b43a30bfcdbcb432a4eb42bd5f2393209b3fd5" integrity sha512-kR+vhu++mUDARrsMMhsjjzPduRVAeundLGXucGRHF3B4oEltOUspfgCVco4kckucj3FMlLaZHUl9n7/kdmr6Tw== @@ -7485,7 +7598,7 @@ ethereumjs-util@^7.0.10, ethereumjs-util@^7.0.3, ethereumjs-util@^7.1.0: ethjs-util "0.1.6" rlp "^2.2.4" -ethereumjs-util@^7.0.2, ethereumjs-util@^7.1.5: +ethereumjs-util@^7.0.2, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.5: version "7.1.5" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== @@ -7632,7 +7745,7 @@ ethers@^5.0.1, ethers@^5.0.2, ethers@^5.0.29, ethers@^5.5.2, ethers@^5.5.3, ethe ethjs-unit@0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" - integrity sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk= + integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== dependencies: bn.js "4.11.6" number-to-bn "1.7.0" @@ -8140,12 +8253,13 @@ firebase@9.10.0, firebase@9.9.4, firebase@^9.9.4: "@firebase/storage-compat" "0.1.17" "@firebase/util" "1.6.3" -fireblocks-sdk@^3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/fireblocks-sdk/-/fireblocks-sdk-3.1.4.tgz#c2759753577af53b9c6f31a31d9c7e0919c68aec" - integrity sha512-R0Mg4ZkGAhNSRq7evjteeEYjdpH6KuJo4t/TCKebP/EH2YLwXr24BlGKoRslJpWVepKNI0XWE3cX41VKgPiZ5A== +fireblocks-sdk@^5.18.0: + version "5.25.1" + resolved "https://registry.yarnpkg.com/fireblocks-sdk/-/fireblocks-sdk-5.25.1.tgz#fd54283581ab477f7259838c1d9952efd43f234c" + integrity sha512-bPs8LZ7bQD9XeLpmsofgxNllWnJbjxTzq2VX2+G4JkZRhPGR9s1WeqDvDIkw9BkZnsveeOkHRp4pg7SyMSs54A== dependencies: - axios "^0.27.2" + "@notabene/pii-sdk" "^1.17.0" + axios "^1.6.0" jsonwebtoken "9.0.0" platform "^1.3.6" qs "^6.11.0" @@ -8224,10 +8338,10 @@ follow-redirects@^1.14.0: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.7.tgz#2004c02eb9436eee9a21446a6477debf17e81685" integrity sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ== -follow-redirects@^1.14.9: - version "1.15.2" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" - integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== +follow-redirects@^1.14.9, follow-redirects@^1.15.6: + version "1.15.6" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== follow-redirects@^1.15.4: version "1.15.5" @@ -8417,10 +8531,10 @@ fsevents@~2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.1, function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== function.prototype.name@^1.1.5: version "1.1.5" @@ -8494,14 +8608,16 @@ get-func-name@^2.0.0: resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= -get-intrinsic@^1.0.2, get-intrinsic@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" - integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== dependencies: - function-bind "^1.1.1" - has "^1.0.3" + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: version "1.1.1" @@ -9046,10 +9162,17 @@ has-property-descriptors@^1.0.0: dependencies: get-intrinsic "^1.1.1" +has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== has-symbol-support-x@^1.4.1: version "1.4.2" @@ -9116,7 +9239,12 @@ has-yarn@^2.1.0: resolved "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== -has@^1.0.3, has@~1.0.3: +has@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.4.tgz#2eb2860e000011dae4f1406a86fe80e530fb2ec6" + integrity sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ== + +has@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== @@ -9148,6 +9276,13 @@ hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: inherits "^2.0.3" minimalistic-assert "^1.0.1" +hasown@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + he@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -9166,7 +9301,7 @@ heap@0.2.6: hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== dependencies: hash.js "^1.0.3" minimalistic-assert "^1.0.0" @@ -9253,6 +9388,14 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" +https-proxy-agent@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz#8e97b841a029ad8ddc8731f26595bad868cb4168" + integrity sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg== + dependencies: + agent-base "^7.0.2" + debug "4" + human-signals@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" @@ -9788,7 +9931,7 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: is-hex-prefixed@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" - integrity sha1-fY035q135dEnFIkTxXPggtd39VQ= + integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== is-hexadecimal@^1.0.0: version "1.0.4" @@ -10489,7 +10632,7 @@ jws@^3.2.2: jwa "^1.4.1" safe-buffer "^5.0.1" -keccak@3.0.1, keccak@^3.0.0: +keccak@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.1.tgz#ae30a0e94dbe43414f741375cff6d64c8bea0bff" integrity sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA== @@ -10497,6 +10640,15 @@ keccak@3.0.1, keccak@^3.0.0: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" +keccak@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.4.tgz#edc09b89e633c0549da444432ecf062ffadee86d" + integrity sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + keccak@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" @@ -11423,20 +11575,20 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19: - version "2.1.32" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.32.tgz#1d00e89e7de7fe02008db61001d9e02852670fd5" - integrity sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A== - dependencies: - mime-db "1.49.0" - -mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" +mime-types@^2.1.16, mime-types@~2.1.19: + version "2.1.32" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.32.tgz#1d00e89e7de7fe02008db61001d9e02852670fd5" + integrity sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A== + dependencies: + mime-db "1.49.0" + mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" @@ -11492,7 +11644,7 @@ minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== "minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" @@ -11842,6 +11994,13 @@ node-fetch@2.6.7, node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.7: dependencies: whatwg-url "^5.0.0" +node-fetch@^2.6.12: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + node-fetch@^3.3.1: version "3.3.2" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" @@ -11860,9 +12019,9 @@ node-fetch@~1.7.1: is-stream "^1.0.1" node-gyp-build@^4.2.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739" - integrity sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg== + version "4.8.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.0.tgz#3fee9c1731df4581a3f9ead74664369ff00d26dd" + integrity sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og== node-gyp-build@^4.3.0: version "4.5.0" @@ -11998,7 +12157,7 @@ number-is-nan@^1.0.0: number-to-bn@1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" - integrity sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA= + integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== dependencies: bn.js "4.11.6" strip-hex-prefix "1.0.0" @@ -12032,11 +12191,16 @@ object-inspect@^1.11.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== -object-inspect@^1.12.2, object-inspect@^1.9.0: +object-inspect@^1.12.2: version "1.12.2" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== +object-inspect@^1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + object-inspect@~1.12.3: version "1.12.3" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" @@ -13082,7 +13246,7 @@ pvutils@^1.1.3: resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.1.3.tgz#f35fc1d27e7cd3dfbd39c0826d173e806a03f5a3" integrity sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ== -qs@6.11.0, qs@^6.11.0, qs@^6.9.4: +qs@6.11.0, qs@^6.9.4: version "6.11.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== @@ -13096,6 +13260,13 @@ qs@^6.10.1: dependencies: side-channel "^1.0.4" +qs@^6.11.0: + version "6.12.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.12.1.tgz#39422111ca7cbdb70425541cba20c7d7b216599a" + integrity sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ== + dependencies: + side-channel "^1.0.6" + qs@~6.5.2: version "6.5.3" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" @@ -13273,7 +13444,7 @@ readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.4, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6, readable-stream@^3.6.0: +readable-stream@^3.0.6: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -13282,6 +13453,15 @@ readable-stream@^3.0.6, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + readable-stream@~2.0.0: version "2.0.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" @@ -14206,14 +14386,14 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -rlp@^2.0.0, rlp@^2.2.3, rlp@^2.2.4: +rlp@^2.0.0, rlp@^2.2.3: version "2.2.6" resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.6.tgz#c80ba6266ac7a483ef1e69e8e2f056656de2fb2c" integrity sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg== dependencies: bn.js "^4.11.1" -rlp@^2.2.1, rlp@^2.2.2: +rlp@^2.2.1, rlp@^2.2.2, rlp@^2.2.4: version "2.2.7" resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== @@ -14326,11 +14506,11 @@ scryptsy@^1.2.1: pbkdf2 "^3.0.3" secp256k1@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.2.tgz#15dd57d0f0b9fdb54ac1fa1694f40e5e9a54f4a1" - integrity sha512-UDar4sKvWAksIlfX3xIaQReADn+WFnHvbVujpcbr+9Sf/69odMwy2MUsz5CKLQgX9nsIyrjuxL2imVyoNHa3fg== + version "4.0.3" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" + integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== dependencies: - elliptic "^6.5.2" + elliptic "^6.5.4" node-addon-api "^2.0.0" node-gyp-build "^4.2.0" @@ -14382,13 +14562,20 @@ semver@^7.3.4, semver@^7.5.1: dependencies: lru-cache "^6.0.0" -semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: +semver@^7.3.5, semver@^7.3.7: version "7.3.8" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== dependencies: lru-cache "^6.0.0" +semver@^7.3.8: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + semver@~5.4.1: version "5.4.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" @@ -14446,6 +14633,18 @@ set-blocking@^2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= +set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + set-immediate-shim@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" @@ -14469,7 +14668,7 @@ setimmediate@1.0.4: setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== setprototypeof@1.1.1: version "1.1.1" @@ -14513,14 +14712,15 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== +side-channel@^1.0.4, side-channel@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" signal-exit@^3.0.2: version "3.0.3" @@ -14934,7 +15134,7 @@ strict-uri-encode@^1.0.0: strict-uri-encode@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" - integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= + integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ== string-env-interpolation@1.0.1: version "1.0.1" @@ -15170,7 +15370,7 @@ strip-final-newline@^3.0.0: strip-hex-prefix@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" - integrity sha1-DF8VX+8RUTczd96du1iNoFUA428= + integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== dependencies: is-hex-prefixed "1.0.0" @@ -15562,7 +15762,7 @@ tough-cookie@~2.5.0: tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== trim-newlines@^3.0.0: version "3.0.1" @@ -15959,6 +16159,11 @@ underscore@^1.9.1: resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.6.tgz#04786a1f589dc6c09f761fc5f45b89e935136441" integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A== +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + undici@^5.10.0, undici@^5.14.0: version "5.20.0" resolved "https://registry.yarnpkg.com/undici/-/undici-5.20.0.tgz#6327462f5ce1d3646bcdac99da7317f455bcc263" @@ -15966,6 +16171,11 @@ undici@^5.10.0, undici@^5.14.0: dependencies: busboy "^1.6.0" +undici@^6.6.2: + version "6.13.0" + resolved "https://registry.yarnpkg.com/undici/-/undici-6.13.0.tgz#7edbf4b7f3aac5f8a681d515151bf55cb3589d72" + integrity sha512-Q2rtqmZWrbP8nePMq7mOJIN98M0fYvSgV89vwl/BQRT4mDOeY2GXZngfGpcBBhtky3woM7G24wZV3Q304Bv6cw== + unfetch@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" @@ -17188,7 +17398,7 @@ webcrypto-core@^1.7.4: webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== websocket-driver@>=0.5.1: version "0.7.4" @@ -17236,7 +17446,7 @@ whatwg-fetch@^2.0.4: whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" webidl-conversions "^3.0.0"