From 9f309b93561ba07afada4dd56f3394720809092e Mon Sep 17 00:00:00 2001 From: Mark Bliss Date: Tue, 3 Oct 2023 19:37:42 +0200 Subject: [PATCH] chore: New release with stamp rc6 (#202) --- deploy/006_deploy_roles_redistribution.ts | 9 - scripts/deploy_oracle.ts | 8 +- scripts/deploy_redis.ts | 8 +- scripts/deploy_roles.ts | 40 ++ scripts/deploy_staking.ts | 2 +- scripts/deploy_stamp.ts | 144 +++++++ testnet_deployed.json | 477 ++++++++++++++++++---- 7 files changed, 589 insertions(+), 99 deletions(-) create mode 100644 scripts/deploy_roles.ts create mode 100644 scripts/deploy_stamp.ts diff --git a/deploy/006_deploy_roles_redistribution.ts b/deploy/006_deploy_roles_redistribution.ts index 35db4b71..991499eb 100644 --- a/deploy/006_deploy_roles_redistribution.ts +++ b/deploy/006_deploy_roles_redistribution.ts @@ -8,15 +8,6 @@ const func: DeployFunction = async function ({ deployments, getNamedAccounts }) const redisAddress = (await get('Redistribution')).address; - const redistributorRoleStakeRegistry = await read('StakeRegistry', 'REDISTRIBUTOR_ROLE'); - await execute('StakeRegistry', { from: deployer }, 'grantRole', redistributorRoleStakeRegistry, redisAddress); - - const redistributorRolePostageStamp = await read('PostageStamp', 'REDISTRIBUTOR_ROLE'); - await execute('PostageStamp', { from: deployer }, 'grantRole', redistributorRolePostageStamp, redisAddress); - - const priceUpdaterRoleOracle = await read('PriceOracle', 'PRICE_UPDATER_ROLE'); - await execute('PriceOracle', { from: deployer }, 'grantRole', priceUpdaterRoleOracle, redisAddress); - log('----------------------------------------------------'); }; diff --git a/scripts/deploy_oracle.ts b/scripts/deploy_oracle.ts index 1a003206..9ab0d994 100644 --- a/scripts/deploy_oracle.ts +++ b/scripts/deploy_oracle.ts @@ -83,11 +83,11 @@ async function main() { let waitTime = 6; let currentRedis = ''; if (network.name == 'mainnet') { - //Stamps, Multisig + // Postagestamp, Multisig args = ['0x30d155478eF27Ab32A1D578BE7b84BC5988aF381', '0xb1C7F17Ed88189Abf269Bf68A3B2Ed83C5276aAe']; currentRedis = '0xDF64aed195102E644ad6A0204eD5377589b29618'; } else if (network.name == 'testnet') { - args = ['0x1f87FEDa43e6ABFe1058E96A07d0ea182e7dc9BD', '0xb1C7F17Ed88189Abf269Bf68A3B2Ed83C5276aAe']; + args = ['0xF5147D56502C80004f91FB4112d6812CddE8eDE3', '0xb1C7F17Ed88189Abf269Bf68A3B2Ed83C5276aAe']; currentRedis = '0x9e3BDb0c69838CC06D85409d4AD6245e54F70F1d'; } else if (network.name == 'localhost') { args = ['0x9A2F29598CB0787Aa806Bbfb65B82A9e558945E7', '0x3c8F39EE625fCF97cB6ee22bCe25BE1F1E5A5dE8']; @@ -113,8 +113,8 @@ async function main() { deployed['contracts']['priceOracle']['url'] = config.url + oracle.address; // Change roles on current oracle contract - const redistributorRole = ethers.utils.keccak256(ethers.utils.toUtf8Bytes('PRICE_UPDATER_ROLE')); - const tx2 = await oracle.grantRole(redistributorRole, currentRedis); + const updaterRole = ethers.utils.keccak256(ethers.utils.toUtf8Bytes('PRICE_UPDATER_ROLE')); + const tx2 = await oracle.grantRole(updaterRole, currentRedis); console.log('Changed PRICE UPDATER ROLE at : ', tx2.hash); // TODO Needs to be unpaused to be running, either here with trx on through etherscan or something like that diff --git a/scripts/deploy_redis.ts b/scripts/deploy_redis.ts index ac7b2c61..76e3d2da 100644 --- a/scripts/deploy_redis.ts +++ b/scripts/deploy_redis.ts @@ -82,17 +82,17 @@ async function main() { let args: string[] = []; let waitTime = 6; if (network.name == 'mainnet') { - // Staking, Stamps, Oracle args, multisig + // Staking, Stamps, Oracle, multisig args = [ - '0x781c6D1f0eaE6F1Da1F604c6cDCcdB8B76428ba7', + '0x781c6D1f0eaE6F1Da1F604c6cDCcdB8B76428ba7', // old staking '0x30d155478eF27Ab32A1D578BE7b84BC5988aF381', '0x344A2CC7304B32A87EfDC5407cD4bEC7cf98F035', '0xb1C7F17Ed88189Abf269Bf68A3B2Ed83C5276aAe', ]; } else if (network.name == 'testnet') { args = [ - '0xCb07bf0603da228C8ec602bf12b973b8A94f9bac', - '0x1f87FEDa43e6ABFe1058E96A07d0ea182e7dc9BD', + '0xCb07bf0603da228C8ec602bf12b973b8A94f9bac', // old staking + '0xF5147D56502C80004f91FB4112d6812CddE8eDE3', '0xefC5Ead3188402eCC951DB45827F6e0F99B67a25', '0xb1C7F17Ed88189Abf269Bf68A3B2Ed83C5276aAe', ]; diff --git a/scripts/deploy_roles.ts b/scripts/deploy_roles.ts new file mode 100644 index 00000000..04874ee5 --- /dev/null +++ b/scripts/deploy_roles.ts @@ -0,0 +1,40 @@ +import 'hardhat-deploy-ethers'; +import '@nomiclabs/hardhat-etherscan'; +import { ethers, network } from 'hardhat'; +import hre from 'hardhat'; + +async function main() { + // Order of contracts and how should they be deployed, testnet addresses + const currentPostage = '0xF5147D56502C80004f91FB4112d6812CddE8eDE3'; + const currentOracle = '0xd41A47fCaa67945A11a398F00D5f7F130aF03733'; + const currentStaking = '0xCb07bf0603da228C8ec602bf12b973b8A94f9bac'; // old staking + const currentRedis = '0x264079eeF0CE42D790e3FA7DF8D0cfA675ef6504'; + + // Change roles on current stamp contract + const stamp = await ethers.getContractAt('PostageStamp', currentPostage); + const redistributorRole = ethers.utils.keccak256(ethers.utils.toUtf8Bytes('REDISTRIBUTOR_ROLE')); + const tx = await stamp.grantRole(redistributorRole, currentRedis); + console.log('Changed REDISTRIBUTOR ROLE at : ', tx.hash); + + const oracleRole = ethers.utils.keccak256(ethers.utils.toUtf8Bytes('PRICE_ORACLE_ROLE')); + const tx2 = await stamp.grantRole(oracleRole, currentOracle); + console.log('Changed ORACLE ROLE at : ', tx2.hash); + + // Change roles on current oracle contract + const oracle = await ethers.getContractAt('PriceOracle', currentOracle); + const updaterRole = ethers.utils.keccak256(ethers.utils.toUtf8Bytes('PRICE_UPDATER_ROLE')); + const tx3 = await oracle.grantRole(updaterRole, currentRedis); + console.log('Changed UPDATER ROLE at : ', tx3.hash); + + // Change roles on current staking contract + const stake = await ethers.getContractAt('StakeRegistry', currentStaking); + const tx4 = await stake.grantRole(redistributorRole, currentRedis); + console.log('Changed REDISTRIBUTOR ROLE at : ', tx4.hash); +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/scripts/deploy_staking.ts b/scripts/deploy_staking.ts index a492188f..60614636 100644 --- a/scripts/deploy_staking.ts +++ b/scripts/deploy_staking.ts @@ -83,7 +83,7 @@ async function main() { let waitTime = 6; let currentRedis = ''; if (network.name == 'mainnet') { - //SwarmNetworkId, BZZ token, Multisig + // BZZ token, SwarmNetworkId, Multisig args = ['0xb1C7F17Ed88189Abf269Bf68A3B2Ed83C5276aAe', '1', '0xb1C7F17Ed88189Abf269Bf68A3B2Ed83C5276aAe']; currentRedis = ''; } else if (network.name == 'testnet') { diff --git a/scripts/deploy_stamp.ts b/scripts/deploy_stamp.ts new file mode 100644 index 00000000..754d9053 --- /dev/null +++ b/scripts/deploy_stamp.ts @@ -0,0 +1,144 @@ +import 'hardhat-deploy-ethers'; +import '@nomiclabs/hardhat-etherscan'; +import { ethers, network } from 'hardhat'; +import verify from '../utils/verify'; +import hre from 'hardhat'; +import * as fs from 'fs'; + +interface DeployedContract { + abi: Array; + bytecode: string; + address: string; + block: number; + url: string; +} + +interface DeployedData { + chainId: number; + swarmNetworkId: number; + contracts: { + bzzToken: DeployedContract; + staking: DeployedContract; + postageStamp: DeployedContract; + priceOracle: DeployedContract; + redistribution: DeployedContract; + }; +} + +interface ChainConfig { + chainId?: number; + swarmNetworkId?: number; + networkName: string; + deployedData: DeployedData; + url: string; +} + +let networkDeployedData: DeployedData; +try { + networkDeployedData = require('../' + network.name + '_deployed.json'); +} catch (e) { + networkDeployedData = { + chainId: 0, + swarmNetworkId: 0, + contracts: { + bzzToken: {} as DeployedContract, + staking: {} as DeployedContract, + postageStamp: {} as DeployedContract, + priceOracle: {} as DeployedContract, + redistribution: {} as DeployedContract, + }, + } as DeployedData; +} + +const configs: Record = { + testnet: { + chainId: network.config.chainId, + swarmNetworkId: networkDeployedData.swarmNetworkId ? networkDeployedData.swarmNetworkId : 10, + networkName: network.name, + deployedData: networkDeployedData, + url: hre.config.etherscan.customChains[1]['urls']['browserURL'].toString(), + }, + mainnet: { + chainId: network.config.chainId, + swarmNetworkId: networkDeployedData.swarmNetworkId ? networkDeployedData.swarmNetworkId : 1, + networkName: network.name, + deployedData: networkDeployedData, + url: hre.config.etherscan.customChains[2]['urls']['browserURL'].toString(), + }, +}; + +const config: ChainConfig = configs[network.name] + ? configs[network.name] + : ({ + chainId: network.config.chainId, + swarmNetworkId: networkDeployedData.swarmNetworkId ? networkDeployedData.swarmNetworkId : network.config.chainId, + networkName: network.name, + deployedData: networkDeployedData, + url: '', + } as ChainConfig); + +async function main() { + // This is deployer script for emergency deployment of only the postagestamp contract with some quick fixes + let args: string[] = []; + let waitTime = 6; + let currentRedis = ''; + let currentOracle = ''; + if (network.name == 'mainnet') { + // BZZ Token address, minimumBucketDepth, multisig + args = ['0xb1C7F17Ed88189Abf269Bf68A3B2Ed83C5276aAe', '16', '0xb1C7F17Ed88189Abf269Bf68A3B2Ed83C5276aAe']; + currentRedis = ''; + currentOracle = ''; + } else if (network.name == 'testnet') { + args = ['0x0b2bbcbe94d5d4bb782713b137c85d29aa609a13', '16', '0xb1C7F17Ed88189Abf269Bf68A3B2Ed83C5276aAe']; + currentRedis = '0x9e3BDb0c69838CC06D85409d4AD6245e54F70F1d'; + currentOracle = '0xefC5Ead3188402eCC951DB45827F6e0F99B67a25'; + } else if (network.name == 'localhost') { + args = ['0x942C6684eB9874C63d4ed26Ab0623F951D253081', '16', '0x3c8F39EE625fCF97cB6ee22bCe25BE1F1E5A5dE8']; + currentRedis = '0xDF64aed195102E644ad6A0204eD5377589b29618'; + currentOracle = '0xF52458e65b8e3B69d93DD3803d8ef934c75E0022'; + waitTime = 1; + } + + // Deploy the contract + const stampFactory = await ethers.getContractFactory('PostageStamp'); + console.log('Deploying contract...'); + const stamp = await stampFactory.deploy(...args); + await stamp.deployed(); + console.log(`Deployed contract to: ${stamp.address}`); + const deploymentReceipt = await stamp.deployTransaction.wait(waitTime); + + // Add metadata for Bee Node + const deployed = await JSON.parse(JSON.stringify(config.deployedData).toString()); + const stampABI = await require('../artifacts/src/PostageStamp.sol/PostageStamp.json'); + deployed['contracts']['postageStamp']['abi'] = stampABI.abi; + deployed['contracts']['postageStamp']['bytecode'] = stampABI.bytecode.toString(); + deployed['contracts']['postageStamp']['address'] = stamp.address; + deployed['contracts']['postageStamp']['block'] = deploymentReceipt.blockNumber; + deployed['contracts']['postageStamp']['url'] = config.url + stamp.address; + + // We need to first deploy this contract and then use this address and deploy with it redistribution + // After that we can add here redis role + + // Change roles on current staking contract + const redistributorRole = ethers.utils.keccak256(ethers.utils.toUtf8Bytes('REDISTRIBUTOR_ROLE')); + const tx2 = await stamp.grantRole(redistributorRole, currentRedis); + console.log('Changed REDISTRIBUTOR ROLE at : ', tx2.hash); + + const oracleRole = ethers.utils.keccak256(ethers.utils.toUtf8Bytes('PRICE_ORACLE_ROLE')); + const tx3 = await stamp.grantRole(oracleRole, currentOracle); + console.log('Changed ORACLE ROLE at : ', tx3.hash); + + fs.writeFileSync(config.networkName + '_deployed.json', JSON.stringify(deployed, null, '\t')); + + if ((process.env.MAINNET_ETHERSCAN_KEY || process.env.TESTNET_ETHERSCAN_KEY) && network.name != 'localhost') { + console.log('Verifying...'); + await verify(stamp.address, args); + } +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/testnet_deployed.json b/testnet_deployed.json index 93a9acbf..04c2b02b 100644 --- a/testnet_deployed.json +++ b/testnet_deployed.json @@ -1280,11 +1280,126 @@ "internalType": "uint8", "name": "_minimumBucketDepth", "type": "uint8" + }, + { + "internalType": "address", + "name": "multisig", + "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, + { + "inputs": [], + "name": "AdministratorOnly", + "type": "error" + }, + { + "inputs": [], + "name": "BatchDoesNotExist", + "type": "error" + }, + { + "inputs": [], + "name": "BatchExists", + "type": "error" + }, + { + "inputs": [], + "name": "BatchExpired", + "type": "error" + }, + { + "inputs": [], + "name": "BatchIsImmutable", + "type": "error" + }, + { + "inputs": [], + "name": "BatchTooSmall", + "type": "error" + }, + { + "inputs": [], + "name": "DepthNotIncreasing", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficienChunkCount", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientBalance", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidDepth", + "type": "error" + }, + { + "inputs": [], + "name": "NoBatchesExist", + "type": "error" + }, + { + "inputs": [], + "name": "NotBatchOwner", + "type": "error" + }, + { + "inputs": [], + "name": "OnlyPauser", + "type": "error" + }, + { + "inputs": [], + "name": "OnlyRedistributor", + "type": "error" + }, + { + "inputs": [], + "name": "PriceOracleOnly", + "type": "error" + }, + { + "inputs": [], + "name": "TotalOutpaymentDecreased", + "type": "error" + }, + { + "inputs": [], + "name": "TransferFailed", + "type": "error" + }, + { + "inputs": [], + "name": "ValueCannotBeZero", + "type": "error" + }, + { + "inputs": [], + "name": "ValueDoesNotExist", + "type": "error" + }, + { + "inputs": [], + "name": "ValueKeyPairExists", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroBalance", + "type": "error" + }, { "anonymous": false, "inputs": [ @@ -1397,6 +1512,25 @@ "name": "Paused", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalAmount", + "type": "uint256" + } + ], + "name": "PotWithdrawn", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -1550,6 +1684,120 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_batchId", + "type": "bytes32" + } + ], + "name": "batchBucketDepth", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_batchId", + "type": "bytes32" + } + ], + "name": "batchDepth", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_batchId", + "type": "bytes32" + } + ], + "name": "batchImmutableFlag", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_batchId", + "type": "bytes32" + } + ], + "name": "batchLastUpdatedBlockNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_batchId", + "type": "bytes32" + } + ], + "name": "batchNormalisedBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_batchId", + "type": "bytes32" + } + ], + "name": "batchOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -1570,6 +1818,11 @@ "name": "depth", "type": "uint8" }, + { + "internalType": "uint8", + "name": "bucketDepth", + "type": "uint8" + }, { "internalType": "bool", "name": "immutableFlag", @@ -1579,6 +1832,11 @@ "internalType": "uint256", "name": "normalisedBalance", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdatedBlockNumber", + "type": "uint256" } ], "stateMutability": "view", @@ -1686,19 +1944,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "empty", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -1817,6 +2062,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "isBatchesTreeEmpty", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "lastExpiryBalance", @@ -1835,9 +2093,9 @@ "name": "lastPrice", "outputs": [ { - "internalType": "uint256", + "internalType": "uint64", "name": "", - "type": "uint256" + "type": "uint64" } ], "stateMutability": "view", @@ -1848,9 +2106,9 @@ "name": "lastUpdatedBlock", "outputs": [ { - "internalType": "uint256", + "internalType": "uint64", "name": "", - "type": "uint256" + "type": "uint64" } ], "stateMutability": "view", @@ -1869,6 +2127,32 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "minimumInitialBalancePerChunk", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumValidityBlocks", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "pause", @@ -1957,6 +2241,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + } + ], + "name": "setMinimumValidityBlocks", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -2007,19 +2304,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "topupPot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [], "name": "totalPot", @@ -2067,10 +2351,10 @@ "type": "function" } ], - "bytecode": "0x60806040526000600a553480156200001657600080fd5b50604051620035d5380380620035d5833981016040819052620000399162000177565b6001805460ff19908116909155600580546001600160a01b0319166001600160a01b0385161790556007805490911660ff83161790556200007c600033620000b0565b620000a87f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33620000b0565b5050620001c3565b620000bc8282620000c0565b5050565b620000cc82826200014a565b620000bc576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556200010662000173565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b3390565b600080604083850312156200018a578182fd5b82516001600160a01b0381168114620001a1578283fd5b602084015190925060ff81168114620001b8578182fd5b809150509250929050565b61340280620001d36000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c80638a5e8e3211610125578063b998902f116100ad578063e63ab1e91161007c578063e63ab1e914610405578063ea612e1f1461040d578063f2a75fe414610415578063f7b188a51461041d578063f90ce5ba1461042557610211565b8063b998902f146103b4578063c81e25ab146103bc578063d547741f146103df578063d71ba7c4146103f257610211565b806399176447116100f45780639917644714610369578063a217fddf1461037c578063a6471a1d14610384578063a81064ee1461038c578063b67644b9146103a157610211565b80638a5e8e32146103335780638b82547f1461033b57806391b7f5ed1461034357806391d148541461035657610211565b806347aab79b116101a85780635239af71116101775780635239af71146102f55780635c975abb14610308578063628de87714610310578063711bfa2b146103235780638456cb591461032b57610211565b806347aab79b146102bf5780634ba2363a146102d257806351b17cd0146102da57806351cff8d9146102e257610211565b806324b570a9116101e457806324b570a91461027c5780632f2ff15d1461028457806336568abe14610297578063420fc4db146102aa57610211565b806301ffc9a714610216578063053f14da1461023f57806318c8572f14610254578063248a9ca314610269575b600080fd5b610229610224366004612a61565b61042d565b6040516102369190612b1d565b60405180910390f35b61024761045a565b6040516102369190612b28565b610267610262366004612956565b610460565b005b6102476102773660046129db565b610731565b610247610746565b6102676102923660046129f3565b6107f0565b6102676102a53660046129f3565b61082e565b6102b2610870565b6040516102369190612aa1565b6102676102cd366004612a3f565b61087f565b610247610a7e565b610247610a84565b6102676102f036600461293c565b610abe565b610267610303366004612956565b610bb1565b610229610ea0565b61026761031e3660046129db565b610ea9565b61022961102c565b610267611057565b6102476110a7565b6102476110ad565b6102676103513660046129db565b6110e9565b6102296103643660046129f3565b611187565b6102676103773660046129db565b6111b2565b61024761126e565b610247611273565b610394611297565b60405161023691906132db565b6102676103af366004612a1e565b6112a0565b610247611492565b6103cf6103ca3660046129db565b6114b6565b6040516102369493929190612af2565b6102676103ed3660046129f3565b6114f0565b6102476104003660046129db565b611518565b610247611587565b6102476115ab565b6102296115b1565b6102676115c3565b610247611611565b60006001600160e01b03198216637965db0b60e01b1480610452575061045282611617565b90505b919050565b600a5481565b610468610ea0565b1561048e5760405162461bcd60e51b815260040161048590612eb5565b60405180910390fd5b610499600033611187565b6104b55760405162461bcd60e51b8152600401610485906131ff565b6001600160a01b0386166104db5760405162461bcd60e51b815260040161048590612b31565b60ff8316158015906104f257508360ff168360ff16105b61050e5760405162461bcd60e51b815260040161048590612d29565b6000828152600260205260409020546001600160a01b0316156105435760405162461bcd60e51b815260040161048590612fe2565b6000610555600160ff87161b87613334565b6005546040516323b872dd60e01b81529192506001600160a01b0316906323b872dd9061058a90339030908690600401612ab5565b602060405180830381600087803b1580156105a457600080fd5b505af11580156105b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105dc91906129bf565b6105f85760405162461bcd60e51b8152600401610485906131d6565b600086610603610a84565b61060d91906132fc565b90508560ff166001901b6008600082825461062891906132fc565b9091555050604080516080810182526001600160a01b038a8116825260ff89811660208085019182528815158587019081526060860188815260008c815260029093529690912094518554925191516001600160a01b031990931694169390931760ff60a01b1916600160a01b93909216929092021760ff60a81b1916600160a81b911515919091021781559051600190910155806106d95760405162461bcd60e51b815260040161048590612c97565b6106e560038583611630565b837f9b088e2c89b322a3c1d81515e1c88db3d386d022926f0e2d0b9b5813b7413d5883838b8a8a8960405161071f969594939291906132a2565b60405180910390a25050505050505050565b60009081526020819052604090206001015490565b6000610753600019610ea9565b6005546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610784903090600401612aa1565b60206040518083038186803b15801561079c57600080fd5b505afa1580156107b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d49190612a89565b905080600954106107e557806107e9565b6009545b9150505b90565b6108046107fc83610731565b610364611816565b6108205760405162461bcd60e51b815260040161048590612bcc565b61082a828261181a565b5050565b610836611816565b6001600160a01b0316816001600160a01b0316146108665760405162461bcd60e51b815260040161048590613245565b61082a828261189f565b6005546001600160a01b031681565b610887610ea0565b156108a45760405162461bcd60e51b815260040161048590612eb5565b600082815260026020526040902080546001600160a01b031633146108db5760405162461bcd60e51b815260040161048590612d8e565b60075460ff80841691161080156108ff5750805460ff808416600160a01b90920416105b61091b5760405162461bcd60e51b815260040161048590613158565b8054600160a81b900460ff16156109445760405162461bcd60e51b815260040161048590612f7f565b61094c610a84565b81600101541161096e5760405162461bcd60e51b81526004016104859061308a565b805460009061098790600160a01b900460ff168461336a565b90506000600160ff83161b61099b86611518565b6109a59190613314565b90506109b2600019610ea9565b82546109d290600160ff600160a01b909204821681901b9187161b613353565b600860008282546109e391906132fc565b909155505060018301546109fb906003908790611922565b825460ff60a01b1916600160a01b60ff86160217835580610a1a610a84565b610a2491906132fc565b60018401819055610a39906003908790611630565b847faf27998ec15e9d3809edad41aec1b5551d8412e71bd07c91611a0237ead1dc8e858560010154604051610a6f9291906132e9565b60405180910390a25050505050565b60095481565b600080600b5443610a959190613353565b9050600081600a54610aa79190613334565b905080600654610ab791906132fc565b9250505090565b610ae87f3e35b14a9f4fef84b59f9bdcd3044fc28783144b7e42bfb2cd075e6a02cb082833611187565b610b045760405162461bcd60e51b815260040161048590612e64565b6005546001600160a01b031663a9059cbb82610b1e610746565b6040518363ffffffff1660e01b8152600401610b3b929190612ad9565b602060405180830381600087803b158015610b5557600080fd5b505af1158015610b69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8d91906129bf565b610ba95760405162461bcd60e51b8152600401610485906131d6565b506000600955565b610bb9610ea0565b15610bd65760405162461bcd60e51b815260040161048590612eb5565b6001600160a01b038616610bfc5760405162461bcd60e51b815260040161048590612b31565b60ff831615801590610c16575060075460ff808516911611155b8015610c2757508360ff168360ff16105b610c435760405162461bcd60e51b815260040161048590612d29565b60003383604051602001610c58929190612ad9565b60408051601f198184030181529181528151602092830120600081815260029093529120549091506001600160a01b031615610ca65760405162461bcd60e51b815260040161048590612fe2565b6000610cb8600160ff88161b88613334565b6005546040516323b872dd60e01b81529192506001600160a01b0316906323b872dd90610ced90339030908690600401612ab5565b602060405180830381600087803b158015610d0757600080fd5b505af1158015610d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3f91906129bf565b610d5b5760405162461bcd60e51b8152600401610485906131d6565b600087610d66610a84565b610d7091906132fc565b9050610d7d600019610ea9565b8660ff166001901b60086000828254610d9691906132fc565b9091555050604080516080810182526001600160a01b038b8116825260ff8a811660208085019182528915158587019081526060860188815260008b815260029093529690912094518554925191516001600160a01b031990931694169390931760ff60a01b1916600160a01b93909216929092021760ff60a81b1916600160a81b91151591909102178155905160019091015580610e475760405162461bcd60e51b815260040161048590612c97565b610e5360038483611630565b827f9b088e2c89b322a3c1d81515e1c88db3d386d022926f0e2d0b9b5813b7413d5883838c8b8b8a604051610e8d969594939291906132a2565b60405180910390a2505050505050505050565b60015460ff1690565b600c5460005b82811015610fd457610ebf6115b1565b15610ed457610ecc610a84565b600c55610fd4565b6000610ede6110ad565b90506000610eeb82611518565b1115610f0257610ef9610a84565b600c5550610fd4565b600081815260026020526040902080546008546001600160a01b90920460ff169190911b90811115610f465760405162461bcd60e51b815260040161048590612b66565b8060086000828254610f589190613353565b90915550506001820154610f6d908690613353565b610f779082613334565b60096000828254610f8891906132fc565b90915550506001820154610fa0906003908590611922565b5050600090815260026020526040812080546001600160b01b03191681556001015580610fcc8161338d565b915050610eaf565b81600c541015610ff65760405162461bcd60e51b815260040161048590612c49565b81600c546110049190613353565b6008546110119190613334565b6009600082825461102291906132fc565b9091555050505050565b60006110366115b1565b15611043575060006107ed565b60006110506104006110ad565b1115905090565b6110817f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33611187565b61109d5760405162461bcd60e51b815260040161048590612b9d565b6110a5611c9e565b565b60085481565b6000806110ba6003611d0f565b9050600081116110dc5760405162461bcd60e51b81526004016104859061312e565b6107e96003826000611d51565b6111137fdd24a0f121e5ab7c3e97c63eaaf859e0b46792c3e0edfd86e2b3ad50f63011d833611187565b61112f5760405162461bcd60e51b815260040161048590613047565b600a54156111435761113f610a84565b6006555b600a81905543600b556040517fae46785019700e30375a5d7b4f91e32f8060ef085111f896ebf889450aa2ab5a9061117c908390612b28565b60405180910390a150565b6000828152602081815260408083206001600160a01b038516845290915290205460ff165b92915050565b6005546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906111e690339030908690600401612ab5565b602060405180830381600087803b15801561120057600080fd5b505af1158015611214573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123891906129bf565b6112545760405162461bcd60e51b8152600401610485906131d6565b806009600082825461126691906132fc565b909155505050565b600081565b7f3e35b14a9f4fef84b59f9bdcd3044fc28783144b7e42bfb2cd075e6a02cb082881565b60075460ff1681565b6112a8610ea0565b156112c55760405162461bcd60e51b815260040161048590612eb5565b600082815260026020526040902080546001600160a01b03166112fa5760405162461bcd60e51b815260040161048590612f3c565b611302610a84565b8160010154116113245760405162461bcd60e51b81526004016104859061308a565b600754815460ff918216600160a01b909104909116116113565760405162461bcd60e51b815260040161048590613010565b8054600090611373906001600160a01b90910460ff161b84613334565b6005546040516323b872dd60e01b81529192506001600160a01b0316906323b872dd906113a890339030908690600401612ab5565b602060405180830381600087803b1580156113c257600080fd5b505af11580156113d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fa91906129bf565b6114165760405162461bcd60e51b8152600401610485906131d6565b6001820154611429906003908690611922565b82826001015461143991906132fc565b6001830181905561144e906003908690611630565b837faf5756c62d6c0722ef9be1f82bef97ab06ea5aea7f3eb8ad348422079f01d88d828460010154604051611484929190613294565b60405180910390a250505050565b7fdd24a0f121e5ab7c3e97c63eaaf859e0b46792c3e0edfd86e2b3ad50f63011d881565b600260205260009081526040902080546001909101546001600160a01b0382169160ff600160a01b8204811692600160a81b909204169084565b6114fc6107fc83610731565b6108665760405162461bcd60e51b815260040161048590612e14565b600081815260026020526040812080546001600160a01b031661154d5760405162461bcd60e51b815260040161048590612fab565b611555610a84565b816001015411611569576000915050610455565b611571610a84565b81600101546115809190613353565b9392505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b600c5481565b60006115bd6003611dc0565b15905090565b6115ed7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33611187565b6116095760405162461bcd60e51b815260040161048590612d57565b6110a5611dd0565b600b5481565b6001600160e01b031981166301ffc9a760e01b14919050565b8061164d5760405162461bcd60e51b815260040161048590612ccc565b611658838383611e27565b156116755760405162461bcd60e51b8152600401610485906130b9565b82546000905b801561175657809150808310156116a557600090815260018086016020526040909120015461172d565b808311156116c657600090815260018501602052604090206002015461172d565b8083141561172d5760008181526001808701602090815260408320600401805480840182558185529184209091018790559183905290546117079190613353565b600091825260018601602090815260408084208785526005019091529091205550611811565b6000828152600186016020526040812060060180549161174c8361338d565b919050555061167b565b600083815260018087016020908152604083208581558083018490556002810184905560038101805460ff19168417905560048101805480850182558186529290942090910187905591546117ab9190613353565b6000868152600583016020526040902055826117c957838655611803565b828410156117ec5760008381526001808801602052604090912001849055611803565b600083815260018701602052604090206002018490555b61180d8685611e9b565b5050505b505050565b3390565b6118248282611187565b61082a576000828152602081815260408083206001600160a01b03851684529091529020805460ff1916600117905561185b611816565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6118a98282611187565b1561082a576000828152602081815260408083206001600160a01b03851684529091529020805460ff191690556118de611816565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b8061193f5760405162461bcd60e51b815260040161048590612db7565b61194a838383611e27565b6119665760405162461bcd60e51b815260040161048590612edf565b600081815260018085016020908152604080842086855260058101909252832054600482018054929491939192909161199e91613353565b815481106119bc57634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050808360040183815481106119ed57634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255828152600585019091526040902082905560048301805480611a3057634e487b7160e01b600052603160045260246000fd5b60019003818190600052602060002001600090559055600080846004018054905060001415611c945760008681526001808a01602052604090912001541580611a8a57506000868152600189016020526040902060020154155b15611a96575084611ade565b5060008581526001880160205260409020600201545b60008181526001808a016020526040909120015415611ade576000908152600180890160205260409091200154611aac565b60008181526001808a016020526040909120015415611b125760008181526001808a01602052604090912001549150611b29565b600081815260018901602052604090206002015491505b60008181526001890160205260408082205484835291208190558015611b9b5760008181526001808b0160205260409091200154821415611b7f5760008181526001808b01602052604090912001839055611b96565b600081815260018a01602052604090206002018390555b611b9f565b8289555b600082815260018a01602052604090206003015460ff1615878314611c3257611bc98a848a612106565b600088815260018b8101602052604080832080830154878552828520938401819055845281842087905560028082015490840181905584529083208690556003908101549286905201805460ff191660ff9092161515919091179055919691611c328a89612180565b8015611c4257611c428a856121ed565b611c4c8a83612180565b60008381526001808c01602052604082208281559081018290556002810182905560038101805460ff1916905590611c8760048301826128da565b6006820160009055505050505b5050505050505050565b611ca6610ea0565b15611cc35760405162461bcd60e51b815260040161048590612eb5565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611cf8611816565b604051611d059190612aa1565b60405180910390a1565b805480611d1e57506000610455565b5b600081815260018084016020526040909120015415610455576000908152600180830160205260409091200154611d1f565b6000611d5d8484612608565b611d795760405162461bcd60e51b815260040161048590613186565b60008381526001850160205260409020600401805483908110611dac57634e487b7160e01b600052603260045260246000fd5b906000526020600020015490509392505050565b600061045282836000015461264f565b611dd8610ea0565b611df45760405162461bcd60e51b815260040161048590612c1b565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611cf8611816565b6000611e338483612608565b611e3f57506000611580565b600082815260018501602090815260408083208684526005810190925290912054600490910180548592908110611e8657634e487b7160e01b600052603260045260246000fd5b90600052602060002001541490509392505050565b60005b82548214801590611ec85750600082815260018401602052604080822054825290206003015460ff165b156120e4576000828152600180850160205260408083205480845281842054845292200154811415611feb5760008181526001850160205260408082205482528082206002015480835291206003015490925060ff1615611f71576000818152600180860160205260408083206003808201805460ff19908116909155878652838620820180548216905582548652928520018054909216909217905590829052549250611fe6565b6000818152600185016020526040902060020154831415611f9957809250611f99848461267b565b50600082815260018085016020526040808320548084528184206003808201805460ff19908116909155825487529386200180549093169093179091559182905254611fe69085906127f9565b6120de565b6000818152600180860160205260408083205483528083209091015480835291206003015490925060ff1615612069576000818152600180860160205260408083206003808201805460ff199081169091558786528386208201805482169055825486529285200180549092169092179055908290525492506120de565b60008181526001808601602052604090912001548314156120915780925061209184846127f9565b50600082815260018085016020526040808320548084528184206003808201805460ff199081169091558254875293862001805490931690931790915591829052546120de90859061267b565b50611e9e565b505080546000908152600190910160205260409020600301805460ff19169055565b60008181526001840160205260408082205484835291208190558061212d5782845561217a565b6000818152600180860160205260409091200154821415612163576000818152600180860160205260409091200183905561217a565b600081815260018501602052604090206002018390555b50505050565b801561082a5760008181526001830160205260409020600201546121a590839061264f565b60008281526001808501602052604090912001546121c490849061264f565b6121ce91906132fc565b6000918252600183016020526040909120600681019190915554612180565b60005b825482148015906122155750600082815260018401602052604090206003015460ff16155b156125e95760008281526001808501602052604080832054808452922001548314156124125760008181526001850160205260408082206002015480835291206003015490925060ff16156122b9576000828152600180860160205260408083206003908101805460ff199081169091558585529190932090920180549092161790556122a2848261267b565b600081815260018501602052604090206002015491505b60008281526001808601602052604080832090910154825290206003015460ff161580156123045750600082815260018501602052604080822060020154825290206003015460ff16155b1561233157600082815260018581016020526040909120600301805460ff1916909117905591508161240d565b600082815260018501602052604080822060020154825290206003015460ff166123ae576000828152600180860160205260408083208083015484529083206003908101805460ff199081169091559386905201805490921617905561239784836127f9565b600081815260018501602052604090206002015491505b600081815260018501602052604080822060039081018054868552838520808401805460ff909316151560ff199384161790558254821690925560029091015484529190922090910180549091169055612408848261267b565b835492505b6125e3565b6000818152600180860160205260408083209091015480835291206003015490925060ff1615612491576000828152600180860160205260408083206003908101805460ff1990811690915585855291909320909201805490921617905561247a84826127f9565b600081815260018086016020526040909120015491505b600082815260018501602052604080822060020154825290206003015460ff161580156124dc575060008281526001808601602052604080832090910154825290206003015460ff16155b1561250957600082815260018581016020526040909120600301805460ff191690911790559150816125e3565b60008281526001808601602052604080832090910154825290206003015460ff1661258857600082815260018086016020526040808320600281015484529083206003908101805460ff1990811690915593869052018054909216179055612571848361267b565b600081815260018086016020526040909120015491505b60008181526001808601602052604080832060039081018054878652838620808401805460ff909316151560ff199384161790558254821690925593015484529220909101805490911690556125de84826127f9565b835492505b506121f0565b506000908152600190910160205260409020600301805460ff19169055565b600081612617575060006111ac565b8254821415612628575060016111ac565b600082815260018401602052604090205415612646575060016111ac565b50600092915050565b600081815260018301602052604081206006810154600482015461267391906132fc565b949350505050565b6000818152600180840160205260408083206002810180549154828652928520909301549385905291839055909180156126c357600081815260018601602052604090208490555b60008381526001860160205260409020829055816126e357828555612730565b60008281526001808701602052604090912001548414156127195760008281526001808701602052604090912001839055612730565b600082815260018601602052604090206002018390555b60008381526001808701602052604080832090910186905585825290208381556002015461275f90869061264f565b600085815260018088016020526040909120015461277e90879061264f565b61278891906132fc565b60008581526001870160205260408082206006019290925584815220600201546127b390869061264f565b60008481526001808801602052604090912001546127d290879061264f565b6127dc91906132fc565b600093845260019095016020525050604090206006019190915550565b6000818152600180840160205260408083209182018054925483855291842060020154938590528390559091801561283f57600081815260018601602052604090208490555b600083815260018601602052604090208290558161285f578285556128ac565b600082815260018601602052604090206002015484141561289557600082815260018601602052604090206002018390556128ac565b600082815260018087016020526040909120018390555b600083815260018601602052604080822060029081018790558683529120848155015461275f90869061264f565b50805460008255906000526020600020908101906128f891906128fb565b50565b5b8082111561291057600081556001016128fc565b5090565b80356001600160a01b038116811461045557600080fd5b803560ff8116811461045557600080fd5b60006020828403121561294d578081fd5b61158082612914565b60008060008060008060c0878903121561296e578182fd5b61297787612914565b95506020870135945061298c6040880161292b565b935061299a6060880161292b565b92506080870135915060a08701356129b1816133be565b809150509295509295509295565b6000602082840312156129d0578081fd5b8151611580816133be565b6000602082840312156129ec578081fd5b5035919050565b60008060408385031215612a05578182fd5b82359150612a1560208401612914565b90509250929050565b60008060408385031215612a30578182fd5b50508035926020909101359150565b60008060408385031215612a51578182fd5b82359150612a156020840161292b565b600060208284031215612a72578081fd5b81356001600160e01b031981168114611580578182fd5b600060208284031215612a9a578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0394909416845260ff92909216602084015215156040830152606082015260800190565b901515815260200190565b90815260200190565b6020808252818101527f6f776e65722063616e6e6f7420626520746865207a65726f2061646472657373604082015260600190565b6020808252601e908201527f696e73756666696369656e742076616c6964206368756e6b20636f756e740000604082015260600190565b6020808252601590820152746f6e6c79207061757365722063616e20706175736560581b604082015260600190565b6020808252602f908201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60408201526e0818591b5a5b881d1bc819dc985b9d608a1b606082015260800190565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b6020808252602e908201527f63757272656e7420746f74616c206f75747061796d656e742073686f756c642060408201526d6e6576657220646563726561736560901b606082015260800190565b6020808252818101527f6e6f726d616c6973656442616c616e63652063616e6e6f74206265207a65726f604082015260600190565b60208082526039908201527f4f7264657253746174697374696373547265652834303529202d2056616c756560408201527f20746f20696e736572742063616e6e6f74206265207a65726f00000000000000606082015260800190565b6020808252601490820152730d2dcecc2d8d2c840c4eac6d6cae840c8cae0e8d60631b604082015260600190565b60208082526017908201527f6f6e6c79207061757365722063616e20756e7061757365000000000000000000604082015260600190565b6020808252600f908201526e3737ba103130ba31b41037bbb732b960891b604082015260600190565b60208082526039908201527f4f7264657253746174697374696373547265652834303729202d2056616c756560408201527f20746f2064656c6574652063616e6e6f74206265207a65726f00000000000000606082015260800190565b60208082526030908201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60408201526f2061646d696e20746f207265766f6b6560801b606082015260800190565b60208082526031908201527f6f6e6c792072656469737472696275746f722063616e20776974686472617720604082015270199c9bdb481d1a194818dbdb9d1c9858dd607a1b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252603a908201527f4f7264657253746174697374696373547265652834303829202d2056616c756560408201527f20746f2064656c65746520646f6573206e6f742065786973742e000000000000606082015260800190565b60208082526023908201527f626174636820646f6573206e6f74206578697374206f722068617320657870696040820152621c995960ea1b606082015260800190565b602080825260129082015271626174636820697320696d6d757461626c6560701b604082015260600190565b6020808252601f908201527f626174636820646f6573206e6f74206578697374206f72206578706972656400604082015260600190565b602080825260149082015273626174636820616c72656164792065786973747360601b604082015260600190565b60208082526018908201527f626174636820746f6f20736d616c6c20746f2072656e65770000000000000000604082015260600190565b60208082526023908201527f6f6e6c79207072696365206f7261636c652063616e207365742074686520707260408201526269636560e81b606082015260800190565b60208082526015908201527418985d18da08185b1c9958591e48195e1c1a5c9959605a1b604082015260600190565b6020808252604f908201527f4f7264657253746174697374696373547265652834303629202d2056616c756560408201527f20616e64204b65792070616972206578697374732e2043616e6e6f742062652060608201526e34b739b2b93a32b21030b3b0b4b71760891b608082015260a00190565b60208082526010908201526f1b9bc818985d18da195cc8195e1a5cdd60821b604082015260600190565b6020808252601490820152736465707468206e6f7420696e6372656173696e6760601b604082015260600190565b60208082526030908201527f4f7264657253746174697374696373547265652834303429202d2056616c756560408201526f103237b2b9903737ba1032bc34b9ba1760811b606082015260800190565b6020808252600f908201526e3330b4b632b2103a3930b739b332b960891b604082015260600190565b60208082526026908201527f6f6e6c792061646d696e6973747261746f722063616e2075736520636f7079206040820152651b595d1a1bd960d21b606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560408201526e103937b632b9903337b91039b2b63360891b606082015260800190565b918252602082015260400190565b95865260208601949094526001600160a01b0392909216604085015260ff9081166060850152166080830152151560a082015260c00190565b60ff91909116815260200190565b60ff929092168252602082015260400190565b6000821982111561330f5761330f6133a8565b500190565b60008261332f57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561334e5761334e6133a8565b500290565b600082821015613365576133656133a8565b500390565b600060ff821660ff841680821015613384576133846133a8565b90039392505050565b60006000198214156133a1576133a16133a8565b5060010190565b634e487b7160e01b600052601160045260246000fd5b80151581146128f857600080fdfea2646970667358221220c3853e34656c7d67ac3729c622f05824b6dfe2c1231b00036f10f7ee1ba11ab564736f6c63430008010033", - "address": "0x1f87FEDa43e6ABFe1058E96A07d0ea182e7dc9BD", - "block": 8139932, - "url": "https://goerli.etherscan.io/address/0x1f87FEDa43e6ABFe1058E96A07d0ea182e7dc9BD" + "bytecode": "0x60e060405260098054600160401b600160801b03191669438000000000000000001790553480156200003057600080fd5b50604051620039c9380380620039c98339810160408190526200005391620001e2565b600180546001600160b01b0319166101006001600160a01b0386160260ff60a81b191617600160a81b60ff8516021790557fdd24a0f121e5ab7c3e97c63eaaf859e0b46792c3e0edfd86e2b3ad50f63011d86080527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60a0527f3e35b14a9f4fef84b59f9bdcd3044fc28783144b7e42bfb2cd075e6a02cb082860c052620000fd60008262000115565b60a0516200010c903362000115565b50505062000233565b62000121828262000125565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000121576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620001813390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b80516001600160a01b0381168114620001dd57600080fd5b919050565b600080600060608486031215620001f857600080fd5b6200020384620001c5565b9250602084015160ff811681146200021a57600080fd5b91506200022a60408501620001c5565b90509250925092565b60805160a05160c05161374a6200027f6000396000818161059d01526110bc015260008181610740015281816117d90152611d570152600081816105eb01526118ca015261374a6000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c806381e508b911610191578063b998902f116100e3578063dd483cfb11610097578063ea612e1f11610071578063ea612e1f14610762578063f7b188a51461076b578063f90ce5ba1461077357600080fd5b8063dd483cfb146106f8578063df67438514610718578063e63ab1e91461073b57600080fd5b8063d547741f116100c8578063d547741f146106a8578063d71ba7c4146106bb578063d968f44b146106ce57600080fd5b8063b998902f146105e6578063c81e25ab1461060d57600080fd5b806391b7f5ed11610145578063a6471a1d1161011f578063a6471a1d14610598578063a81064ee146105bf578063b67644b9146105d357600080fd5b806391b7f5ed1461054657806391d1485414610559578063a217fddf1461059057600080fd5b80638a5e8e32116101765780638a5e8e321461052d5780638b82547f14610536578063906978421461053e57600080fd5b806381e508b9146105015780638456cb591461052557600080fd5b8063420fc4db1161024a57806351b17cd0116101fe5780635c975abb116101d85780635c975abb146104db578063628de877146104e6578063711bfa2b146104f957600080fd5b806351b17cd0146104ad57806351cff8d9146104b55780635239af71146104c857600080fd5b806347aab79b1161022f57806347aab79b1461047e57806348652ce7146104915780634ba2363a146104a457600080fd5b8063420fc4db1461043c57806344beae8e1461045457600080fd5b8063248a9ca3116102a15780632f2ff15d116102865780632f2ff15d146103da57806332ac57dd146103ed57806336568abe1461042957600080fd5b8063248a9ca3146103a157806324b570a9146103d257600080fd5b80631889b99b116102d25780631889b99b1461034357806318c8572f1461034b5780632182ddb11461036057600080fd5b806301ffc9a7146102ee578063053f14da14610316575b600080fd5b6103016102fc366004613353565b61078e565b60405190151581526020015b60405180910390f35b60095461032a9067ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161030d565b610301610827565b61035e6103593660046133cb565b610839565b005b61038961036e366004613435565b6000908152600260205260409020546001600160a01b031690565b6040516001600160a01b03909116815260200161030d565b6103c46103af366004613435565b60009081526020819052604090206001015490565b60405190815260200161030d565b6103c4610b6f565b61035e6103e836600461344e565b610c22565b6104176103fb366004613435565b600090815260026020526040902054600160a81b900460ff1690565b60405160ff909116815260200161030d565b61035e61043736600461344e565b610c4c565b6001546103899061010090046001600160a01b031681565b610417610462366004613435565b600090815260026020526040902054600160a01b900460ff1690565b61035e61048c36600461347a565b610cdd565b61035e61049f366004613435565b610fcc565b6103c460075481565b6103c4611062565b61035e6104c336600461349d565b6110ba565b61035e6104d63660046133cb565b611237565b60015460ff16610301565b61035e6104f4366004613435565b611590565b6103016117ae565b6103c461050f366004613435565b6000908152600260208190526040909120015490565b61035e6117d7565b6103c460065481565b6103c461183a565b6103c4611890565b61035e610554366004613435565b6118c8565b61030161056736600461344e565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6103c4600081565b6103c47f000000000000000000000000000000000000000000000000000000000000000081565b60015461041790600160a81b900460ff1681565b61035e6105e13660046134b8565b6119d7565b6103c47f000000000000000000000000000000000000000000000000000000000000000081565b61066861061b366004613435565b60026020819052600091825260409091208054600182015491909201546001600160a01b0383169260ff600160a01b8204811693600160a81b8304821693600160b01b9093049091169186565b604080516001600160a01b0397909716875260ff9586166020880152939094169285019290925215156060840152608083015260a082015260c00161030d565b61035e6106b636600461344e565b611c6b565b6103c46106c9366004613435565b611c90565b6103016106dc366004613435565b600090815260026020526040902054600160b01b900460ff1690565b60095461032a9068010000000000000000900467ffffffffffffffff1681565b6103c4610726366004613435565b60009081526002602052604090206001015490565b6103c47f000000000000000000000000000000000000000000000000000000000000000081565b6103c460085481565b61035e611d55565b60095461032a90600160801b900467ffffffffffffffff1681565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061082157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60006108336003611db6565b15919050565b610841611dc6565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff1661089057604051635844c9e760e11b815260040160405180910390fd5b6001600160a01b0386166108b75760405163d92e233d60e01b815260040160405180910390fd5b60ff831615806108cd57508360ff168360ff1610155b156108eb57604051630a0b2c3560e41b815260040160405180910390fd5b6000828152600260205260409020546001600160a01b031615610921576040516311ab459f60e21b815260040160405180910390fd5b6000610933600160ff87161b876134f0565b6001546040516323b872dd60e01b81523360048201523060248201526044810183905291925061010090046001600160a01b0316906323b872dd906064016020604051808303816000875af1158015610990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b49190613507565b6109d1576040516312171d8360e31b815260040160405180910390fd5b6000866109dc611062565b6109e69190613524565b905080600003610a095760405163334ab3f560e11b815260040160405180910390fd5b610a14600019611590565b8560ff166001901b60066000828254610a2d9190613524565b90915550506040805160c0810182526001600160a01b03808b16825260ff808a1660208085019182528a831685870190815289151560608701908152608087018981524360a0890190815260008e815260029586905299909920975188549551935192511515600160b01b0260ff60b01b19938816600160a81b029390931661ffff60a81b1994909716600160a01b0274ffffffffffffffffffffffffffffffffffffffffff19909616971696909617939093171692909217178355905160018301559151910155610b0160038583611e19565b60408051838152602081018390526001600160a01b038a168183015260ff88811660608301528716608082015284151560a0820152905185917f9b088e2c89b322a3c1d81515e1c88db3d386d022926f0e2d0b9b5813b7413d58919081900360c00190a25050505050505050565b6000610b7c600019611590565b6001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009161010090046001600160a01b0316906370a0823190602401602060405180830381865afa158015610be3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c079190613537565b90508060075410610c185780610c1c565b6007545b91505090565b600082815260208190526040902060010154610c3d8161201c565b610c478383612029565b505050565b6001600160a01b0381163314610ccf5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b610cd982826120c7565b5050565b610ce5611dc6565b600082815260026020818152604092839020835160c08101855281546001600160a01b03811680835260ff600160a01b8304811695840195909552600160a81b8204851696830196909652600160b01b900490921615156060830152600181015460808301529091015460a0820152903314610d8d576040517fb72bcb2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015460ff808416600160a81b90920416108015610db457508160ff16816020015160ff16105b610dea576040517fd5fd03fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806060015115610e26576040517f42b69b8e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e2e611062565b816080015111610e51576040516368aebbc560e01b815260040160405180910390fd5b6000816020015183610e639190613550565b90506000600160ff83161b610e7786611c90565b610e819190613569565b9050610e8b611890565b811015610eab57604051631e9acf1760e31b815260040160405180910390fd5b610eb6600019611590565b826020015160ff166001901b8460ff166001901b610ed4919061358b565b60066000828254610ee59190613524565b90915550506080830151610efd906003908790612146565b600085815260026020819052604090912080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b60ff8816021781554391015580610f4c611062565b610f569190613524565b6080840181815260008781526002602052604090206001019190915551610f81906003908790611e19565b60808301516040805160ff87168152602081019290925286917faf27998ec15e9d3809edad41aec1b5551d8412e71bd07c91611a0237ead1dc8e910160405180910390a25050505050565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff1661101b57604051635844c9e760e11b815260040160405180910390fd5b6009805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b600954600090819061108590600160801b900467ffffffffffffffff164361358b565b6009549091506000906110a390839067ffffffffffffffff166134f0565b9050806005546110b39190613524565b9250505090565b7f000000000000000000000000000000000000000000000000000000000000000060009081526020818152604080832033845290915290205460ff1661112c576040517f24876df800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611136610b6f565b6001546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152602482018490529293506101009091049091169063a9059cbb906044016020604051808303816000875af11580156111ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cf9190613507565b6111ec576040516312171d8360e31b815260040160405180910390fd5b604080516001600160a01b0384168152602081018390527ff5d8f9b1e7af440e1e7915f4693ccc004d1461a7dafd17ea7347d03decf298e1910160405180910390a150506000600755565b61123f611dc6565b6001600160a01b0386166112665760405163d92e233d60e01b815260040160405180910390fd5b60ff83161580611285575060015460ff600160a81b9091048116908416105b8061129657508360ff168360ff1610155b156112b457604051630a0b2c3560e41b815260040160405180910390fd5b6040805133602082015290810183905260009060600160408051601f198184030181529181528151602092830120600081815260029093529120549091506001600160a01b031615611319576040516311ab459f60e21b815260040160405180910390fd5b611321611890565b86101561134157604051631e9acf1760e31b815260040160405180910390fd5b6000611353600160ff88161b886134f0565b6001546040516323b872dd60e01b81523360048201523060248201526044810183905291925061010090046001600160a01b0316906323b872dd906064016020604051808303816000875af11580156113b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d49190613507565b6113f1576040516312171d8360e31b815260040160405180910390fd5b6000876113fc611062565b6114069190613524565b9050806000036114295760405163334ab3f560e11b815260040160405180910390fd5b611434600019611590565b8660ff166001901b6006600082825461144d9190613524565b90915550506040805160c0810182526001600160a01b03808c16825260ff808b1660208085019182528b83168587019081528a151560608701908152608087018981524360a0890190815260008d815260029586905299909920975188549551935192511515600160b01b0260ff60b01b19938816600160a81b029390931661ffff60a81b1994909716600160a01b0274ffffffffffffffffffffffffffffffffffffffffff1990961697169690961793909317169290921717835590516001830155915191015561152160038483611e19565b60408051838152602081018390526001600160a01b038b168183015260ff89811660608301528816608082015285151560a0820152905184917f9b088e2c89b322a3c1d81515e1c88db3d386d022926f0e2d0b9b5813b7413d58919081900360c00190a2505050505050505050565b60085460005b8281101561173c576115a6610827565b156115bb576115b3611062565b60085561173c565b60006115c561183a565b905060006115d282611c90565b11156115e9576115e0611062565b6008555061173c565b600081815260026020818152604092839020835160c08101855281546001600160a01b038116825260ff600160a01b82048116948301859052600160a81b8204811696830196909652600160b01b900490941615156060850152600180820154608086015292015460a084015260065491901b90811115611696576040517f9b02220b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600660008282546116a8919061358b565b909155505060808201516116bd90869061358b565b6116c790826134f0565b600760008282546116d89190613524565b909155505060808201516116f0906003908590612146565b50506000908152600260208190526040822080547fffffffffffffffffff0000000000000000000000000000000000000000000000168155600180820184905591019190915501611596565b816008541015611778576040517f530da97a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600854611786919061358b565b60065461179391906134f0565b600760008282546117a49190613524565b9091555050505050565b60006117b8610827565b156117c35750600090565b60006117d06106c961183a565b1115905090565b7f000000000000000000000000000000000000000000000000000000000000000060009081526020818152604080832033845290915290205460ff1661183057604051631d77d47760e21b815260040160405180910390fd5b611838612497565b565b60008061184760036124eb565b905080600003611883576040517f46c83ec800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c1c6003826000612532565b6009546000906118b99067ffffffffffffffff808216916801000000000000000090041661359e565b67ffffffffffffffff16905090565b7f000000000000000000000000000000000000000000000000000000000000000060009081526020818152604080832033845290915290205460ff1661193a576040517fea0f601b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60095467ffffffffffffffff161561195857611954611062565b6005555b600980544367ffffffffffffffff908116600160801b027fffffffffffffffff0000000000000000ffffffffffffffff0000000000000000909216908416171790556040517fae46785019700e30375a5d7b4f91e32f8060ef085111f896ebf889450aa2ab5a906119cc9083815260200190565b60405180910390a150565b6119df611dc6565b600082815260026020818152604092839020835160c08101855281546001600160a01b03811680835260ff600160a01b8304811695840195909552600160a81b8204851696830196909652600160b01b900490921615156060830152600181015460808301529091015460a082015290611a6c57604051634ee9bc0f60e01b815260040160405180910390fd5b611a74611062565b816080015111611a97576040516368aebbc560e01b815260040160405180910390fd5b600154602082015160ff600160a81b9092048216911611611ae4576040517f7103b80500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611aec611890565b82611af685611c90565b611b009190613524565b1015611b1f57604051631e9acf1760e31b815260040160405180910390fd5b6000816020015160ff166001901b83611b3891906134f0565b6001546040516323b872dd60e01b81523360048201523060248201526044810183905291925061010090046001600160a01b0316906323b872dd906064016020604051808303816000875af1158015611b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb99190613507565b611bd6576040516312171d8360e31b815260040160405180910390fd5b6080820151611be9906003908690612146565b828260800151611bf99190613524565b60808301819052611c0e906003908690611e19565b60808201805160008681526002602090815260409182902060010192909255915182518481529182015285917faf5756c62d6c0722ef9be1f82bef97ab06ea5aea7f3eb8ad348422079f01d88d910160405180910390a250505050565b600082815260208190526040902060010154611c868161201c565b610c4783836120c7565b6000818152600260208181526040808420815160c08101835281546001600160a01b03811680835260ff600160a01b8304811696840196909652600160a81b8204861694830194909452600160b01b900490931615156060840152600181015460808401529092015460a082015290611d1c57604051634ee9bc0f60e01b815260040160405180910390fd5b611d24611062565b816080015111611d375750600092915050565b611d3f611062565b8160800151611d4e919061358b565b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000060009081526020818152604080832033845290915290205460ff16611dae57604051631d77d47760e21b815260040160405180910390fd5b611838612594565b60006108218283600001546125cd565b60015460ff16156118385760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610cc6565b80611e37576040516363868c5560e11b815260040160405180910390fd5b611e428383836125f9565b15611e79576040517f6082d5c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82546000905b8015611f5d5780915080831015611ea9576000908152600180860160205260409091200154611f34565b80831115611eca576000908152600185016020526040902060020154611f34565b808303611f34576000818152600180870160209081526040832060040180548084018255818552918420909101879055918390529054611f0a919061358b565b60009182526001909501602090815260408083209583526005909501905292909220929092555050565b60008281526001860160205260408120600601805491611f53836135ca565b9190505550611e7f565b600083815260018087016020908152604083208581558083018490556002810184905560038101805460ff1916841790556004810180548085018255818652929094209091018790559154611fb2919061358b565b600086815260058301602052604090205582611fd05783865561200a565b82841015611ff3576000838152600180880160205260409091200184905561200a565b600083815260018701602052604090206002018490555b612014868561265f565b505050505050565b61202681336128c7565b50565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16610cd9576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556120833390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1615610cd9576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b80612164576040516363868c5560e11b815260040160405180910390fd5b61216f8383836125f9565b61218c57604051635889b1c560e11b815260040160405180910390fd5b60008181526001808501602090815260408084208685526005810190925283205460048201805492949193919290916121c49161358b565b815481106121d4576121d46135e3565b90600052602060002001549050808360040183815481106121f7576121f76135e3565b600091825260208083209091019290925582815260058501909152604090208290556004830180548061222c5761222c6135f9565b60019003818190600052602060002001600090559055600080846004018054905060000361248d5760008681526001808a0160205260409091200154158061228557506000868152600189016020526040902060020154155b156122915750846122d9565b5060008581526001880160205260409020600201545b60008181526001808a0160205260409091200154156122d95760009081526001808901602052604090912001546122a7565b60008181526001808a01602052604090912001541561230d5760008181526001808a01602052604090912001549150612324565b600081815260018901602052604090206002015491505b600081815260018901602052604080822054848352912081905580156123945760008181526001808b016020526040909120015482036123795760008181526001808b01602052604090912001839055612398565b600081815260018a0160205260409020600201839055612398565b8289555b600082815260018a01602052604090206003015460ff161587831461242b576123c28a848a61293a565b600088815260018b8101602052604080832080830154878552828520938401819055845281842087905560028082015490840181905584529083208690556003908101549286905201805460ff191660ff909216151591909117905591969161242b8a896129b3565b801561243b5761243b8a85612a20565b6124458a836129b3565b60008381526001808c01602052604082208281559081018290556002810182905560038101805460ff19169055906124806004830182613321565b6006820160009055505050505b5050505050505050565b61249f611dc6565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a1565b8054806124fa57506000919050565b5b60008181526001808401602052604090912001541561252d5760009081526001808301602052604090912001546124fb565b919050565b600061253e8484612e39565b61255b57604051635889b1c560e11b815260040160405180910390fd5b60008381526001850160205260409020600401805483908110612580576125806135e3565b906000526020600020015490509392505050565b61259c612e7f565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336124ce565b60008181526001830160205260408120600681015460048201546125f19190613524565b949350505050565b60006126058483612e39565b61261157506000611d4e565b60008281526001850160209081526040808320868452600581019092529091205460049091018054859290811061264a5761264a6135e3565b90600052602060002001541490509392505050565b60005b8254821480159061268c5750600082815260018401602052604080822054825290206003015460ff165b156128a557600082815260018085016020526040808320548084528184205484529220015481036127ad5760008181526001850160205260408082205482528082206002015480835291206003015490925060ff1615612734576000818152600180860160205260408083206003808201805460ff1990811690915587865283862082018054821690558254865292852001805490921690921790559082905254925061289f565b6000818152600185016020526040902060020154830361275b5780925061275b8484612ed1565b50600082815260018085016020526040808320548084528184206003808201805460ff199081169091558254875293862001805490931690931790915591829052546127a890859061304e565b61289f565b6000818152600180860160205260408083205483528083209091015480835291206003015490925060ff161561282b576000818152600180860160205260408083206003808201805460ff1990811690915587865283862082018054821690558254865292852001805490921690921790559082905254925061289f565b6000818152600180860160205260409091200154830361285257809250612852848461304e565b50600082815260018085016020526040808320548084528184206003808201805460ff1990811690915582548752938620018054909316909317909155918290525461289f908590612ed1565b50612662565b505080546000908152600190910160205260409020600301805460ff19169055565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16610cd9576128f88161312e565b612903836020613140565b604051602001612914929190613633565b60408051601f198184030181529082905262461bcd60e51b8252610cc6916004016136b4565b600081815260018401602052604080822054848352912081905580612961578284556129ad565b6000818152600180860160205260409091200154820361299657600081815260018086016020526040909120018390556129ad565b600081815260018501602052604090206002018390555b50505050565b8015610cd95760008181526001830160205260409020600201546129d89083906125cd565b60008281526001808501602052604090912001546129f79084906125cd565b612a019190613524565b60009182526001830160205260409091206006810191909155546129b3565b60005b82548214801590612a485750600082815260018401602052604090206003015460ff16155b15612e1a5760008281526001808501602052604080832054808452922001548303612c435760008181526001850160205260408082206002015480835291206003015490925060ff1615612aeb576000828152600180860160205260408083206003908101805460ff19908116909155858552919093209092018054909216179055612ad48482612ed1565b600081815260018501602052604090206002015491505b60008281526001808601602052604080832090910154825290206003015460ff16158015612b365750600082815260018501602052604080822060020154825290206003015460ff16155b15612b6357600082815260018581016020526040909120600301805460ff19169091179055915081612e14565b600082815260018501602052604080822060020154825290206003015460ff16612be0576000828152600180860160205260408083208083015484529083206003908101805460ff1990811690915593869052018054909216179055612bc9848361304e565b600081815260018501602052604090206002015491505b600081815260018501602052604080822060039081018054868552838520808401805460ff909316151560ff199384161790558254821690925560029091015484529190922090910180549091169055612c3a8482612ed1565b83549250612e14565b6000818152600180860160205260408083209091015480835291206003015490925060ff1615612cc2576000828152600180860160205260408083206003908101805460ff19908116909155858552919093209092018054909216179055612cab848261304e565b600081815260018086016020526040909120015491505b600082815260018501602052604080822060020154825290206003015460ff16158015612d0d575060008281526001808601602052604080832090910154825290206003015460ff16155b15612d3a57600082815260018581016020526040909120600301805460ff19169091179055915081612e14565b60008281526001808601602052604080832090910154825290206003015460ff16612db957600082815260018086016020526040808320600281015484529083206003908101805460ff1990811690915593869052018054909216179055612da28483612ed1565b600081815260018086016020526040909120015491505b60008181526001808601602052604080832060039081018054878652838620808401805460ff909316151560ff19938416179055825482169092559301548452922090910180549091169055612e0f848261304e565b835492505b50612a23565b506000908152600190910160205260409020600301805460ff19169055565b600081612e4857506000610821565b82548203612e5857506001610821565b600082815260018401602052604090205415612e7657506001610821565b50600092915050565b60015460ff166118385760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610cc6565b600081815260018084016020526040808320600281018054915482865292852090930154938590529183905590918015612f1957600081815260018601602052604090208490555b6000838152600186016020526040902082905581612f3957828555612f85565b60008281526001808701602052604090912001548403612f6e5760008281526001808701602052604090912001839055612f85565b600082815260018601602052604090206002018390555b600083815260018087016020526040808320909101869055858252902083815560020154612fb49086906125cd565b6000858152600180880160205260409091200154612fd39087906125cd565b612fdd9190613524565b60008581526001870160205260408082206006019290925584815220600201546130089086906125cd565b60008481526001808801602052604090912001546130279087906125cd565b6130319190613524565b600093845260019095016020525050604090206006019190915550565b6000818152600180840160205260408083209182018054925483855291842060020154938590528390559091801561309457600081815260018601602052604090208490555b60008381526001860160205260409020829055816130b457828555613100565b600082815260018601602052604090206002015484036130e95760008281526001860160205260409020600201839055613100565b600082815260018087016020526040909120018390555b6000838152600186016020526040808220600290810187905586835291208481550154612fb49086906125cd565b60606108216001600160a01b03831660145b6060600061314f8360026134f0565b61315a906002613524565b67ffffffffffffffff811115613172576131726136e7565b6040519080825280601f01601f19166020018201604052801561319c576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106131d3576131d36135e3565b60200101906001600160f81b031916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061321e5761321e6135e3565b60200101906001600160f81b031916908160001a90535060006132428460026134f0565b61324d906001613524565b90505b60018111156132d2577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061328e5761328e6135e3565b1a60f81b8282815181106132a4576132a46135e3565b60200101906001600160f81b031916908160001a90535060049490941c936132cb816136fd565b9050613250565b508315611d4e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610cc6565b508054600082559060005260206000209081019061202691905b8082111561334f576000815560010161333b565b5090565b60006020828403121561336557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611d4e57600080fd5b80356001600160a01b038116811461252d57600080fd5b803560ff8116811461252d57600080fd5b801515811461202657600080fd5b60008060008060008060c087890312156133e457600080fd5b6133ed87613395565b955060208701359450613402604088016133ac565b9350613410606088016133ac565b92506080870135915060a0870135613427816133bd565b809150509295509295509295565b60006020828403121561344757600080fd5b5035919050565b6000806040838503121561346157600080fd5b8235915061347160208401613395565b90509250929050565b6000806040838503121561348d57600080fd5b82359150613471602084016133ac565b6000602082840312156134af57600080fd5b611d4e82613395565b600080604083850312156134cb57600080fd5b50508035926020909101359150565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610821576108216134da565b60006020828403121561351957600080fd5b8151611d4e816133bd565b80820180821115610821576108216134da565b60006020828403121561354957600080fd5b5051919050565b60ff8281168282160390811115610821576108216134da565b60008261358657634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610821576108216134da565b67ffffffffffffffff8181168382160280821691908281146135c2576135c26134da565b505092915050565b6000600182016135dc576135dc6134da565b5060010190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60005b8381101561362a578181015183820152602001613612565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161366b81601785016020880161360f565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516136a881602884016020880161360f565b01602801949350505050565b60208152600082518060208401526136d381604085016020870161360f565b601f01601f19169190910160400192915050565b634e487b7160e01b600052604160045260246000fd5b60008161370c5761370c6134da565b50600019019056fea26469706673582212204ab632fc60e3a9885fb67ebf985d1328eb6fd6347e66b4aba9b8b20a8c1e8b5a64736f6c63430008130033", + "address": "0xF5147D56502C80004f91FB4112d6812CddE8eDE3", + "block": 9802870, + "url": "https://goerli.etherscan.io/address/0xF5147D56502C80004f91FB4112d6812CddE8eDE3" }, "priceOracle": { "abi": [ @@ -2090,6 +2374,26 @@ "stateMutability": "nonpayable", "type": "constructor" }, + { + "inputs": [], + "name": "CallerNotAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "CallerNotPriceUpdater", + "type": "error" + }, + { + "inputs": [], + "name": "PriceAlreadyAdjusted", + "type": "error" + }, + { + "inputs": [], + "name": "UnexpectedZero", + "type": "error" + }, { "anonymous": false, "inputs": [ @@ -2207,9 +2511,9 @@ { "inputs": [ { - "internalType": "uint256", + "internalType": "uint16", "name": "redundancy", - "type": "uint256" + "type": "uint16" } ], "name": "adjustPrice", @@ -2222,9 +2526,9 @@ "name": "currentPrice", "outputs": [ { - "internalType": "uint256", + "internalType": "uint32", "name": "", - "type": "uint256" + "type": "uint32" } ], "stateMutability": "view", @@ -2235,9 +2539,9 @@ "name": "currentRound", "outputs": [ { - "internalType": "uint256", + "internalType": "uint64", "name": "", - "type": "uint256" + "type": "uint64" } ], "stateMutability": "view", @@ -2315,9 +2619,9 @@ "name": "increaseRate", "outputs": [ { - "internalType": "uint256", + "internalType": "uint32", "name": "", - "type": "uint256" + "type": "uint32" } ], "stateMutability": "view", @@ -2341,9 +2645,9 @@ "name": "lastAdjustedRound", "outputs": [ { - "internalType": "uint256", + "internalType": "uint64", "name": "", - "type": "uint256" + "type": "uint64" } ], "stateMutability": "view", @@ -2354,9 +2658,9 @@ "name": "minimumPrice", "outputs": [ { - "internalType": "uint256", + "internalType": "uint32", "name": "", - "type": "uint256" + "type": "uint32" } ], "stateMutability": "view", @@ -2387,9 +2691,9 @@ "name": "priceBase", "outputs": [ { - "internalType": "uint256", + "internalType": "uint32", "name": "", - "type": "uint256" + "type": "uint32" } ], "stateMutability": "view", @@ -2431,25 +2735,12 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "roundLength", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { - "internalType": "uint256", + "internalType": "uint32", "name": "_price", - "type": "uint256" + "type": "uint32" } ], "name": "setPrice", @@ -2484,10 +2775,10 @@ "type": "function" } ], - "bytecode": "0x6104006001556101a06040526207d88f60809081526207d88660a0526207d87d60c0526207d87460e0526207d86b610100526207d862610120526207d859610140526207d850610160526207d8476101805262000061906002906009620001b1565b506003805464ffffffffff191664010004000417905560986004553480156200008957600080fd5b506040516200132e3803806200132e833981016040819052620000ac916200023c565b620000b9600082620000ea565b600680546001600160a01b0319166001600160a01b038416179055620000de620000fa565b60055550620002979050565b620000f6828262000111565b5050565b6000600454436200010c919062000274565b905090565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16620000f6576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556200016d3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b828054828255906000526020600020908101928215620001f6579160200282015b82811115620001f6578251829062ffffff16905591602001919060010190620001d2565b506200020492915062000208565b5090565b5b8082111562000204576000815560010162000209565b80516001600160a01b03811681146200023757600080fd5b919050565b600080604083850312156200025057600080fd5b6200025b836200021f565b91506200026b602084016200021f565b90509250929050565b6000826200029257634e487b7160e01b600052601260045260246000fd5b500490565b61108780620002a76000396000f3fe608060405234801561001057600080fd5b50600436106101765760003560e01c80638a19c8bc116100d8578063a217fddf1161008c578063e0632c6411610066578063e0632c64146102da578063f7b188a514610305578063fb8d81011461030d57600080fd5b8063a217fddf146102aa578063b187bd26146102b2578063d547741f146102c757600080fd5b806391b7f5ed116100bd57806391b7f5ed1461025757806391d148541461026a5780639d1b464a146102a157600080fd5b80638a19c8bc146102465780638b649b941461024e57600080fd5b806355bdcd231161012f5780637310561b116101145780637310561b1461022b5780637f386b6c146102355780638456cb591461023e57600080fd5b806355bdcd231461020f57806372bf079e1461021857600080fd5b8063248a9ca311610160578063248a9ca3146101c45780632f2ff15d146101e757806336568abe146101fc57600080fd5b806280248f1461017b57806301ffc9a7146101a1575b600080fd5b61018e610189366004610def565b610334565b6040519081526020015b60405180910390f35b6101b46101af366004610e08565b610355565b6040519015158152602001610198565b61018e6101d2366004610def565b60009081526020819052604090206001015490565b6101fa6101f5366004610e4a565b6103ee565b005b6101fa61020a366004610e4a565b610418565b61018e60055481565b6101fa610226366004610def565b6104a9565b61018e6207d86b81565b61018e61040081565b6101fa6107c5565b61018e61085a565b61018e60045481565b6101fa610265366004610def565b61086f565b6101b4610278366004610e4a565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61018e60015481565b61018e600081565b6003546101b490640100000000900460ff1681565b6101fa6102d5366004610e4a565b6109a8565b6006546102ed906001600160a01b031681565b6040516001600160a01b039091168152602001610198565b6101fa6109cd565b61018e7f74b366a297145849fa9687e16ecad1e3a60cf84f6c2256ae73e20a9f7666980481565b6002818154811061034457600080fd5b600091825260209091200154905081565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103e857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461040981610a5b565b6104138383610a65565b505050565b6001600160a01b038116331461049b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b6104a58282610b03565b5050565b600354640100000000900460ff1615156000036107c2573360009081527f8657ba5f3573b26d022d162a7ce5ad3405ffbc39cb2711d22336d53dad2402c4602052604090205460ff1661053e5760405162461bcd60e51b815260206004820152601d60248201527f63616c6c6572206973206e6f74206120707269636520757064617465720000006044820152606401610492565b80600061054961085a565b905060055481116105c15760405162461bcd60e51b8152602060048201526024808201527f707269636520616c72656164792061646a757374656420696e2074686973207260448201527f6f756e64000000000000000000000000000000000000000000000000000000006064820152608401610492565b600083116106115760405162461bcd60e51b815260206004820152600f60248201527f756e6578706563746564207a65726f00000000000000000000000000000000006044820152606401610492565b60035460009061062d9061ffff62010000820481169116610e9c565b90508061ffff16841115610643578061ffff1692505b60006001600554846106559190610ebe565b61065f9190610ebe565b905060006002858154811061067657610676610ed1565b906000526020600020015490506207d86b600154826106959190610ee7565b61069f9190610efe565b60015581156107075760026000815481106106bc576106bc610ed1565b9060005260206000200154905060005b82811015610705576207d86b600154836106e69190610ee7565b6106f09190610efe565b600155806106fd81610f20565b9150506106cc565b505b610400600154101561071a576104006001555b6006546001546040516391b7f5ed60e01b81526001600160a01b03909216916391b7f5ed9161074f9160040190815260200190565b600060405180830381600087803b15801561076957600080fd5b505af115801561077d573d6000803e3d6000fd5b5050506005859055506001546040519081527fae46785019700e30375a5d7b4f91e32f8060ef085111f896ebf889450aa2ab5a9060200160405180910390a150505050505b50565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff166108435760405162461bcd60e51b815260206004820152601760248201527f63616c6c6572206973206e6f74207468652061646d696e0000000000000000006044820152606401610492565b6003805464ff000000001916640100000000179055565b60006004544361086a9190610efe565b905090565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff166108ed5760405162461bcd60e51b815260206004820152601760248201527f63616c6c6572206973206e6f74207468652061646d696e0000000000000000006044820152606401610492565b6001819055610400811015610903576104006001555b6006546001546040516391b7f5ed60e01b81526001600160a01b03909216916391b7f5ed916109389160040190815260200190565b600060405180830381600087803b15801561095257600080fd5b505af1158015610966573d6000803e3d6000fd5b505050507fae46785019700e30375a5d7b4f91e32f8060ef085111f896ebf889450aa2ab5a60015460405161099d91815260200190565b60405180910390a150565b6000828152602081905260409020600101546109c381610a5b565b6104138383610b03565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16610a4b5760405162461bcd60e51b815260206004820152601760248201527f63616c6c6572206973206e6f74207468652061646d696e0000000000000000006044820152606401610492565b6003805464ff0000000019169055565b6107c28133610b82565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166104a5576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055610abf3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16156104a5576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166104a557610bb381610bf5565b610bbe836020610c07565b604051602001610bcf929190610f5d565b60408051601f198184030181529082905262461bcd60e51b825261049291600401610fde565b60606103e86001600160a01b03831660145b60606000610c16836002610ee7565b610c21906002611011565b67ffffffffffffffff811115610c3957610c39611024565b6040519080825280601f01601f191660200182016040528015610c63576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110610c9a57610c9a610ed1565b60200101906001600160f81b031916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110610ce557610ce5610ed1565b60200101906001600160f81b031916908160001a9053506000610d09846002610ee7565b610d14906001611011565b90505b6001811115610d99577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110610d5557610d55610ed1565b1a60f81b828281518110610d6b57610d6b610ed1565b60200101906001600160f81b031916908160001a90535060049490941c93610d928161103a565b9050610d17565b508315610de85760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610492565b9392505050565b600060208284031215610e0157600080fd5b5035919050565b600060208284031215610e1a57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610de857600080fd5b60008060408385031215610e5d57600080fd5b8235915060208301356001600160a01b0381168114610e7b57600080fd5b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b61ffff818116838216019080821115610eb757610eb7610e86565b5092915050565b818103818111156103e8576103e8610e86565b634e487b7160e01b600052603260045260246000fd5b80820281158282048414176103e8576103e8610e86565b600082610f1b57634e487b7160e01b600052601260045260246000fd5b500490565b600060018201610f3257610f32610e86565b5060010190565b60005b83811015610f54578181015183820152602001610f3c565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351610f95816017850160208801610f39565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351610fd2816028840160208801610f39565b01602801949350505050565b6020815260008251806020840152610ffd816040850160208701610f39565b601f01601f19169190910160400192915050565b808201808211156103e8576103e8610e86565b634e487b7160e01b600052604160045260246000fd5b60008161104957611049610e86565b50600019019056fea26469706673582212203833688ca1009defdd12270e163ae67a574980777042e29fa299c3c5faadff1e64736f6c63430008130033", - "address": "0xefC5Ead3188402eCC951DB45827F6e0F99B67a25", - "block": 9758555, - "url": "https://goerli.etherscan.io/address/0xefC5Ead3188402eCC951DB45827F6e0F99B67a25" + "bytecode": "0x6001805464ffffffffff60a01b1916634001000160a21b17905560028054600160401b600160a01b0319811663ffffffff68010000000000000000600160401b600160801b03199093166e07d86b0000040000000000000000009081179390930416600160801b02171790556101c06040526207d88f60a09081526207d88660c0526207d87d60e0526207d874610100526207d86b610120526207d862610140526207d859610160526207d850610180526207d8476101a052620000c89060039060096200023b565b50348015620000d657600080fd5b506040516200155338038062001553833981016040819052620000f99162000311565b6200010660008262000177565b600180546001600160a01b0319166001600160a01b0384161790556200012b62000187565b600280546001600160401b0319166001600160401b039290921691909117905550507f74b366a297145849fa9687e16ecad1e3a60cf84f6c2256ae73e20a9f766698046080526200036c565b6200018382826200019b565b5050565b60006200019660984362000349565b905090565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000183576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620001f73390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600283019183908215620002cb5791602002820160005b838211156200029757835183826101000a81548163ffffffff021916908362ffffff160217905550926020019260040160208160030104928301926001030262000252565b8015620002c95782816101000a81549063ffffffff021916905560040160208160030104928301926001030262000297565b505b50620002d9929150620002dd565b5090565b5b80821115620002d95760008155600101620002de565b80516001600160a01b03811681146200030c57600080fd5b919050565b600080604083850312156200032557600080fd5b6200033083620002f4565b91506200034060208401620002f4565b90509250929050565b6000826200036757634e487b7160e01b600052601260045260246000fd5b500490565b6080516111c46200038f6000396000818161035a015261076701526111c46000f3fe608060405234801561001057600080fd5b506004361061016b5760003560e01c806391d14854116100cd578063daafe0a511610081578063f7b188a511610066578063f7b188a51461034d578063fb8d810114610355578063ffb98fe31461037c57600080fd5b8063daafe0a51461030f578063e0632c641461032257600080fd5b8063a217fddf116100b2578063a217fddf146102e0578063b187bd26146102e8578063d547741f146102fc57600080fd5b806391d14854146102925780639d1b464a146102c957600080fd5b806355bdcd23116101245780637f386b6c116101095780637f386b6c146102665780638456cb59146102825780638a19c8bc1461028a57600080fd5b806355bdcd23146102195780637310561b1461024657600080fd5b8063248a9ca311610155578063248a9ca3146101c05780632f2ff15d146101f157806336568abe1461020657600080fd5b806280248f1461017057806301ffc9a71461019d575b600080fd5b61018361017e366004610e73565b61038f565b60405163ffffffff90911681526020015b60405180910390f35b6101b06101ab366004610e8c565b6103bf565b6040519015158152602001610194565b6101e36101ce366004610e73565b60009081526020819052604090206001015490565b604051908152602001610194565b6102046101ff366004610ece565b610458565b005b610204610214366004610ece565b610482565b60025461022d9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610194565b600254610183906c01000000000000000000000000900463ffffffff1681565b6002546101839068010000000000000000900463ffffffff1681565b610204610513565b61022d610577565b6101b06102a0366004610ece565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60025461018390600160801b900463ffffffff1681565b6101e3600081565b6001546101b090600160c01b900460ff1681565b61020461030a366004610ece565b610589565b61020461031d366004610f0a565b6105ae565b600154610335906001600160a01b031681565b6040516001600160a01b039091168152602001610194565b6102046106f1565b6101e37f000000000000000000000000000000000000000000000000000000000000000081565b61020461038a366004610f30565b61074f565b6003816009811061039f57600080fd5b60089182820401919006600402915054906101000a900463ffffffff1681565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461047381610adf565b61047d8383610ae9565b505050565b6001600160a01b03811633146105055760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b61050f8282610b87565b5050565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff166105625760405163036c8cf960e11b815260040160405180910390fd5b6001805460ff60c01b1916600160c01b179055565b6000610584609843610f80565b905090565b6000828152602081905260409020600101546105a481610adf565b61047d8383610b87565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff166105fd5760405163036c8cf960e11b815260040160405180910390fd5b600254819063ffffffff680100000000000000009091048116908216811115610624578091505b6002805473ffffffff000000000000000000000000000000001916600160801b63ffffffff8516908102919091179091556001546040516391b7f5ed60e01b815260048101929092526001600160a01b0316906391b7f5ed90602401600060405180830381600087803b15801561069a57600080fd5b505af11580156106ae573d6000803e3d6000fd5b505060405163ffffffff851681527fae46785019700e30375a5d7b4f91e32f8060ef085111f896ebf889450aa2ab5a9250602001905060405180910390a1505050565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff166107405760405163036c8cf960e11b815260040160405180910390fd5b6001805460ff60c01b19169055565b600154600160c01b900460ff161515600003610adc577f000000000000000000000000000000000000000000000000000000000000000060009081526020818152604080832033845290915290205460ff166107d7576040517f262791ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060006107e2610577565b60025490915067ffffffffffffffff9081169082161161082e576040517f08a5cb4c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8261ffff1660000361086c576040517fb5ca2d7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906108b49061ffff760100000000000000000000000000000000000000000000820481169174010000000000000000000000000000000000000000900416610f94565b90508061ffff168461ffff1611156108ca578092505b60025463ffffffff600160801b82048116916801000000000000000081048216916c01000000000000000000000000820416906000906001906109179067ffffffffffffffff1688610fb6565b6109219190610fb6565b9050600060038861ffff166009811061093c5761093c610fd7565b600891828204019190066004029054906101000a900463ffffffff1690508285826109679190610fed565b6109719190611015565b945067ffffffffffffffff8216156109d7575060035463ffffffff1660005b8267ffffffffffffffff168167ffffffffffffffff1610156109d557836109b78784610fed565b6109c19190611015565b9550806109cd81611038565b915050610990565b505b8363ffffffff168563ffffffff1610156109ef578394505b6002805473ffffffff000000000000000000000000000000001916600160801b63ffffffff8816908102919091179091556001546040516391b7f5ed60e01b815260048101929092526001600160a01b0316906391b7f5ed90602401600060405180830381600087803b158015610a6557600080fd5b505af1158015610a79573d6000803e3d6000fd5b50506002805467ffffffffffffffff191667ffffffffffffffff8b16179055505060405163ffffffff861681527fae46785019700e30375a5d7b4f91e32f8060ef085111f896ebf889450aa2ab5a9060200160405180910390a150505050505050505b50565b610adc8133610c06565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1661050f576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055610b433390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff161561050f576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1661050f57610c3781610c79565b610c42836020610c8b565b604051602001610c53929190611083565b60408051601f198184030181529082905262461bcd60e51b82526104fc91600401611104565b60606104526001600160a01b03831660145b60606000610c9a836002611137565b610ca590600261114e565b67ffffffffffffffff811115610cbd57610cbd611161565b6040519080825280601f01601f191660200182016040528015610ce7576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110610d1e57610d1e610fd7565b60200101906001600160f81b031916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110610d6957610d69610fd7565b60200101906001600160f81b031916908160001a9053506000610d8d846002611137565b610d9890600161114e565b90505b6001811115610e1d577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110610dd957610dd9610fd7565b1a60f81b828281518110610def57610def610fd7565b60200101906001600160f81b031916908160001a90535060049490941c93610e1681611177565b9050610d9b565b508315610e6c5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016104fc565b9392505050565b600060208284031215610e8557600080fd5b5035919050565b600060208284031215610e9e57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610e6c57600080fd5b60008060408385031215610ee157600080fd5b8235915060208301356001600160a01b0381168114610eff57600080fd5b809150509250929050565b600060208284031215610f1c57600080fd5b813563ffffffff81168114610e6c57600080fd5b600060208284031215610f4257600080fd5b813561ffff81168114610e6c57600080fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082610f8f57610f8f610f54565b500490565b61ffff818116838216019080821115610faf57610faf610f6a565b5092915050565b67ffffffffffffffff828116828216039080821115610faf57610faf610f6a565b634e487b7160e01b600052603260045260246000fd5b63ffffffff81811683821602808216919082811461100d5761100d610f6a565b505092915050565b600063ffffffff8084168061102c5761102c610f54565b92169190910492915050565b600067ffffffffffffffff80831681810361105557611055610f6a565b6001019392505050565b60005b8381101561107a578181015183820152602001611062565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516110bb81601785016020880161105f565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516110f881602884016020880161105f565b01602801949350505050565b602081526000825180602084015261112381604085016020870161105f565b601f01601f19169190910160400192915050565b808202811582820484141761045257610452610f6a565b8082018082111561045257610452610f6a565b634e487b7160e01b600052604160045260246000fd5b60008161118657611186610f6a565b50600019019056fea264697066735822122071842a67a6edd4e3e1cfa9a7c5eda260f7f6aa9976a311cd5133127c0ec1dc6864736f6c63430008130033", + "address": "0xd41A47fCaa67945A11a398F00D5f7F130aF03733", + "block": 9802966, + "url": "https://goerli.etherscan.io/address/0xd41A47fCaa67945A11a398F00D5f7F130aF03733" }, "redistribution": { "abi": [ @@ -2569,6 +2860,11 @@ "name": "CommitRoundOver", "type": "error" }, + { + "inputs": [], + "name": "FirstRevealDone", + "type": "error" + }, { "inputs": [ { @@ -3021,6 +3317,25 @@ "name": "WinnerSelected", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "chunkAddress", + "type": "bytes32" + } + ], + "name": "transformedChunkAddressFromInclusionProof", + "type": "event" + }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", @@ -3367,9 +3682,9 @@ "type": "bytes32" }, { - "internalType": "uint32", + "internalType": "uint64", "name": "_roundNumber", - "type": "uint32" + "type": "uint64" } ], "name": "commit", @@ -3382,9 +3697,9 @@ "name": "currentClaimRound", "outputs": [ { - "internalType": "uint32", + "internalType": "uint64", "name": "", - "type": "uint32" + "type": "uint64" } ], "stateMutability": "view", @@ -3395,9 +3710,9 @@ "name": "currentCommitRound", "outputs": [ { - "internalType": "uint32", + "internalType": "uint64", "name": "", - "type": "uint32" + "type": "uint64" } ], "stateMutability": "view", @@ -3504,9 +3819,9 @@ "name": "currentRevealRound", "outputs": [ { - "internalType": "uint32", + "internalType": "uint64", "name": "", - "type": "uint32" + "type": "uint64" } ], "stateMutability": "view", @@ -3561,9 +3876,9 @@ "name": "currentRound", "outputs": [ { - "internalType": "uint256", + "internalType": "uint64", "name": "", - "type": "uint256" + "type": "uint64" } ], "stateMutability": "view", @@ -3987,10 +4302,10 @@ "type": "function" } ], - "bytecode": "0x60a06040526008805461ffff60601b19166d02010000000000000000000000001790553480156200002f57600080fd5b506040516200490e3803806200490e8339810160408190526200005291620001b6565b60018054600380546001600160a01b03199081166001600160a01b03898116919091179092556001600160a81b03199092166101008783160217909255600280549091169184169190911790557f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a608052620000d0600082620000e9565b608051620000df9033620000e9565b5050505062000213565b620000f58282620000f9565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16620000f5576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620001553390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b80516001600160a01b0381168114620001b157600080fd5b919050565b60008060008060808587031215620001cd57600080fd5b620001d88562000199565b9350620001e86020860162000199565b9250620001f86040860162000199565b9150620002086060860162000199565b905092959194509250565b6080516146d86200023660003960008181610f300152611d6f01526146d86000f3fe608060405234801561001057600080fd5b506004361061025c5760003560e01c806382b39b1b11610145578063b78a52a7116100bd578063d1e8b63d1161008c578063dfbf53ae11610071578063dfbf53ae14610580578063f7b188a5146105b0578063fb00f2f3146105b857600080fd5b8063d1e8b63d14610565578063d547741f1461056d57600080fd5b8063b78a52a714610512578063c1d810d514610525578063c46b402914610538578063ce9877451461055257600080fd5b80638d8b64281161011457806395aa1bcc116100f957806395aa1bcc146104e4578063a217fddf146104f7578063aeace9dc146104ff57600080fd5b80638d8b6428146104a557806391d14854146104ad57600080fd5b806382b39b1b1461043d578063832206261461048d5780638456cb59146104955780638a19c8bc1461049d57600080fd5b806362fd29ae116101d857806369da9114116101a757806372286cba1161018c57806372286cba146103c457806377c75d10146104125780637fe019c61461042557600080fd5b806369da9114146103955780636f94aaf2146103a857600080fd5b806362fd29ae1461034d57806363f5cf7c1461035557806364c34a851461036857806369bfac011461037057600080fd5b80632f2ff15d1161022f57806336568abe1161021457806336568abe1461031c5780635c975abb1461032f5780635d4844ea1461033a57600080fd5b80632f2ff15d146102ff5780632f3906da1461031457600080fd5b806301ffc9a7146102615780631835009614610289578063248a9ca3146102b95780632a4e6249146102ea575b600080fd5b61027461026f366004613e67565b6105cb565b60405190151581526020015b60405180910390f35b6001546102a19061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610280565b6102dc6102c7366004613e91565b60009081526020819052604090206001015490565b604051908152602001610280565b6102f2610634565b6040516102809190613eaa565b61031261030d366004613f4e565b61073b565b005b610274610765565b61031261032a366004613f4e565b6107af565b60015460ff16610274565b6003546102a1906001600160a01b031681565b6102dc610840565b610312610363366004613f97565b6108e7565b6102dc610bb0565b6008546103809063ffffffff1681565b60405163ffffffff9091168152602001610280565b6002546102a1906001600160a01b031681565b6008546103809068010000000000000000900463ffffffff1681565b6103d76103d2366004613e91565b610c15565b604080519687526001600160a01b039095166020870152921515938501939093526060840152608083019190915260a082015260c001610280565b610274610420366004613e91565b610c6c565b60085461038090640100000000900463ffffffff1681565b61045061044b366004613e91565b610f13565b604080519687526001600160a01b03909516602087015260ff909316938501939093526060840152608083019190915260a082015260c001610280565b6102dc610f23565b610312610f2e565b6102dc610f91565b610274610f9e565b6102746104bb366004613f4e565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6103126104f236600461401f565b610fc8565b6102dc600081565b61031261050d366004614070565b61152e565b61027461052036600461409e565b6115f0565b6103126105333660046140c3565b61177f565b610540611c32565b60405160ff9091168152602001610280565b6102dc6105603660046140c3565b611cb4565b610274611d23565b61031261057b366004613f4e565b611d48565b600954600a54600b54600c54600d5461045094936001600160a01b03811693600160a01b90910460ff1692909186565b610312611d6d565b6102746105c6366004614100565b611dce565b60006001600160e01b031982167f7965db0b00000000000000000000000000000000000000000000000000000000148061062e57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b606061063e610f9e565b61065b57604051633788c6c160e11b815260040160405180910390fd5b6000610665610f91565b600854909150640100000000900463ffffffff16811461069857604051636fbabc7760e01b815260040160405180910390fd5b6005805480602002602001604051908101604052809291908181526020016000905b828210156107315760008481526020908190206040805160c08101825260058602909201805483526001808201546001600160a01b03811685870152600160a01b900460ff169284019290925260028101546060840152600381015460808401526004015460a083015290835290920191016106ba565b5050505091505090565b60008281526020819052604090206001015461075681611e0a565b6107608383611e17565b505050565b600080610773609843614144565b90506107816004609861416e565b811015801561079a57506107976002609861416e565b81105b156107a757600191505090565b600091505090565b6001600160a01b03811633146108325760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b61083c8282611eb5565b5050565b60008061084b610f91565b610856906001614182565b6007546008549192509061087990640100000000900463ffffffff166001614195565b63ffffffff1682111561062e576008546000906001906108a790640100000000900463ffffffff16856141b9565b6108b191906141b9565b60408051602081018590529081018290529091506060016040516020818303038152906040528051906020012091505092915050565b6108ef611f34565b6108f7611f87565b6040805160c0810182526009548152600a546001600160a01b0381166020830152600160a01b900460ff1691810191909152600b546060820152600c546080820152600d5460a08201526006546007546000918291610957600f82614144565b9350610964600e82614144565b925083831061097b5782610977816141cc565b9350505b61098e8660200135838760400151611dce565b6109ae57604051633b5f43a360e01b815260036004820152602401610829565b6109b986601e612558565b6109c286612830565b6109cb86612c30565b6109de8860200135838760400151611dce565b6109fe57604051633b5f43a360e01b815260026004820152602401610829565b610a1288610a0d8660026141e5565b612558565b610a1b88612830565b610a2488612c30565b610a378760200135838760400151611dce565b610a5757604051633b5f43a360e01b815260016004820152602401610829565b610a6687610a0d8560026141e5565b610a6f87612830565b610a7887612c30565b610aee8484610a878b806141fc565b6000818110610a9857610a9861424d565b60200291909101359050610aac8b806141fc565b6000818110610abd57610abd61424d565b60200291909101359050610ad18b806141fc565b6000818110610ae257610ae261424d565b90506020020135612ec4565b7f788e77979e6e6a8a6a5d2c19c58b1ff9671298f54c85ac6f6aa30379aed5861a85604051610b1d9190614263565b60405180910390a160015460208601516040517f51cff8d90000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416906351cff8d990602401600060405180830381600087803b158015610b8e57600080fd5b505af1158015610ba2573d6000803e3d6000fd5b505050505050505050505050565b6000610bba611d23565b80610beb5750600854640100000000900463ffffffff16610bd9610f91565b118015610beb5750610be9610f9e565b155b15610bfd57610bf8610f23565b905090565b610c05610f9e565b15610c1257610bf8610840565b90565b60048181548110610c2557600080fd5b6000918252602090912060059091020180546001820154600283015460038401546004909401549294506001600160a01b03821693600160a01b90920460ff169290919086565b6000610c76610f9e565b610c9357604051633788c6c160e11b815260040160405180910390fd5b6000610c9d610f91565b600854909150640100000000900463ffffffff168114610cd057604051636fbabc7760e01b815260040160405180910390fd5b60085468010000000000000000900463ffffffff168111610d0457604051630c8d9eab60e31b815260040160405180910390fd5b600080600080600080600080610d18612f5a565b90506000610d2461300e565b600454919650945060005b81811015610eff5760048181548110610d4a57610d4a61424d565b906000526020600020906005020160040154945060048181548110610d7157610d7161424d565b906000526020600020906005020160010160149054906101000a900460ff168015610dbf575060058581548110610daa57610daa61424d565b90600052602060002090600502016004015487145b8015610dfd575060058581548110610dd957610dd961424d565b600091825260209091206001600590920201015460ff878116600160a01b90920416145b15610ef75760058581548110610e1557610e1561424d565b9060005260206000209060050201600301548b610e329190614182565b9a508383604051602001610e479291906142d6565b60408051601f19818403018152919052805160209091012098506fffffffffffffffffffffffffffffffff808a169850610e82906001614182565b60058681548110610e9557610e9561424d565b906000526020600020906005020160030154610eb191906141e5565b610ebb8c8a6141e5565b1015610ee95760058581548110610ed457610ed461424d565b90600052602060002090600502016000015499505b82610ef3816141cc565b9350505b600101610d2f565b505050959099149998505050505050505050565b60058181548110610c2557600080fd5b600080610856610f91565b7f000000000000000000000000000000000000000000000000000000000000000060009081526020818152604080832033845290915290205460ff16610f8757604051631d77d47760e21b815260040160405180910390fd5b610f8f6131c7565b565b6000610bf860984361416e565b6000610fac6002609861416e565b610fb7609843614144565b10610fc25750600190565b50600090565b610fd0611f34565b6000610fda610f91565b6003546040516348962b9360e01b8152600481018690529192506000916001600160a01b03909116906348962b9390602401602060405180830381865afa158015611029573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104d91906142f8565b9050611057611d23565b61108d576040517fdc816a8700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600161109b6004609861416e565b6110a591906141b9565b6110b0609843614144565b036110e7576040517f5baef6b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8263ffffffff168263ffffffff16111561112d576040517f50ff7c0000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8263ffffffff168263ffffffff161015611173576040517f7a0c0fd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67016345785d8a000081101561119c57604051638ecf3d0360e01b815260040160405180910390fd5b6003546040517fa0d22b210000000000000000000000000000000000000000000000000000000081526004810186905233916001600160a01b03169063a0d22b2190602401602060405180830381865afa1580156111fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112229190614311565b6001600160a01b031614611262576040517fb78fd5c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61126e609860026141e5565b61127890436141b9565b6003546040516376f2098160e11b8152600481018790526001600160a01b039091169063ede4130290602401602060405180830381865afa1580156112c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e591906142f8565b1061130357604051630a0744c560e01b815260040160405180910390fd5b60085463ffffffff8381169116146113375761132160046000613dfe565b6008805463ffffffff191663ffffffff84161790555b60045460005b818110156113aa5785600482815481106113595761135961424d565b906000526020600020906005020160000154036113a2576040517ffc507a3100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60010161133d565b506040805160c081018252868152336020808301918252600083850181815260608501888152608086018d815260a0870184815260048054600181018255955296517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b60059095029485015594517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c8401805493516001600160a01b0390921674ffffffffffffffffffffffffffffffffffffffffff1990941693909317600160a01b9115159190910217909155517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19d82015591517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19e83015591517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19f90910155815163ffffffff871681529081018790527f68e0867601a98978930107aee7f425665e61edd70ca594c68ca5da9e81f84c29910160405180910390a1505050505050565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16611596576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880546dffff00000000000000000000000019166c0100000000000000000000000060ff948516026dff000000000000000000000000001916176d01000000000000000000000000009290931691909102919091179055565b60006115fa610765565b15611631576040517fe2586bcc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61163d609860026141e5565b61164790436141b9565b6003546040516376f2098160e11b8152600481018690526001600160a01b039091169063ede4130290602401602060405180830381865afa158015611690573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b491906142f8565b106116d257604051630a0744c560e01b815260040160405180910390fd5b6003546040516348962b9360e01b81526004810185905267016345785d8a0000916001600160a01b0316906348962b9390602401602060405180830381865afa158015611723573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174791906142f8565b101561176657604051638ecf3d0360e01b815260040160405180910390fd5b61177883611772610bb0565b84611dce565b9392505050565b611787611f34565b6000611791610f91565b905061179b611c32565b60ff168460ff1610156117da576040517f83d9b7bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117e2610765565b611818576040517fd1088db600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085463ffffffff82811691161461185c576040517f842a9e0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085463ffffffff82811664010000000090920416146119275761187e610bb0565b60065561188d60056000613dfe565b6008805467ffffffff00000000191664010000000063ffffffff8416908102919091179091556006546040805192835260208301919091527ff0ae472da9c8da86bda4991a549c03a3cb328b5f360ea11a5b8814f32bb85176910160405180910390a1611927600754604080516020810192909252449082015260600160408051601f198184030181529190528051602090910120600755565b600061193586868686611cb4565b90506000611943878361321b565b905060006004828154811061195a5761195a61424d565b60009182526020918290206040805160c081018252600593909302909101805480845260018201546001600160a01b03811695850195909552600160a01b90940460ff1615159183019190915260028101546060830152600381015460808301526004015460a08201526006549092506119d5919089611dce565b611a11576006546040517f14ebbbe400000000000000000000000000000000000000000000000000000000815260040161082991815260200190565b806040015115611a4d576040517fa89ac15100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160048381548110611a6257611a6261424d565b906000526020600020906005020160010160146101000a81548160ff02191690831515021790555060058054905060048381548110611aa357611aa361424d565b90600052602060002090600502016004018190555060056040518060c001604052808360000151815260200183602001516001600160a01b031681526020018960ff16815260200183606001518152602001896002611b029190614412565b8460600151611b1191906141e5565b815260209081018990528254600181810185556000948552938290208351600590920201908155908201519281018054604084015160ff16600160a01b0274ffffffffffffffffffffffffffffffffffffffffff199091166001600160a01b0390951694909417939093179092556060808201516002808501919091556080830151600385015560a0909201516004909301929092558251918301517f13fc17fd71632266fe82092de6dd91a06b4fa68d8dc950492e5421cbed55a6a5928792909190611bdf908c90614412565b8560600151611bee91906141e5565b6040805163ffffffff909516855260208501939093529183015260608201526080810188905260ff891660a082015260c00160405180910390a15050505050505050565b6008546000908190611c589063ffffffff68010000000000000000820481169116614421565b63ffffffff169050600060fe8211611c705781611c73565b60fe5b611c7e90600161443e565b600a5490915060ff600160a01b9091048116908216811115611ca957611ca48282614457565b611cac565b60005b935050505090565b60408051602081018690527fff0000000000000000000000000000000000000000000000000000000000000060f886901b169181019190915260418101839052606181018290526000906081015b6040516020818303038152906040528051906020012090505b949350505050565b6000611d316004609861416e565b611d3c609843614144565b1015610fc25750600190565b600082815260208190526040902060010154611d6381611e0a565b6107608383611eb5565b7f000000000000000000000000000000000000000000000000000000000000000060009081526020818152604080832033845290915290205460ff16611dc657604051631d77d47760e21b815260040160405180910390fd5b610f8f6132c6565b60008160ff16600003611de357506001611778565b611df260ff8316610100614470565b611dfd90600261448b565b8484181090509392505050565b611e1481336132ff565b50565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1661083c576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055611e713390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff161561083c576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60015460ff1615610f8f5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610829565b6000611f91610f91565b9050611f9b610f9e565b611fb857604051633788c6c160e11b815260040160405180910390fd5b60085463ffffffff8281166401000000009092041614611feb57604051636fbabc7760e01b815260040160405180910390fd5b60085463ffffffff6801000000000000000090910481169082161161202357604051630c8d9eab60e31b815260040160405180910390fd5b600454604051818152600091829182918291829182917f6752c5e71c95fb93bc7137adeb115a33fa4e54e2683e33d3f90c2bb1c4b6c2a59060200160405180910390a16005546040519081527f4c03de6a759749c0c9387b7014634dc5c6af610e1366023d90751c783a998f8d9060200160405180910390a16120a461300e565b6040805183815260ff831660208201529295509093507f34e8eda4cd857cd2865becf58a47748f31415f4a382cbb2cc0c64b9a27c717be910160405180910390a160006120ef612f5a565b905060005b828110156124a7576000600482815481106121115761211161424d565b600091825260208083206040805160c08101825260059485029092018054835260018101546001600160a01b03811694840194909452600160a01b90930460ff16151590820152600282015460608201526003820154608082015260049091015460a082018190528254919450929190839081106121915761219161424d565b60009182526020918290206040805160c0810182526005939093029091018054835260018101546001600160a01b03811694840194909452600160a01b90930460ff1682820152600283015460608301526003830154608083015260049092015460a082015290840151909150801561220d57508060a0015188145b80156122225750806040015160ff168760ff16145b15612317576080810151612236908d614182565b9b50848b60405160200161224b9291906142d6565b60408051601f19818403018152919052805160209091012099506fffffffffffffffffffffffffffffffff808b169950612286906001614182565b816080015161229591906141e5565b61229f8d8b6141e5565b10156123095780516009556020810151600a8054604084015160ff16600160a01b0274ffffffffffffffffffffffffffffffffffffffffff199091166001600160a01b03909316929092179190911790556060810151600b556080810151600c5560a0810151600d555b8a612313816141cc565b9b50505b8260400151801561234057508060a00151881415806123405750806040015160ff168760ff1614155b156123ea5760035481516001600160a01b039091169063837fd16a906123678a6002614412565b600854612389906098906c01000000000000000000000000900460ff166141e5565b61239391906141e5565b6040516001600160e01b031960e085901b16815260048101929092526024820152604401600060405180830381600087803b1580156123d157600080fd5b505af11580156123e5573d6000803e3d6000fd5b505050505b82604001516124995760035483516001600160a01b039091169063837fd16a906124158a6002614412565b600854612438906098906d0100000000000000000000000000900460ff166141e5565b61244291906141e5565b6040516001600160e01b031960e085901b16815260048101929092526024820152604401600060405180830381600087803b15801561248057600080fd5b505af1158015612494573d6000803e3d6000fd5b505050505b8360010193505050506120f4565b506002546040517f72bf079e000000000000000000000000000000000000000000000000000000008152600481018990526001600160a01b03909116906372bf079e90602401600060405180830381600087803b15801561250757600080fd5b505af115801561251b573d6000803e3d6000fd5b50506008805463ffffffff909c1668010000000000000000026bffffffff000000000000000019909c169b909b17909a5550505050505050505050565b60075460009061256a90608090614144565b905060006125cd61257e60a08601866141fc565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050506060860135846125c560a0890160808a0161449b565b600654613372565b905061261b6125dc85806141fc565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050506020860135856104006134ea565b600d54146126465760405163755f0a2560e01b81526001600482015260248101829052604401610829565b61265360a08501856141fc565b60008181106126645761266461424d565b9050602002013584806040019061267b91906141fc565b600081811061268c5761268c61424d565b90506020020135146126bb5760405163755f0a2560e01b81526002600482015260248101829052604401610829565b6000806126cb60e08701876141fc565b9050116126dc578460200135612711565b6126e960e08601866141fc565b60008181106126fa576126fa61424d565b905060200281019061270c91906144c5565b606001355b905061276f61272360408701876141fc565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050505060608701358561276a60a08a0160808b0161449b565b6134ea565b81146127985760405163755f0a2560e01b81526003600482015260248101839052604401610829565b60006127a760e08701876141fc565b905011156127df5760408051602080880135908201529081018390526060016040516020818303038152906040528051906020012091505b816127ea86806141fc565b60008181106127fb576127fb61424d565b90506020020135146128295760405163755f0a2560e01b815260048181015260248101839052604401610829565b5050505050565b6001546000908190819061010090046001600160a01b031663c81e25ab61285a60c08701876144c5565b602001356040518263ffffffff1660e01b815260040161287c91815260200190565b60c060405180830381865afa158015612899573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128bd91906144e5565b50505092509250925060006128ec858060c001906128db91906144c5565b610c1290606081019060400161449b565b905060006128fa8484613658565b9050808263ffffffff161061294f5761291660c08701876144c5565b602001356040517f1362e4a000000000000000000000000000000000000000000000000000000000815260040161082991815260200190565b60018054906101000a90046001600160a01b03166001600160a01b031663906978426040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c491906142f8565b60015461010090046001600160a01b031663d71ba7c46129e760c08a018a6144c5565b602001356040518263ffffffff1660e01b8152600401612a0991815260200190565b602060405180830381865afa158015612a26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a4a91906142f8565b1015612a9657612a5d60c08701876144c5565b602001356040517f55a9e7ce00000000000000000000000000000000000000000000000000000000815260040161082991815260200190565b6000612ac5612aa860c08901896144c5565b612ab990606081019060400161449b565b60201c63ffffffff1690565b90506000612ad7886020013586613673565b63ffffffff16905067ffffffffffffffff82168114612b3657612afd60c08901896144c5565b602001356040517f6dd6a24f00000000000000000000000000000000000000000000000000000000815260040161082991815260200190565b612bdc87612b4760c08b018b6144c5565b612b51908061455d565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060208b0135612b9760c08d018d6144c5565b60200135612ba860c08e018e6144c5565b612bb990606081019060400161449b565b612bc660c08f018f6144c5565b612bd790608081019060600161449b565b61369a565b612c2657612bed60c08901896144c5565b602001356040517fdb12fb9d00000000000000000000000000000000000000000000000000000000815260040161082991815260200190565b5050505050505050565b612c3d60e08201826141fc565b9050600003612c495750565b612d6a612c5960e08301836141fc565b6000818110612c6a57612c6a61424d565b9050602002810190612c7c91906144c5565b612c8a9060208101906145a4565b612c9760e08401846141fc565b6000818110612ca857612ca861424d565b9050602002810190612cba91906144c5565b612cc890602081019061455d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612d0a9250505060e08501856141fc565b6000818110612d1b57612d1b61424d565b9050602002810190612d2d91906144c5565b60400135612d3e60e08601866141fc565b6000818110612d4f57612d4f61424d565b9050602002810190612d6191906144c5565b60600135613731565b612dd757612d7b60e08201826141fc565b6000818110612d8c57612d8c61424d565b9050602002810190612d9e91906144c5565b606001356040517fd740df6100000000000000000000000000000000000000000000000000000000815260040161082991815260200190565b6020810135612e56612dec60e08401846141fc565b6000818110612dfd57612dfd61424d565b9050602002810190612e0f91906144c5565b60400135612e2060e08501856141fc565b6000818110612e3157612e3161424d565b9050602002810190612e4391906144c5565b612e519060208101906145a4565b6137c4565b14611e1457612e6860e08201826141fc565b6000818110612e7957612e7961424d565b9050602002810190612e8b91906144c5565b606001356040517f82f2469d00000000000000000000000000000000000000000000000000000000815260040161082991815260200190565b83851015612f1157818310612eec57604051633d386eb360e11b815260040160405180910390fd5b808210612f0c57604051633588c6d360e11b815260040160405180910390fd5b612f51565b828210612f3157604051633d386eb360e11b815260040160405180910390fd5b808310612f5157604051633588c6d360e11b815260040160405180910390fd5b61282981613812565b6060612f64610f9e565b612f8157604051633788c6c160e11b815260040160405180910390fd5b6000612f8b610f91565b600854909150640100000000900463ffffffff168114612fbe57604051636fbabc7760e01b815260040160405180910390fd5b600754604051602001612ff99181527f3100000000000000000000000000000000000000000000000000000000000000602082015260210190565b60405160208183030381529060405291505090565b6000806000806000806000806000613024613869565b60045490915060005b818110156131b657600481815481106130485761304861424d565b906000526020600020906005020160010160149054906101000a900460ff16156131ae576004818154811061307f5761307f61424d565b9060005260206000209060050201600401549350600584815481106130a6576130a661424d565b906000526020600020906005020160030154896130c39190614182565b985082816040516020016130d89291906142d6565b60408051601f19818403018152919052805160209091012097506fffffffffffffffffffffffffffffffff8089169750613113906001614182565b600585815481106131265761312661424d565b90600052602060002090600502016003015461314291906141e5565b61314c8a896141e5565b10156131ae57600584815481106131655761316561424d565b90600052602060002090600502016004015495506005848154811061318c5761318c61424d565b906000526020600020906005020160010160149054906101000a900460ff1694505b60010161302d565b509399929850919650505050505050565b6131cf611f34565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a1565b6000805b60045481101561329357836004828154811061323d5761323d61424d565b90600052602060002090600502016000015414801561327f57506004818154811061326a5761326a61424d565b90600052602060002090600502016003015483145b1561328b57905061062e565b60010161321f565b506040517fd950091500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132ce6138ec565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336131fe565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1661083c576133308161393e565b61333b836020613950565b60405160200161334c9291906145c1565b60408051601f198184030181529082905262461bcd60e51b825261082991600401614642565b60008061338187878786613b15565b905082613486856000808267ffffffffffffffff1690506008817eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff16901b600882901c7eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff161790506010817dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff16901b601082901c7dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff161790506020817bffffffff00000000ffffffff00000000ffffffff00000000ffffffff16901b602082901c7bffffffff00000000ffffffff00000000ffffffff00000000ffffffff1617905080915050919050565b826040516020016134c89392919092835260c09190911b77ffffffffffffffffffffffffffffffffffffffffffffffff19166020830152602882015260480190565b6040516020818303038152906040528051906020012091505095945050505050565b6000806134f8868686613b8b565b90506135fc836000808267ffffffffffffffff1690506008817eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff16901b600882901c7eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff161790506010817dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff16901b601082901c7dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff161790506020817bffffffff00000000ffffffff00000000ffffffff00000000ffffffff16901b602082901c7bffffffff00000000ffffffff00000000ffffffff00000000ffffffff1617905080915050919050565b8160405160200161363792919060c09290921b77ffffffffffffffffffffffffffffffffffffffffffffffff19168252600882015260280190565b60405160208183030381529060405280519060200120915050949350505050565b60006136648284614457565b60ff166001901b905092915050565b600060e083901c613685836020614457565b60ff168163ffffffff16901c91505092915050565b6000806136a986868686613bf3565b90506000613704826040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9050886001600160a01b031661371a828a613c3e565b6001600160a01b0316149998505050505050505050565b60008061373e8484613cbd565b90506000613799826040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9050866001600160a01b03166137af8288613c3e565b6001600160a01b031614979650505050505050565b600082826040516020016137f492919091825260601b6bffffffffffffffffffffffff1916602082015260340190565b60405160208183030381529060405280519060200120905092915050565b7dba1914b54e0348a1028d1a103a95ed55c4004b9d332400000000000000008110611e14576040517f9fad870f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060613873610f9e565b61389057604051633788c6c160e11b815260040160405180910390fd5b600061389a610f91565b600854909150640100000000900463ffffffff1681146138cd57604051636fbabc7760e01b815260040160405180910390fd5b600754604051602001612ff9918152600360fc1b602082015260210190565b60015460ff16610f8f5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610829565b606061062e6001600160a01b03831660145b6060600061395f8360026141e5565b61396a906002614182565b67ffffffffffffffff81111561398257613982614675565b6040519080825280601f01601f1916602001820160405280156139ac576020820181803683370190505b509050600360fc1b816000815181106139c7576139c761424d565b60200101906001600160f81b031916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110613a1257613a1261424d565b60200101906001600160f81b031916908160001a9053506000613a368460026141e5565b613a41906001614182565b90505b6001811115613ac6577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110613a8257613a8261424d565b1a60f81b828281518110613a9857613a9861424d565b60200101906001600160f81b031916908160001a90535060049490941c93613abf8161468b565b9050613a44565b5083156117785760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610829565b8260005b8551811015613b82576000613b2f600286614144565b15613b3b576000613b3e565b60015b9050613b6583888481518110613b5657613b5661424d565b60200260200101518387613cd9565b9250600185901c9450508080613b7a906141cc565b915050613b19565b50949350505050565b8160005b8451811015613beb576000613ba5600285614144565b6000149050613bce83878481518110613bc057613bc061424d565b602002602001015183613d39565b9250600184901c9350508080613be3906141cc565b915050613b8f565b509392505050565b604080516020810186905290810184905277ffffffffffffffffffffffffffffffffffffffffffffffff1960c084811b8216606084015283901b166068820152600090607001611d02565b600080600080613c4d85613da0565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa158015613ca8573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b60408051602081018490529081018290526000906060016137f4565b60008215613d1957604080516020810184905290810186905260608101859052608001604051602081830303815290604052805190602001209050611d1b565b604080516020810184905290810185905260608101869052608001611d02565b60008115613d72576040805160208101869052908101849052606001604051602081830303815290604052805190602001209050611778565b5050604080516020808201939093528082019390935280518084038201815260609093019052815191012090565b60008060008351604114613de0576040517f4be6321b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505060208101516040820151606090920151909260009190911a90565b5080546000825560050290600052602060002090810190611e1491905b80821115613e6357600080825560018201805474ffffffffffffffffffffffffffffffffffffffffff1916905560028201819055600382018190556004820155600501613e1b565b5090565b600060208284031215613e7957600080fd5b81356001600160e01b03198116811461177857600080fd5b600060208284031215613ea357600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b81811015613f2d57613f1a838551805182526001600160a01b03602082015116602083015260ff6040820151166040830152606081015160608301526080810151608083015260a081015160a08301525050565b9284019260c09290920191600101613ec6565b50909695505050505050565b6001600160a01b0381168114611e1457600080fd5b60008060408385031215613f6157600080fd5b823591506020830135613f7381613f39565b809150509250929050565b60006101008284031215613f9157600080fd5b50919050565b600080600060608486031215613fac57600080fd5b833567ffffffffffffffff80821115613fc457600080fd5b613fd087838801613f7e565b94506020860135915080821115613fe657600080fd5b613ff287838801613f7e565b9350604086013591508082111561400857600080fd5b5061401586828701613f7e565b9150509250925092565b60008060006060848603121561403457600080fd5b8335925060208401359150604084013563ffffffff8116811461405657600080fd5b809150509250925092565b60ff81168114611e1457600080fd5b6000806040838503121561408357600080fd5b823561408e81614061565b91506020830135613f7381614061565b600080604083850312156140b157600080fd5b823591506020830135613f7381614061565b600080600080608085870312156140d957600080fd5b8435935060208501356140eb81614061565b93969395505050506040820135916060013590565b60008060006060848603121561411557600080fd5b8335925060208401359150604084013561405681614061565b634e487b7160e01b600052601260045260246000fd5b6000826141535761415361412e565b500690565b634e487b7160e01b600052601160045260246000fd5b60008261417d5761417d61412e565b500490565b8082018082111561062e5761062e614158565b63ffffffff8181168382160190808211156141b2576141b2614158565b5092915050565b8181038181111561062e5761062e614158565b6000600182016141de576141de614158565b5060010190565b808202811582820484141761062e5761062e614158565b6000808335601e1984360301811261421357600080fd5b83018035915067ffffffffffffffff82111561422e57600080fd5b6020019150600581901b360382131561424657600080fd5b9250929050565b634e487b7160e01b600052603260045260246000fd5b60c0810161062e8284805182526001600160a01b03602082015116602083015260ff6040820151166040830152606081015160608301526080810151608083015260a081015160a08301525050565b60005b838110156142cd5781810151838201526020016142b5565b50506000910152565b600083516142e88184602088016142b2565b9190910191825250602001919050565b60006020828403121561430a57600080fd5b5051919050565b60006020828403121561432357600080fd5b815161177881613f39565b600181815b8085111561436957816000190482111561434f5761434f614158565b8085161561435c57918102915b93841c9390800290614333565b509250929050565b6000826143805750600161062e565b8161438d5750600061062e565b81600181146143a357600281146143ad576143c9565b600191505061062e565b60ff8411156143be576143be614158565b50506001821b61062e565b5060208310610133831016604e8410600b84101617156143ec575081810a61062e565b6143f6838361432e565b806000190482111561440a5761440a614158565b029392505050565b600061177860ff841683614371565b63ffffffff8281168282160390808211156141b2576141b2614158565b60ff818116838216019081111561062e5761062e614158565b60ff828116828216039081111561062e5761062e614158565b61ffff8281168282160390808211156141b2576141b2614158565b600061177861ffff841683614371565b6000602082840312156144ad57600080fd5b813567ffffffffffffffff8116811461177857600080fd5b60008235607e198336030181126144db57600080fd5b9190910192915050565b60008060008060008060c087890312156144fe57600080fd5b865161450981613f39565b602088015190965061451a81614061565b604088015190955061452b81614061565b6060880151909450801515811461454157600080fd5b809350506080870151915060a087015190509295509295509295565b6000808335601e1984360301811261457457600080fd5b83018035915067ffffffffffffffff82111561458f57600080fd5b60200191503681900382131561424657600080fd5b6000602082840312156145b657600080fd5b813561177881613f39565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516145f98160178501602088016142b2565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516146368160288401602088016142b2565b01602801949350505050565b60208152600082518060208401526146618160408501602087016142b2565b601f01601f19169190910160400192915050565b634e487b7160e01b600052604160045260246000fd5b60008161469a5761469a614158565b50600019019056fea2646970667358221220877d125ab2075078bf258a37c82743f2c629284a350936e8e83bc86e3181171464736f6c63430008130033", - "address": "0x9e3BDb0c69838CC06D85409d4AD6245e54F70F1d", - "block": 9758594, - "url": "https://goerli.etherscan.io/address/0x9e3BDb0c69838CC06D85409d4AD6245e54F70F1d" + "bytecode": "0x60a06040526008805461ffff60c01b191661020160c01b1790553480156200002657600080fd5b5060405162004a7338038062004a738339810160408190526200004991620001ad565b60018054600380546001600160a01b03199081166001600160a01b03898116919091179092556001600160a81b03199092166101008783160217909255600280549091169184169190911790557f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a608052620000c7600082620000e0565b608051620000d69033620000e0565b505050506200020a565b620000ec8282620000f0565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16620000ec576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556200014c3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b80516001600160a01b0381168114620001a857600080fd5b919050565b60008060008060808587031215620001c457600080fd5b620001cf8562000190565b9350620001df6020860162000190565b9250620001ef6040860162000190565b9150620001ff6060860162000190565b905092959194509250565b6080516148466200022d60003960008181610fe90152611e7f01526148466000f3fe608060405234801561001057600080fd5b506004361061025c5760003560e01c806382b39b1b11610145578063b78a52a7116100bd578063d1e8b63d1161008c578063dfbf53ae11610071578063dfbf53ae1461058a578063f7b188a5146105ba578063fb00f2f3146105c257600080fd5b8063d1e8b63d1461056f578063d547741f1461057757600080fd5b8063b78a52a71461051c578063c1d810d51461052f578063c46b402914610542578063ce9877451461055c57600080fd5b80638d8b64281161011457806391d14854116100f957806391d14854146104ca578063a217fddf14610501578063aeace9dc1461050957600080fd5b80638d8b6428146104af57806391276bec146104b757600080fd5b806382b39b1b1461044757806383220626146104975780638456cb591461049f5780638a19c8bc146104a757600080fd5b806362fd29ae116101d857806369da9114116101a757806372286cba1161018c57806372286cba146103cb57806377c75d10146104195780637fe019c61461042c57600080fd5b806369da91141461039d5780636f94aaf2146103b057600080fd5b806362fd29ae1461034d57806363f5cf7c1461035557806364c34a851461036857806369bfac011461037057600080fd5b80632f2ff15d1161022f57806336568abe1161021457806336568abe1461031c5780635c975abb1461032f5780635d4844ea1461033a57600080fd5b80632f2ff15d146102ff5780632f3906da1461031457600080fd5b806301ffc9a7146102615780631835009614610289578063248a9ca3146102b95780632a4e6249146102ea575b600080fd5b61027461026f366004613fc1565b6105d5565b60405190151581526020015b60405180910390f35b6001546102a19061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610280565b6102dc6102c7366004613feb565b60009081526020819052604090206001015490565b604051908152602001610280565b6102f261063e565b6040516102809190614004565b61031261030d3660046140a8565b61074b565b005b610274610775565b61031261032a3660046140a8565b6107bf565b60015460ff16610274565b6003546102a1906001600160a01b031681565b6102dc610850565b6103126103633660046140f1565b61091c565b6102dc610be5565b6008546103849067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610280565b6002546102a1906001600160a01b031681565b60085461038490600160801b900467ffffffffffffffff1681565b6103de6103d9366004613feb565b610cc5565b604080519687526001600160a01b039095166020870152921515938501939093526060840152608083019190915260a082015260c001610280565b610274610427366004613feb565b610d1c565b60085461038490600160401b900467ffffffffffffffff1681565b61045a610455366004613feb565b610fcc565b604080519687526001600160a01b03909516602087015260ff909316938501939093526060840152608083019190915260a082015260c001610280565b6102dc610fdc565b610312610fe7565b61038461104a565b610274611057565b6103126104c5366004614196565b611081565b6102746104d83660046140a8565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6102dc600081565b6103126105173660046141da565b611607565b61027461052a366004614208565b6116d8565b61031261053d36600461422d565b611867565b61054a611d3f565b60405160ff9091168152602001610280565b6102dc61056a36600461422d565b611dc4565b610274611e33565b6103126105853660046140a8565b611e58565b600954600a54600b54600c54600d5461045a94936001600160a01b03811693600160a01b90910460ff1692909186565b610312611e7d565b6102746105d036600461426a565b611ede565b60006001600160e01b031982167f7965db0b00000000000000000000000000000000000000000000000000000000148061063857507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b6060610648611057565b61066557604051633788c6c160e11b815260040160405180910390fd5b600061066f61104a565b60085490915067ffffffffffffffff808316600160401b90920416146106a857604051636fbabc7760e01b815260040160405180910390fd5b6005805480602002602001604051908101604052809291908181526020016000905b828210156107415760008481526020908190206040805160c08101825260058602909201805483526001808201546001600160a01b03811685870152600160a01b900460ff169284019290925260028101546060840152600381015460808401526004015460a083015290835290920191016106ca565b5050505091505090565b60008281526020819052604090206001015461076681611f1a565b6107708383611f27565b505050565b6000806107836098436142b9565b9050610791600460986142e3565b81101580156107aa57506107a7600260986142e3565b81105b156107b757600191505090565b600091505090565b6001600160a01b03811633146108425760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b61084c8282611fc5565b5050565b60008061085b61104a565b6108669060016142f7565b6007546008549192509061088c90600160401b900467ffffffffffffffff1660016142f7565b67ffffffffffffffff168267ffffffffffffffff161115610638576008546000906001906108cb90600160401b900467ffffffffffffffff168561431f565b6108d5919061431f565b67ffffffffffffffff16905081816040516020016108fd929190918252602082015260400190565b6040516020818303038152906040528051906020012091505092915050565b610924612044565b61092c612097565b6040805160c0810182526009548152600a546001600160a01b0381166020830152600160a01b900460ff1691810191909152600b546060820152600c546080820152600d5460a0820152600654600754600091829161098c600f826142b9565b9350610999600e826142b9565b92508383106109b057826109ac81614340565b9350505b6109c38660200135838760400151611ede565b6109e357604051633b5f43a360e01b815260036004820152602401610839565b6109ee86601e61266c565b6109f78661297e565b610a0086612d7e565b610a138860200135838760400151611ede565b610a3357604051633b5f43a360e01b815260026004820152602401610839565b610a4788610a42866002614359565b61266c565b610a508861297e565b610a5988612d7e565b610a6c8760200135838760400151611ede565b610a8c57604051633b5f43a360e01b815260016004820152602401610839565b610a9b87610a42856002614359565b610aa48761297e565b610aad87612d7e565b610b238484610abc8b80614370565b6000818110610acd57610acd6143c1565b60200291909101359050610ae18b80614370565b6000818110610af257610af26143c1565b60200291909101359050610b068b80614370565b6000818110610b1757610b176143c1565b90506020020135613012565b7f788e77979e6e6a8a6a5d2c19c58b1ff9671298f54c85ac6f6aa30379aed5861a85604051610b5291906143d7565b60405180910390a160015460208601516040517f51cff8d90000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416906351cff8d990602401600060405180830381600087803b158015610bc357600080fd5b505af1158015610bd7573d6000803e3d6000fd5b505050505050505050505050565b6000610bef611e33565b80610c2d5750600854600160401b900467ffffffffffffffff16610c1161104a565b67ffffffffffffffff16118015610c2d5750610c2b611057565b155b15610c3f57610c3a610fdc565b905090565b610c47611057565b15610c5457610c3a610850565b610c5c610775565b8015610c8b5750600854600160401b900467ffffffffffffffff16610c7f61104a565b67ffffffffffffffff16145b15610cc2576040517f36b7884b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90565b60048181548110610cd557600080fd5b6000918252602090912060059091020180546001820154600283015460038401546004909401549294506001600160a01b03821693600160a01b90920460ff169290919086565b6000610d26611057565b610d4357604051633788c6c160e11b815260040160405180910390fd5b6000610d4d61104a565b60085490915067ffffffffffffffff808316600160401b9092041614610d8657604051636fbabc7760e01b815260040160405180910390fd5b60085467ffffffffffffffff600160801b909104811690821611610dbd57604051630c8d9eab60e31b815260040160405180910390fd5b600080600080600080600080610dd16130a8565b90506000610ddd613162565b600454919650945060005b81811015610fb85760048181548110610e0357610e036143c1565b906000526020600020906005020160040154945060048181548110610e2a57610e2a6143c1565b906000526020600020906005020160010160149054906101000a900460ff168015610e78575060058581548110610e6357610e636143c1565b90600052602060002090600502016004015487145b8015610eb6575060058581548110610e9257610e926143c1565b600091825260209091206001600590920201015460ff878116600160a01b90920416145b15610fb05760058581548110610ece57610ece6143c1565b9060005260206000209060050201600301548b610eeb9190614426565b9a508383604051602001610f0092919061445d565b60408051601f19818403018152919052805160209091012098506fffffffffffffffffffffffffffffffff808a169850610f3b906001614426565b60058681548110610f4e57610f4e6143c1565b906000526020600020906005020160030154610f6a9190614359565b610f748c8a614359565b1015610fa25760058581548110610f8d57610f8d6143c1565b90600052602060002090600502016000015499505b82610fac81614340565b9350505b600101610de8565b505050959099149998505050505050505050565b60058181548110610cd557600080fd5b60008061086661104a565b7f000000000000000000000000000000000000000000000000000000000000000060009081526020818152604080832033845290915290205460ff1661104057604051631d77d47760e21b815260040160405180910390fd5b61104861331b565b565b6000610c3a6098436142e3565b6000611065600260986142e3565b6110706098436142b9565b1061107b5750600190565b50600090565b611089612044565b600061109361104a565b6003546040516348962b9360e01b8152600481018690529192506000916001600160a01b03909116906348962b9390602401602060405180830381865afa1580156110e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611106919061447f565b9050611110611e33565b611146576040517fdc816a8700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001611154600460986142e3565b61115e9190614498565b6111696098436142b9565b036111a0576040517f5baef6b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8267ffffffffffffffff168267ffffffffffffffff1611156111ee576040517f50ff7c0000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8267ffffffffffffffff168267ffffffffffffffff16101561123c576040517f7a0c0fd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67016345785d8a000081101561126557604051638ecf3d0360e01b815260040160405180910390fd5b6003546040517fa0d22b210000000000000000000000000000000000000000000000000000000081526004810186905233916001600160a01b03169063a0d22b2190602401602060405180830381865afa1580156112c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112eb91906144ab565b6001600160a01b03161461132b576040517fb78fd5c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61133760986002614359565b6113419043614498565b6003546040516376f2098160e11b8152600481018790526001600160a01b039091169063ede4130290602401602060405180830381865afa15801561138a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ae919061447f565b106113cc57604051630a0744c560e01b815260040160405180910390fd5b60085467ffffffffffffffff83811691161461140c576113ee60046000613f58565b6008805467ffffffffffffffff191667ffffffffffffffff84161790555b60045460005b8181101561147f57856004828154811061142e5761142e6143c1565b90600052602060002090600502016000015403611477576040517ffc507a3100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101611412565b506040805160c081018252868152336020808301918252600083850181815260608501888152608086018d815260a0870184815260048054600181018255955296517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b60059095029485015594517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c8401805493516001600160a01b0390921674ffffffffffffffffffffffffffffffffffffffffff1990941693909317600160a01b9115159190910217909155517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19d82015591517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19e83015591517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19f90910155815167ffffffffffffffff871681529081018790527f68e0867601a98978930107aee7f425665e61edd70ca594c68ca5da9e81f84c29910160405180910390a1505050505050565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff1661166f576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff16600160c01b60ff948516027fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff1617600160c81b9290931691909102919091179055565b60006116e2610775565b15611719576040517fe2586bcc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61172560986002614359565b61172f9043614498565b6003546040516376f2098160e11b8152600481018690526001600160a01b039091169063ede4130290602401602060405180830381865afa158015611778573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179c919061447f565b106117ba57604051630a0744c560e01b815260040160405180910390fd5b6003546040516348962b9360e01b81526004810185905267016345785d8a0000916001600160a01b0316906348962b9390602401602060405180830381865afa15801561180b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182f919061447f565b101561184e57604051638ecf3d0360e01b815260040160405180910390fd5b6118608361185a610be5565b84611ede565b9392505050565b61186f612044565b600061187961104a565b9050611883611d3f565b60ff168460ff1610156118c2576040517f83d9b7bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118ca610775565b611900576040517fd1088db600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085467ffffffffffffffff828116911614611948576040517f842a9e0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085467ffffffffffffffff828116600160401b9092041614611a305761196d610be5565b60065561197c60056000613f58565b600880547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff16600160401b67ffffffffffffffff8416908102919091179091556006546040805192835260208301919091527ff0ae472da9c8da86bda4991a549c03a3cb328b5f360ea11a5b8814f32bb85176910160405180910390a1611a30600754604080516020810192909252449082015260600160408051601f198184030181529190528051602090910120600755565b6000611a3e86868686611dc4565b90506000611a4c878361336f565b9050600060048281548110611a6357611a636143c1565b60009182526020918290206040805160c081018252600593909302909101805480845260018201546001600160a01b03811695850195909552600160a01b90940460ff1615159183019190915260028101546060830152600381015460808301526004015460a0820152600654909250611ade919089611ede565b611b1a576006546040517f14ebbbe400000000000000000000000000000000000000000000000000000000815260040161083991815260200190565b806040015115611b56576040517fa89ac15100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160048381548110611b6b57611b6b6143c1565b906000526020600020906005020160010160146101000a81548160ff02191690831515021790555060058054905060048381548110611bac57611bac6143c1565b90600052602060002090600502016004018190555060056040518060c001604052808360000151815260200183602001516001600160a01b031681526020018960ff16815260200183606001518152602001896002611c0b91906145ac565b8460600151611c1a9190614359565b815260209081018990528254600181810185556000948552938290208351600590920201908155908201519281018054604084015160ff16600160a01b0274ffffffffffffffffffffffffffffffffffffffffff199091166001600160a01b0390951694909417939093179092556060808201516002808501919091556080830151600385015560a0909201516004909301929092558251918301517f13fc17fd71632266fe82092de6dd91a06b4fa68d8dc950492e5421cbed55a6a5928792909190611ce8908c906145ac565b8560600151611cf79190614359565b6040805167ffffffffffffffff909516855260208501939093529183015260608201526080810188905260ff891660a082015260c00160405180910390a15050505050505050565b6008546000908190611d649067ffffffffffffffff600160801b82048116911661431f565b67ffffffffffffffff169050600060fe8211611d805781611d83565b60fe5b611d8e9060016145bb565b600a5490915060ff600160a01b9091048116908216811115611db957611db482826145d4565b611dbc565b60005b935050505090565b60408051602081018690527fff0000000000000000000000000000000000000000000000000000000000000060f886901b169181019190915260418101839052606181018290526000906081015b6040516020818303038152906040528051906020012090505b949350505050565b6000611e41600460986142e3565b611e4c6098436142b9565b101561107b5750600190565b600082815260208190526040902060010154611e7381611f1a565b6107708383611fc5565b7f000000000000000000000000000000000000000000000000000000000000000060009081526020818152604080832033845290915290205460ff16611ed657604051631d77d47760e21b815260040160405180910390fd5b61104861341a565b60008160ff16600003611ef357506001611860565b611f0260ff83166101006145ed565b611f0d906002614608565b8484181090509392505050565b611f248133613453565b50565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1661084c576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055611f813390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff161561084c576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60015460ff16156110485760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610839565b60006120a161104a565b90506120ab611057565b6120c857604051633788c6c160e11b815260040160405180910390fd5b60085467ffffffffffffffff828116600160401b90920416146120fe57604051636fbabc7760e01b815260040160405180910390fd5b60085467ffffffffffffffff600160801b90910481169082161161213557604051630c8d9eab60e31b815260040160405180910390fd5b600454604051818152600091829182918291829182917f6752c5e71c95fb93bc7137adeb115a33fa4e54e2683e33d3f90c2bb1c4b6c2a59060200160405180910390a16005546040519081527f4c03de6a759749c0c9387b7014634dc5c6af610e1366023d90751c783a998f8d9060200160405180910390a16121b6613162565b6040805183815260ff831660208201529295509093507f34e8eda4cd857cd2865becf58a47748f31415f4a382cbb2cc0c64b9a27c717be910160405180910390a160006122016130a8565b905060005b828110156125a657600060048281548110612223576122236143c1565b600091825260208083206040805160c08101825260059485029092018054835260018101546001600160a01b03811694840194909452600160a01b90930460ff16151590820152600282015460608201526003820154608082015260049091015460a082018190528254919450929190839081106122a3576122a36143c1565b60009182526020918290206040805160c0810182526005939093029091018054835260018101546001600160a01b03811694840194909452600160a01b90930460ff1682820152600283015460608301526003830154608083015260049092015460a082015290840151909150801561231f57508060a0015188145b80156123345750806040015160ff168760ff16145b15612429576080810151612348908d614426565b9b50848b60405160200161235d92919061445d565b60408051601f19818403018152919052805160209091012099506fffffffffffffffffffffffffffffffff808b169950612398906001614426565b81608001516123a79190614359565b6123b18d8b614359565b101561241b5780516009556020810151600a8054604084015160ff16600160a01b0274ffffffffffffffffffffffffffffffffffffffffff199091166001600160a01b03909316929092179190911790556060810151600b556080810151600c5560a0810151600d555b8a61242581614340565b9b50505b8260400151801561245257508060a00151881415806124525750806040015160ff168760ff1614155b156124f35760035481516001600160a01b039091169063837fd16a906124798a60026145ac565b60085461249290609890600160c01b900460ff16614359565b61249c9190614359565b6040516001600160e01b031960e085901b16815260048101929092526024820152604401600060405180830381600087803b1580156124da57600080fd5b505af11580156124ee573d6000803e3d6000fd5b505050505b82604001516125985760035483516001600160a01b039091169063837fd16a9061251e8a60026145ac565b60085461253790609890600160c81b900460ff16614359565b6125419190614359565b6040516001600160e01b031960e085901b16815260048101929092526024820152604401600060405180830381600087803b15801561257f57600080fd5b505af1158015612593573d6000803e3d6000fd5b505050505b836001019350505050612206565b506002546040517fffb98fe300000000000000000000000000000000000000000000000000000000815261ffff891660048201526001600160a01b039091169063ffb98fe390602401600060405180830381600087803b15801561260957600080fd5b505af115801561261d573d6000803e3d6000fd5b50506008805467ffffffffffffffff909c16600160801b027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff909c169b909b17909a5550505050505050505050565b60075460009061267e906080906142b9565b905060006126e161269260a0860186614370565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050506060860135846126d960a0890160808a01614618565b6006546134c6565b60408051858152602081018390529192507f94e252069a85aa79db21f5bd8ca4e14dd3a3927aa492711017a2c8ddad95af00910160405180910390a161276961272a8580614370565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050505060208601358561040061363e565b600d54146127945760405163755f0a2560e01b81526001600482015260248101829052604401610839565b6127a160a0850185614370565b60008181106127b2576127b26143c1565b905060200201358480604001906127c99190614370565b60008181106127da576127da6143c1565b90506020020135146128095760405163755f0a2560e01b81526002600482015260248101829052604401610839565b60008061281960e0870187614370565b90501161282a57846020013561285f565b61283760e0860186614370565b6000818110612848576128486143c1565b905060200281019061285a9190614633565b606001355b90506128bd6128716040870187614370565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050506060870135856128b860a08a0160808b01614618565b61363e565b81146128e65760405163755f0a2560e01b81526003600482015260248101839052604401610839565b60006128f560e0870187614370565b9050111561292d5760408051602080880135908201529081018390526060016040516020818303038152906040528051906020012091505b816129388680614370565b6000818110612949576129496143c1565b90506020020135146129775760405163755f0a2560e01b815260048181015260248101839052604401610839565b5050505050565b6001546000908190819061010090046001600160a01b031663c81e25ab6129a860c0870187614633565b602001356040518263ffffffff1660e01b81526004016129ca91815260200190565b60c060405180830381865afa1580156129e7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0b9190614653565b5050509250925092506000612a3a858060c00190612a299190614633565b610cc2906060810190604001614618565b90506000612a4884846137ac565b9050808263ffffffff1610612a9d57612a6460c0870187614633565b602001356040517f1362e4a000000000000000000000000000000000000000000000000000000000815260040161083991815260200190565b60018054906101000a90046001600160a01b03166001600160a01b031663906978426040518163ffffffff1660e01b8152600401602060405180830381865afa158015612aee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b12919061447f565b60015461010090046001600160a01b031663d71ba7c4612b3560c08a018a614633565b602001356040518263ffffffff1660e01b8152600401612b5791815260200190565b602060405180830381865afa158015612b74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b98919061447f565b1015612be457612bab60c0870187614633565b602001356040517f55a9e7ce00000000000000000000000000000000000000000000000000000000815260040161083991815260200190565b6000612c13612bf660c0890189614633565b612c07906060810190604001614618565b60201c63ffffffff1690565b90506000612c258860200135866137c7565b63ffffffff16905067ffffffffffffffff82168114612c8457612c4b60c0890189614633565b602001356040517f6dd6a24f00000000000000000000000000000000000000000000000000000000815260040161083991815260200190565b612d2a87612c9560c08b018b614633565b612c9f90806146cb565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060208b0135612ce560c08d018d614633565b60200135612cf660c08e018e614633565b612d07906060810190604001614618565b612d1460c08f018f614633565b612d25906080810190606001614618565b6137ee565b612d7457612d3b60c0890189614633565b602001356040517fdb12fb9d00000000000000000000000000000000000000000000000000000000815260040161083991815260200190565b5050505050505050565b612d8b60e0820182614370565b9050600003612d975750565b612eb8612da760e0830183614370565b6000818110612db857612db86143c1565b9050602002810190612dca9190614633565b612dd8906020810190614712565b612de560e0840184614370565b6000818110612df657612df66143c1565b9050602002810190612e089190614633565b612e169060208101906146cb565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612e589250505060e0850185614370565b6000818110612e6957612e696143c1565b9050602002810190612e7b9190614633565b60400135612e8c60e0860186614370565b6000818110612e9d57612e9d6143c1565b9050602002810190612eaf9190614633565b60600135613885565b612f2557612ec960e0820182614370565b6000818110612eda57612eda6143c1565b9050602002810190612eec9190614633565b606001356040517fd740df6100000000000000000000000000000000000000000000000000000000815260040161083991815260200190565b6020810135612fa4612f3a60e0840184614370565b6000818110612f4b57612f4b6143c1565b9050602002810190612f5d9190614633565b60400135612f6e60e0850185614370565b6000818110612f7f57612f7f6143c1565b9050602002810190612f919190614633565b612f9f906020810190614712565b613918565b14611f2457612fb660e0820182614370565b6000818110612fc757612fc76143c1565b9050602002810190612fd99190614633565b606001356040517f82f2469d00000000000000000000000000000000000000000000000000000000815260040161083991815260200190565b8385101561305f5781831061303a57604051633d386eb360e11b815260040160405180910390fd5b80821061305a57604051633588c6d360e11b815260040160405180910390fd5b61309f565b82821061307f57604051633d386eb360e11b815260040160405180910390fd5b80831061309f57604051633588c6d360e11b815260040160405180910390fd5b61297781613966565b60606130b2611057565b6130cf57604051633788c6c160e11b815260040160405180910390fd5b60006130d961104a565b60085490915067ffffffffffffffff808316600160401b909204161461311257604051636fbabc7760e01b815260040160405180910390fd5b60075460405160200161314d9181527f3100000000000000000000000000000000000000000000000000000000000000602082015260210190565b60405160208183030381529060405291505090565b60008060008060008060008060006131786139bd565b60045490915060005b8181101561330a576004818154811061319c5761319c6143c1565b906000526020600020906005020160010160149054906101000a900460ff161561330257600481815481106131d3576131d36143c1565b9060005260206000209060050201600401549350600584815481106131fa576131fa6143c1565b906000526020600020906005020160030154896132179190614426565b9850828160405160200161322c92919061445d565b60408051601f19818403018152919052805160209091012097506fffffffffffffffffffffffffffffffff8089169750613267906001614426565b6005858154811061327a5761327a6143c1565b9060005260206000209060050201600301546132969190614359565b6132a08a89614359565b101561330257600584815481106132b9576132b96143c1565b9060005260206000209060050201600401549550600584815481106132e0576132e06143c1565b906000526020600020906005020160010160149054906101000a900460ff1694505b600101613181565b509399929850919650505050505050565b613323612044565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a1565b6000805b6004548110156133e7578360048281548110613391576133916143c1565b9060005260206000209060050201600001541480156133d35750600481815481106133be576133be6143c1565b90600052602060002090600502016003015483145b156133df579050610638565b600101613373565b506040517fd950091500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613422613a46565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33613352565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1661084c5761348481613a98565b61348f836020613aaa565b6040516020016134a092919061472f565b60408051601f198184030181529082905262461bcd60e51b8252610839916004016147b0565b6000806134d587878786613c6f565b9050826135da856000808267ffffffffffffffff1690506008817eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff16901b600882901c7eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff161790506010817dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff16901b601082901c7dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff161790506020817bffffffff00000000ffffffff00000000ffffffff00000000ffffffff16901b602082901c7bffffffff00000000ffffffff00000000ffffffff00000000ffffffff1617905080915050919050565b8260405160200161361c9392919092835260c09190911b77ffffffffffffffffffffffffffffffffffffffffffffffff19166020830152602882015260480190565b6040516020818303038152906040528051906020012091505095945050505050565b60008061364c868686613ce5565b9050613750836000808267ffffffffffffffff1690506008817eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff16901b600882901c7eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff161790506010817dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff16901b601082901c7dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff161790506020817bffffffff00000000ffffffff00000000ffffffff00000000ffffffff16901b602082901c7bffffffff00000000ffffffff00000000ffffffff00000000ffffffff1617905080915050919050565b8160405160200161378b92919060c09290921b77ffffffffffffffffffffffffffffffffffffffffffffffff19168252600882015260280190565b60405160208183030381529060405280519060200120915050949350505050565b60006137b882846145d4565b60ff166001901b905092915050565b600060e083901c6137d98360206145d4565b60ff168163ffffffff16901c91505092915050565b6000806137fd86868686613d4d565b90506000613858826040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9050886001600160a01b031661386e828a613d98565b6001600160a01b0316149998505050505050505050565b6000806138928484613e17565b905060006138ed826040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9050866001600160a01b03166139038288613d98565b6001600160a01b031614979650505050505050565b6000828260405160200161394892919091825260601b6bffffffffffffffffffffffff1916602082015260340190565b60405160208183030381529060405280519060200120905092915050565b7dba1914b54e0348a1028d1a103a95ed55c4004b9d332400000000000000008110611f24576040517f9fad870f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606139c7611057565b6139e457604051633788c6c160e11b815260040160405180910390fd5b60006139ee61104a565b60085490915067ffffffffffffffff808316600160401b9092041614613a2757604051636fbabc7760e01b815260040160405180910390fd5b60075460405160200161314d918152600360fc1b602082015260210190565b60015460ff166110485760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610839565b60606106386001600160a01b03831660145b60606000613ab9836002614359565b613ac4906002614426565b67ffffffffffffffff811115613adc57613adc6147e3565b6040519080825280601f01601f191660200182016040528015613b06576020820181803683370190505b509050600360fc1b81600081518110613b2157613b216143c1565b60200101906001600160f81b031916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110613b6c57613b6c6143c1565b60200101906001600160f81b031916908160001a9053506000613b90846002614359565b613b9b906001614426565b90505b6001811115613c20577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110613bdc57613bdc6143c1565b1a60f81b828281518110613bf257613bf26143c1565b60200101906001600160f81b031916908160001a90535060049490941c93613c19816147f9565b9050613b9e565b5083156118605760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610839565b8260005b8551811015613cdc576000613c896002866142b9565b15613c95576000613c98565b60015b9050613cbf83888481518110613cb057613cb06143c1565b60200260200101518387613e33565b9250600185901c9450508080613cd490614340565b915050613c73565b50949350505050565b8160005b8451811015613d45576000613cff6002856142b9565b6000149050613d2883878481518110613d1a57613d1a6143c1565b602002602001015183613e93565b9250600184901c9350508080613d3d90614340565b915050613ce9565b509392505050565b604080516020810186905290810184905277ffffffffffffffffffffffffffffffffffffffffffffffff1960c084811b8216606084015283901b166068820152600090607001611e12565b600080600080613da785613efa565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa158015613e02573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b6040805160208101849052908101829052600090606001613948565b60008215613e7357604080516020810184905290810186905260608101859052608001604051602081830303815290604052805190602001209050611e2b565b604080516020810184905290810185905260608101869052608001611e12565b60008115613ecc576040805160208101869052908101849052606001604051602081830303815290604052805190602001209050611860565b5050604080516020808201939093528082019390935280518084038201815260609093019052815191012090565b60008060008351604114613f3a576040517f4be6321b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505060208101516040820151606090920151909260009190911a90565b5080546000825560050290600052602060002090810190611f2491905b80821115613fbd57600080825560018201805474ffffffffffffffffffffffffffffffffffffffffff1916905560028201819055600382018190556004820155600501613f75565b5090565b600060208284031215613fd357600080fd5b81356001600160e01b03198116811461186057600080fd5b600060208284031215613ffd57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b8181101561408757614074838551805182526001600160a01b03602082015116602083015260ff6040820151166040830152606081015160608301526080810151608083015260a081015160a08301525050565b9284019260c09290920191600101614020565b50909695505050505050565b6001600160a01b0381168114611f2457600080fd5b600080604083850312156140bb57600080fd5b8235915060208301356140cd81614093565b809150509250929050565b600061010082840312156140eb57600080fd5b50919050565b60008060006060848603121561410657600080fd5b833567ffffffffffffffff8082111561411e57600080fd5b61412a878388016140d8565b9450602086013591508082111561414057600080fd5b61414c878388016140d8565b9350604086013591508082111561416257600080fd5b5061416f868287016140d8565b9150509250925092565b803567ffffffffffffffff8116811461419157600080fd5b919050565b6000806000606084860312156141ab57600080fd5b83359250602084013591506141c260408501614179565b90509250925092565b60ff81168114611f2457600080fd5b600080604083850312156141ed57600080fd5b82356141f8816141cb565b915060208301356140cd816141cb565b6000806040838503121561421b57600080fd5b8235915060208301356140cd816141cb565b6000806000806080858703121561424357600080fd5b843593506020850135614255816141cb565b93969395505050506040820135916060013590565b60008060006060848603121561427f57600080fd5b83359250602084013591506040840135614298816141cb565b809150509250925092565b634e487b7160e01b600052601260045260246000fd5b6000826142c8576142c86142a3565b500690565b634e487b7160e01b600052601160045260246000fd5b6000826142f2576142f26142a3565b500490565b67ffffffffffffffff818116838216019080821115614318576143186142cd565b5092915050565b67ffffffffffffffff828116828216039080821115614318576143186142cd565b600060018201614352576143526142cd565b5060010190565b8082028115828204841417610638576106386142cd565b6000808335601e1984360301811261438757600080fd5b83018035915067ffffffffffffffff8211156143a257600080fd5b6020019150600581901b36038213156143ba57600080fd5b9250929050565b634e487b7160e01b600052603260045260246000fd5b60c081016106388284805182526001600160a01b03602082015116602083015260ff6040820151166040830152606081015160608301526080810151608083015260a081015160a08301525050565b80820180821115610638576106386142cd565b60005b8381101561445457818101518382015260200161443c565b50506000910152565b6000835161446f818460208801614439565b9190910191825250602001919050565b60006020828403121561449157600080fd5b5051919050565b81810381811115610638576106386142cd565b6000602082840312156144bd57600080fd5b815161186081614093565b600181815b808511156145035781600019048211156144e9576144e96142cd565b808516156144f657918102915b93841c93908002906144cd565b509250929050565b60008261451a57506001610638565b8161452757506000610638565b816001811461453d576002811461454757614563565b6001915050610638565b60ff841115614558576145586142cd565b50506001821b610638565b5060208310610133831016604e8410600b8410161715614586575081810a610638565b61459083836144c8565b80600019048211156145a4576145a46142cd565b029392505050565b600061186060ff84168361450b565b60ff8181168382160190811115610638576106386142cd565b60ff8281168282160390811115610638576106386142cd565b61ffff828116828216039080821115614318576143186142cd565b600061186061ffff84168361450b565b60006020828403121561462a57600080fd5b61186082614179565b60008235607e1983360301811261464957600080fd5b9190910192915050565b60008060008060008060c0878903121561466c57600080fd5b865161467781614093565b6020880151909650614688816141cb565b6040880151909550614699816141cb565b606088015190945080151581146146af57600080fd5b809350506080870151915060a087015190509295509295509295565b6000808335601e198436030181126146e257600080fd5b83018035915067ffffffffffffffff8211156146fd57600080fd5b6020019150368190038213156143ba57600080fd5b60006020828403121561472457600080fd5b813561186081614093565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351614767816017850160208801614439565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516147a4816028840160208801614439565b01602801949350505050565b60208152600082518060208401526147cf816040850160208701614439565b601f01601f19169190910160400192915050565b634e487b7160e01b600052604160045260246000fd5b600081614808576148086142cd565b50600019019056fea26469706673582212209b67077ddf5f72f51e492917930befb9611abee6ae71e96d2220eaf71124933a64736f6c63430008130033", + "address": "0x264079eeF0CE42D790e3FA7DF8D0cfA675ef6504", + "block": 9803225, + "url": "https://goerli.etherscan.io/address/0x264079eeF0CE42D790e3FA7DF8D0cfA675ef6504" } } } \ No newline at end of file