diff --git a/contracts/src/v0.8/dev/automation/2_1/KeeperRegistry2_1.sol b/contracts/src/v0.8/dev/automation/2_1/KeeperRegistry2_1.sol index 4e1759266c1..6d752fd038a 100644 --- a/contracts/src/v0.8/dev/automation/2_1/KeeperRegistry2_1.sol +++ b/contracts/src/v0.8/dev/automation/2_1/KeeperRegistry2_1.sol @@ -137,7 +137,8 @@ contract KeeperRegistry2_1 is KeeperRegistryBase2_1, OCR2Abstract, Chainable, ER // Actually perform the target upkeep (upkeepTransmitInfo[i].performSuccess, upkeepTransmitInfo[i].gasUsed) = _performUpkeep( - upkeepTransmitInfo[i].upkeep, + upkeepTransmitInfo[i].upkeep.forwarder, + report.gasLimits[i], report.performDatas[i] ); @@ -216,7 +217,7 @@ contract KeeperRegistry2_1 is KeeperRegistryBase2_1, OCR2Abstract, Chainable, ER if (s_hotVars.paused) revert RegistryPaused(); Upkeep memory upkeep = s_upkeep[id]; - return _performUpkeep(upkeep, performData); + return _performUpkeep(upkeep.forwarder, upkeep.executeGas, performData); } /** @@ -400,10 +401,15 @@ contract KeeperRegistry2_1 is KeeperRegistryBase2_1, OCR2Abstract, Chainable, ER uint256 fastGasWei, uint256 linkNative, uint256[] memory upkeepIds, + uint256[] memory gasLimits, bytes[] memory triggers, bytes[] memory performDatas - ) = abi.decode(rawReport, (uint256, uint256, uint256[], bytes[], bytes[])); - if (upkeepIds.length != triggers.length || upkeepIds.length != performDatas.length) { + ) = abi.decode(rawReport, (uint256, uint256, uint256[], uint256[], bytes[], bytes[])); + if ( + upkeepIds.length != gasLimits.length || + upkeepIds.length != triggers.length || + upkeepIds.length != performDatas.length + ) { revert InvalidReport(); } return @@ -411,6 +417,7 @@ contract KeeperRegistry2_1 is KeeperRegistryBase2_1, OCR2Abstract, Chainable, ER fastGasWei: fastGasWei, linkNative: linkNative, upkeepIds: upkeepIds, + gasLimits: gasLimits, triggers: triggers, performDatas: performDatas }); @@ -528,12 +535,13 @@ contract KeeperRegistry2_1 is KeeperRegistryBase2_1, OCR2Abstract, Chainable, ER * transmitter and the exact gas required by the Upkeep */ function _performUpkeep( - Upkeep memory upkeep, + AutomationForwarder forwarder, + uint256 executeGas, bytes memory performData ) private nonReentrant returns (bool success, uint256 gasUsed) { gasUsed = gasleft(); bytes memory callData = abi.encodeWithSelector(PERFORM_SELECTOR, performData); - success = upkeep.forwarder.forward(upkeep.executeGas, callData); + success = forwarder.forward(executeGas, callData); gasUsed = gasUsed - gasleft(); return (success, gasUsed); } diff --git a/contracts/src/v0.8/dev/automation/2_1/KeeperRegistryBase2_1.sol b/contracts/src/v0.8/dev/automation/2_1/KeeperRegistryBase2_1.sol index 0134785dcab..116f65fdca9 100644 --- a/contracts/src/v0.8/dev/automation/2_1/KeeperRegistryBase2_1.sol +++ b/contracts/src/v0.8/dev/automation/2_1/KeeperRegistryBase2_1.sol @@ -73,7 +73,7 @@ abstract contract KeeperRegistryBase2_1 is ConfirmedOwner, ExecutionPrevention { bytes internal constant L1_FEE_DATA_PADDING = "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"; - uint256 internal constant REGISTRY_GAS_OVERHEAD = 75_000; // Used only in maxPayment estimation, not in actual payment + uint256 internal constant REGISTRY_GAS_OVERHEAD = 80_000; // Used only in maxPayment estimation, not in actual payment uint256 internal constant REGISTRY_PER_PERFORM_BYTE_GAS_OVERHEAD = 20; // Used only in maxPayment estimation, not in actual payment. Value scales with performData length. uint256 internal constant REGISTRY_PER_SIGNER_GAS_OVERHEAD = 7_500; // Used only in maxPayment estimation, not in actual payment. Value scales with f. @@ -279,11 +279,11 @@ abstract contract KeeperRegistryBase2_1 is ConfirmedOwner, ExecutionPrevention { } // Report transmitted by OCR to transmit function - // TODO - do we use this struct anywhere? struct Report { uint256 fastGasWei; uint256 linkNative; uint256[] upkeepIds; + uint256[] gasLimits; bytes[] triggers; bytes[] performDatas; } diff --git a/contracts/test/v0.8/automation/KeeperRegistry2_1.test.ts b/contracts/test/v0.8/automation/KeeperRegistry2_1.test.ts index 0c98e996251..9b738ef0fc2 100644 --- a/contracts/test/v0.8/automation/KeeperRegistry2_1.test.ts +++ b/contracts/test/v0.8/automation/KeeperRegistry2_1.test.ts @@ -76,11 +76,11 @@ enum Trigger { // ----------------------------------------------------------------------------------------------- // These are the gas overheads that off chain systems should provide to check upkeep / transmit // These overheads are not actually charged for -const transmitGasOverhead = BigNumber.from(900_000) +const transmitGasOverhead = BigNumber.from(1_000_000) const checkGasOverhead = BigNumber.from(400_000) // These values should match the constants declared in registry -const registryGasOverhead = BigNumber.from(75_000) +const registryGasOverhead = BigNumber.from(80_000) const registryPerSignerGasOverhead = BigNumber.from(7500) const registryPerPerformByteGasOverhead = BigNumber.from(20) const cancellationDelay = 50 @@ -92,6 +92,75 @@ const gasCalculationMargin = BigNumber.from(4000) const linkEth = BigNumber.from(5000000000000000) // 1 Link = 0.005 Eth const gasWei = BigNumber.from(1000000000) // 1 gwei // ----------------------------------------------------------------------------------------------- +// test-wide configs for upkeeps +const linkDivisibility = BigNumber.from('1000000000000000000') +const executeGas = BigNumber.from('1000000') +const paymentPremiumBase = BigNumber.from('1000000000') +const paymentPremiumPPB = BigNumber.from('250000000') +const flatFeeMicroLink = BigNumber.from(0) + +const randomBytes = '0x1234abcd' +const emptyBytes = '0x' +const emptyBytes32 = + '0x0000000000000000000000000000000000000000000000000000000000000000' + +const stalenessSeconds = BigNumber.from(43820) +const gasCeilingMultiplier = BigNumber.from(2) +const checkGasLimit = BigNumber.from(10000000) +const fallbackGasPrice = gasWei.mul(BigNumber.from('2')) +const fallbackLinkPrice = linkEth.div(BigNumber.from('2')) +const maxCheckDataSize = BigNumber.from(1000) +const maxPerformDataSize = BigNumber.from(1000) +const maxPerformGas = BigNumber.from(5000000) +const minUpkeepSpend = BigNumber.from(0) +const f = 1 +const offchainVersion = 1 +const offchainBytes = '0x' +const zeroAddress = ethers.constants.AddressZero +const epochAndRound5_1 = + '0x0000000000000000000000000000000000000000000000000000000000000501' + +const conditionalUpkeepExtraData = ethers.utils.defaultAbiCoder.encode( + ['uint8', 'bytes', 'bytes'], + [Trigger.CONDITION, '0x', '0x'], +) + +const logTriggerConfig = ethers.utils.defaultAbiCoder.encode( + ['tuple(address,uint8,bytes32,bytes32,bytes32,bytes32)'], + [ + [ + randomAddress(), + 0, + ethers.utils.randomBytes(32), + ethers.utils.randomBytes(32), + ethers.utils.randomBytes(32), + ethers.utils.randomBytes(32), + ], + ], +) +const logUpkeepExtraData = ethers.utils.defaultAbiCoder.encode( + ['uint8', 'bytes', 'bytes'], + [Trigger.LOG, logTriggerConfig, '0x'], +) + +const cronTriggerConfig = ethers.utils.defaultAbiCoder.encode( + ['tuple(string,bytes)'], + [['* * * 0 0', ethers.utils.randomBytes(36)]], +) +const cronUpkeepExtraData = ethers.utils.defaultAbiCoder.encode( + ['uint8', 'bytes', 'bytes'], + [Trigger.CRON, cronTriggerConfig, '0x'], +) + +const rwrTriggerConfig = ethers.utils.defaultAbiCoder.encode( + ['tuple(bytes)'], + [[ethers.utils.randomBytes(36)]], +) +const rwrUpkeepExtraData = ethers.utils.defaultAbiCoder.encode( + ['uint8', 'bytes', 'bytes'], + [Trigger.READY, rwrTriggerConfig, '0x'], +) +// ----------------------------------------------------------------------------------------------- // Smart contract factories let linkTokenFactory: LinkTokenFactory @@ -169,31 +238,53 @@ const decodeBlockTrigger = (trigger: BytesLike) => { type UpkeepData = { Id: BigNumberish + performGas: BigNumberish performData: BytesLike trigger: BytesLike } -const encodeReport = (upkeeps: UpkeepData[]) => { +// just a wrapper for defaultAbiCoder, but provided type safety for when report changes +const encodeReport = ( + gasWei: BigNumberish, + linkEth: BigNumberish, + upkeepIDs: BigNumberish[], + performGases: BigNumberish[], + triggers: BytesLike[], + performData: BytesLike[], +) => { + return ethers.utils.defaultAbiCoder.encode( + ['uint256', 'uint256', 'uint256[]', 'uint256[]', 'bytes[]', 'bytes[]'], + [gasWei, linkEth, upkeepIDs, performGases, triggers, performData], + ) +} + +const makeReport = (upkeeps: UpkeepData[]) => { const upkeepIds = upkeeps.map((u) => u.Id) + const performGases = upkeeps.map((u) => u.performGas) const triggers = upkeeps.map((u) => u.trigger) const performData = upkeeps.map((u) => u.performData) - return ethers.utils.defaultAbiCoder.encode( - ['uint256', 'uint256', 'uint256[]', 'bytes[]', 'bytes[]'], - [gasWei, linkEth, upkeepIds, triggers, performData], + return encodeReport( + gasWei, + linkEth, + upkeepIds, + performGases, + triggers, + performData, ) } -const encodeLatestBlockReport = async (upkeepsIDs: BigNumberish[]) => { +const makeLatestBlockReport = async (upkeepsIDs: BigNumberish[]) => { const latestBlock = await ethers.provider.getBlock('latest') const upkeeps: UpkeepData[] = [] for (let i = 0; i < upkeepsIDs.length; i++) { upkeeps.push({ Id: upkeepsIDs[i], + performGas: executeGas, trigger: encodeBlockTrigger(latestBlock.number, latestBlock.hash), performData: '0x', }) } - return encodeReport(upkeeps) + return makeReport(upkeeps) } const signReport = ( @@ -312,74 +403,6 @@ const parseCancelledUpkeepReportLogs = (receipt: ContractReceipt) => { } describe('KeeperRegistry2_1', () => { - const linkDivisibility = BigNumber.from('1000000000000000000') - const executeGas = BigNumber.from('1000000') - const paymentPremiumBase = BigNumber.from('1000000000') - const paymentPremiumPPB = BigNumber.from('250000000') - const flatFeeMicroLink = BigNumber.from(0) - - const randomBytes = '0x1234abcd' - const emptyBytes = '0x' - const emptyBytes32 = - '0x0000000000000000000000000000000000000000000000000000000000000000' - - const stalenessSeconds = BigNumber.from(43820) - const gasCeilingMultiplier = BigNumber.from(2) - const checkGasLimit = BigNumber.from(10000000) - const fallbackGasPrice = gasWei.mul(BigNumber.from('2')) - const fallbackLinkPrice = linkEth.div(BigNumber.from('2')) - const maxCheckDataSize = BigNumber.from(1000) - const maxPerformDataSize = BigNumber.from(1000) - const maxPerformGas = BigNumber.from(5000000) - const minUpkeepSpend = BigNumber.from(0) - const f = 1 - const offchainVersion = 1 - const offchainBytes = '0x' - const zeroAddress = ethers.constants.AddressZero - const epochAndRound5_1 = - '0x0000000000000000000000000000000000000000000000000000000000000501' - - const conditionalUpkeepExtraData = ethers.utils.defaultAbiCoder.encode( - ['uint8', 'bytes', 'bytes'], - [Trigger.CONDITION, '0x', '0x'], - ) - - const logTriggerConfig = ethers.utils.defaultAbiCoder.encode( - ['tuple(address,uint8,bytes32,bytes32,bytes32,bytes32)'], - [ - [ - randomAddress(), - 0, - ethers.utils.randomBytes(32), - ethers.utils.randomBytes(32), - ethers.utils.randomBytes(32), - ethers.utils.randomBytes(32), - ], - ], - ) - const logUpkeepExtraData = ethers.utils.defaultAbiCoder.encode( - ['uint8', 'bytes', 'bytes'], - [Trigger.LOG, logTriggerConfig, '0x'], - ) - - const cronTriggerConfig = ethers.utils.defaultAbiCoder.encode( - ['tuple(string,bytes)'], - [['* * * 0 0', ethers.utils.randomBytes(36)]], - ) - const cronUpkeepExtraData = ethers.utils.defaultAbiCoder.encode( - ['uint8', 'bytes', 'bytes'], - [Trigger.CRON, cronTriggerConfig, '0x'], - ) - - const rwrTriggerConfig = ethers.utils.defaultAbiCoder.encode( - ['tuple(bytes)'], - [[ethers.utils.randomBytes(36)]], - ) - const rwrUpkeepExtraData = ethers.utils.defaultAbiCoder.encode( - ['uint8', 'bytes', 'bytes'], - [Trigger.READY, rwrTriggerConfig, '0x'], - ) - let owner: Signer let keeper1: Signer let keeper2: Signer @@ -636,34 +659,53 @@ describe('KeeperRegistry2_1', () => { } } + interface GetTransmitTXOptions { + numSigners?: number + gasLimit?: BigNumberish + gasPrice?: BigNumberish + executeGas?: BigNumberish + performData?: string + checkBlockNum?: number + checkBlockHash?: string + } const getTransmitTx = async ( registry: IKeeperRegistry, - transmitter: any, + transmitter: Signer, upkeepIds: BigNumberish[], - numSigners: any, - extraParams?: any, - performData?: any, - checkBlockNum?: any, - checkBlockHash?: any, + overrides: GetTransmitTXOptions = {}, ) => { const latestBlock = await ethers.provider.getBlock('latest') const configDigest = (await registry.getState()).state.latestConfigDigest - + const config = { + numSigners: f + 1, + performData: '0x', + executeGas, + checkBlockNum: latestBlock.number, + checkBlockHash: latestBlock.hash, + gasLimit: undefined, + gasPrice: undefined, + } + Object.assign(config, overrides) const upkeeps: UpkeepData[] = [] for (let i = 0; i < upkeepIds.length; i++) { upkeeps.push({ Id: upkeepIds[i], + performGas: config.executeGas, trigger: encodeBlockTrigger( - checkBlockNum ? checkBlockNum : latestBlock.number, - checkBlockHash ? checkBlockHash : latestBlock.hash, + config.checkBlockNum, + config.checkBlockHash, ), - performData: performData ? performData : '0x', + performData: config.performData, }) } - const report = encodeReport(upkeeps) + const report = makeReport(upkeeps) const reportContext = [configDigest, epochAndRound5_1, emptyBytes32] - const sigs = signReport(reportContext, report, signers.slice(0, numSigners)) + const sigs = signReport( + reportContext, + report, + signers.slice(0, config.numSigners), + ) return registry .connect(transmitter) @@ -673,7 +715,7 @@ describe('KeeperRegistry2_1', () => { sigs.rs, sigs.ss, sigs.vs, - { gasLimit: extraParams?.gasLimit, gasPrice: extraParams?.gasPrice }, + { gasLimit: config.gasLimit, gasPrice: config.gasPrice }, ) } @@ -681,11 +723,10 @@ describe('KeeperRegistry2_1', () => { registry: IKeeperRegistry, transmitter: Signer, report: BytesLike, - numSigners: number, ) => { const configDigest = (await registry.getState()).state.latestConfigDigest const reportContext = [configDigest, epochAndRound5_1, emptyBytes32] - const sigs = signReport(reportContext, report, signers.slice(0, numSigners)) + const sigs = signReport(reportContext, report, signers.slice(0, f + 1)) return registry .connect(transmitter) @@ -893,57 +934,50 @@ describe('KeeperRegistry2_1', () => { it('reverts when registry is paused', async () => { await registry.connect(owner).pause() await evmRevert( - getTransmitTx(registry, keeper1, [upkeepId], f + 1), + getTransmitTx(registry, keeper1, [upkeepId]), 'RegistryPaused()', ) }) it('reverts when called by non active transmitter', async () => { await evmRevert( - getTransmitTx(registry, payee1, [upkeepId], f + 1), + getTransmitTx(registry, payee1, [upkeepId]), 'OnlyActiveTransmitters()', ) }) - it.skip('reverts when upkeeps and performData length mismatches', async () => { + it('reverts when report data lengths mismatches', async () => { const upkeepIds = [] - const performDataTuples = [] - const latestBlock = await ethers.provider.getBlock('latest') + const gasLimits: BigNumber[] = [] + const triggers: string[] = [] + const performDatas = [] upkeepIds.push(upkeepId) - performDataTuples.push([latestBlock.number + 1, latestBlock.hash, '0x']) + gasLimits.push(executeGas) + triggers.push('0x') + performDatas.push('0x') // Push an extra perform data - performDataTuples.push([latestBlock.number + 1, latestBlock.hash, '0x']) + performDatas.push('0x') - const report = ethers.utils.defaultAbiCoder.encode( - ['uint256', 'uint256', 'uint256[]', 'tuple(uint32,bytes32,bytes)[]'], - [0, 0, upkeepIds, performDataTuples], + const report = encodeReport( + 0, + 0, + upkeepIds, + gasLimits, + triggers, + performDatas, ) await evmRevert( - getTransmitTxWithReport(registry, keeper1, report, f + 1), + getTransmitTxWithReport(registry, keeper1, report), 'InvalidReport()', ) }) - it('returns early when no upkeeps are included in report', async () => { - const upkeepIds: string[] = [] - const wrappedPerformDatas: string[] = [] - const report = ethers.utils.defaultAbiCoder.encode( - ['uint256', 'uint256', 'uint256[]', 'bytes[]'], - [0, 0, upkeepIds, wrappedPerformDatas], - ) - - await getTransmitTxWithReport(registry, keeper1, report, f + 1) - }) - it('returns early when invalid upkeepIds are included in report', async () => { - const tx = await getTransmitTx( - registry, - keeper1, - [upkeepId.add(BigNumber.from('1')).toString()], - f + 1, - ) + const tx = await getTransmitTx(registry, keeper1, [ + upkeepId.add(BigNumber.from('1')).toString(), + ]) const receipt = await tx.wait() const cancelledUpkeepReportLogs = parseCancelledUpkeepReportLogs(receipt) @@ -955,18 +989,16 @@ describe('KeeperRegistry2_1', () => { // Fund the upkeep so that pre-checks pass await registry.connect(admin).addFunds(upkeepId, toWei('100')) await evmRevert( - getTransmitTx( - registry, - keeper1, - [upkeepId.toString(), upkeepId.toString()], - f + 1, - ), + getTransmitTx(registry, keeper1, [ + upkeepId.toString(), + upkeepId.toString(), + ]), 'InvalidReport()', ) }) it('returns early when upkeep has insufficient funds', async () => { - const tx = await getTransmitTx(registry, keeper1, [upkeepId], f + 1) + const tx = await getTransmitTx(registry, keeper1, [upkeepId]) const receipt = await tx.wait() const insufficientFundsUpkeepReportLogs = @@ -984,7 +1016,7 @@ describe('KeeperRegistry2_1', () => { it('returns early when check block number is less than last perform', async () => { // First perform an upkeep to put last perform block number on upkeep state - const tx = await getTransmitTx(registry, keeper1, [upkeepId], f + 1) + const tx = await getTransmitTx(registry, keeper1, [upkeepId]) await tx.wait() const lastPerformBlockNumber = (await registry.getUpkeep(upkeepId)) @@ -998,16 +1030,10 @@ describe('KeeperRegistry2_1', () => { ) // Try to transmit a report which has checkBlockNumber = lastPerformBlockNumber-1, should result in stale report - const transmitTx = await getTransmitTx( - registry, - keeper1, - [upkeepId], - f + 1, - {}, - '0x', - lastPerformBlock.number - 1, - lastPerformBlock.parentHash, - ) + const transmitTx = await getTransmitTx(registry, keeper1, [upkeepId], { + checkBlockNum: lastPerformBlock.number - 1, + checkBlockHash: lastPerformBlock.parentHash, + }) const receipt = await transmitTx.wait() const staleUpkeepReportLogs = parseStaleUpkeepReportLogs(receipt) @@ -1019,16 +1045,10 @@ describe('KeeperRegistry2_1', () => { await registry.connect(admin).addFunds(upkeepId, toWei('100')) const latestBlock = await ethers.provider.getBlock('latest') // Try to transmit a report which has incorrect checkBlockHash - const tx = await getTransmitTx( - registry, - keeper1, - [upkeepId], - f + 1, - {}, - '0x', - latestBlock.number - 1, - latestBlock.hash, - ) // should be latestBlock.parentHash + const tx = await getTransmitTx(registry, keeper1, [upkeepId], { + checkBlockNum: latestBlock.number - 1, + checkBlockHash: latestBlock.hash, // should be latestBlock.parentHash + }) const receipt = await tx.wait() const reorgedUpkeepReportLogs = parseReorgedUpkeepReportLogs(receipt) @@ -1037,7 +1057,7 @@ describe('KeeperRegistry2_1', () => { }) it('returns early when check block number is older than 256 blocks', async () => { - const latestBlockReport = await encodeLatestBlockReport([upkeepId]) + const latestBlockReport = await makeLatestBlockReport([upkeepId]) for (let i = 0; i < 256; i++) { await ethers.provider.send('evm_mine', []) @@ -1061,7 +1081,7 @@ describe('KeeperRegistry2_1', () => { }) it('returns early when upkeep is cancelled and cancellation delay has gone', async () => { - const latestBlockReport = await encodeLatestBlockReport([upkeepId]) + const latestBlockReport = await makeLatestBlockReport([upkeepId]) await registry.connect(admin).cancelUpkeep(upkeepId) for (let i = 0; i < cancellationDelay; i++) { @@ -1072,7 +1092,6 @@ describe('KeeperRegistry2_1', () => { registry, keeper1, latestBlockReport, - f + 1, ) const receipt = await tx.wait() @@ -1083,8 +1102,25 @@ describe('KeeperRegistry2_1', () => { }) it('does not revert if the target cannot execute', async () => { - mock.setCanPerform(false) - const tx = await getTransmitTx(registry, keeper1, [upkeepId], f + 1) + await mock.setCanPerform(false) + const tx = await getTransmitTx(registry, keeper1, [upkeepId]) + + const receipt = await tx.wait() + const upkeepPerformedLogs = parseUpkeepPerformedLogs(receipt) + // exactly 1 Upkeep Performed should be emitted + assert.equal(upkeepPerformedLogs.length, 1) + const upkeepPerformedLog = upkeepPerformedLogs[0] + + const success = upkeepPerformedLog.args.success + assert.equal(success, false) + }) + + it('does not revert if the target runs out of gas', async () => { + await mock.setCanPerform(false) + + const tx = await getTransmitTx(registry, keeper1, [upkeepId], { + executeGas: 10, // too little gas + }) const receipt = await tx.wait() const upkeepPerformedLogs = parseUpkeepPerformedLogs(receipt) @@ -1098,23 +1134,43 @@ describe('KeeperRegistry2_1', () => { it('reverts if not enough gas supplied', async () => { await evmRevert( - getTransmitTx(registry, keeper1, [upkeepId], f + 1, { + getTransmitTx(registry, keeper1, [upkeepId], { gasLimit: executeGas, }), ) }) it('executes the data passed to the registry', async () => { - mock.setCanPerform(true) + await mock.setCanPerform(true) - const tx = await getTransmitTx( - registry, - keeper1, - [upkeepId], - f + 1, - {}, - randomBytes, - ) + const tx = await getTransmitTx(registry, keeper1, [upkeepId], { + performData: randomBytes, + }) + const receipt = await tx.wait() + + const upkeepPerformedWithABI = [ + 'event UpkeepPerformedWith(bytes upkeepData)', + ] + const iface = new ethers.utils.Interface(upkeepPerformedWithABI) + const parsedLogs = [] + for (let i = 0; i < receipt.logs.length; i++) { + const log = receipt.logs[i] + try { + parsedLogs.push(iface.parseLog(log)) + } catch (e) { + // ignore log + } + } + assert.equal(parsedLogs.length, 1) + assert.equal(parsedLogs[0].args.upkeepData, randomBytes) + }) + + it('executes the data passed to the registry', async () => { + await mock.setCanPerform(true) + + const tx = await getTransmitTx(registry, keeper1, [upkeepId], { + performData: randomBytes, + }) const receipt = await tx.wait() const upkeepPerformedWithABI = [ @@ -1137,10 +1193,10 @@ describe('KeeperRegistry2_1', () => { it('uses actual execution price for payment and premium calculation', async () => { // Actual multiplier is 2, but we set gasPrice to be 1x gasWei const gasPrice = gasWei.mul(BigNumber.from('1')) - mock.setCanPerform(true) + await mock.setCanPerform(true) const registryPremiumBefore = (await registry.getState()).state .totalPremium - const tx = await getTransmitTx(registry, keeper1, [upkeepId], f + 1, { + const tx = await getTransmitTx(registry, keeper1, [upkeepId], { gasPrice, }) const receipt = await tx.wait() @@ -1183,9 +1239,9 @@ describe('KeeperRegistry2_1', () => { it('only pays at a rate up to the gas ceiling [ @skip-coverage ]', async () => { // Actual multiplier is 2, but we set gasPrice to be 10x const gasPrice = gasWei.mul(BigNumber.from('10')) - mock.setCanPerform(true) + await mock.setCanPerform(true) - const tx = await getTransmitTx(registry, keeper1, [upkeepId], f + 1, { + const tx = await getTransmitTx(registry, keeper1, [upkeepId], { gasPrice, }) const receipt = await tx.wait() @@ -1211,7 +1267,7 @@ describe('KeeperRegistry2_1', () => { }) it('correctly accounts for l payment', async () => { - mock.setCanPerform(true) + await mock.setCanPerform(true) // Same as MockArbGasInfo.sol const l1CostWeiArb = BigNumber.from(1000000) @@ -1232,7 +1288,7 @@ describe('KeeperRegistry2_1', () => { arbRegistry, keeper1, [upkeepId], - f + 1, + { gasPrice: gasWei.mul('5') }, // High gas price so that it gets capped ) const receipt = await tx.wait() @@ -1266,7 +1322,7 @@ describe('KeeperRegistry2_1', () => { await registry.connect(owner).addFunds(afUpkeepId, initialBalance) await autoFunderUpkeep.setAutoFundLink(0) await autoFunderUpkeep.setIsEligible(true) - await getTransmitTx(registry, keeper1, [afUpkeepId.toString()], f + 1) + await getTransmitTx(registry, keeper1, [afUpkeepId.toString()]) let postUpkeepBalance = (await registry.getUpkeep(afUpkeepId)).balance assert.isTrue(postUpkeepBalance.lt(initialBalance)) // Balance should be deducted @@ -1277,7 +1333,7 @@ describe('KeeperRegistry2_1', () => { const autoTopupAmount = toWei('100') await autoFunderUpkeep.setAutoFundLink(autoTopupAmount) await autoFunderUpkeep.setIsEligible(true) - await getTransmitTx(registry, keeper1, [afUpkeepId.toString()], f + 1) + await getTransmitTx(registry, keeper1, [afUpkeepId.toString()]) postUpkeepBalance = (await registry.getUpkeep(afUpkeepId)).balance // Balance should increase by autoTopupAmount and decrease by max maxPayment @@ -1298,7 +1354,7 @@ describe('KeeperRegistry2_1', () => { const oldExpiration = registration.maxValidBlocknumber // Do the thing - await getTransmitTx(registry, keeper1, [afUpkeepId.toString()], f + 1) + await getTransmitTx(registry, keeper1, [afUpkeepId.toString()]) // Verify upkeep gets cancelled registration = await registry.getUpkeep(afUpkeepId) @@ -1307,7 +1363,7 @@ describe('KeeperRegistry2_1', () => { }) it('reverts when configDigest mismatches', async () => { - const report = await encodeLatestBlockReport([upkeepId]) + const report = await makeLatestBlockReport([upkeepId]) const reportContext = [emptyBytes32, epochAndRound5_1, emptyBytes32] // wrong config digest const sigs = signReport(reportContext, report, signers.slice(0, f + 1)) await evmRevert( @@ -1327,7 +1383,7 @@ describe('KeeperRegistry2_1', () => { it('reverts with incorrect number of signatures', async () => { const configDigest = (await registry.getState()).state .latestConfigDigest - const report = await encodeLatestBlockReport([upkeepId]) + const report = await makeLatestBlockReport([upkeepId]) const reportContext = [configDigest, epochAndRound5_1, emptyBytes32] // wrong config digest const sigs = signReport(reportContext, report, signers.slice(0, f + 2)) await evmRevert( @@ -1347,7 +1403,7 @@ describe('KeeperRegistry2_1', () => { it('reverts with invalid signature for inactive signers', async () => { const configDigest = (await registry.getState()).state .latestConfigDigest - const report = await encodeLatestBlockReport([upkeepId]) + const report = await makeLatestBlockReport([upkeepId]) const reportContext = [configDigest, epochAndRound5_1, emptyBytes32] // wrong config digest const sigs = signReport(reportContext, report, [ new ethers.Wallet(ethers.Wallet.createRandom()), @@ -1370,7 +1426,7 @@ describe('KeeperRegistry2_1', () => { it('reverts with invalid signature for duplicated signers', async () => { const configDigest = (await registry.getState()).state .latestConfigDigest - const report = await encodeLatestBlockReport([upkeepId]) + const report = await makeLatestBlockReport([upkeepId]) const reportContext = [configDigest, epochAndRound5_1, emptyBytes32] // wrong config digest const sigs = signReport(reportContext, report, [signer1, signer1]) await evmRevert( @@ -1413,17 +1469,14 @@ describe('KeeperRegistry2_1', () => { performData += '11' } // max allowed performData - mock.setCanPerform(true) - mock.setPerformGasToBurn(maxPerformGas) + await mock.setCanPerform(true) + await mock.setPerformGasToBurn(maxPerformGas) - await getTransmitTx( - registry, - keeper1, - [upkeepId], - 11, - { gasLimit: maxPerformGas.add(transmitGasOverhead) }, + await getTransmitTx(registry, keeper1, [upkeepId], { + gasLimit: maxPerformGas.add(transmitGasOverhead), + numSigners: 11, performData, - ) // Should not revert + }) // Should not revert }, ) @@ -1460,16 +1513,11 @@ describe('KeeperRegistry2_1', () => { ) // Do the thing - const tx = await getTransmitTx( - registry, - keeper1, - [upkeepId], - newF + 1, - {}, - '0x', - checkBlock.number - 1, // TODO needed to - 1? - checkBlock.parentHash, - ) + const tx = await getTransmitTx(registry, keeper1, [upkeepId], { + checkBlockNum: checkBlock.number - 1, + checkBlockHash: checkBlock.parentHash, + numSigners: newF + 1, + }) const receipt = await tx.wait() @@ -1550,7 +1598,7 @@ describe('KeeperRegistry2_1', () => { it.skip('calculates gas overhead appropriately within a margin for different scenarios [ @skip-coverage ]', async () => { // Perform the upkeep once to remove non-zero storage slots and have predictable gas measurement - let tx = await getTransmitTx(registry, keeper1, [upkeepId], f + 1) + let tx = await getTransmitTx(registry, keeper1, [upkeepId]) await tx.wait() @@ -1572,8 +1620,8 @@ describe('KeeperRegistry2_1', () => { const performData = performDataArray[k] const newF = fArray[l] - mock.setCanPerform(upkeepSuccess) - mock.setPerformGasToBurn(performGas) + await mock.setCanPerform(upkeepSuccess) + await mock.setPerformGasToBurn(performGas) await registry .connect(owner) .setConfig( @@ -1584,14 +1632,10 @@ describe('KeeperRegistry2_1', () => { offchainVersion, offchainBytes, ) - tx = await getTransmitTx( - registry, - keeper1, - [upkeepId], - newF + 1, - {}, + tx = await getTransmitTx(registry, keeper1, [upkeepId], { + numSigners: newF + 1, performData, - ) + }) const receipt = await tx.wait() const upkeepPerformedLogs = parseUpkeepPerformedLogs(receipt) // exactly 1 Upkeep Performed should be emitted @@ -1742,7 +1786,6 @@ describe('KeeperRegistry2_1', () => { registry, keeper1, passingUpkeepIds.concat(failingUpkeepIds), - f + 1, ) const receipt = await tx.wait() @@ -1861,7 +1904,6 @@ describe('KeeperRegistry2_1', () => { registry, keeper1, passingUpkeepIds.concat(failingUpkeepIds), - f + 1, ) await tx.wait() @@ -1872,7 +1914,6 @@ describe('KeeperRegistry2_1', () => { registry, keeper1, passingUpkeepIds.concat(failingUpkeepIds), - f + 1, ) const receipt = await tx.wait() @@ -1970,20 +2011,20 @@ describe('KeeperRegistry2_1', () => { // Add funds to passing upkeeps await registry.connect(owner).addFunds(upkeepId, toWei('10')) - mock.setCanPerform(true) - mock.setPerformGasToBurn(executeGas) + await mock.setCanPerform(true) + await mock.setPerformGasToBurn(executeGas) totalExecuteGas = totalExecuteGas.add(executeGas) } // Should revert with no overhead added await evmRevert( - getTransmitTx(registry, keeper1, upkeepIds, f + 1, { + getTransmitTx(registry, keeper1, upkeepIds, { gasLimit: totalExecuteGas, }), ) // Should not revert with overhead added - await getTransmitTx(registry, keeper1, upkeepIds, f + 1, { + await getTransmitTx(registry, keeper1, upkeepIds, { gasLimit: totalExecuteGas.add(transmitGasOverhead), }) }) @@ -2017,7 +2058,7 @@ describe('KeeperRegistry2_1', () => { arbRegistry, keeper1, upkeepIds, - f + 1, + { gasPrice: gasWei.mul('5') }, // High gas price so that it gets capped ) @@ -2072,9 +2113,9 @@ describe('KeeperRegistry2_1', () => { const id1 = await getUpkeepID(tx) await registry.connect(admin).addFunds(id1, toWei('5')) - await getTransmitTx(registry, keeper1, [id1.toString()], f + 1) - await getTransmitTx(registry, keeper2, [id1.toString()], f + 1) - await getTransmitTx(registry, keeper3, [id1.toString()], f + 1) + await getTransmitTx(registry, keeper1, [id1.toString()]) + await getTransmitTx(registry, keeper2, [id1.toString()]) + await getTransmitTx(registry, keeper3, [id1.toString()]) await registry .connect(payee1) @@ -2099,9 +2140,9 @@ describe('KeeperRegistry2_1', () => { const id2 = await getUpkeepID(tx2) await registry.connect(admin).addFunds(id2, toWei('5')) - await getTransmitTx(registry, keeper1, [id2.toString()], f + 1) - await getTransmitTx(registry, keeper2, [id2.toString()], f + 1) - await getTransmitTx(registry, keeper3, [id2.toString()], f + 1) + await getTransmitTx(registry, keeper1, [id2.toString()]) + await getTransmitTx(registry, keeper2, [id2.toString()]) + await getTransmitTx(registry, keeper3, [id2.toString()]) await registry .connect(payee2) @@ -2227,9 +2268,10 @@ describe('KeeperRegistry2_1', () => { registry, keeper1, [upkeepID1.toString()], - f + 1, - { gasPrice: gasWei.mul(gasCeilingMultiplier) }, - maxPerformData, + { + gasPrice: gasWei.mul(gasCeilingMultiplier), + performData: maxPerformData, + }, ) const receipt = await tx.wait() @@ -2239,23 +2281,14 @@ describe('KeeperRegistry2_1', () => { assert.equal(insufficientFundsUpkeepReportLogs.length, 1) // upkeep 1 perform should succeed with empty performData - await getTransmitTx( - registry, - keeper1, - [upkeepID1.toString()], - f + 1, - { gasPrice: gasWei.mul(gasCeilingMultiplier) }, - '0x', - ), + await getTransmitTx(registry, keeper1, [upkeepID1.toString()], { + gasPrice: gasWei.mul(gasCeilingMultiplier), + }), // upkeep 2 perform should succeed with max performData size - await getTransmitTx( - registry, - keeper1, - [upkeepID2.toString()], - f + 1, - { gasPrice: gasWei.mul(gasCeilingMultiplier) }, - maxPerformData, - ) + await getTransmitTx(registry, keeper1, [upkeepID2.toString()], { + gasPrice: gasWei.mul(gasCeilingMultiplier), + performData: maxPerformData, + }) }) }) @@ -2278,8 +2311,8 @@ describe('KeeperRegistry2_1', () => { await registry.connect(admin).addFunds(upkeepId2, toWei('100')) // Do a perform so that upkeep is charged some amount - await getTransmitTx(registry, keeper1, [upkeepId], f + 1) - await getTransmitTx(registry, keeper1, [upkeepId2.toString()], f + 1) + await getTransmitTx(registry, keeper1, [upkeepId]) + await getTransmitTx(registry, keeper1, [upkeepId2.toString()]) }) it('reverts if called on a non existing ID', async () => { @@ -2575,18 +2608,21 @@ describe('KeeperRegistry2_1', () => { assert.isTrue(checkUpkeepResult.linkNative.eq(linkEth)) }) - it('has a large enough gas overhead to cover upkeeps that use all their gas [ @skip-coverage ]', async () => { - await mock.setCanCheck(true) - await mock.setCheckGasToBurn(checkGasLimit) - const gas = checkGasLimit.add(checkGasOverhead) - const checkUpkeepResult = await registry - .connect(zeroAddress) - .callStatic['checkUpkeep(uint256)'](upkeepId, { - gasLimit: gas, - }) - - assert.equal(checkUpkeepResult.upkeepNeeded, true) - }) + itMaybe( + 'has a large enough gas overhead to cover upkeeps that use all their gas [ @skip-coverage ]', + async () => { + await mock.setCanCheck(true) + await mock.setCheckGasToBurn(checkGasLimit) + const gas = checkGasLimit.add(checkGasOverhead) + const checkUpkeepResult = await registry + .connect(zeroAddress) + .callStatic['checkUpkeep(uint256)'](upkeepId, { + gasLimit: gas, + }) + + assert.equal(checkUpkeepResult.upkeepNeeded, true) + }, + ) }) }) @@ -2865,7 +2901,7 @@ describe('KeeperRegistry2_1', () => { }) }) - describe('#setConfig - onchain', () => { + describeMaybe('#setConfig - onchain', () => { const payment = BigNumber.from(1) const flatFee = BigNumber.from(2) const staleness = BigNumber.from(4) @@ -3223,10 +3259,10 @@ describe('KeeperRegistry2_1', () => { ) }) - it('stores new config and emits event', async () => { + itMaybe('stores new config and emits event', async () => { // Perform an upkeep so that totalPremium is updated await registry.connect(admin).addFunds(upkeepId, toWei('100')) - let tx = await getTransmitTx(registry, keeper1, [upkeepId], f + 1) + let tx = await getTransmitTx(registry, keeper1, [upkeepId]) await tx.wait() const newOffChainVersion = BigNumber.from('2') @@ -4262,7 +4298,7 @@ describe('KeeperRegistry2_1', () => { await registry.connect(owner).pause() await evmRevert( - getTransmitTx(registry, keeper1, [upkeepId], f + 1), + getTransmitTx(registry, keeper1, [upkeepId]), 'RegistryPaused()', ) }) @@ -4484,26 +4520,29 @@ describe('KeeperRegistry2_1', () => { ) }) - it('sets the payees when exisitng payees are zero address', async () => { - //Initial payees should be zero address - await blankRegistry.connect(owner).setConfig(...baseConfig) // used to test initial config + itMaybe( + 'sets the payees when exisitng payees are zero address', + async () => { + //Initial payees should be zero address + await blankRegistry.connect(owner).setConfig(...baseConfig) // used to test initial config - for (let i = 0; i < keeperAddresses.length; i++) { - const payee = ( - await blankRegistry.getTransmitterInfo(keeperAddresses[i]) - ).payee // used to test initial config - assert.equal(payee, zeroAddress) - } + for (let i = 0; i < keeperAddresses.length; i++) { + const payee = ( + await blankRegistry.getTransmitterInfo(keeperAddresses[i]) + ).payee // used to test initial config + assert.equal(payee, zeroAddress) + } - await blankRegistry.connect(owner).setPayees(payees) // used to test initial config + await blankRegistry.connect(owner).setPayees(payees) // used to test initial config - for (let i = 0; i < keeperAddresses.length; i++) { - const payee = ( - await blankRegistry.getTransmitterInfo(keeperAddresses[i]) - ).payee - assert.equal(payee, payees[i]) - } - }) + for (let i = 0; i < keeperAddresses.length; i++) { + const payee = ( + await blankRegistry.getTransmitterInfo(keeperAddresses[i]) + ).payee + assert.equal(payee, payees[i]) + } + }, + ) it('does not change the payee if IGNORE_ADDRESS is used as payee', async () => { const signers = Array.from({ length: 5 }, randomAddress) @@ -4602,7 +4641,7 @@ describe('KeeperRegistry2_1', () => { it('immediately prevents upkeep', async () => { await registry.connect(owner).cancelUpkeep(upkeepId) - const tx = await getTransmitTx(registry, keeper1, [upkeepId], f + 1) + const tx = await getTransmitTx(registry, keeper1, [upkeepId]) const receipt = await tx.wait() const cancelledUpkeepReportLogs = parseCancelledUpkeepReportLogs(receipt) @@ -4686,13 +4725,13 @@ describe('KeeperRegistry2_1', () => { await registry.connect(owner).addFunds(upkeepId, toWei('100')) await registry.connect(admin).cancelUpkeep(upkeepId) - await getTransmitTx(registry, keeper1, [upkeepId], f + 1) + await getTransmitTx(registry, keeper1, [upkeepId]) for (let i = 0; i < cancellationDelay; i++) { await ethers.provider.send('evm_mine', []) } - const tx = await getTransmitTx(registry, keeper1, [upkeepId], f + 1) + const tx = await getTransmitTx(registry, keeper1, [upkeepId]) const receipt = await tx.wait() const cancelledUpkeepReportLogs = @@ -4701,11 +4740,11 @@ describe('KeeperRegistry2_1', () => { assert.equal(cancelledUpkeepReportLogs.length, 1) }) - describe('when an upkeep has been performed', async () => { + describeMaybe('when an upkeep has been performed', async () => { beforeEach(async () => { await linkToken.connect(owner).approve(registry.address, toWei('100')) await registry.connect(owner).addFunds(upkeepId, toWei('100')) - await getTransmitTx(registry, keeper1, [upkeepId], f + 1) + await getTransmitTx(registry, keeper1, [upkeepId]) }) it('deducts a cancellation fee from the upkeep and gives to owner', async () => { @@ -4858,7 +4897,7 @@ describe('KeeperRegistry2_1', () => { beforeEach(async () => { await linkToken.connect(owner).approve(registry.address, toWei('100')) await registry.connect(owner).addFunds(upkeepId, toWei('100')) - await getTransmitTx(registry, keeper1, [upkeepId], f + 1) + await getTransmitTx(registry, keeper1, [upkeepId]) }) it('reverts if called by anyone but the payee', async () => { diff --git a/core/gethwrappers/generated/keeper_registry_logic_a_wrapper_2_1/keeper_registry_logic_a_wrapper_2_1.go b/core/gethwrappers/generated/keeper_registry_logic_a_wrapper_2_1/keeper_registry_logic_a_wrapper_2_1.go index 802eec4bcfa..41ffe66b7e5 100644 --- a/core/gethwrappers/generated/keeper_registry_logic_a_wrapper_2_1/keeper_registry_logic_a_wrapper_2_1.go +++ b/core/gethwrappers/generated/keeper_registry_logic_a_wrapper_2_1/keeper_registry_logic_a_wrapper_2_1.go @@ -32,7 +32,7 @@ var ( var KeeperRegistryLogicAMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"contractKeeperRegistryLogicB2_1\",\"name\":\"logicB\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ArrayHasNoEntries\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotCancel\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CheckDataExceedsLimit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateEntry\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasLimitCanOnlyIncrease\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasLimitOutsideRange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectNumberOfFaultyOracles\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectNumberOfSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectNumberOfSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfRange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientFunds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDataLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidReport\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTrigger\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxCheckDataSizeCanOnlyIncrease\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxPerformDataSizeCanOnlyIncrease\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MigrationNotPermitted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotAContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyActiveSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyActiveTransmitters\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByLINKToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwnerOrAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwnerOrRegistrar\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByPayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByProposedAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByProposedPayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByUpkeepManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPausedUpkeep\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySimulatedBackend\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyUnpausedUpkeep\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ParameterLengthError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PaymentGreaterThanAllLINK\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RegistryPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RepeatedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RepeatedTransmitter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"TargetCheckReverted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyOracles\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TranscoderNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepCancelled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepNotCanceled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepNotNeeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValueNotChanged\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"CancelledUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"}],\"name\":\"FundsAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"FundsWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"InsufficientFundsUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"}],\"name\":\"OwnerFundsWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"payees\",\"type\":\"address[]\"}],\"name\":\"PayeesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"PayeeshipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"PayeeshipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"}],\"name\":\"PaymentWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"ReorgedUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"StaleUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"adminOffchainConfig\",\"type\":\"bytes\"}],\"name\":\"UpkeepAdminOffchainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"UpkeepAdminTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"UpkeepAdminTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"atBlockHeight\",\"type\":\"uint64\"}],\"name\":\"UpkeepCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"newCheckData\",\"type\":\"bytes\"}],\"name\":\"UpkeepCheckDataUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"gasLimit\",\"type\":\"uint96\"}],\"name\":\"UpkeepGasLimitSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remainingBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"UpkeepMigrated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"UpkeepOffchainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"UpkeepPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"totalPayment\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasOverhead\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"UpkeepPerformed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startingBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"importedFrom\",\"type\":\"address\"}],\"name\":\"UpkeepReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"executeGas\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"UpkeepRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"triggerConfig\",\"type\":\"bytes\"}],\"name\":\"UpkeepTriggerConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"UpkeepUnpaused\",\"type\":\"event\"},{\"stateMutability\":\"nonpayable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"}],\"name\":\"addFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"cancelUpkeep\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"checkData\",\"type\":\"bytes\"}],\"name\":\"checkUpkeep\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"upkeepNeeded\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"performData\",\"type\":\"bytes\"},{\"internalType\":\"enumUpkeepFailureReason\",\"name\":\"upkeepFailureReason\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fastGasWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"linkNative\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"checkUpkeep\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"upkeepNeeded\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"performData\",\"type\":\"bytes\"},{\"internalType\":\"enumUpkeepFailureReason\",\"name\":\"upkeepFailureReason\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fastGasWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"linkNative\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fallbackTo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFastGasFeedAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLinkAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLinkNativeFeedAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMode\",\"outputs\":[{\"internalType\":\"enumKeeperRegistryBase2_1.Mode\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upkeepId\",\"type\":\"uint256\"}],\"name\":\"getTriggerType\",\"outputs\":[{\"internalType\":\"enumKeeperRegistryBase2_1.Trigger\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"i_next\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"bytes[]\",\"name\":\"values\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"mercuryCallback\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"upkeepNeeded\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"performData\",\"type\":\"bytes\"},{\"internalType\":\"enumUpkeepFailureReason\",\"name\":\"upkeepFailureReason\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"migrateUpkeeps\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encodedUpkeeps\",\"type\":\"bytes\"}],\"name\":\"receiveUpkeeps\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"checkData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"registerUpkeep\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"triggerConfig\",\"type\":\"bytes\"}],\"name\":\"setUpkeepTriggerConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"upkeepTranscoderVersion\",\"outputs\":[{\"internalType\":\"enumUpkeepFormat\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"upkeepVersion\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enumKeeperRegistryBase2_1.Trigger\",\"name\":\"triggerType\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"triggerConfig\",\"type\":\"bytes\"}],\"name\":\"validateTriggerConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6101206040523480156200001257600080fd5b506040516200610e3803806200610e8339810160408190526200003591620003bc565b80816001600160a01b0316634b4fd03b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200007057600080fd5b505afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab9190620003e3565b826001600160a01b031663ca30e6036040518163ffffffff1660e01b815260040160206040518083038186803b158015620000e557600080fd5b505afa158015620000fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001209190620003bc565b836001600160a01b031663b10b673c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200015a57600080fd5b505afa1580156200016f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001959190620003bc565b846001600160a01b0316636709d0e56040518163ffffffff1660e01b815260040160206040518083038186803b158015620001cf57600080fd5b505afa158015620001e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020a9190620003bc565b3380600081620002615760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b03848116919091179091558116156200029457620002948162000310565b505050836002811115620002ac57620002ac62000406565b60e0816002811115620002c357620002c362000406565b60f81b9052506001600160601b0319606093841b811660805291831b821660a052821b811660c052601680546001600160a01b0319163317905592901b9091166101005250620004359050565b6001600160a01b0381163314156200036b5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000258565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215620003cf57600080fd5b8151620003dc816200041c565b9392505050565b600060208284031215620003f657600080fd5b815160038110620003dc57600080fd5b634e487b7160e01b600052602160045260246000fd5b6001600160a01b03811681146200043257600080fd5b50565b60805160601c60a05160601c60c05160601c60e05160f81c6101005160601c615c3f620004cf600039600081816101aa015281816101f00152610298015260008181610254015281816136160152818161385e01528181613a7d0152613c4a0152600081816102e201526133bb0152600081816103e401526134af01526000818161042201528181611bbb01526122240152615c3f6000f3fe60806040523480156200001157600080fd5b5060043610620001a85760003560e01c80638da5cb5b11620000ed578063c80480221162000099578063f679b74c116200006f578063f679b74c146200045e578063f7d334ba1462000487578063fd9541d7146200049e57620001a8565b8063c80480221462000409578063ca30e6031462000420578063f2fde38b146200044757620001a8565b8063948108f711620000cf578063948108f714620003af578063aab9edd614620003c6578063b10b673c14620003e257620001a8565b80638da5cb5b14620003795780638e86139b146200039857620001a8565b80635147cd59116200015957806371791aa0116200012f57806371791aa0146200032d57806379ba5097146200035857806385c1b0ba146200036257620001a8565b80635147cd5914620002ba5780636709d0e514620002e05780636ded9eae146200030757620001a8565b80634b4fd03b116200018f5780634b4fd03b14620002525780634ee88d3514620002795780634ff597c1146200029257620001a8565b8063349e8cca14620001ee57806348013d7b146200023a575b7f00000000000000000000000000000000000000000000000000000000000000003660008037600080366000845af43d6000803e808015620001e9573d6000f35b3d6000fd5b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b62000243600081565b60405162000231919062005108565b7f000000000000000000000000000000000000000000000000000000000000000062000243565b620002906200028a36600462004bc7565b620004b5565b005b620002107f000000000000000000000000000000000000000000000000000000000000000081565b620002d1620002cb36600462004b69565b6200056f565b6040516200023191906200511d565b7f000000000000000000000000000000000000000000000000000000000000000062000210565b6200031e620003183660046200457d565b62000625565b60405190815260200162000231565b620003446200033e36600462004c17565b620008a6565b60405162000231969594939291906200505b565b6200029062000f32565b620002906200037336600462004630565b62001035565b60005473ffffffffffffffffffffffffffffffffffffffff1662000210565b62000290620003a936600462004856565b62001c4c565b62000290620003c036600462004c4a565b6200204c565b620003cf600281565b60405160ff909116815260200162000231565b7f000000000000000000000000000000000000000000000000000000000000000062000210565b620002906200041a36600462004b69565b62002304565b7f000000000000000000000000000000000000000000000000000000000000000062000210565b62000290620004583660046200455d565b620026df565b620004756200046f36600462004b83565b620026f7565b6040516200023194939291906200501e565b620003446200049836600462004b69565b62002953565b62000290620004af366004620048d5565b62002a20565b620004c08362002c28565b6000620004cd846200056f565b9050620005118184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002a2092505050565b60008481526018602052604090206200052c90848462003fbb565b50837f2b72ac786c97e68dbab71023ed6f2bdbfc80ad9bb7808941929229d71b7d5664848460405162000561929190620050a6565b60405180910390a250505050565b6000818160045b600f81101562000604577fff000000000000000000000000000000000000000000000000000000000000008216838260208110620005b857620005b8620055d2565b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614620005ef57506000949350505050565b80620005fb816200549c565b91505062000576565b5081600f1a60038111156200061d576200061d62005574565b949350505050565b6000805473ffffffffffffffffffffffffffffffffffffffff1633148015906200067757506011546c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15620006af576040517fd48b678b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008080620006c1858701876200491f565b925092509250620006d3838362002a20565b620006de8362002cdd565b93506000848c604051620006f29062004068565b91825273ffffffffffffffffffffffffffffffffffffffff166020820152604001604051809103906000f08015801562000730573d6000803e3d6000fd5b5090506200077e858d8d8d60008e8e8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508c91508b90508a62002e6d565b6012805468010000000000000000900463ffffffff16906008620007a283620054d8565b91906101000a81548163ffffffff021916908363ffffffff16021790555050847fbae366358c023f887e791d7a62f2e4316f1026bd77f6fb49501a917b3bc5d0128c8c6040516200081b92919063ffffffff92909216825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b60405180910390a2847f2b72ac786c97e68dbab71023ed6f2bdbfc80ad9bb7808941929229d71b7d566484604051620008559190620050f3565b60405180910390a2847f3e8740446213c8a77d40e08f79136ce3f347d13ed270a6ebdf57159e0faf4850836040516200088f9190620050f3565b60405180910390a250505050979650505050505050565b60006060600080600080620008ba6200335d565b6000620008c7896200056f565b90506000600f604051806101200160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160059054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160099054906101000a900462ffffff1662ffffff1662ffffff16815260200160008201600c9054906101000a900461ffff1661ffff1661ffff16815260200160008201600e9054906101000a900460ff1615151515815260200160008201600f9054906101000a900460ff161515151581526020016000820160109054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815260200160008201601c9054906101000a900463ffffffff1663ffffffff1663ffffffff168152505090506000600460008c8152602001908152602001600020604051806101000160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160089054906101000a900460ff161515151581526020016000820160099054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815260200160018201600c9054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020016001820160189054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050905063ffffffff8016816020015163ffffffff161462000c3957505060408051602081019091526000808252975095506001945086925082915062000f289050565b80604001511562000c6c57505060408051602081019091526000808252975095506002945086925082915062000f289050565b62000c778262003398565b825160125492975090955060009162000cb79185917801000000000000000000000000000000000000000000000000900463ffffffff16898986620035aa565b9050806bffffffffffffffffffffffff168260a001516bffffffffffffffffffffffff16101562000d065760006040518060200160405280600081525060069950995099505050505062000f28565b60019950600084600381111562000d215762000d2162005574565b148062000d425750600184600381111562000d405762000d4062005574565b145b1562000f23575a96506000636e04ff0d60e01b8c60405160240162000d689190620050f3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925260e0850151601254925191935073ffffffffffffffffffffffffffffffffffffffff169163ffffffff169062000e1d90849062004e37565b60006040518083038160008787f1925050503d806000811462000e5d576040519150601f19603f3d011682016040523d82523d6000602084013e62000e62565b606091505b50909b5099505a62000e75908962005389565b97508a62000e87576003985062000f21565b8980602001905181019062000e9d9190620047e5565b909b5099508a62000ecd5760006040518060200160405280600081525060049a509a509a50505050505062000f28565b6012548a51780100000000000000000000000000000000000000000000000090910463ffffffff16101562000f215760006040518060200160405280600081525060059a509a509a50505050505062000f28565b505b505050505b9295509295509295565b60015473ffffffffffffffffffffffffffffffffffffffff16331462000fb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b600173ffffffffffffffffffffffffffffffffffffffff821660009081526017602052604090205460ff16600381111562001074576200107462005574565b14158015620010c05750600373ffffffffffffffffffffffffffffffffffffffff821660009081526017602052604090205460ff166003811115620010bd57620010bd62005574565b14155b15620010f8576040517f0ebeec3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6010546c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1662001158576040517fd12d7d8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8162001190576040517f2c2fc94100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526000808567ffffffffffffffff811115620011ef57620011ef62005601565b6040519080825280602002602001820160405280156200122457816020015b60608152602001906001900390816200120e5790505b50905060008667ffffffffffffffff81111562001245576200124562005601565b6040519080825280602002602001820160405280156200126f578160200160208202803683370190505b50905060008767ffffffffffffffff81111562001290576200129062005601565b6040519080825280602002602001820160405280156200131f57816020015b604080516101008101825260008082526020808301829052928201819052606082018190526080820181905260a0820181905260c0820181905260e082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181620012af5790505b50905060008867ffffffffffffffff81111562001340576200134062005601565b6040519080825280602002602001820160405280156200137557816020015b60608152602001906001900390816200135f5790505b50905060008967ffffffffffffffff81111562001396576200139662005601565b604051908082528060200260200182016040528015620013cb57816020015b6060815260200190600190039081620013b55790505b50905060005b8a81101562001962578b8b82818110620013ef57620013ef620055d2565b60209081029290920135600081815260048452604090819020815161010081018352815463ffffffff8082168352640100000000820481169783019790975260ff6801000000000000000082041615159382019390935273ffffffffffffffffffffffffffffffffffffffff69010000000000000000009093048316606082015260018201546bffffffffffffffffffffffff80821660808401526c0100000000000000000000000082041660a08301527801000000000000000000000000000000000000000000000000900490951660c0860152600201541660e08401529a50909850620014e090508962002c28565b87848281518110620014f657620014f6620055d2565b6020026020010181905250600760008a8152602001908152602001600020805462001521906200544c565b80601f01602080910402602001604051908101604052809291908181526020018280546200154f906200544c565b8015620015a05780601f106200157457610100808354040283529160200191620015a0565b820191906000526020600020905b8154815290600101906020018083116200158257829003601f168201915b5050505050868281518110620015ba57620015ba620055d2565b6020026020010181905250600560008a815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168582815181106200160e576200160e620055d2565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910182015260008a815260189091526040902080546200164d906200544c565b80601f01602080910402602001604051908101604052809291908181526020018280546200167b906200544c565b8015620016cc5780601f10620016a057610100808354040283529160200191620016cc565b820191906000526020600020905b815481529060010190602001808311620016ae57829003601f168201915b5050505050838281518110620016e657620016e6620055d2565b6020026020010181905250601960008a8152602001908152602001600020805462001711906200544c565b80601f01602080910402602001604051908101604052809291908181526020018280546200173f906200544c565b8015620017905780601f10620017645761010080835404028352916020019162001790565b820191906000526020600020905b8154815290600101906020018083116200177257829003601f168201915b5050505050828281518110620017aa57620017aa620055d2565b60200260200101819052508760a001516bffffffffffffffffffffffff1687620017d591906200528d565b60008a815260046020908152604080832080547fffffff00000000000000000000000000000000000000000000000000000000001681556001810180547fffffffff0000000000000000000000000000000000000000000000000000000016905560020180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556007909152812091985062001875919062004076565b60008981526018602052604081206200188e9162004076565b6000898152601960205260408120620018a79162004076565b600089815260066020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055620018e860028a620035f9565b5060a0880151604080516bffffffffffffffffffffffff909216825273ffffffffffffffffffffffffffffffffffffffff8c1660208301528a917fb38647142fbb1ea4c000fc4569b37a4e9a9f6313317b84ee3e5326c1a6cd06ff910160405180910390a28062001959816200549c565b915050620013d1565b508560155462001973919062005389565b60155560405160009062001998908d908d9087908a908a908990899060200162004e87565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905260105490915073ffffffffffffffffffffffffffffffffffffffff808c1691638e86139b916c010000000000000000000000009091041663c71249ab60028e73ffffffffffffffffffffffffffffffffffffffff1663aab9edd66040518163ffffffff1660e01b8152600401602060405180830381600087803b15801562001a4d57600080fd5b505af115801562001a62573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a88919062004cce565b866040518463ffffffff1660e01b815260040162001aa99392919062005151565b60006040518083038186803b15801562001ac257600080fd5b505afa15801562001ad7573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001b1f91908101906200489c565b6040518263ffffffff1660e01b815260040162001b3d9190620050f3565b600060405180830381600087803b15801562001b5857600080fd5b505af115801562001b6d573d6000803e3d6000fd5b50506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8d81166004830152602482018b90527f000000000000000000000000000000000000000000000000000000000000000016925063a9059cbb9150604401602060405180830381600087803b15801562001c0257600080fd5b505af115801562001c17573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c3d9190620047c5565b50505050505050505050505050565b60023360009081526017602052604090205460ff16600381111562001c755762001c7562005574565b1415801562001cab575060033360009081526017602052604090205460ff16600381111562001ca85762001ca862005574565b14155b1562001ce3576040517f0ebeec3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808080808062001cf887890189620046bd565b95509550955095509550955060005b86518110156200204157600073ffffffffffffffffffffffffffffffffffffffff1686828151811062001d3e5762001d3e620055d2565b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff16141562001e465786818151811062001d7c5762001d7c620055d2565b602002602001015186828151811062001d995762001d99620055d2565b602002602001015160e0015160405162001db39062004068565b91825273ffffffffffffffffffffffffffffffffffffffff166020820152604001604051809103906000f08015801562001df1573d6000803e3d6000fd5b5086828151811062001e075762001e07620055d2565b60200260200101516060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b62001f8687828151811062001e5f5762001e5f620055d2565b602002602001015187838151811062001e7c5762001e7c620055d2565b602002602001015160e0015188848151811062001e9d5762001e9d620055d2565b60200260200101516000015187858151811062001ebe5762001ebe620055d2565b60200260200101518a868151811062001edb5762001edb620055d2565b602002602001015160a001518a878151811062001efc5762001efc620055d2565b60200260200101518c888151811062001f195762001f19620055d2565b6020026020010151604001518a898151811062001f3a5762001f3a620055d2565b60200260200101518a8a8151811062001f575762001f57620055d2565b60200260200101518f8b8151811062001f745762001f74620055d2565b60200260200101516060015162002e6d565b86818151811062001f9b5762001f9b620055d2565b60200260200101517f74931a144e43a50694897f241d973aecb5024c0e910f9bb80a163ea3c1cf5a7187838151811062001fd95762001fd9620055d2565b602002602001015160a0015133604051620020249291906bffffffffffffffffffffffff92909216825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b60405180910390a28062002038816200549c565b91505062001d07565b505050505050505050565b600082815260046020908152604091829020825161010081018452815463ffffffff80821683526401000000008204811694830185905260ff6801000000000000000083041615159583019590955273ffffffffffffffffffffffffffffffffffffffff69010000000000000000009091048116606083015260018301546bffffffffffffffffffffffff80821660808501526c0100000000000000000000000082041660a084015278010000000000000000000000000000000000000000000000009004851660c083015260029092015490911660e082015291146200215f576040517f9c0083a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818160a00151620021719190620052d0565b600084815260046020526040902060010180547fffffffffffffffff000000000000000000000000ffffffffffffffffffffffff166c010000000000000000000000006bffffffffffffffffffffffff93841602179055601554620021d9918416906200528d565b6015556040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526bffffffffffffffffffffffff831660448201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd90606401602060405180830381600087803b1580156200227e57600080fd5b505af115801562002293573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620022b99190620047c5565b506040516bffffffffffffffffffffffff83168152339084907fafd24114486da8ebfc32f3626dada8863652e187461aa74d4bfa7348915062039060200160405180910390a3505050565b6000818152600460209081526040808320815161010081018352815463ffffffff80821683526401000000008204811695830186905260ff6801000000000000000083041615159483019490945273ffffffffffffffffffffffffffffffffffffffff69010000000000000000009091048116606083015260018301546bffffffffffffffffffffffff80821660808501526c0100000000000000000000000082041660a084015278010000000000000000000000000000000000000000000000009004841660c083015260029092015490911660e082015292911415906200240260005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161490508180156200245d57508080156200245b57506200244e62003610565b836020015163ffffffff16115b155b1562002495576040517ffbc0357800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80158015620024c8575060008481526005602052604090205473ffffffffffffffffffffffffffffffffffffffff163314155b1562002500576040517ffbdb8e5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006200250c62003610565b9050816200252457620025216032826200528d565b90505b6000858152600460205260409020805463ffffffff808416640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff909216919091179091556200257f906002908790620035f916565b5060105460808501516bffffffffffffffffffffffff9182169160009116821115620025e8576080860151620025b69083620053a3565b90508560a001516bffffffffffffffffffffffff16816bffffffffffffffffffffffff161115620025e8575060a08501515b808660a00151620025fa9190620053a3565b600088815260046020526040902060010180547fffffffffffffffff000000000000000000000000ffffffffffffffffffffffff166c010000000000000000000000006bffffffffffffffffffffffff938416021790556011546200266291839116620052d0565b601180547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9290921691909117905560405167ffffffffffffffff84169088907f91cb3bb75cfbd718bbfccc56b7f53d92d7048ef4ca39a3b7b7c6d4af1f79118190600090a350505050505050565b620026e9620036dd565b620026f48162003760565b50565b60006060600080620027086200335d565b600087815260046020908152604091829020825161010081018452815463ffffffff8082168352640100000000820481169483019490945268010000000000000000810460ff16151594820194909452690100000000000000000090930473ffffffffffffffffffffffffffffffffffffffff908116606085015260018201546bffffffffffffffffffffffff80821660808701526c0100000000000000000000000082041660a08601527801000000000000000000000000000000000000000000000000900490921660c0840152600201541660e08201525a91506000634ad8c9a660e01b88886040516024016200280392919062004e55565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925260e08401516012549251919350600092839273ffffffffffffffffffffffffffffffffffffffff9092169163ffffffff90911690620028c190869062004e37565b60006040518083038160008787f1925050503d806000811462002901576040519150601f19603f3d011682016040523d82523d6000602084013e62002906565b606091505b50915091505a62002918908662005389565b9450816200292a576007955062002946565b80806020019051810190620029409190620047e5565b90985096505b5050505093509350935093565b6000606060008060008062002a0c87600760008a8152602001908152602001600020805462002982906200544c565b80601f0160208091040260200160405190810160405280929190818152602001828054620029b0906200544c565b801562002a015780601f10620029d55761010080835404028352916020019162002a01565b820191906000526020600020905b815481529060010190602001808311620029e357829003601f168201915b5050505050620008a6565b949c939b5091995097509550909350915050565b3330141562002b8457600082600381111562002a405762002a4062005574565b141562002a585780511562002a5457600080fd5b5050565b600182600381111562002a6f5762002a6f62005574565b141562002adc5760008180602001905181019062002a8e919062004a4d565b805190915073ffffffffffffffffffffffffffffffffffffffff1662002ab357600080fd5b604081015162002ac257600080fd5b6008816020015160ff161062002ad757600080fd5b505050565b600282600381111562002af35762002af362005574565b141562002b355760008180602001905181019062002b1291906200499c565b9050602081602001515162002b289190620054ff565b60041462002ad757600080fd5b600382600381111562002b4c5762002b4c62005574565b141562002b7f5760008180602001905181019062002b6b919062004add565b80515190915062002b2890602090620054ff565b600080fd5b6040517ffd9541d7000000000000000000000000000000000000000000000000000000008152309063fd9541d79062002bc490859085906004016200512d565b600060405180830381600087803b15801562002bdf57600080fd5b505af192505050801562002bf1575060015b62002a54576040517fa768d7fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008181526005602052604090205473ffffffffffffffffffffffffffffffffffffffff16331462002c86576040517fa47c170600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260046020526040902054640100000000900463ffffffff90811614620026f4576040517f9c0083a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600062002d04600162002cf262003610565b62002cfe919062005389565b62003858565b601254604080516020810193909352309083015268010000000000000000900463ffffffff166060820152608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083015201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060045b600f81101562002e04578282828151811062002dc05762002dc0620055d2565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508062002dfb816200549c565b91505062002da0565b5083600381111562002e1a5762002e1a62005574565b60f81b81600f8151811062002e335762002e33620055d2565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506200061d81620053d3565b600f546e010000000000000000000000000000900460ff161562002ebd576040517f24522f3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff89163b62002f0c576040517f09ee12d500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60125485517401000000000000000000000000000000000000000090910463ffffffff16101562002f69576040517fae7235df00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108fc8863ffffffff16108062002f93575060125463ffffffff6401000000009091048116908916115b1562002fcb576040517f14c237fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008a81526004602052604090206002015473ffffffffffffffffffffffffffffffffffffffff16156200302b576040517f6e3b930b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518061010001604052808963ffffffff16815260200163ffffffff8016815260200185151581526020018273ffffffffffffffffffffffffffffffffffffffff16815260200160006bffffffffffffffffffffffff168152602001876bffffffffffffffffffffffff168152602001600063ffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff16815250600460008c815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548160ff02191690831515021790555060608201518160000160096101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060808201518160010160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555060a082015181600101600c6101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555060c08201518160010160186101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555090505086600560008c815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550856bffffffffffffffffffffffff16601554620032da91906200528d565b60155560008a81526007602090815260409091208651620032fe92880190620040b5565b5060008a815260186020908152604090912084516200332092860190620040b5565b5060008a815260196020908152604090912083516200334292850190620040b5565b506200335060028b620039e8565b5050505050505050505050565b321562003396576040517fb60ac5db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000806000836060015162ffffff1690506000808263ffffffff161190506000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b1580156200342057600080fd5b505afa15801562003435573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200345b919062004c79565b50945090925050506000811315806200347357508142105b806200349857508280156200349857506200348f824262005389565b8463ffffffff16105b15620034a9576013549550620034ad565b8095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b1580156200351457600080fd5b505afa15801562003529573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200354f919062004c79565b50945090925050506000811315806200356757508142105b806200358c57508280156200358c575062003583824262005389565b8463ffffffff16105b156200359d576014549450620035a1565b8094505b50505050915091565b600080620035bd868960000151620039f6565b9050600080620035da8a8a63ffffffff16858a8a60018b62003a44565b9092509050620035eb8183620052d0565b9a9950505050505050505050565b600062003607838362003e65565b90505b92915050565b600060017f0000000000000000000000000000000000000000000000000000000000000000600281111562003649576200364962005574565b1415620036d857606473ffffffffffffffffffffffffffffffffffffffff1663a3b1b31d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200369857600080fd5b505afa158015620036ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620036d391906200483c565b905090565b504390565b60005473ffffffffffffffffffffffffffffffffffffffff16331462003396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640162000fb0565b73ffffffffffffffffffffffffffffffffffffffff8116331415620037e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000fb0565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060017f0000000000000000000000000000000000000000000000000000000000000000600281111562003891576200389162005574565b1415620039de576000606473ffffffffffffffffffffffffffffffffffffffff1663a3b1b31d6040518163ffffffff1660e01b815260040160206040518083038186803b158015620038e257600080fd5b505afa158015620038f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200391d91906200483c565b905080831015806200393b575061010062003939848362005389565b115b156200394a5750600092915050565b6040517f2b407a8200000000000000000000000000000000000000000000000000000000815260048101849052606490632b407a829060240160206040518083038186803b1580156200399c57600080fd5b505afa158015620039b1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620039d791906200483c565b9392505050565b504090565b919050565b600062003607838362003f69565b600062003a0b63ffffffff841660146200531a565b62003a18836001620052a8565b62003a299060ff16611d4c6200531a565b62003a3890620124f86200528d565b6200360791906200528d565b6000806000896080015161ffff168762003a5f91906200531a565b905083801562003a6e5750803a105b1562003a7757503a5b600060027f0000000000000000000000000000000000000000000000000000000000000000600281111562003ab05762003ab062005574565b141562003c4657604080516000815260208101909152851562003b155760003660405180608001604052806048815260200162005beb6048913960405160200162003afe9392919062004e0e565b604051602081830303815290604052905062003b97565b60125462003b47907801000000000000000000000000000000000000000000000000900463ffffffff1660046200535a565b63ffffffff1667ffffffffffffffff81111562003b685762003b6862005601565b6040519080825280601f01601f19166020018201604052801562003b93576020820181803683370190505b5090505b6040517f49948e0e00000000000000000000000000000000000000000000000000000000815273420000000000000000000000000000000000000f906349948e0e9062003be9908490600401620050f3565b60206040518083038186803b15801562003c0257600080fd5b505afa15801562003c17573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003c3d91906200483c565b91505062003d0a565b60017f0000000000000000000000000000000000000000000000000000000000000000600281111562003c7d5762003c7d62005574565b141562003d0a57606c73ffffffffffffffffffffffffffffffffffffffff1663c6f7de0e6040518163ffffffff1660e01b815260040160206040518083038186803b15801562003ccc57600080fd5b505afa15801562003ce1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003d0791906200483c565b90505b8462003d2957808b6080015161ffff1662003d2691906200531a565b90505b62003d3961ffff87168262005303565b90506000878262003d4b8c8e6200528d565b62003d5790866200531a565b62003d6391906200528d565b62003d7790670de0b6b3a76400006200531a565b62003d83919062005303565b905060008c6040015163ffffffff1664e8d4a5100062003da491906200531a565b898e6020015163ffffffff16858f8862003dbf91906200531a565b62003dcb91906200528d565b62003ddb90633b9aca006200531a565b62003de791906200531a565b62003df3919062005303565b62003dff91906200528d565b90506b033b2e3c9fd0803ce800000062003e1a82846200528d565b111562003e53576040517f2ad7547a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b909c909b509950505050505050505050565b6000818152600183016020526040812054801562003f5e57600062003e8c60018362005389565b855490915060009062003ea29060019062005389565b905081811462003f0e57600086600001828154811062003ec65762003ec6620055d2565b906000526020600020015490508087600001848154811062003eec5762003eec620055d2565b6000918252602080832090910192909255918252600188019052604090208390555b855486908062003f225762003f22620055a3565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506200360a565b60009150506200360a565b600081815260018301602052604081205462003fb2575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200360a565b5060006200360a565b82805462003fc9906200544c565b90600052602060002090601f01602090048101928262003fed576000855562004056565b82601f1062004026578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082351617855562004056565b8280016001018555821562004056579182015b828111156200405657823582559160200191906001019062004039565b506200406492915062004132565b5090565b610575806200567683390190565b50805462004084906200544c565b6000825580601f1062004095575050565b601f016020900490600052602060002090810190620026f4919062004132565b828054620040c3906200544c565b90600052602060002090601f016020900481019282620040e7576000855562004056565b82601f106200410257805160ff191683800117855562004056565b8280016001018555821562004056579182015b828111156200405657825182559160200191906001019062004115565b5b8082111562004064576000815560010162004133565b6000620041606200415a8462005244565b620051cb565b90508281528383830111156200417557600080fd5b620039d783602083018462005419565b8035620039e38162005643565b600082601f830112620041a457600080fd5b81356020620041b76200415a836200521d565b80838252828201915082860187848660051b8901011115620041d857600080fd5b60005b8581101562004204578135620041f18162005643565b84529284019290840190600101620041db565b5090979650505050505050565b600082601f8301126200422357600080fd5b81356020620042366200415a836200521d565b80838252828201915082860187848660051b89010111156200425757600080fd5b6000805b868110156200429f57823567ffffffffffffffff8111156200427b578283fd5b6200428b8b88838d010162004475565b86525093850193918501916001016200425b565b509198975050505050505050565b600082601f830112620042bf57600080fd5b81356020620042d26200415a836200521d565b80838252828201915082860187848660081b8901011115620042f357600080fd5b6000805b868110156200429f5761010080848c03121562004312578283fd5b6200431c62005178565b6200432785620044fe565b815262004336888601620044fe565b888201526040808601356200434b8162005666565b9082015260606200435e86820162004185565b9082015260806200437186820162004540565b9082015260a06200438486820162004540565b9082015260c062004397868201620044fe565b9082015260e0620043aa86820162004185565b908201528652948601949290920191600101620042f7565b600082601f830112620043d457600080fd5b81356020620043e76200415a836200521d565b80838252828201915082860187848660051b89010111156200440857600080fd5b60005b8581101562004204578135845292840192908401906001016200440b565b60008083601f8401126200443c57600080fd5b50813567ffffffffffffffff8111156200445557600080fd5b6020830191508360208285010111156200446e57600080fd5b9250929050565b600082601f8301126200448757600080fd5b8135620044986200415a8262005244565b818152846020838601011115620044ae57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112620044dd57600080fd5b620036078383516020850162004149565b803560048110620039e357600080fd5b803563ffffffff81168114620039e357600080fd5b805169ffffffffffffffffffff81168114620039e357600080fd5b805160ff81168114620039e357600080fd5b80356bffffffffffffffffffffffff81168114620039e357600080fd5b6000602082840312156200457057600080fd5b8135620039d78162005643565b600080600080600080600060a0888a0312156200459957600080fd5b8735620045a68162005643565b9650620045b660208901620044fe565b95506040880135620045c88162005643565b9450606088013567ffffffffffffffff80821115620045e657600080fd5b620045f48b838c0162004429565b909650945060808a01359150808211156200460e57600080fd5b506200461d8a828b0162004429565b989b979a50959850939692959293505050565b6000806000604084860312156200464657600080fd5b833567ffffffffffffffff808211156200465f57600080fd5b818601915086601f8301126200467457600080fd5b8135818111156200468457600080fd5b8760208260051b85010111156200469a57600080fd5b60209283019550935050840135620046b28162005643565b809150509250925092565b60008060008060008060c08789031215620046d757600080fd5b863567ffffffffffffffff80821115620046f057600080fd5b620046fe8a838b01620043c2565b975060208901359150808211156200471557600080fd5b620047238a838b01620042ad565b965060408901359150808211156200473a57600080fd5b620047488a838b0162004211565b955060608901359150808211156200475f57600080fd5b6200476d8a838b0162004192565b945060808901359150808211156200478457600080fd5b620047928a838b0162004211565b935060a0890135915080821115620047a957600080fd5b50620047b889828a0162004211565b9150509295509295509295565b600060208284031215620047d857600080fd5b8151620039d78162005666565b60008060408385031215620047f957600080fd5b8251620048068162005666565b602084015190925067ffffffffffffffff8111156200482457600080fd5b6200483285828601620044cb565b9150509250929050565b6000602082840312156200484f57600080fd5b5051919050565b600080602083850312156200486a57600080fd5b823567ffffffffffffffff8111156200488257600080fd5b620048908582860162004429565b90969095509350505050565b600060208284031215620048af57600080fd5b815167ffffffffffffffff811115620048c757600080fd5b6200061d84828501620044cb565b60008060408385031215620048e957600080fd5b620048f483620044ee565b9150602083013567ffffffffffffffff8111156200491157600080fd5b620048328582860162004475565b6000806000606084860312156200493557600080fd5b6200494084620044ee565b9250602084013567ffffffffffffffff808211156200495e57600080fd5b6200496c8783880162004475565b935060408601359150808211156200498357600080fd5b50620049928682870162004475565b9150509250925092565b600060208284031215620049af57600080fd5b815167ffffffffffffffff80821115620049c857600080fd5b9083019060408286031215620049dd57600080fd5b620049e7620051a5565b825182811115620049f757600080fd5b8301601f8101871362004a0957600080fd5b62004a1a8782516020840162004149565b82525060208301518281111562004a3057600080fd5b62004a3e87828601620044cb565b60208301525095945050505050565b600060c0828403121562004a6057600080fd5b60405160c0810181811067ffffffffffffffff8211171562004a865762004a8662005601565b604052825162004a968162005643565b815262004aa6602084016200452e565b602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b60006020828403121562004af057600080fd5b815167ffffffffffffffff8082111562004b0957600080fd5b908301906020828603121562004b1e57600080fd5b60405160208101818110838211171562004b3c5762004b3c62005601565b60405282518281111562004b4f57600080fd5b62004b5d87828601620044cb565b82525095945050505050565b60006020828403121562004b7c57600080fd5b5035919050565b60008060006060848603121562004b9957600080fd5b83359250602084013567ffffffffffffffff8082111562004bb957600080fd5b6200496c8783880162004211565b60008060006040848603121562004bdd57600080fd5b83359250602084013567ffffffffffffffff81111562004bfc57600080fd5b62004c0a8682870162004429565b9497909650939450505050565b6000806040838503121562004c2b57600080fd5b82359150602083013567ffffffffffffffff8111156200491157600080fd5b6000806040838503121562004c5e57600080fd5b8235915062004c706020840162004540565b90509250929050565b600080600080600060a0868803121562004c9257600080fd5b62004c9d8662004513565b945060208601519350604086015192506060860151915062004cc26080870162004513565b90509295509295909350565b60006020828403121562004ce157600080fd5b62003607826200452e565b600081518084526020808501945080840160005b8381101562004d3457815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010162004d00565b509495945050505050565b600081518084526020808501808196508360051b8101915082860160005b8581101562004d8b57828403895262004d7884835162004d98565b9885019893509084019060010162004d5d565b5091979650505050505050565b6000815180845262004db281602086016020860162005419565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6004811062004df75762004df762005574565b9052565b6008811062004df75762004df762005574565b82848237600083820160008152835162004e2d81836020880162005419565b0195945050505050565b6000825162004e4b81846020870162005419565b9190910192915050565b60408152600062004e6a604083018562004d3f565b828103602084015262004e7e818562004d98565b95945050505050565b600060c0808352888184015260e07f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8a111562004ec357600080fd5b8960051b808c838701378085019050818101600081526020838784030181880152818c5180845261010093508385019150828e01945060005b8181101562004fc1578551805163ffffffff908116855285820151168585015260408082015115159085015260608082015173ffffffffffffffffffffffffffffffffffffffff81168287015250506080818101516bffffffffffffffffffffffff811686830152505060a0818101516bffffffffffffffffffffffff81168683015250508089015163ffffffff8116858b01525087015173ffffffffffffffffffffffffffffffffffffffff81168489015250948301949184019160010162004efc565b5050878103604089015262004fd7818d62004d3f565b95505050505050828103606084015262004ff2818762004cec565b9050828103608084015262005008818662004d3f565b905082810360a0840152620035eb818562004d3f565b84151581526080602082015260006200503b608083018662004d98565b90506200504c604083018562004dfb565b82606083015295945050505050565b861515815260c0602082015260006200507860c083018862004d98565b905062005089604083018762004dfb565b8460608301528360808301528260a0830152979650505050505050565b60208152816020820152818360408301376000818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b60208152600062003607602083018462004d98565b60208101620051178362005630565b91905290565b602081016200360a828462004de4565b62005139818462004de4565b6040602082015260006200061d604083018462004d98565b60ff8416815260ff8316602082015260606040820152600062004e7e606083018462004d98565b604051610100810167ffffffffffffffff811182821017156200519f576200519f62005601565b60405290565b6040805190810167ffffffffffffffff811182821017156200519f576200519f62005601565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171562005215576200521562005601565b604052919050565b600067ffffffffffffffff8211156200523a576200523a62005601565b5060051b60200190565b600067ffffffffffffffff82111562005261576200526162005601565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60008219821115620052a357620052a362005516565b500190565b600060ff821660ff84168060ff03821115620052c857620052c862005516565b019392505050565b60006bffffffffffffffffffffffff808316818516808303821115620052fa57620052fa62005516565b01949350505050565b60008262005315576200531562005545565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562005355576200535562005516565b500290565b600063ffffffff8083168185168183048111821515161562005380576200538062005516565b02949350505050565b6000828210156200539e576200539e62005516565b500390565b60006bffffffffffffffffffffffff83811690831681811015620053cb57620053cb62005516565b039392505050565b8051602080830151919081101562005413577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b60005b83811015620054365781810151838201526020016200541c565b8381111562005446576000848401525b50505050565b600181811c908216806200546157607f821691505b6020821081141562005413577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620054d157620054d162005516565b5060010190565b600063ffffffff80831681811415620054f557620054f562005516565b6001019392505050565b60008262005511576200551162005545565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60038110620026f457620026f462005574565b73ffffffffffffffffffffffffffffffffffffffff81168114620026f457600080fd5b8015158114620026f457600080fdfe60c060405234801561001057600080fd5b5060405161057538038061057583398101604081905261002f9161005b565b60008054336001600160a01b031990911617905560601b6001600160601b03191660805260a052610098565b6000806040838503121561006e57600080fd5b825160208401519092506001600160a01b038116811461008d57600080fd5b809150509250929050565b60805160601c60a0516104ae6100c76000396000610145015260008181610170015261028001526104ae6000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c806379188d161161005057806379188d161461011d5780638ee489b214610140578063f00e6a2a1461016e57600080fd5b8063181f5a77146100775780631a5da6c8146100c95780635ab1bd53146100de575b600080fd5b6100b36040518060400160405280601981526020017f4175746f6d6174696f6e466f7277617264657220312e302e300000000000000081525081565b6040516100c091906103ff565b60405180910390f35b6100dc6100d73660046102e9565b610194565b005b60005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100c0565b61013061012b366004610326565b61022c565b60405190151581526020016100c0565b6040517f000000000000000000000000000000000000000000000000000000000000000081526020016100c0565b7f00000000000000000000000000000000000000000000000000000000000000006100f8565b60005473ffffffffffffffffffffffffffffffffffffffff1633146101e5576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000805473ffffffffffffffffffffffffffffffffffffffff16331461027e576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000005a6113888110156102af57600080fd5b6113888103905084604082048203116102c757600080fd5b50803b6102d357600080fd5b60008084516020860160008589f1949350505050565b6000602082840312156102fb57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461031f57600080fd5b9392505050565b6000806040838503121561033957600080fd5b82359150602083013567ffffffffffffffff8082111561035857600080fd5b818501915085601f83011261036c57600080fd5b81358181111561037e5761037e610472565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156103c4576103c4610472565b816040528281528860208487010111156103dd57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600060208083528351808285015260005b8181101561042c57858101830151858201604001528201610410565b8181111561043e576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c6343000806000a307866666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666a164736f6c6343000806000a", + Bin: "0x6101206040523480156200001257600080fd5b506040516200610e3803806200610e8339810160408190526200003591620003bc565b80816001600160a01b0316634b4fd03b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200007057600080fd5b505afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab9190620003e3565b826001600160a01b031663ca30e6036040518163ffffffff1660e01b815260040160206040518083038186803b158015620000e557600080fd5b505afa158015620000fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001209190620003bc565b836001600160a01b031663b10b673c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200015a57600080fd5b505afa1580156200016f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001959190620003bc565b846001600160a01b0316636709d0e56040518163ffffffff1660e01b815260040160206040518083038186803b158015620001cf57600080fd5b505afa158015620001e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020a9190620003bc565b3380600081620002615760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b03848116919091179091558116156200029457620002948162000310565b505050836002811115620002ac57620002ac62000406565b60e0816002811115620002c357620002c362000406565b60f81b9052506001600160601b0319606093841b811660805291831b821660a052821b811660c052601680546001600160a01b0319163317905592901b9091166101005250620004359050565b6001600160a01b0381163314156200036b5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000258565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215620003cf57600080fd5b8151620003dc816200041c565b9392505050565b600060208284031215620003f657600080fd5b815160038110620003dc57600080fd5b634e487b7160e01b600052602160045260246000fd5b6001600160a01b03811681146200043257600080fd5b50565b60805160601c60a05160601c60c05160601c60e05160f81c6101005160601c615c3f620004cf600039600081816101aa015281816101f00152610298015260008181610254015281816136160152818161385e01528181613a7d0152613c4a0152600081816102e201526133bb0152600081816103e401526134af01526000818161042201528181611bbb01526122240152615c3f6000f3fe60806040523480156200001157600080fd5b5060043610620001a85760003560e01c80638da5cb5b11620000ed578063c80480221162000099578063f679b74c116200006f578063f679b74c146200045e578063f7d334ba1462000487578063fd9541d7146200049e57620001a8565b8063c80480221462000409578063ca30e6031462000420578063f2fde38b146200044757620001a8565b8063948108f711620000cf578063948108f714620003af578063aab9edd614620003c6578063b10b673c14620003e257620001a8565b80638da5cb5b14620003795780638e86139b146200039857620001a8565b80635147cd59116200015957806371791aa0116200012f57806371791aa0146200032d57806379ba5097146200035857806385c1b0ba146200036257620001a8565b80635147cd5914620002ba5780636709d0e514620002e05780636ded9eae146200030757620001a8565b80634b4fd03b116200018f5780634b4fd03b14620002525780634ee88d3514620002795780634ff597c1146200029257620001a8565b8063349e8cca14620001ee57806348013d7b146200023a575b7f00000000000000000000000000000000000000000000000000000000000000003660008037600080366000845af43d6000803e808015620001e9573d6000f35b3d6000fd5b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b62000243600081565b60405162000231919062005108565b7f000000000000000000000000000000000000000000000000000000000000000062000243565b620002906200028a36600462004bc7565b620004b5565b005b620002107f000000000000000000000000000000000000000000000000000000000000000081565b620002d1620002cb36600462004b69565b6200056f565b6040516200023191906200511d565b7f000000000000000000000000000000000000000000000000000000000000000062000210565b6200031e620003183660046200457d565b62000625565b60405190815260200162000231565b620003446200033e36600462004c17565b620008a6565b60405162000231969594939291906200505b565b6200029062000f32565b620002906200037336600462004630565b62001035565b60005473ffffffffffffffffffffffffffffffffffffffff1662000210565b62000290620003a936600462004856565b62001c4c565b62000290620003c036600462004c4a565b6200204c565b620003cf600281565b60405160ff909116815260200162000231565b7f000000000000000000000000000000000000000000000000000000000000000062000210565b620002906200041a36600462004b69565b62002304565b7f000000000000000000000000000000000000000000000000000000000000000062000210565b62000290620004583660046200455d565b620026df565b620004756200046f36600462004b83565b620026f7565b6040516200023194939291906200501e565b620003446200049836600462004b69565b62002953565b62000290620004af366004620048d5565b62002a20565b620004c08362002c28565b6000620004cd846200056f565b9050620005118184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002a2092505050565b60008481526018602052604090206200052c90848462003fbb565b50837f2b72ac786c97e68dbab71023ed6f2bdbfc80ad9bb7808941929229d71b7d5664848460405162000561929190620050a6565b60405180910390a250505050565b6000818160045b600f81101562000604577fff000000000000000000000000000000000000000000000000000000000000008216838260208110620005b857620005b8620055d2565b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614620005ef57506000949350505050565b80620005fb816200549c565b91505062000576565b5081600f1a60038111156200061d576200061d62005574565b949350505050565b6000805473ffffffffffffffffffffffffffffffffffffffff1633148015906200067757506011546c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15620006af576040517fd48b678b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008080620006c1858701876200491f565b925092509250620006d3838362002a20565b620006de8362002cdd565b93506000848c604051620006f29062004068565b91825273ffffffffffffffffffffffffffffffffffffffff166020820152604001604051809103906000f08015801562000730573d6000803e3d6000fd5b5090506200077e858d8d8d60008e8e8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508c91508b90508a62002e6d565b6012805468010000000000000000900463ffffffff16906008620007a283620054d8565b91906101000a81548163ffffffff021916908363ffffffff16021790555050847fbae366358c023f887e791d7a62f2e4316f1026bd77f6fb49501a917b3bc5d0128c8c6040516200081b92919063ffffffff92909216825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b60405180910390a2847f2b72ac786c97e68dbab71023ed6f2bdbfc80ad9bb7808941929229d71b7d566484604051620008559190620050f3565b60405180910390a2847f3e8740446213c8a77d40e08f79136ce3f347d13ed270a6ebdf57159e0faf4850836040516200088f9190620050f3565b60405180910390a250505050979650505050505050565b60006060600080600080620008ba6200335d565b6000620008c7896200056f565b90506000600f604051806101200160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160059054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160099054906101000a900462ffffff1662ffffff1662ffffff16815260200160008201600c9054906101000a900461ffff1661ffff1661ffff16815260200160008201600e9054906101000a900460ff1615151515815260200160008201600f9054906101000a900460ff161515151581526020016000820160109054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815260200160008201601c9054906101000a900463ffffffff1663ffffffff1663ffffffff168152505090506000600460008c8152602001908152602001600020604051806101000160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160089054906101000a900460ff161515151581526020016000820160099054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815260200160018201600c9054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020016001820160189054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050905063ffffffff8016816020015163ffffffff161462000c3957505060408051602081019091526000808252975095506001945086925082915062000f289050565b80604001511562000c6c57505060408051602081019091526000808252975095506002945086925082915062000f289050565b62000c778262003398565b825160125492975090955060009162000cb79185917801000000000000000000000000000000000000000000000000900463ffffffff16898986620035aa565b9050806bffffffffffffffffffffffff168260a001516bffffffffffffffffffffffff16101562000d065760006040518060200160405280600081525060069950995099505050505062000f28565b60019950600084600381111562000d215762000d2162005574565b148062000d425750600184600381111562000d405762000d4062005574565b145b1562000f23575a96506000636e04ff0d60e01b8c60405160240162000d689190620050f3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925260e0850151601254925191935073ffffffffffffffffffffffffffffffffffffffff169163ffffffff169062000e1d90849062004e37565b60006040518083038160008787f1925050503d806000811462000e5d576040519150601f19603f3d011682016040523d82523d6000602084013e62000e62565b606091505b50909b5099505a62000e75908962005389565b97508a62000e87576003985062000f21565b8980602001905181019062000e9d9190620047e5565b909b5099508a62000ecd5760006040518060200160405280600081525060049a509a509a50505050505062000f28565b6012548a51780100000000000000000000000000000000000000000000000090910463ffffffff16101562000f215760006040518060200160405280600081525060059a509a509a50505050505062000f28565b505b505050505b9295509295509295565b60015473ffffffffffffffffffffffffffffffffffffffff16331462000fb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b600173ffffffffffffffffffffffffffffffffffffffff821660009081526017602052604090205460ff16600381111562001074576200107462005574565b14158015620010c05750600373ffffffffffffffffffffffffffffffffffffffff821660009081526017602052604090205460ff166003811115620010bd57620010bd62005574565b14155b15620010f8576040517f0ebeec3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6010546c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1662001158576040517fd12d7d8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8162001190576040517f2c2fc94100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526000808567ffffffffffffffff811115620011ef57620011ef62005601565b6040519080825280602002602001820160405280156200122457816020015b60608152602001906001900390816200120e5790505b50905060008667ffffffffffffffff81111562001245576200124562005601565b6040519080825280602002602001820160405280156200126f578160200160208202803683370190505b50905060008767ffffffffffffffff81111562001290576200129062005601565b6040519080825280602002602001820160405280156200131f57816020015b604080516101008101825260008082526020808301829052928201819052606082018190526080820181905260a0820181905260c0820181905260e082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181620012af5790505b50905060008867ffffffffffffffff81111562001340576200134062005601565b6040519080825280602002602001820160405280156200137557816020015b60608152602001906001900390816200135f5790505b50905060008967ffffffffffffffff81111562001396576200139662005601565b604051908082528060200260200182016040528015620013cb57816020015b6060815260200190600190039081620013b55790505b50905060005b8a81101562001962578b8b82818110620013ef57620013ef620055d2565b60209081029290920135600081815260048452604090819020815161010081018352815463ffffffff8082168352640100000000820481169783019790975260ff6801000000000000000082041615159382019390935273ffffffffffffffffffffffffffffffffffffffff69010000000000000000009093048316606082015260018201546bffffffffffffffffffffffff80821660808401526c0100000000000000000000000082041660a08301527801000000000000000000000000000000000000000000000000900490951660c0860152600201541660e08401529a50909850620014e090508962002c28565b87848281518110620014f657620014f6620055d2565b6020026020010181905250600760008a8152602001908152602001600020805462001521906200544c565b80601f01602080910402602001604051908101604052809291908181526020018280546200154f906200544c565b8015620015a05780601f106200157457610100808354040283529160200191620015a0565b820191906000526020600020905b8154815290600101906020018083116200158257829003601f168201915b5050505050868281518110620015ba57620015ba620055d2565b6020026020010181905250600560008a815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168582815181106200160e576200160e620055d2565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910182015260008a815260189091526040902080546200164d906200544c565b80601f01602080910402602001604051908101604052809291908181526020018280546200167b906200544c565b8015620016cc5780601f10620016a057610100808354040283529160200191620016cc565b820191906000526020600020905b815481529060010190602001808311620016ae57829003601f168201915b5050505050838281518110620016e657620016e6620055d2565b6020026020010181905250601960008a8152602001908152602001600020805462001711906200544c565b80601f01602080910402602001604051908101604052809291908181526020018280546200173f906200544c565b8015620017905780601f10620017645761010080835404028352916020019162001790565b820191906000526020600020905b8154815290600101906020018083116200177257829003601f168201915b5050505050828281518110620017aa57620017aa620055d2565b60200260200101819052508760a001516bffffffffffffffffffffffff1687620017d591906200528d565b60008a815260046020908152604080832080547fffffff00000000000000000000000000000000000000000000000000000000001681556001810180547fffffffff0000000000000000000000000000000000000000000000000000000016905560020180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556007909152812091985062001875919062004076565b60008981526018602052604081206200188e9162004076565b6000898152601960205260408120620018a79162004076565b600089815260066020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055620018e860028a620035f9565b5060a0880151604080516bffffffffffffffffffffffff909216825273ffffffffffffffffffffffffffffffffffffffff8c1660208301528a917fb38647142fbb1ea4c000fc4569b37a4e9a9f6313317b84ee3e5326c1a6cd06ff910160405180910390a28062001959816200549c565b915050620013d1565b508560155462001973919062005389565b60155560405160009062001998908d908d9087908a908a908990899060200162004e87565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905260105490915073ffffffffffffffffffffffffffffffffffffffff808c1691638e86139b916c010000000000000000000000009091041663c71249ab60028e73ffffffffffffffffffffffffffffffffffffffff1663aab9edd66040518163ffffffff1660e01b8152600401602060405180830381600087803b15801562001a4d57600080fd5b505af115801562001a62573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a88919062004cce565b866040518463ffffffff1660e01b815260040162001aa99392919062005151565b60006040518083038186803b15801562001ac257600080fd5b505afa15801562001ad7573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001b1f91908101906200489c565b6040518263ffffffff1660e01b815260040162001b3d9190620050f3565b600060405180830381600087803b15801562001b5857600080fd5b505af115801562001b6d573d6000803e3d6000fd5b50506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8d81166004830152602482018b90527f000000000000000000000000000000000000000000000000000000000000000016925063a9059cbb9150604401602060405180830381600087803b15801562001c0257600080fd5b505af115801562001c17573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c3d9190620047c5565b50505050505050505050505050565b60023360009081526017602052604090205460ff16600381111562001c755762001c7562005574565b1415801562001cab575060033360009081526017602052604090205460ff16600381111562001ca85762001ca862005574565b14155b1562001ce3576040517f0ebeec3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808080808062001cf887890189620046bd565b95509550955095509550955060005b86518110156200204157600073ffffffffffffffffffffffffffffffffffffffff1686828151811062001d3e5762001d3e620055d2565b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff16141562001e465786818151811062001d7c5762001d7c620055d2565b602002602001015186828151811062001d995762001d99620055d2565b602002602001015160e0015160405162001db39062004068565b91825273ffffffffffffffffffffffffffffffffffffffff166020820152604001604051809103906000f08015801562001df1573d6000803e3d6000fd5b5086828151811062001e075762001e07620055d2565b60200260200101516060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b62001f8687828151811062001e5f5762001e5f620055d2565b602002602001015187838151811062001e7c5762001e7c620055d2565b602002602001015160e0015188848151811062001e9d5762001e9d620055d2565b60200260200101516000015187858151811062001ebe5762001ebe620055d2565b60200260200101518a868151811062001edb5762001edb620055d2565b602002602001015160a001518a878151811062001efc5762001efc620055d2565b60200260200101518c888151811062001f195762001f19620055d2565b6020026020010151604001518a898151811062001f3a5762001f3a620055d2565b60200260200101518a8a8151811062001f575762001f57620055d2565b60200260200101518f8b8151811062001f745762001f74620055d2565b60200260200101516060015162002e6d565b86818151811062001f9b5762001f9b620055d2565b60200260200101517f74931a144e43a50694897f241d973aecb5024c0e910f9bb80a163ea3c1cf5a7187838151811062001fd95762001fd9620055d2565b602002602001015160a0015133604051620020249291906bffffffffffffffffffffffff92909216825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b60405180910390a28062002038816200549c565b91505062001d07565b505050505050505050565b600082815260046020908152604091829020825161010081018452815463ffffffff80821683526401000000008204811694830185905260ff6801000000000000000083041615159583019590955273ffffffffffffffffffffffffffffffffffffffff69010000000000000000009091048116606083015260018301546bffffffffffffffffffffffff80821660808501526c0100000000000000000000000082041660a084015278010000000000000000000000000000000000000000000000009004851660c083015260029092015490911660e082015291146200215f576040517f9c0083a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818160a00151620021719190620052d0565b600084815260046020526040902060010180547fffffffffffffffff000000000000000000000000ffffffffffffffffffffffff166c010000000000000000000000006bffffffffffffffffffffffff93841602179055601554620021d9918416906200528d565b6015556040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526bffffffffffffffffffffffff831660448201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd90606401602060405180830381600087803b1580156200227e57600080fd5b505af115801562002293573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620022b99190620047c5565b506040516bffffffffffffffffffffffff83168152339084907fafd24114486da8ebfc32f3626dada8863652e187461aa74d4bfa7348915062039060200160405180910390a3505050565b6000818152600460209081526040808320815161010081018352815463ffffffff80821683526401000000008204811695830186905260ff6801000000000000000083041615159483019490945273ffffffffffffffffffffffffffffffffffffffff69010000000000000000009091048116606083015260018301546bffffffffffffffffffffffff80821660808501526c0100000000000000000000000082041660a084015278010000000000000000000000000000000000000000000000009004841660c083015260029092015490911660e082015292911415906200240260005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161490508180156200245d57508080156200245b57506200244e62003610565b836020015163ffffffff16115b155b1562002495576040517ffbc0357800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80158015620024c8575060008481526005602052604090205473ffffffffffffffffffffffffffffffffffffffff163314155b1562002500576040517ffbdb8e5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006200250c62003610565b9050816200252457620025216032826200528d565b90505b6000858152600460205260409020805463ffffffff808416640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff909216919091179091556200257f906002908790620035f916565b5060105460808501516bffffffffffffffffffffffff9182169160009116821115620025e8576080860151620025b69083620053a3565b90508560a001516bffffffffffffffffffffffff16816bffffffffffffffffffffffff161115620025e8575060a08501515b808660a00151620025fa9190620053a3565b600088815260046020526040902060010180547fffffffffffffffff000000000000000000000000ffffffffffffffffffffffff166c010000000000000000000000006bffffffffffffffffffffffff938416021790556011546200266291839116620052d0565b601180547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9290921691909117905560405167ffffffffffffffff84169088907f91cb3bb75cfbd718bbfccc56b7f53d92d7048ef4ca39a3b7b7c6d4af1f79118190600090a350505050505050565b620026e9620036dd565b620026f48162003760565b50565b60006060600080620027086200335d565b600087815260046020908152604091829020825161010081018452815463ffffffff8082168352640100000000820481169483019490945268010000000000000000810460ff16151594820194909452690100000000000000000090930473ffffffffffffffffffffffffffffffffffffffff908116606085015260018201546bffffffffffffffffffffffff80821660808701526c0100000000000000000000000082041660a08601527801000000000000000000000000000000000000000000000000900490921660c0840152600201541660e08201525a91506000634ad8c9a660e01b88886040516024016200280392919062004e55565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925260e08401516012549251919350600092839273ffffffffffffffffffffffffffffffffffffffff9092169163ffffffff90911690620028c190869062004e37565b60006040518083038160008787f1925050503d806000811462002901576040519150601f19603f3d011682016040523d82523d6000602084013e62002906565b606091505b50915091505a62002918908662005389565b9450816200292a576007955062002946565b80806020019051810190620029409190620047e5565b90985096505b5050505093509350935093565b6000606060008060008062002a0c87600760008a8152602001908152602001600020805462002982906200544c565b80601f0160208091040260200160405190810160405280929190818152602001828054620029b0906200544c565b801562002a015780601f10620029d55761010080835404028352916020019162002a01565b820191906000526020600020905b815481529060010190602001808311620029e357829003601f168201915b5050505050620008a6565b949c939b5091995097509550909350915050565b3330141562002b8457600082600381111562002a405762002a4062005574565b141562002a585780511562002a5457600080fd5b5050565b600182600381111562002a6f5762002a6f62005574565b141562002adc5760008180602001905181019062002a8e919062004a4d565b805190915073ffffffffffffffffffffffffffffffffffffffff1662002ab357600080fd5b604081015162002ac257600080fd5b6008816020015160ff161062002ad757600080fd5b505050565b600282600381111562002af35762002af362005574565b141562002b355760008180602001905181019062002b1291906200499c565b9050602081602001515162002b289190620054ff565b60041462002ad757600080fd5b600382600381111562002b4c5762002b4c62005574565b141562002b7f5760008180602001905181019062002b6b919062004add565b80515190915062002b2890602090620054ff565b600080fd5b6040517ffd9541d7000000000000000000000000000000000000000000000000000000008152309063fd9541d79062002bc490859085906004016200512d565b600060405180830381600087803b15801562002bdf57600080fd5b505af192505050801562002bf1575060015b62002a54576040517fa768d7fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008181526005602052604090205473ffffffffffffffffffffffffffffffffffffffff16331462002c86576040517fa47c170600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260046020526040902054640100000000900463ffffffff90811614620026f4576040517f9c0083a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600062002d04600162002cf262003610565b62002cfe919062005389565b62003858565b601254604080516020810193909352309083015268010000000000000000900463ffffffff166060820152608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083015201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060045b600f81101562002e04578282828151811062002dc05762002dc0620055d2565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508062002dfb816200549c565b91505062002da0565b5083600381111562002e1a5762002e1a62005574565b60f81b81600f8151811062002e335762002e33620055d2565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506200061d81620053d3565b600f546e010000000000000000000000000000900460ff161562002ebd576040517f24522f3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff89163b62002f0c576040517f09ee12d500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60125485517401000000000000000000000000000000000000000090910463ffffffff16101562002f69576040517fae7235df00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108fc8863ffffffff16108062002f93575060125463ffffffff6401000000009091048116908916115b1562002fcb576040517f14c237fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008a81526004602052604090206002015473ffffffffffffffffffffffffffffffffffffffff16156200302b576040517f6e3b930b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518061010001604052808963ffffffff16815260200163ffffffff8016815260200185151581526020018273ffffffffffffffffffffffffffffffffffffffff16815260200160006bffffffffffffffffffffffff168152602001876bffffffffffffffffffffffff168152602001600063ffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff16815250600460008c815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548160ff02191690831515021790555060608201518160000160096101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060808201518160010160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555060a082015181600101600c6101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555060c08201518160010160186101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555090505086600560008c815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550856bffffffffffffffffffffffff16601554620032da91906200528d565b60155560008a81526007602090815260409091208651620032fe92880190620040b5565b5060008a815260186020908152604090912084516200332092860190620040b5565b5060008a815260196020908152604090912083516200334292850190620040b5565b506200335060028b620039e8565b5050505050505050505050565b321562003396576040517fb60ac5db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000806000836060015162ffffff1690506000808263ffffffff161190506000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b1580156200342057600080fd5b505afa15801562003435573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200345b919062004c79565b50945090925050506000811315806200347357508142105b806200349857508280156200349857506200348f824262005389565b8463ffffffff16105b15620034a9576013549550620034ad565b8095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b1580156200351457600080fd5b505afa15801562003529573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200354f919062004c79565b50945090925050506000811315806200356757508142105b806200358c57508280156200358c575062003583824262005389565b8463ffffffff16105b156200359d576014549450620035a1565b8094505b50505050915091565b600080620035bd868960000151620039f6565b9050600080620035da8a8a63ffffffff16858a8a60018b62003a44565b9092509050620035eb8183620052d0565b9a9950505050505050505050565b600062003607838362003e65565b90505b92915050565b600060017f0000000000000000000000000000000000000000000000000000000000000000600281111562003649576200364962005574565b1415620036d857606473ffffffffffffffffffffffffffffffffffffffff1663a3b1b31d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200369857600080fd5b505afa158015620036ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620036d391906200483c565b905090565b504390565b60005473ffffffffffffffffffffffffffffffffffffffff16331462003396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640162000fb0565b73ffffffffffffffffffffffffffffffffffffffff8116331415620037e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000fb0565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060017f0000000000000000000000000000000000000000000000000000000000000000600281111562003891576200389162005574565b1415620039de576000606473ffffffffffffffffffffffffffffffffffffffff1663a3b1b31d6040518163ffffffff1660e01b815260040160206040518083038186803b158015620038e257600080fd5b505afa158015620038f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200391d91906200483c565b905080831015806200393b575061010062003939848362005389565b115b156200394a5750600092915050565b6040517f2b407a8200000000000000000000000000000000000000000000000000000000815260048101849052606490632b407a829060240160206040518083038186803b1580156200399c57600080fd5b505afa158015620039b1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620039d791906200483c565b9392505050565b504090565b919050565b600062003607838362003f69565b600062003a0b63ffffffff841660146200531a565b62003a18836001620052a8565b62003a299060ff16611d4c6200531a565b62003a3890620138806200528d565b6200360791906200528d565b6000806000896080015161ffff168762003a5f91906200531a565b905083801562003a6e5750803a105b1562003a7757503a5b600060027f0000000000000000000000000000000000000000000000000000000000000000600281111562003ab05762003ab062005574565b141562003c4657604080516000815260208101909152851562003b155760003660405180608001604052806048815260200162005beb6048913960405160200162003afe9392919062004e0e565b604051602081830303815290604052905062003b97565b60125462003b47907801000000000000000000000000000000000000000000000000900463ffffffff1660046200535a565b63ffffffff1667ffffffffffffffff81111562003b685762003b6862005601565b6040519080825280601f01601f19166020018201604052801562003b93576020820181803683370190505b5090505b6040517f49948e0e00000000000000000000000000000000000000000000000000000000815273420000000000000000000000000000000000000f906349948e0e9062003be9908490600401620050f3565b60206040518083038186803b15801562003c0257600080fd5b505afa15801562003c17573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003c3d91906200483c565b91505062003d0a565b60017f0000000000000000000000000000000000000000000000000000000000000000600281111562003c7d5762003c7d62005574565b141562003d0a57606c73ffffffffffffffffffffffffffffffffffffffff1663c6f7de0e6040518163ffffffff1660e01b815260040160206040518083038186803b15801562003ccc57600080fd5b505afa15801562003ce1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003d0791906200483c565b90505b8462003d2957808b6080015161ffff1662003d2691906200531a565b90505b62003d3961ffff87168262005303565b90506000878262003d4b8c8e6200528d565b62003d5790866200531a565b62003d6391906200528d565b62003d7790670de0b6b3a76400006200531a565b62003d83919062005303565b905060008c6040015163ffffffff1664e8d4a5100062003da491906200531a565b898e6020015163ffffffff16858f8862003dbf91906200531a565b62003dcb91906200528d565b62003ddb90633b9aca006200531a565b62003de791906200531a565b62003df3919062005303565b62003dff91906200528d565b90506b033b2e3c9fd0803ce800000062003e1a82846200528d565b111562003e53576040517f2ad7547a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b909c909b509950505050505050505050565b6000818152600183016020526040812054801562003f5e57600062003e8c60018362005389565b855490915060009062003ea29060019062005389565b905081811462003f0e57600086600001828154811062003ec65762003ec6620055d2565b906000526020600020015490508087600001848154811062003eec5762003eec620055d2565b6000918252602080832090910192909255918252600188019052604090208390555b855486908062003f225762003f22620055a3565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506200360a565b60009150506200360a565b600081815260018301602052604081205462003fb2575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200360a565b5060006200360a565b82805462003fc9906200544c565b90600052602060002090601f01602090048101928262003fed576000855562004056565b82601f1062004026578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082351617855562004056565b8280016001018555821562004056579182015b828111156200405657823582559160200191906001019062004039565b506200406492915062004132565b5090565b610575806200567683390190565b50805462004084906200544c565b6000825580601f1062004095575050565b601f016020900490600052602060002090810190620026f4919062004132565b828054620040c3906200544c565b90600052602060002090601f016020900481019282620040e7576000855562004056565b82601f106200410257805160ff191683800117855562004056565b8280016001018555821562004056579182015b828111156200405657825182559160200191906001019062004115565b5b8082111562004064576000815560010162004133565b6000620041606200415a8462005244565b620051cb565b90508281528383830111156200417557600080fd5b620039d783602083018462005419565b8035620039e38162005643565b600082601f830112620041a457600080fd5b81356020620041b76200415a836200521d565b80838252828201915082860187848660051b8901011115620041d857600080fd5b60005b8581101562004204578135620041f18162005643565b84529284019290840190600101620041db565b5090979650505050505050565b600082601f8301126200422357600080fd5b81356020620042366200415a836200521d565b80838252828201915082860187848660051b89010111156200425757600080fd5b6000805b868110156200429f57823567ffffffffffffffff8111156200427b578283fd5b6200428b8b88838d010162004475565b86525093850193918501916001016200425b565b509198975050505050505050565b600082601f830112620042bf57600080fd5b81356020620042d26200415a836200521d565b80838252828201915082860187848660081b8901011115620042f357600080fd5b6000805b868110156200429f5761010080848c03121562004312578283fd5b6200431c62005178565b6200432785620044fe565b815262004336888601620044fe565b888201526040808601356200434b8162005666565b9082015260606200435e86820162004185565b9082015260806200437186820162004540565b9082015260a06200438486820162004540565b9082015260c062004397868201620044fe565b9082015260e0620043aa86820162004185565b908201528652948601949290920191600101620042f7565b600082601f830112620043d457600080fd5b81356020620043e76200415a836200521d565b80838252828201915082860187848660051b89010111156200440857600080fd5b60005b8581101562004204578135845292840192908401906001016200440b565b60008083601f8401126200443c57600080fd5b50813567ffffffffffffffff8111156200445557600080fd5b6020830191508360208285010111156200446e57600080fd5b9250929050565b600082601f8301126200448757600080fd5b8135620044986200415a8262005244565b818152846020838601011115620044ae57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112620044dd57600080fd5b620036078383516020850162004149565b803560048110620039e357600080fd5b803563ffffffff81168114620039e357600080fd5b805169ffffffffffffffffffff81168114620039e357600080fd5b805160ff81168114620039e357600080fd5b80356bffffffffffffffffffffffff81168114620039e357600080fd5b6000602082840312156200457057600080fd5b8135620039d78162005643565b600080600080600080600060a0888a0312156200459957600080fd5b8735620045a68162005643565b9650620045b660208901620044fe565b95506040880135620045c88162005643565b9450606088013567ffffffffffffffff80821115620045e657600080fd5b620045f48b838c0162004429565b909650945060808a01359150808211156200460e57600080fd5b506200461d8a828b0162004429565b989b979a50959850939692959293505050565b6000806000604084860312156200464657600080fd5b833567ffffffffffffffff808211156200465f57600080fd5b818601915086601f8301126200467457600080fd5b8135818111156200468457600080fd5b8760208260051b85010111156200469a57600080fd5b60209283019550935050840135620046b28162005643565b809150509250925092565b60008060008060008060c08789031215620046d757600080fd5b863567ffffffffffffffff80821115620046f057600080fd5b620046fe8a838b01620043c2565b975060208901359150808211156200471557600080fd5b620047238a838b01620042ad565b965060408901359150808211156200473a57600080fd5b620047488a838b0162004211565b955060608901359150808211156200475f57600080fd5b6200476d8a838b0162004192565b945060808901359150808211156200478457600080fd5b620047928a838b0162004211565b935060a0890135915080821115620047a957600080fd5b50620047b889828a0162004211565b9150509295509295509295565b600060208284031215620047d857600080fd5b8151620039d78162005666565b60008060408385031215620047f957600080fd5b8251620048068162005666565b602084015190925067ffffffffffffffff8111156200482457600080fd5b6200483285828601620044cb565b9150509250929050565b6000602082840312156200484f57600080fd5b5051919050565b600080602083850312156200486a57600080fd5b823567ffffffffffffffff8111156200488257600080fd5b620048908582860162004429565b90969095509350505050565b600060208284031215620048af57600080fd5b815167ffffffffffffffff811115620048c757600080fd5b6200061d84828501620044cb565b60008060408385031215620048e957600080fd5b620048f483620044ee565b9150602083013567ffffffffffffffff8111156200491157600080fd5b620048328582860162004475565b6000806000606084860312156200493557600080fd5b6200494084620044ee565b9250602084013567ffffffffffffffff808211156200495e57600080fd5b6200496c8783880162004475565b935060408601359150808211156200498357600080fd5b50620049928682870162004475565b9150509250925092565b600060208284031215620049af57600080fd5b815167ffffffffffffffff80821115620049c857600080fd5b9083019060408286031215620049dd57600080fd5b620049e7620051a5565b825182811115620049f757600080fd5b8301601f8101871362004a0957600080fd5b62004a1a8782516020840162004149565b82525060208301518281111562004a3057600080fd5b62004a3e87828601620044cb565b60208301525095945050505050565b600060c0828403121562004a6057600080fd5b60405160c0810181811067ffffffffffffffff8211171562004a865762004a8662005601565b604052825162004a968162005643565b815262004aa6602084016200452e565b602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b60006020828403121562004af057600080fd5b815167ffffffffffffffff8082111562004b0957600080fd5b908301906020828603121562004b1e57600080fd5b60405160208101818110838211171562004b3c5762004b3c62005601565b60405282518281111562004b4f57600080fd5b62004b5d87828601620044cb565b82525095945050505050565b60006020828403121562004b7c57600080fd5b5035919050565b60008060006060848603121562004b9957600080fd5b83359250602084013567ffffffffffffffff8082111562004bb957600080fd5b6200496c8783880162004211565b60008060006040848603121562004bdd57600080fd5b83359250602084013567ffffffffffffffff81111562004bfc57600080fd5b62004c0a8682870162004429565b9497909650939450505050565b6000806040838503121562004c2b57600080fd5b82359150602083013567ffffffffffffffff8111156200491157600080fd5b6000806040838503121562004c5e57600080fd5b8235915062004c706020840162004540565b90509250929050565b600080600080600060a0868803121562004c9257600080fd5b62004c9d8662004513565b945060208601519350604086015192506060860151915062004cc26080870162004513565b90509295509295909350565b60006020828403121562004ce157600080fd5b62003607826200452e565b600081518084526020808501945080840160005b8381101562004d3457815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010162004d00565b509495945050505050565b600081518084526020808501808196508360051b8101915082860160005b8581101562004d8b57828403895262004d7884835162004d98565b9885019893509084019060010162004d5d565b5091979650505050505050565b6000815180845262004db281602086016020860162005419565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6004811062004df75762004df762005574565b9052565b6008811062004df75762004df762005574565b82848237600083820160008152835162004e2d81836020880162005419565b0195945050505050565b6000825162004e4b81846020870162005419565b9190910192915050565b60408152600062004e6a604083018562004d3f565b828103602084015262004e7e818562004d98565b95945050505050565b600060c0808352888184015260e07f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8a111562004ec357600080fd5b8960051b808c838701378085019050818101600081526020838784030181880152818c5180845261010093508385019150828e01945060005b8181101562004fc1578551805163ffffffff908116855285820151168585015260408082015115159085015260608082015173ffffffffffffffffffffffffffffffffffffffff81168287015250506080818101516bffffffffffffffffffffffff811686830152505060a0818101516bffffffffffffffffffffffff81168683015250508089015163ffffffff8116858b01525087015173ffffffffffffffffffffffffffffffffffffffff81168489015250948301949184019160010162004efc565b5050878103604089015262004fd7818d62004d3f565b95505050505050828103606084015262004ff2818762004cec565b9050828103608084015262005008818662004d3f565b905082810360a0840152620035eb818562004d3f565b84151581526080602082015260006200503b608083018662004d98565b90506200504c604083018562004dfb565b82606083015295945050505050565b861515815260c0602082015260006200507860c083018862004d98565b905062005089604083018762004dfb565b8460608301528360808301528260a0830152979650505050505050565b60208152816020820152818360408301376000818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b60208152600062003607602083018462004d98565b60208101620051178362005630565b91905290565b602081016200360a828462004de4565b62005139818462004de4565b6040602082015260006200061d604083018462004d98565b60ff8416815260ff8316602082015260606040820152600062004e7e606083018462004d98565b604051610100810167ffffffffffffffff811182821017156200519f576200519f62005601565b60405290565b6040805190810167ffffffffffffffff811182821017156200519f576200519f62005601565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171562005215576200521562005601565b604052919050565b600067ffffffffffffffff8211156200523a576200523a62005601565b5060051b60200190565b600067ffffffffffffffff82111562005261576200526162005601565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60008219821115620052a357620052a362005516565b500190565b600060ff821660ff84168060ff03821115620052c857620052c862005516565b019392505050565b60006bffffffffffffffffffffffff808316818516808303821115620052fa57620052fa62005516565b01949350505050565b60008262005315576200531562005545565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562005355576200535562005516565b500290565b600063ffffffff8083168185168183048111821515161562005380576200538062005516565b02949350505050565b6000828210156200539e576200539e62005516565b500390565b60006bffffffffffffffffffffffff83811690831681811015620053cb57620053cb62005516565b039392505050565b8051602080830151919081101562005413577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b60005b83811015620054365781810151838201526020016200541c565b8381111562005446576000848401525b50505050565b600181811c908216806200546157607f821691505b6020821081141562005413577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620054d157620054d162005516565b5060010190565b600063ffffffff80831681811415620054f557620054f562005516565b6001019392505050565b60008262005511576200551162005545565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60038110620026f457620026f462005574565b73ffffffffffffffffffffffffffffffffffffffff81168114620026f457600080fd5b8015158114620026f457600080fdfe60c060405234801561001057600080fd5b5060405161057538038061057583398101604081905261002f9161005b565b60008054336001600160a01b031990911617905560601b6001600160601b03191660805260a052610098565b6000806040838503121561006e57600080fd5b825160208401519092506001600160a01b038116811461008d57600080fd5b809150509250929050565b60805160601c60a0516104ae6100c76000396000610145015260008181610170015261028001526104ae6000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c806379188d161161005057806379188d161461011d5780638ee489b214610140578063f00e6a2a1461016e57600080fd5b8063181f5a77146100775780631a5da6c8146100c95780635ab1bd53146100de575b600080fd5b6100b36040518060400160405280601981526020017f4175746f6d6174696f6e466f7277617264657220312e302e300000000000000081525081565b6040516100c091906103ff565b60405180910390f35b6100dc6100d73660046102e9565b610194565b005b60005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100c0565b61013061012b366004610326565b61022c565b60405190151581526020016100c0565b6040517f000000000000000000000000000000000000000000000000000000000000000081526020016100c0565b7f00000000000000000000000000000000000000000000000000000000000000006100f8565b60005473ffffffffffffffffffffffffffffffffffffffff1633146101e5576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000805473ffffffffffffffffffffffffffffffffffffffff16331461027e576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000005a6113888110156102af57600080fd5b6113888103905084604082048203116102c757600080fd5b50803b6102d357600080fd5b60008084516020860160008589f1949350505050565b6000602082840312156102fb57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461031f57600080fd5b9392505050565b6000806040838503121561033957600080fd5b82359150602083013567ffffffffffffffff8082111561035857600080fd5b818501915085601f83011261036c57600080fd5b81358181111561037e5761037e610472565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156103c4576103c4610472565b816040528281528860208487010111156103dd57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600060208083528351808285015260005b8181101561042c57858101830151858201604001528201610410565b8181111561043e576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c6343000806000a307866666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666a164736f6c6343000806000a", } var KeeperRegistryLogicAABI = KeeperRegistryLogicAMetaData.ABI diff --git a/core/gethwrappers/generated/keeper_registry_logic_b_wrapper_2_1/keeper_registry_logic_b_wrapper_2_1.go b/core/gethwrappers/generated/keeper_registry_logic_b_wrapper_2_1/keeper_registry_logic_b_wrapper_2_1.go index 3d224ff37df..83c8f4229e0 100644 --- a/core/gethwrappers/generated/keeper_registry_logic_b_wrapper_2_1/keeper_registry_logic_b_wrapper_2_1.go +++ b/core/gethwrappers/generated/keeper_registry_logic_b_wrapper_2_1/keeper_registry_logic_b_wrapper_2_1.go @@ -89,7 +89,7 @@ type UpkeepInfo struct { var KeeperRegistryLogicBMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"enumKeeperRegistryBase2_1.Mode\",\"name\":\"mode\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"link\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"linkNativeFeed\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"fastGasFeed\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ArrayHasNoEntries\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotCancel\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CheckDataExceedsLimit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateEntry\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasLimitCanOnlyIncrease\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasLimitOutsideRange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectNumberOfFaultyOracles\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectNumberOfSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectNumberOfSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfRange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientFunds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDataLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidReport\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTrigger\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxCheckDataSizeCanOnlyIncrease\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxPerformDataSizeCanOnlyIncrease\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MigrationNotPermitted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotAContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyActiveSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyActiveTransmitters\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByLINKToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwnerOrAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwnerOrRegistrar\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByPayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByProposedAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByProposedPayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByUpkeepManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPausedUpkeep\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySimulatedBackend\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyUnpausedUpkeep\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ParameterLengthError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PaymentGreaterThanAllLINK\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RegistryPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RepeatedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RepeatedTransmitter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"TargetCheckReverted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyOracles\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TranscoderNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepCancelled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepNotCanceled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepNotNeeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValueNotChanged\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"CancelledUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"}],\"name\":\"FundsAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"FundsWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"InsufficientFundsUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"}],\"name\":\"OwnerFundsWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"payees\",\"type\":\"address[]\"}],\"name\":\"PayeesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"PayeeshipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"PayeeshipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"}],\"name\":\"PaymentWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"ReorgedUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"StaleUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"adminOffchainConfig\",\"type\":\"bytes\"}],\"name\":\"UpkeepAdminOffchainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"UpkeepAdminTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"UpkeepAdminTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"atBlockHeight\",\"type\":\"uint64\"}],\"name\":\"UpkeepCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"newCheckData\",\"type\":\"bytes\"}],\"name\":\"UpkeepCheckDataUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"gasLimit\",\"type\":\"uint96\"}],\"name\":\"UpkeepGasLimitSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remainingBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"UpkeepMigrated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"UpkeepOffchainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"UpkeepPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"totalPayment\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasOverhead\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"UpkeepPerformed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startingBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"importedFrom\",\"type\":\"address\"}],\"name\":\"UpkeepReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"executeGas\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"UpkeepRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"triggerConfig\",\"type\":\"bytes\"}],\"name\":\"UpkeepTriggerConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"UpkeepUnpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"}],\"name\":\"acceptPayeeship\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"acceptUpkeepAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endIndex\",\"type\":\"uint256\"}],\"name\":\"getActiveUpkeepIDs\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endIndex\",\"type\":\"uint256\"},{\"internalType\":\"enumKeeperRegistryBase2_1.Trigger\",\"name\":\"trigger\",\"type\":\"uint8\"}],\"name\":\"getActiveUpkeepIDsByType\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upkeepId\",\"type\":\"uint256\"}],\"name\":\"getCronTriggerConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"cron\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"internalType\":\"structKeeperRegistryBase2_1.CronTriggerConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFastGasFeedAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLinkAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLinkNativeFeedAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upkeepId\",\"type\":\"uint256\"}],\"name\":\"getLogTriggerConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"filterSelector\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"topic0\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"topic1\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"topic2\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"topic3\",\"type\":\"bytes32\"}],\"internalType\":\"structKeeperRegistryBase2_1.LogTriggerConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"}],\"name\":\"getMaxPaymentForGas\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"maxPayment\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getMinBalanceForUpkeep\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"minBalance\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMode\",\"outputs\":[{\"internalType\":\"enumKeeperRegistryBase2_1.Mode\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"peer\",\"type\":\"address\"}],\"name\":\"getPeerRegistryMigrationPermission\",\"outputs\":[{\"internalType\":\"enumKeeperRegistryBase2_1.MigrationPermission\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"query\",\"type\":\"address\"}],\"name\":\"getSignerInfo\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint96\",\"name\":\"ownerLinkBalance\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"expectedLinkBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint96\",\"name\":\"totalPremium\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"numUpkeeps\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"latestConfigBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"latestConfigDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"latestEpoch\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"internalType\":\"structState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"paymentPremiumPPB\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"flatFeeMicroLink\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"checkGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"stalenessSeconds\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"gasCeilingMultiplier\",\"type\":\"uint16\"},{\"internalType\":\"uint96\",\"name\":\"minUpkeepSpend\",\"type\":\"uint96\"},{\"internalType\":\"uint32\",\"name\":\"maxPerformGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxCheckDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerformDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"fallbackGasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fallbackLinkPrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"transcoder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"registrar\",\"type\":\"address\"}],\"internalType\":\"structOnchainConfig\",\"name\":\"config\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"query\",\"type\":\"address\"}],\"name\":\"getTransmitterInfo\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"},{\"internalType\":\"uint96\",\"name\":\"balance\",\"type\":\"uint96\"},{\"internalType\":\"uint96\",\"name\":\"lastCollected\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upkeepId\",\"type\":\"uint256\"}],\"name\":\"getTriggerType\",\"outputs\":[{\"internalType\":\"enumKeeperRegistryBase2_1.Trigger\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getUpkeep\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"executeGas\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"checkData\",\"type\":\"bytes\"},{\"internalType\":\"uint96\",\"name\":\"balance\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"maxValidBlocknumber\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"lastPerformBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint96\",\"name\":\"amountSpent\",\"type\":\"uint96\"},{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structUpkeepInfo\",\"name\":\"upkeepInfo\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upkeepId\",\"type\":\"uint256\"}],\"name\":\"getUpkeepAdminOffchainConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUpkeepManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upkeepId\",\"type\":\"uint256\"}],\"name\":\"getUpkeepTriggerConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"pauseUpkeep\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"recoverFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"payees\",\"type\":\"address[]\"}],\"name\":\"setPayees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"peer\",\"type\":\"address\"},{\"internalType\":\"enumKeeperRegistryBase2_1.MigrationPermission\",\"name\":\"permission\",\"type\":\"uint8\"}],\"name\":\"setPeerRegistryMigrationPermission\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upkeepId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"newAdminOffchainConfig\",\"type\":\"bytes\"}],\"name\":\"setUpkeepAdminOffchainConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"}],\"name\":\"setUpkeepGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newUpkeepManager\",\"type\":\"address\"}],\"name\":\"setUpkeepManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"name\":\"setUpkeepOffchainConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"proposed\",\"type\":\"address\"}],\"name\":\"transferPayeeship\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"proposed\",\"type\":\"address\"}],\"name\":\"transferUpkeepAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"unpauseUpkeep\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"newCheckData\",\"type\":\"bytes\"}],\"name\":\"updateCheckData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"withdrawFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawOwnerFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"withdrawPayment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6101006040523480156200001257600080fd5b506040516200511938038062005119833981016040819052620000359162000201565b838383833380600081620000905760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c357620000c38162000138565b505050836002811115620000db57620000db62000263565b60e0816002811115620000f257620000f262000263565b60f81b9052506001600160601b0319606093841b811660805291831b821660a05290911b1660c0525050601680546001600160a01b031916331790555062000279915050565b6001600160a01b038116331415620001935760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000087565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0381168114620001fc57600080fd5b919050565b600080600080608085870312156200021857600080fd5b8451600381106200022857600080fd5b93506200023860208601620001e4565b92506200024860408601620001e4565b91506200025860608601620001e4565b905092959194509250565b634e487b7160e01b600052602160045260246000fd5b60805160601c60a05160601c60c05160601c60e05160f81c614e146200030560003960008181610525015281816134ae015281816139390152613af00152600081816105860152613142015260008181610654015261322b0152600081816106db01528181611d24015281816120090152818161255e01528181612a730152612b060152614e146000f3fe608060405234801561001057600080fd5b50600436106102d35760003560e01c806379ba509711610186578063b121e147116100e3578063ca30e60311610097578063ed56b3e111610071578063ed56b3e114610725578063f2fde38b14610798578063faa3e996146107ab57600080fd5b8063ca30e603146106d9578063d921875c146106ff578063eb5dcd6c1461071257600080fd5b8063b657bc9c116100c8578063b657bc9c1461069e578063b79550be146106b1578063c7c3a19a146106b957600080fd5b8063b121e14714610678578063b148ab6b1461068b57600080fd5b80638dcf0fe71161013a578063a710b2211161011f578063a710b2211461062c578063a72aa27e1461063f578063b10b673c1461065257600080fd5b80638dcf0fe7146106065780639fab43861461061957600080fd5b80638456cb591161016b5780638456cb59146105cd5780638765ecbe146105d55780638da5cb5b146105e857600080fd5b806379ba5097146105bd5780637d9b97e0146105c557600080fd5b80633b9cce59116102345780634b4fd03b116101e85780635165f2f5116101cd5780635165f2f5146105715780636709d0e514610584578063744bfe61146105aa57600080fd5b80634b4fd03b146105235780635147cd591461055157600080fd5b80634184e12c116102195780634184e12c14610497578063418d76b6146104aa578063421d183b146104bd57600080fd5b80633b9cce591461047c5780633f4ba83a1461048f57600080fd5b8063187256e81161028b5780631fffe835116102705780631fffe83514610429578063207b65161461043c5780633733f9cc1461045c57600080fd5b8063187256e8146104015780631a2af0111461041657600080fd5b80630d4cbb7f116102bc5780630d4cbb7f146103795780630e08ae84146103b85780631865c57d146103e857600080fd5b806306e3b632146102d85780630d4a4fb114610301575b600080fd5b6102eb6102e63660046142dd565b6107e4565b6040516102f89190614671565b60405180910390f35b61031461030f36600461420a565b6108ef565b6040516102f89190600060c08201905073ffffffffffffffffffffffffffffffffffffffff835116825260ff602084015116602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b60165473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102f8565b6103cb6103c6366004614364565b6109f1565b6040516bffffffffffffffffffffffff90911681526020016102f8565b6103f0610b34565b6040516102f8959493929190614793565b61041461040f366004613ff7565b610ef7565b005b61041461042436600461423c565b610f68565b610414610437366004613fa1565b6110bc565b61044f61044a36600461420a565b61110b565b6040516102f89190614702565b61046f61046a36600461420a565b6111ad565b6040516102f8919061473c565b61041461048a366004614025565b611291565b6104146114e7565b6102eb6104a53660046142ff565b61154d565b61044f6104b836600461420a565b6116a2565b6104d06104cb366004613fa1565b6116bf565b60408051951515865260ff90941660208601526bffffffffffffffffffffffff9283169385019390935216606083015273ffffffffffffffffffffffffffffffffffffffff16608082015260a0016102f8565b7f00000000000000000000000000000000000000000000000000000000000000006040516102f89190614728565b61056461055f36600461420a565b6117dd565b6040516102f89190614715565b61041461057f36600461420a565b611888565b7f0000000000000000000000000000000000000000000000000000000000000000610393565b6104146105b836600461423c565b611a12565b610414611e2f565b610414611f31565b61041461209b565b6104146105e336600461420a565b61210c565b60005473ffffffffffffffffffffffffffffffffffffffff16610393565b610414610614366004614261565b6122a3565b610414610627366004614261565b612305565b61041461063a366004613fbe565b6123b4565b61041461064d366004614338565b61263f565b7f0000000000000000000000000000000000000000000000000000000000000000610393565b610414610686366004613fa1565b612721565b61041461069936600461420a565b612819565b6103cb6106ac36600461420a565b612a1c565b610414612a3a565b6106cc6106c736600461420a565b612ba5565b6040516102f891906148a0565b7f0000000000000000000000000000000000000000000000000000000000000000610393565b61041461070d366004614261565b612ef2565b610414610720366004613fbe565b612f8f565b61077f610733366004613fa1565b73ffffffffffffffffffffffffffffffffffffffff1660009081526009602090815260409182902082518084019093525460ff8082161515808552610100909204169290910182905291565b60408051921515835260ff9091166020830152016102f8565b6104146107a6366004613fa1565b6130ee565b6105646107b9366004613fa1565b73ffffffffffffffffffffffffffffffffffffffff1660009081526017602052604090205460ff1690565b606060006107f26002613102565b90508083116108015782610803565b805b92508284111561083f576040517f1390f2a100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061084b8585614b69565b905060008167ffffffffffffffff81111561086857610868614d51565b604051908082528060200260200182016040528015610891578160200160208202803683370190505b50905060005b828110156108e3576108b46108ac8883614a29565b60029061310c565b8282815181106108c6576108c6614d22565b6020908102919091010152806108db81614c2d565b915050610897565b50925050505b92915050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152600161092c836117dd565b600381111561093d5761093d614cc4565b1461094757600080fd5b6000828152601860205260409020805461096090614bd9565b80601f016020809104026020016040519081016040528092919081815260200182805461098c90614bd9565b80156109d95780601f106109ae576101008083540402835291602001916109d9565b820191906000526020600020905b8154815290600101906020018083116109bc57829003601f168201915b50505050508060200190518101906108e99190614178565b6040805161012081018252600f5460ff808216835263ffffffff6101008084048216602086015265010000000000840482169585019590955262ffffff6901000000000000000000840416606085015261ffff6c0100000000000000000000000084041660808501526e01000000000000000000000000000083048216151560a08501526f010000000000000000000000000000008304909116151560c08401526bffffffffffffffffffffffff70010000000000000000000000000000000083041660e08401527c010000000000000000000000000000000000000000000000000000000090910416918101919091526000908180610af08361311f565b6012549193509150610b2b90849087907801000000000000000000000000000000000000000000000000900463ffffffff168585600061331b565b95945050505050565b6040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810191909152604080516101a081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081018290526101608101829052610180810191909152604080516101408101825260125468010000000000000000900463ffffffff1681526011546bffffffffffffffffffffffff908116602083015260155492820192909252600f54700100000000000000000000000000000000900490911660608083019190915290819060009060808101610c696002613102565b815260125463ffffffff6c01000000000000000000000000808304821660208086019190915270010000000000000000000000000000000084048316604080870191909152600e54606080880191909152600f547c0100000000000000000000000000000000000000000000000000000000810486166080808a019190915260ff6e01000000000000000000000000000083048116151560a09a8b015284516101a0810186526101008085048a1682526501000000000085048a1682890152898b168288015262ffffff69010000000000000000008604169582019590955261ffff88850416928101929092526010546bffffffffffffffffffffffff81169a83019a909a526401000000008904881660c0830152740100000000000000000000000000000000000000008904881660e083015278010000000000000000000000000000000000000000000000009098049096169186019190915260135461012086015260145461014086015273ffffffffffffffffffffffffffffffffffffffff96849004871661016086015260115493909304909516610180840152600a8054865181840281018401909752808752969b509299508a958a959394600b9493169291859190830182828015610e7657602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610e4b575b5050505050925081805480602002602001604051908101604052809291908181526020018280548015610edf57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610eb4575b50505050509150945094509450945094509091929394565b610eff613366565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260176020526040902080548291907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001836003811115610f5f57610f5f614cc4565b02179055505050565b610f71826133e9565b73ffffffffffffffffffffffffffffffffffffffff8116331415610fc1576040517f8c8728c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811661100e576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604090205473ffffffffffffffffffffffffffffffffffffffff8281169116146110b85760008281526006602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff851690811790915590519091339185917fb1cbb2c4b8480034c27e06da5f096b8233a8fd4497028593a41ff6df79726b3591a45b5050565b6110c4613366565b601680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600081815260186020526040902080546060919061112890614bd9565b80601f016020809104026020016040519081016040528092919081815260200182805461115490614bd9565b80156111a15780601f10611176576101008083540402835291602001916111a1565b820191906000526020600020905b81548152906001019060200180831161118457829003601f168201915b50505050509050919050565b604080518082019091526060808252602082015260026111cc836117dd565b60038111156111dd576111dd614cc4565b146111e757600080fd5b6000828152601860205260409020805461120090614bd9565b80601f016020809104026020016040519081016040528092919081815260200182805461122c90614bd9565b80156112795780601f1061124e57610100808354040283529160200191611279565b820191906000526020600020905b81548152906001019060200180831161125c57829003601f168201915b50505050508060200190518101906108e991906140bc565b611299613366565b600b5481146112d4576040517fcf54c06a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b600b548110156114a6576000600b82815481106112f6576112f6614d22565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff908116808452600c9092526040832054919350169085858581811061134057611340614d22565b90506020020160208101906113559190613fa1565b905073ffffffffffffffffffffffffffffffffffffffff811615806113e8575073ffffffffffffffffffffffffffffffffffffffff8216158015906113c657508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156113e8575073ffffffffffffffffffffffffffffffffffffffff81811614155b1561141f576040517fb387a23800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff818116146114905773ffffffffffffffffffffffffffffffffffffffff8381166000908152600c6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b505050808061149e90614c2d565b9150506112d7565b507fa46de38886467c59be07a0675f14781206a5477d871628af46c2443822fcb725600b83836040516114db939291906145bf565b60405180910390a15050565b6114ef613366565b600f80547fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff1690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6060600061155b6002613102565b905080841161156a578361156c565b805b9350838511156115a8576040517f1390f2a100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006115b48686614b69565b90506000808267ffffffffffffffff8111156115d2576115d2614d51565b6040519080825280602002602001820160405280156115fb578160200160208202803683370190505b50905060005b8381101561168b5760006116186108ac8b84614a29565b905087600381111561162c5761162c614cc4565b611635826117dd565b600381111561164657611646614cc4565b1415611678578083858151811061165f5761165f614d22565b60209081029190910101528361167481614c2d565b9450505b508061168381614c2d565b915050611601565b50828214611697578181525b979650505050505050565b6000818152601a6020526040902080546060919061112890614bd9565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602090815260408083208151608081018352905460ff80821615158352610100820416938201939093526bffffffffffffffffffffffff6201000084048116928201929092526e010000000000000000000000000000909204811660608301819052600f548493849384938493849261176b9291700100000000000000000000000000000000900416614b80565b600b5490915060009061177e9083614aaa565b90508260000151836020015182856040015161179a9190614a66565b6060959095015173ffffffffffffffffffffffffffffffffffffffff9b8c166000908152600c6020526040902054929c919b959a50985093169550919350505050565b6000818160045b600f81101561186a577fff00000000000000000000000000000000000000000000000000000000000000821683826020811061182257611822614d22565b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461185857506000949350505050565b8061186281614c2d565b9150506117e4565b5081600f1a600381111561188057611880614cc4565b949350505050565b611891816133e9565b600081815260046020908152604091829020825161010081018452815463ffffffff8082168352640100000000820481169483019490945260ff68010000000000000000820416151594820185905273ffffffffffffffffffffffffffffffffffffffff69010000000000000000009091048116606083015260018301546bffffffffffffffffffffffff80821660808501526c0100000000000000000000000082041660a08401527801000000000000000000000000000000000000000000000000900490931660c082015260029091015490911660e0820152906119a3576040517f1b88a78400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1690556119e260028361349c565b5060405182907f7bada562044eb163f6b4003c4553e4e62825344c0418eea087bed5ee05a4745690600090a25050565b600f546f01000000000000000000000000000000900460ff1615611a62576040517f37ed32e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f80547fffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff166f0100000000000000000000000000000017905573ffffffffffffffffffffffffffffffffffffffff8116611ae9576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152600460209081526040808320815161010081018352815463ffffffff8082168352640100000000820481168387015260ff6801000000000000000083041615158386015273ffffffffffffffffffffffffffffffffffffffff69010000000000000000009092048216606084015260018401546bffffffffffffffffffffffff80821660808601526c0100000000000000000000000082041660a0850152780100000000000000000000000000000000000000000000000090041660c0830152600290920154821660e082015286855260059093529220549091163314611c01576040517fa47c170600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c096134a8565b816020015163ffffffff161115611c4c576040517fff84e5dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000838152600460205260409020600101546015546c010000000000000000000000009091046bffffffffffffffffffffffff1690611c8c908290614b69565b60155560008481526004602081905260409182902060010180547fffffffffffffffff000000000000000000000000ffffffffffffffffffffffff16905590517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116928201929092526bffffffffffffffffffffffff831660248201527f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb90604401602060405180830381600087803b158015611d6a57600080fd5b505af1158015611d7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da2919061409a565b50604080516bffffffffffffffffffffffff8316815273ffffffffffffffffffffffffffffffffffffffff8516602082015285917ff3b5906e5672f3e524854103bcafbbdba80dbdfeca2c35e116127b1060a68318910160405180910390a25050600f80547fffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff1690555050565b60015473ffffffffffffffffffffffffffffffffffffffff163314611eb5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b611f39613366565b6011546015546bffffffffffffffffffffffff90911690611f5b908290614b69565b601555601180547fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001690556040516bffffffffffffffffffffffff821681527f1d07d0b0be43d3e5fee41a80b579af370affee03fa595bf56d5d4c19328162f19060200160405180910390a16040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526bffffffffffffffffffffffff821660248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a9059cbb906044015b602060405180830381600087803b15801561206357600080fd5b505af1158015612077573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b8919061409a565b6120a3613366565b600f80547fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff166e0100000000000000000000000000001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611543565b612115816133e9565b600081815260046020908152604091829020825161010081018452815463ffffffff8082168352640100000000820481169483019490945260ff680100000000000000008204161580159583019590955273ffffffffffffffffffffffffffffffffffffffff69010000000000000000009091048116606083015260018301546bffffffffffffffffffffffff80821660808501526c0100000000000000000000000082041660a08401527801000000000000000000000000000000000000000000000000900490931660c082015260029091015490911660e082015290612229576040517f514b6c2400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff166801000000000000000017905561227360028361356d565b5060405182907f8ab10247ce168c27748e656ecf852b951fcaac790c18106b19aa0ae57a8b741f90600090a25050565b6122ac836133e9565b60008381526019602052604090206122c5908383613e25565b50827f3e8740446213c8a77d40e08f79136ce3f347d13ed270a6ebdf57159e0faf485083836040516122f89291906146b5565b60405180910390a2505050565b61230e836133e9565b60125474010000000000000000000000000000000000000000900463ffffffff16811115612368576040517fae7235df00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000838152600760205260409020612381908383613e25565b50827f7b778136e5211932b51a145badd01959415e79e051a933604b3d323f862dcabf83836040516122f89291906146b5565b73ffffffffffffffffffffffffffffffffffffffff8116612401576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8281166000908152600c6020526040902054163314612461576040517fcebf515b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f54600b5460009161249891859170010000000000000000000000000000000090046bffffffffffffffffffffffff1690613579565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260086020526040902080547fffffffffffffffffffffffffffffffffffff000000000000000000000000ffff169055601554909150612502906bffffffffffffffffffffffff831690614b69565b6015556040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526bffffffffffffffffffffffff831660248301527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb90604401602060405180830381600087803b1580156125a257600080fd5b505af11580156125b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125da919061409a565b5060405133815273ffffffffffffffffffffffffffffffffffffffff808416916bffffffffffffffffffffffff8416918616907f9819093176a1851202c7bcfa46845809b4e47c261866550e94ed3775d2f406989060200160405180910390a4505050565b6108fc8163ffffffff161080612668575060125463ffffffff6401000000009091048116908216115b1561269f576040517f14c237fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126a8826133e9565b60008281526004602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516908117909155915191825283917fc24c07e655ce79fba8a589778987d3c015bc6af1632bb20cf9182e02a65d972c910160405180910390a25050565b73ffffffffffffffffffffffffffffffffffffffff8181166000908152600d6020526040902054163314612781576040517f6752e7aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8181166000818152600c602090815260408083208054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217909355600d909452828520805490921690915590519416939092849290917f78af32efdcad432315431e9b03d27e6cd98fb79c405fdc5af7c1714d9c0f75b39190a45050565b600081815260046020908152604091829020825161010081018452815463ffffffff80821683526401000000008204811694830185905260ff6801000000000000000083041615159583019590955273ffffffffffffffffffffffffffffffffffffffff69010000000000000000009091048116606083015260018301546bffffffffffffffffffffffff80821660808501526c0100000000000000000000000082041660a084015278010000000000000000000000000000000000000000000000009004851660c083015260029092015490911660e0820152911461292b576040517f9c0083a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604090205473ffffffffffffffffffffffffffffffffffffffff163314612988576040517f6352a85300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602090815260408083208054337fffffffffffffffffffffffff0000000000000000000000000000000000000000808316821790935560069094528285208054909216909155905173ffffffffffffffffffffffffffffffffffffffff90911692839186917f5cff4db96bef051785e999f44bfcd21c18823e034fb92dd376e3db4ce0feeb2c91a4505050565b6000818152600460205260408120546108e99063ffffffff166109f1565b612a42613366565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a082319060240160206040518083038186803b158015612aca57600080fd5b505afa158015612ade573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b029190614223565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3360155484612b4f9190614b69565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401612049565b604080516101608101825260008082526020820181905291810182905260608082018190526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201929092526101408101919091526000828152600460209081526040808320815161010081018352815463ffffffff8082168352640100000000820481168387015260ff6801000000000000000083041615158386015273ffffffffffffffffffffffffffffffffffffffff69010000000000000000009092048216606080850191825260018601546bffffffffffffffffffffffff80821660808801526c0100000000000000000000000082041660a087015278010000000000000000000000000000000000000000000000009004831660c0860152600290950154831660e085019081528651610160810188529051841681529051909216828701528251168185015287865260079094529190932080549193830191612d1390614bd9565b80601f0160208091040260200160405190810160405280929190818152602001828054612d3f90614bd9565b8015612d8c5780601f10612d6157610100808354040283529160200191612d8c565b820191906000526020600020905b815481529060010190602001808311612d6f57829003601f168201915b505050505081526020018260a001516bffffffffffffffffffffffff1681526020016005600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001826020015163ffffffff1667ffffffffffffffff1681526020018260c0015163ffffffff16815260200182608001516bffffffffffffffffffffffff168152602001826040015115158152602001601960008681526020019081526020016000208054612e6990614bd9565b80601f0160208091040260200160405190810160405280929190818152602001828054612e9590614bd9565b8015612ee25780601f10612eb757610100808354040283529160200191612ee2565b820191906000526020600020905b815481529060010190602001808311612ec557829003601f168201915b5050505050815250915050919050565b60165473ffffffffffffffffffffffffffffffffffffffff163314612f43576040517fee5dc90100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000838152601a60205260409020612f5c908383613e25565b50827f09a658476c5597979b9948f488ec2958cfead97bc8f46b19ca0b21cdab93cdee83836040516122f89291906146b5565b73ffffffffffffffffffffffffffffffffffffffff8281166000908152600c6020526040902054163314612fef576040517fcebf515b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811633141561303f576040517f8c8728c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8281166000908152600d60205260409020548116908216146110b85773ffffffffffffffffffffffffffffffffffffffff8281166000818152600d602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169486169485179055513392917f84f7c7c80bb8ed2279b4aab5f61cd05e6374073d38f46d7f32de8c30e9e3836791a45050565b6130f6613366565b6130ff816137a0565b50565b60006108e9825490565b60006131188383613896565b9392505050565b6000806000836060015162ffffff1690506000808263ffffffff161190506000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b1580156131a657600080fd5b505afa1580156131ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131de919061437f565b50945090925050506000811315806131f557508142105b806132165750828015613216575061320d8242614b69565b8463ffffffff16105b15613225576013549550613229565b8095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b15801561328f57600080fd5b505afa1580156132a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132c7919061437f565b50945090925050506000811315806132de57508142105b806132ff57508280156132ff57506132f68242614b69565b8463ffffffff16105b1561330e576014549450613312565b8094505b50505050915091565b60008061332c8689600001516138c0565b90506000806133478a8a63ffffffff16858a8a60018b613904565b90925090506133568183614a66565b93505050505b9695505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146133e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401611eac565b565b60008181526005602052604090205473ffffffffffffffffffffffffffffffffffffffff163314613446576040517fa47c170600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260046020526040902054640100000000900463ffffffff908116146130ff576040517f9c0083a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006131188383613ce3565b600060017f000000000000000000000000000000000000000000000000000000000000000060028111156134de576134de614cc4565b141561356857606473ffffffffffffffffffffffffffffffffffffffff1663a3b1b31d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561352b57600080fd5b505afa15801561353f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135639190614223565b905090565b504390565b60006131188383613d32565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602090815260408083208151608081018352905460ff80821615158352610100820416938201939093526bffffffffffffffffffffffff6201000084048116928201929092526e010000000000000000000000000000909204166060820181905282906136049086614b80565b905060006136128583614aaa565b905080836040018181516136269190614a66565b6bffffffffffffffffffffffff908116909152871660608501525061364b8582614b3e565b6136559083614b80565b601180546000906136759084906bffffffffffffffffffffffff16614a66565b825461010092830a6bffffffffffffffffffffffff81810219909216928216029190911790925573ffffffffffffffffffffffffffffffffffffffff999099166000908152600860209081526040918290208751815492890151938901516060909901517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009093169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff161760ff909316909b02919091177fffffffffffff000000000000000000000000000000000000000000000000ffff1662010000878416027fffffffffffff000000000000000000000000ffffffffffffffffffffffffffff16176e010000000000000000000000000000919092160217909755509095945050505050565b73ffffffffffffffffffffffffffffffffffffffff8116331415613820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401611eac565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60008260000182815481106138ad576138ad614d22565b9060005260206000200154905092915050565b60006138d363ffffffff84166014614ad5565b6138de836001614a41565b6138ed9060ff16611d4c614ad5565b6138fa90620124f8614a29565b6131189190614a29565b6000806000896080015161ffff168761391d9190614ad5565b905083801561392b5750803a105b1561393357503a5b600060027f0000000000000000000000000000000000000000000000000000000000000000600281111561396957613969614cc4565b1415613aec5760408051600081526020810190915285156139c857600036604051806080016040528060488152602001614dc0604891396040516020016139b293929190614598565b6040516020818303038152906040529050613a44565b6012546139f8907801000000000000000000000000000000000000000000000000900463ffffffff166004614b12565b63ffffffff1667ffffffffffffffff811115613a1657613a16614d51565b6040519080825280601f01601f191660200182016040528015613a40576020820181803683370190505b5090505b6040517f49948e0e00000000000000000000000000000000000000000000000000000000815273420000000000000000000000000000000000000f906349948e0e90613a94908490600401614702565b60206040518083038186803b158015613aac57600080fd5b505afa158015613ac0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ae49190614223565b915050613ba8565b60017f00000000000000000000000000000000000000000000000000000000000000006002811115613b2057613b20614cc4565b1415613ba857606c73ffffffffffffffffffffffffffffffffffffffff1663c6f7de0e6040518163ffffffff1660e01b815260040160206040518083038186803b158015613b6d57600080fd5b505afa158015613b81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ba59190614223565b90505b84613bc457808b6080015161ffff16613bc19190614ad5565b90505b613bd261ffff871682614a96565b905060008782613be28c8e614a29565b613bec9086614ad5565b613bf69190614a29565b613c0890670de0b6b3a7640000614ad5565b613c129190614a96565b905060008c6040015163ffffffff1664e8d4a51000613c319190614ad5565b898e6020015163ffffffff16858f88613c4a9190614ad5565b613c549190614a29565b613c6290633b9aca00614ad5565b613c6c9190614ad5565b613c769190614a96565b613c809190614a29565b90506b033b2e3c9fd0803ce8000000613c998284614a29565b1115613cd1576040517f2ad7547a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b909c909b509950505050505050505050565b6000818152600183016020526040812054613d2a575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556108e9565b5060006108e9565b60008181526001830160205260408120548015613e1b576000613d56600183614b69565b8554909150600090613d6a90600190614b69565b9050818114613dcf576000866000018281548110613d8a57613d8a614d22565b9060005260206000200154905080876000018481548110613dad57613dad614d22565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613de057613de0614cf3565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506108e9565b60009150506108e9565b828054613e3190614bd9565b90600052602060002090601f016020900481019282613e535760008555613eb7565b82601f10613e8a578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555613eb7565b82800160010185558215613eb7579182015b82811115613eb7578235825591602001919060010190613e9c565b50613ec3929150613ec7565b5090565b5b80821115613ec35760008155600101613ec8565b600067ffffffffffffffff80841115613ef757613ef7614d51565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715613f3d57613f3d614d51565b81604052809350858152868686011115613f5657600080fd5b613f64866020830187614bad565b5050509392505050565b803563ffffffff81168114613f8257600080fd5b919050565b805169ffffffffffffffffffff81168114613f8257600080fd5b600060208284031215613fb357600080fd5b813561311881614d90565b60008060408385031215613fd157600080fd5b8235613fdc81614d90565b91506020830135613fec81614d90565b809150509250929050565b6000806040838503121561400a57600080fd5b823561401581614d90565b91506020830135613fec81614db2565b6000806020838503121561403857600080fd5b823567ffffffffffffffff8082111561405057600080fd5b818501915085601f83011261406457600080fd5b81358181111561407357600080fd5b8660208260051b850101111561408857600080fd5b60209290920196919550909350505050565b6000602082840312156140ac57600080fd5b8151801515811461311857600080fd5b6000602082840312156140ce57600080fd5b815167ffffffffffffffff808211156140e657600080fd5b90830190604082860312156140fa57600080fd5b614102614a00565b82518281111561411157600080fd5b8301601f8101871361412257600080fd5b61413187825160208401613edc565b82525060208301518281111561414657600080fd5b80840193505085601f84011261415b57600080fd5b61416a86845160208601613edc565b602082015295945050505050565b600060c0828403121561418a57600080fd5b60405160c0810181811067ffffffffffffffff821117156141ad576141ad614d51565b60405282516141bb81614d90565b8152602083015160ff811681146141d157600080fd5b8060208301525060408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b60006020828403121561421c57600080fd5b5035919050565b60006020828403121561423557600080fd5b5051919050565b6000806040838503121561424f57600080fd5b823591506020830135613fec81614d90565b60008060006040848603121561427657600080fd5b83359250602084013567ffffffffffffffff8082111561429557600080fd5b818601915086601f8301126142a957600080fd5b8135818111156142b857600080fd5b8760208285010111156142ca57600080fd5b6020830194508093505050509250925092565b600080604083850312156142f057600080fd5b50508035926020909101359150565b60008060006060848603121561431457600080fd5b8335925060208401359150604084013561432d81614db2565b809150509250925092565b6000806040838503121561434b57600080fd5b8235915061435b60208401613f6e565b90509250929050565b60006020828403121561437657600080fd5b61311882613f6e565b600080600080600060a0868803121561439757600080fd5b6143a086613f87565b94506020860151935060408601519250606086015191506143c360808701613f87565b90509295509295909350565b600081518084526020808501945080840160005b8381101561441557815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016143e3565b509495945050505050565b60008151808452614438816020860160208601614bad565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b805163ffffffff168252602081015161448b602084018263ffffffff169052565b5060408101516144a3604084018263ffffffff169052565b5060608101516144ba606084018262ffffff169052565b5060808101516144d0608084018261ffff169052565b5060a08101516144f060a08401826bffffffffffffffffffffffff169052565b5060c081015161450860c084018263ffffffff169052565b5060e081015161452060e084018263ffffffff169052565b506101008181015163ffffffff8116848301525050610120818101519083015261014080820151908301526101608082015173ffffffffffffffffffffffffffffffffffffffff81168285015250506101808181015173ffffffffffffffffffffffffffffffffffffffff8116848301525b50505050565b8284823760008382016000815283516145b5818360208801614bad565b0195945050505050565b6000604082016040835280865480835260608501915087600052602092508260002060005b8281101561461657815473ffffffffffffffffffffffffffffffffffffffff16845292840192600191820191016145e4565b505050838103828501528481528590820160005b8681101561466557823561463d81614d90565b73ffffffffffffffffffffffffffffffffffffffff168252918301919083019060010161462a565b50979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156146a95783518352928401929184019160010161468d565b50909695505050505050565b60208152816020820152818360408301376000818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b6020815260006131186020830184614420565b6020810161472283614d80565b91905290565b602081016003831061472257614722614cc4565b6020815260008251604060208401526147586060840182614420565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848303016040850152610b2b8282614420565b855163ffffffff168152600061034060208801516147c160208501826bffffffffffffffffffffffff169052565b506040880151604084015260608801516147eb60608501826bffffffffffffffffffffffff169052565b506080880151608084015260a088015161480d60a085018263ffffffff169052565b5060c088015161482560c085018263ffffffff169052565b5060e088015160e0840152610100808901516148488286018263ffffffff169052565b50506101208881015115159084015261486561014084018861446a565b806102e0840152614878818401876143cf565b905082810361030084015261488d81866143cf565b91505061335c61032083018460ff169052565b602081526148c760208201835173ffffffffffffffffffffffffffffffffffffffff169052565b600060208301516148f0604084018273ffffffffffffffffffffffffffffffffffffffff169052565b50604083015163ffffffff8116606084015250606083015161016080608085015261491f610180850183614420565b9150608085015161494060a08601826bffffffffffffffffffffffff169052565b5060a085015173ffffffffffffffffffffffffffffffffffffffff811660c08601525060c085015167ffffffffffffffff811660e08601525060e08501516101006149928187018363ffffffff169052565b86015190506101206149b3868201836bffffffffffffffffffffffff169052565b86015190506101406149c88682018315159052565b8601518584037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183870152905061335c8382614420565b6040805190810167ffffffffffffffff81118282101715614a2357614a23614d51565b60405290565b60008219821115614a3c57614a3c614c66565b500190565b600060ff821660ff84168060ff03821115614a5e57614a5e614c66565b019392505050565b60006bffffffffffffffffffffffff808316818516808303821115614a8d57614a8d614c66565b01949350505050565b600082614aa557614aa5614c95565b500490565b60006bffffffffffffffffffffffff80841680614ac957614ac9614c95565b92169190910492915050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b0d57614b0d614c66565b500290565b600063ffffffff80831681851681830481118215151615614b3557614b35614c66565b02949350505050565b60006bffffffffffffffffffffffff80831681851681830481118215151615614b3557614b35614c66565b600082821015614b7b57614b7b614c66565b500390565b60006bffffffffffffffffffffffff83811690831681811015614ba557614ba5614c66565b039392505050565b60005b83811015614bc8578181015183820152602001614bb0565b838111156145925750506000910152565b600181811c90821680614bed57607f821691505b60208210811415614c27577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c5f57614c5f614c66565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600481106130ff576130ff614cc4565b73ffffffffffffffffffffffffffffffffffffffff811681146130ff57600080fd5b600481106130ff57600080fdfe307866666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666a164736f6c6343000806000a", + Bin: "0x6101006040523480156200001257600080fd5b506040516200511938038062005119833981016040819052620000359162000201565b838383833380600081620000905760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c357620000c38162000138565b505050836002811115620000db57620000db62000263565b60e0816002811115620000f257620000f262000263565b60f81b9052506001600160601b0319606093841b811660805291831b821660a05290911b1660c0525050601680546001600160a01b031916331790555062000279915050565b6001600160a01b038116331415620001935760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000087565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0381168114620001fc57600080fd5b919050565b600080600080608085870312156200021857600080fd5b8451600381106200022857600080fd5b93506200023860208601620001e4565b92506200024860408601620001e4565b91506200025860608601620001e4565b905092959194509250565b634e487b7160e01b600052602160045260246000fd5b60805160601c60a05160601c60c05160601c60e05160f81c614e146200030560003960008181610525015281816134ae015281816139390152613af00152600081816105860152613142015260008181610654015261322b0152600081816106db01528181611d24015281816120090152818161255e01528181612a730152612b060152614e146000f3fe608060405234801561001057600080fd5b50600436106102d35760003560e01c806379ba509711610186578063b121e147116100e3578063ca30e60311610097578063ed56b3e111610071578063ed56b3e114610725578063f2fde38b14610798578063faa3e996146107ab57600080fd5b8063ca30e603146106d9578063d921875c146106ff578063eb5dcd6c1461071257600080fd5b8063b657bc9c116100c8578063b657bc9c1461069e578063b79550be146106b1578063c7c3a19a146106b957600080fd5b8063b121e14714610678578063b148ab6b1461068b57600080fd5b80638dcf0fe71161013a578063a710b2211161011f578063a710b2211461062c578063a72aa27e1461063f578063b10b673c1461065257600080fd5b80638dcf0fe7146106065780639fab43861461061957600080fd5b80638456cb591161016b5780638456cb59146105cd5780638765ecbe146105d55780638da5cb5b146105e857600080fd5b806379ba5097146105bd5780637d9b97e0146105c557600080fd5b80633b9cce59116102345780634b4fd03b116101e85780635165f2f5116101cd5780635165f2f5146105715780636709d0e514610584578063744bfe61146105aa57600080fd5b80634b4fd03b146105235780635147cd591461055157600080fd5b80634184e12c116102195780634184e12c14610497578063418d76b6146104aa578063421d183b146104bd57600080fd5b80633b9cce591461047c5780633f4ba83a1461048f57600080fd5b8063187256e81161028b5780631fffe835116102705780631fffe83514610429578063207b65161461043c5780633733f9cc1461045c57600080fd5b8063187256e8146104015780631a2af0111461041657600080fd5b80630d4cbb7f116102bc5780630d4cbb7f146103795780630e08ae84146103b85780631865c57d146103e857600080fd5b806306e3b632146102d85780630d4a4fb114610301575b600080fd5b6102eb6102e63660046142dd565b6107e4565b6040516102f89190614671565b60405180910390f35b61031461030f36600461420a565b6108ef565b6040516102f89190600060c08201905073ffffffffffffffffffffffffffffffffffffffff835116825260ff602084015116602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b60165473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102f8565b6103cb6103c6366004614364565b6109f1565b6040516bffffffffffffffffffffffff90911681526020016102f8565b6103f0610b34565b6040516102f8959493929190614793565b61041461040f366004613ff7565b610ef7565b005b61041461042436600461423c565b610f68565b610414610437366004613fa1565b6110bc565b61044f61044a36600461420a565b61110b565b6040516102f89190614702565b61046f61046a36600461420a565b6111ad565b6040516102f8919061473c565b61041461048a366004614025565b611291565b6104146114e7565b6102eb6104a53660046142ff565b61154d565b61044f6104b836600461420a565b6116a2565b6104d06104cb366004613fa1565b6116bf565b60408051951515865260ff90941660208601526bffffffffffffffffffffffff9283169385019390935216606083015273ffffffffffffffffffffffffffffffffffffffff16608082015260a0016102f8565b7f00000000000000000000000000000000000000000000000000000000000000006040516102f89190614728565b61056461055f36600461420a565b6117dd565b6040516102f89190614715565b61041461057f36600461420a565b611888565b7f0000000000000000000000000000000000000000000000000000000000000000610393565b6104146105b836600461423c565b611a12565b610414611e2f565b610414611f31565b61041461209b565b6104146105e336600461420a565b61210c565b60005473ffffffffffffffffffffffffffffffffffffffff16610393565b610414610614366004614261565b6122a3565b610414610627366004614261565b612305565b61041461063a366004613fbe565b6123b4565b61041461064d366004614338565b61263f565b7f0000000000000000000000000000000000000000000000000000000000000000610393565b610414610686366004613fa1565b612721565b61041461069936600461420a565b612819565b6103cb6106ac36600461420a565b612a1c565b610414612a3a565b6106cc6106c736600461420a565b612ba5565b6040516102f891906148a0565b7f0000000000000000000000000000000000000000000000000000000000000000610393565b61041461070d366004614261565b612ef2565b610414610720366004613fbe565b612f8f565b61077f610733366004613fa1565b73ffffffffffffffffffffffffffffffffffffffff1660009081526009602090815260409182902082518084019093525460ff8082161515808552610100909204169290910182905291565b60408051921515835260ff9091166020830152016102f8565b6104146107a6366004613fa1565b6130ee565b6105646107b9366004613fa1565b73ffffffffffffffffffffffffffffffffffffffff1660009081526017602052604090205460ff1690565b606060006107f26002613102565b90508083116108015782610803565b805b92508284111561083f576040517f1390f2a100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061084b8585614b69565b905060008167ffffffffffffffff81111561086857610868614d51565b604051908082528060200260200182016040528015610891578160200160208202803683370190505b50905060005b828110156108e3576108b46108ac8883614a29565b60029061310c565b8282815181106108c6576108c6614d22565b6020908102919091010152806108db81614c2d565b915050610897565b50925050505b92915050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152600161092c836117dd565b600381111561093d5761093d614cc4565b1461094757600080fd5b6000828152601860205260409020805461096090614bd9565b80601f016020809104026020016040519081016040528092919081815260200182805461098c90614bd9565b80156109d95780601f106109ae576101008083540402835291602001916109d9565b820191906000526020600020905b8154815290600101906020018083116109bc57829003601f168201915b50505050508060200190518101906108e99190614178565b6040805161012081018252600f5460ff808216835263ffffffff6101008084048216602086015265010000000000840482169585019590955262ffffff6901000000000000000000840416606085015261ffff6c0100000000000000000000000084041660808501526e01000000000000000000000000000083048216151560a08501526f010000000000000000000000000000008304909116151560c08401526bffffffffffffffffffffffff70010000000000000000000000000000000083041660e08401527c010000000000000000000000000000000000000000000000000000000090910416918101919091526000908180610af08361311f565b6012549193509150610b2b90849087907801000000000000000000000000000000000000000000000000900463ffffffff168585600061331b565b95945050505050565b6040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810191909152604080516101a081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081018290526101608101829052610180810191909152604080516101408101825260125468010000000000000000900463ffffffff1681526011546bffffffffffffffffffffffff908116602083015260155492820192909252600f54700100000000000000000000000000000000900490911660608083019190915290819060009060808101610c696002613102565b815260125463ffffffff6c01000000000000000000000000808304821660208086019190915270010000000000000000000000000000000084048316604080870191909152600e54606080880191909152600f547c0100000000000000000000000000000000000000000000000000000000810486166080808a019190915260ff6e01000000000000000000000000000083048116151560a09a8b015284516101a0810186526101008085048a1682526501000000000085048a1682890152898b168288015262ffffff69010000000000000000008604169582019590955261ffff88850416928101929092526010546bffffffffffffffffffffffff81169a83019a909a526401000000008904881660c0830152740100000000000000000000000000000000000000008904881660e083015278010000000000000000000000000000000000000000000000009098049096169186019190915260135461012086015260145461014086015273ffffffffffffffffffffffffffffffffffffffff96849004871661016086015260115493909304909516610180840152600a8054865181840281018401909752808752969b509299508a958a959394600b9493169291859190830182828015610e7657602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610e4b575b5050505050925081805480602002602001604051908101604052809291908181526020018280548015610edf57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610eb4575b50505050509150945094509450945094509091929394565b610eff613366565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260176020526040902080548291907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001836003811115610f5f57610f5f614cc4565b02179055505050565b610f71826133e9565b73ffffffffffffffffffffffffffffffffffffffff8116331415610fc1576040517f8c8728c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811661100e576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604090205473ffffffffffffffffffffffffffffffffffffffff8281169116146110b85760008281526006602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff851690811790915590519091339185917fb1cbb2c4b8480034c27e06da5f096b8233a8fd4497028593a41ff6df79726b3591a45b5050565b6110c4613366565b601680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600081815260186020526040902080546060919061112890614bd9565b80601f016020809104026020016040519081016040528092919081815260200182805461115490614bd9565b80156111a15780601f10611176576101008083540402835291602001916111a1565b820191906000526020600020905b81548152906001019060200180831161118457829003601f168201915b50505050509050919050565b604080518082019091526060808252602082015260026111cc836117dd565b60038111156111dd576111dd614cc4565b146111e757600080fd5b6000828152601860205260409020805461120090614bd9565b80601f016020809104026020016040519081016040528092919081815260200182805461122c90614bd9565b80156112795780601f1061124e57610100808354040283529160200191611279565b820191906000526020600020905b81548152906001019060200180831161125c57829003601f168201915b50505050508060200190518101906108e991906140bc565b611299613366565b600b5481146112d4576040517fcf54c06a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b600b548110156114a6576000600b82815481106112f6576112f6614d22565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff908116808452600c9092526040832054919350169085858581811061134057611340614d22565b90506020020160208101906113559190613fa1565b905073ffffffffffffffffffffffffffffffffffffffff811615806113e8575073ffffffffffffffffffffffffffffffffffffffff8216158015906113c657508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156113e8575073ffffffffffffffffffffffffffffffffffffffff81811614155b1561141f576040517fb387a23800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff818116146114905773ffffffffffffffffffffffffffffffffffffffff8381166000908152600c6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b505050808061149e90614c2d565b9150506112d7565b507fa46de38886467c59be07a0675f14781206a5477d871628af46c2443822fcb725600b83836040516114db939291906145bf565b60405180910390a15050565b6114ef613366565b600f80547fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff1690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6060600061155b6002613102565b905080841161156a578361156c565b805b9350838511156115a8576040517f1390f2a100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006115b48686614b69565b90506000808267ffffffffffffffff8111156115d2576115d2614d51565b6040519080825280602002602001820160405280156115fb578160200160208202803683370190505b50905060005b8381101561168b5760006116186108ac8b84614a29565b905087600381111561162c5761162c614cc4565b611635826117dd565b600381111561164657611646614cc4565b1415611678578083858151811061165f5761165f614d22565b60209081029190910101528361167481614c2d565b9450505b508061168381614c2d565b915050611601565b50828214611697578181525b979650505050505050565b6000818152601a6020526040902080546060919061112890614bd9565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602090815260408083208151608081018352905460ff80821615158352610100820416938201939093526bffffffffffffffffffffffff6201000084048116928201929092526e010000000000000000000000000000909204811660608301819052600f548493849384938493849261176b9291700100000000000000000000000000000000900416614b80565b600b5490915060009061177e9083614aaa565b90508260000151836020015182856040015161179a9190614a66565b6060959095015173ffffffffffffffffffffffffffffffffffffffff9b8c166000908152600c6020526040902054929c919b959a50985093169550919350505050565b6000818160045b600f81101561186a577fff00000000000000000000000000000000000000000000000000000000000000821683826020811061182257611822614d22565b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461185857506000949350505050565b8061186281614c2d565b9150506117e4565b5081600f1a600381111561188057611880614cc4565b949350505050565b611891816133e9565b600081815260046020908152604091829020825161010081018452815463ffffffff8082168352640100000000820481169483019490945260ff68010000000000000000820416151594820185905273ffffffffffffffffffffffffffffffffffffffff69010000000000000000009091048116606083015260018301546bffffffffffffffffffffffff80821660808501526c0100000000000000000000000082041660a08401527801000000000000000000000000000000000000000000000000900490931660c082015260029091015490911660e0820152906119a3576040517f1b88a78400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1690556119e260028361349c565b5060405182907f7bada562044eb163f6b4003c4553e4e62825344c0418eea087bed5ee05a4745690600090a25050565b600f546f01000000000000000000000000000000900460ff1615611a62576040517f37ed32e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f80547fffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff166f0100000000000000000000000000000017905573ffffffffffffffffffffffffffffffffffffffff8116611ae9576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152600460209081526040808320815161010081018352815463ffffffff8082168352640100000000820481168387015260ff6801000000000000000083041615158386015273ffffffffffffffffffffffffffffffffffffffff69010000000000000000009092048216606084015260018401546bffffffffffffffffffffffff80821660808601526c0100000000000000000000000082041660a0850152780100000000000000000000000000000000000000000000000090041660c0830152600290920154821660e082015286855260059093529220549091163314611c01576040517fa47c170600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c096134a8565b816020015163ffffffff161115611c4c576040517fff84e5dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000838152600460205260409020600101546015546c010000000000000000000000009091046bffffffffffffffffffffffff1690611c8c908290614b69565b60155560008481526004602081905260409182902060010180547fffffffffffffffff000000000000000000000000ffffffffffffffffffffffff16905590517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116928201929092526bffffffffffffffffffffffff831660248201527f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb90604401602060405180830381600087803b158015611d6a57600080fd5b505af1158015611d7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da2919061409a565b50604080516bffffffffffffffffffffffff8316815273ffffffffffffffffffffffffffffffffffffffff8516602082015285917ff3b5906e5672f3e524854103bcafbbdba80dbdfeca2c35e116127b1060a68318910160405180910390a25050600f80547fffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff1690555050565b60015473ffffffffffffffffffffffffffffffffffffffff163314611eb5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b611f39613366565b6011546015546bffffffffffffffffffffffff90911690611f5b908290614b69565b601555601180547fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001690556040516bffffffffffffffffffffffff821681527f1d07d0b0be43d3e5fee41a80b579af370affee03fa595bf56d5d4c19328162f19060200160405180910390a16040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526bffffffffffffffffffffffff821660248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a9059cbb906044015b602060405180830381600087803b15801561206357600080fd5b505af1158015612077573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b8919061409a565b6120a3613366565b600f80547fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff166e0100000000000000000000000000001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611543565b612115816133e9565b600081815260046020908152604091829020825161010081018452815463ffffffff8082168352640100000000820481169483019490945260ff680100000000000000008204161580159583019590955273ffffffffffffffffffffffffffffffffffffffff69010000000000000000009091048116606083015260018301546bffffffffffffffffffffffff80821660808501526c0100000000000000000000000082041660a08401527801000000000000000000000000000000000000000000000000900490931660c082015260029091015490911660e082015290612229576040517f514b6c2400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff166801000000000000000017905561227360028361356d565b5060405182907f8ab10247ce168c27748e656ecf852b951fcaac790c18106b19aa0ae57a8b741f90600090a25050565b6122ac836133e9565b60008381526019602052604090206122c5908383613e25565b50827f3e8740446213c8a77d40e08f79136ce3f347d13ed270a6ebdf57159e0faf485083836040516122f89291906146b5565b60405180910390a2505050565b61230e836133e9565b60125474010000000000000000000000000000000000000000900463ffffffff16811115612368576040517fae7235df00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000838152600760205260409020612381908383613e25565b50827f7b778136e5211932b51a145badd01959415e79e051a933604b3d323f862dcabf83836040516122f89291906146b5565b73ffffffffffffffffffffffffffffffffffffffff8116612401576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8281166000908152600c6020526040902054163314612461576040517fcebf515b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f54600b5460009161249891859170010000000000000000000000000000000090046bffffffffffffffffffffffff1690613579565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260086020526040902080547fffffffffffffffffffffffffffffffffffff000000000000000000000000ffff169055601554909150612502906bffffffffffffffffffffffff831690614b69565b6015556040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526bffffffffffffffffffffffff831660248301527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb90604401602060405180830381600087803b1580156125a257600080fd5b505af11580156125b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125da919061409a565b5060405133815273ffffffffffffffffffffffffffffffffffffffff808416916bffffffffffffffffffffffff8416918616907f9819093176a1851202c7bcfa46845809b4e47c261866550e94ed3775d2f406989060200160405180910390a4505050565b6108fc8163ffffffff161080612668575060125463ffffffff6401000000009091048116908216115b1561269f576040517f14c237fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126a8826133e9565b60008281526004602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516908117909155915191825283917fc24c07e655ce79fba8a589778987d3c015bc6af1632bb20cf9182e02a65d972c910160405180910390a25050565b73ffffffffffffffffffffffffffffffffffffffff8181166000908152600d6020526040902054163314612781576040517f6752e7aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8181166000818152600c602090815260408083208054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217909355600d909452828520805490921690915590519416939092849290917f78af32efdcad432315431e9b03d27e6cd98fb79c405fdc5af7c1714d9c0f75b39190a45050565b600081815260046020908152604091829020825161010081018452815463ffffffff80821683526401000000008204811694830185905260ff6801000000000000000083041615159583019590955273ffffffffffffffffffffffffffffffffffffffff69010000000000000000009091048116606083015260018301546bffffffffffffffffffffffff80821660808501526c0100000000000000000000000082041660a084015278010000000000000000000000000000000000000000000000009004851660c083015260029092015490911660e0820152911461292b576040517f9c0083a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604090205473ffffffffffffffffffffffffffffffffffffffff163314612988576040517f6352a85300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602090815260408083208054337fffffffffffffffffffffffff0000000000000000000000000000000000000000808316821790935560069094528285208054909216909155905173ffffffffffffffffffffffffffffffffffffffff90911692839186917f5cff4db96bef051785e999f44bfcd21c18823e034fb92dd376e3db4ce0feeb2c91a4505050565b6000818152600460205260408120546108e99063ffffffff166109f1565b612a42613366565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a082319060240160206040518083038186803b158015612aca57600080fd5b505afa158015612ade573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b029190614223565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3360155484612b4f9190614b69565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401612049565b604080516101608101825260008082526020820181905291810182905260608082018190526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201929092526101408101919091526000828152600460209081526040808320815161010081018352815463ffffffff8082168352640100000000820481168387015260ff6801000000000000000083041615158386015273ffffffffffffffffffffffffffffffffffffffff69010000000000000000009092048216606080850191825260018601546bffffffffffffffffffffffff80821660808801526c0100000000000000000000000082041660a087015278010000000000000000000000000000000000000000000000009004831660c0860152600290950154831660e085019081528651610160810188529051841681529051909216828701528251168185015287865260079094529190932080549193830191612d1390614bd9565b80601f0160208091040260200160405190810160405280929190818152602001828054612d3f90614bd9565b8015612d8c5780601f10612d6157610100808354040283529160200191612d8c565b820191906000526020600020905b815481529060010190602001808311612d6f57829003601f168201915b505050505081526020018260a001516bffffffffffffffffffffffff1681526020016005600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001826020015163ffffffff1667ffffffffffffffff1681526020018260c0015163ffffffff16815260200182608001516bffffffffffffffffffffffff168152602001826040015115158152602001601960008681526020019081526020016000208054612e6990614bd9565b80601f0160208091040260200160405190810160405280929190818152602001828054612e9590614bd9565b8015612ee25780601f10612eb757610100808354040283529160200191612ee2565b820191906000526020600020905b815481529060010190602001808311612ec557829003601f168201915b5050505050815250915050919050565b60165473ffffffffffffffffffffffffffffffffffffffff163314612f43576040517fee5dc90100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000838152601a60205260409020612f5c908383613e25565b50827f09a658476c5597979b9948f488ec2958cfead97bc8f46b19ca0b21cdab93cdee83836040516122f89291906146b5565b73ffffffffffffffffffffffffffffffffffffffff8281166000908152600c6020526040902054163314612fef576040517fcebf515b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811633141561303f576040517f8c8728c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8281166000908152600d60205260409020548116908216146110b85773ffffffffffffffffffffffffffffffffffffffff8281166000818152600d602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169486169485179055513392917f84f7c7c80bb8ed2279b4aab5f61cd05e6374073d38f46d7f32de8c30e9e3836791a45050565b6130f6613366565b6130ff816137a0565b50565b60006108e9825490565b60006131188383613896565b9392505050565b6000806000836060015162ffffff1690506000808263ffffffff161190506000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b1580156131a657600080fd5b505afa1580156131ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131de919061437f565b50945090925050506000811315806131f557508142105b806132165750828015613216575061320d8242614b69565b8463ffffffff16105b15613225576013549550613229565b8095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b15801561328f57600080fd5b505afa1580156132a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132c7919061437f565b50945090925050506000811315806132de57508142105b806132ff57508280156132ff57506132f68242614b69565b8463ffffffff16105b1561330e576014549450613312565b8094505b50505050915091565b60008061332c8689600001516138c0565b90506000806133478a8a63ffffffff16858a8a60018b613904565b90925090506133568183614a66565b93505050505b9695505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146133e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401611eac565b565b60008181526005602052604090205473ffffffffffffffffffffffffffffffffffffffff163314613446576040517fa47c170600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260046020526040902054640100000000900463ffffffff908116146130ff576040517f9c0083a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006131188383613ce3565b600060017f000000000000000000000000000000000000000000000000000000000000000060028111156134de576134de614cc4565b141561356857606473ffffffffffffffffffffffffffffffffffffffff1663a3b1b31d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561352b57600080fd5b505afa15801561353f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135639190614223565b905090565b504390565b60006131188383613d32565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602090815260408083208151608081018352905460ff80821615158352610100820416938201939093526bffffffffffffffffffffffff6201000084048116928201929092526e010000000000000000000000000000909204166060820181905282906136049086614b80565b905060006136128583614aaa565b905080836040018181516136269190614a66565b6bffffffffffffffffffffffff908116909152871660608501525061364b8582614b3e565b6136559083614b80565b601180546000906136759084906bffffffffffffffffffffffff16614a66565b825461010092830a6bffffffffffffffffffffffff81810219909216928216029190911790925573ffffffffffffffffffffffffffffffffffffffff999099166000908152600860209081526040918290208751815492890151938901516060909901517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009093169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff161760ff909316909b02919091177fffffffffffff000000000000000000000000000000000000000000000000ffff1662010000878416027fffffffffffff000000000000000000000000ffffffffffffffffffffffffffff16176e010000000000000000000000000000919092160217909755509095945050505050565b73ffffffffffffffffffffffffffffffffffffffff8116331415613820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401611eac565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60008260000182815481106138ad576138ad614d22565b9060005260206000200154905092915050565b60006138d363ffffffff84166014614ad5565b6138de836001614a41565b6138ed9060ff16611d4c614ad5565b6138fa9062013880614a29565b6131189190614a29565b6000806000896080015161ffff168761391d9190614ad5565b905083801561392b5750803a105b1561393357503a5b600060027f0000000000000000000000000000000000000000000000000000000000000000600281111561396957613969614cc4565b1415613aec5760408051600081526020810190915285156139c857600036604051806080016040528060488152602001614dc0604891396040516020016139b293929190614598565b6040516020818303038152906040529050613a44565b6012546139f8907801000000000000000000000000000000000000000000000000900463ffffffff166004614b12565b63ffffffff1667ffffffffffffffff811115613a1657613a16614d51565b6040519080825280601f01601f191660200182016040528015613a40576020820181803683370190505b5090505b6040517f49948e0e00000000000000000000000000000000000000000000000000000000815273420000000000000000000000000000000000000f906349948e0e90613a94908490600401614702565b60206040518083038186803b158015613aac57600080fd5b505afa158015613ac0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ae49190614223565b915050613ba8565b60017f00000000000000000000000000000000000000000000000000000000000000006002811115613b2057613b20614cc4565b1415613ba857606c73ffffffffffffffffffffffffffffffffffffffff1663c6f7de0e6040518163ffffffff1660e01b815260040160206040518083038186803b158015613b6d57600080fd5b505afa158015613b81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ba59190614223565b90505b84613bc457808b6080015161ffff16613bc19190614ad5565b90505b613bd261ffff871682614a96565b905060008782613be28c8e614a29565b613bec9086614ad5565b613bf69190614a29565b613c0890670de0b6b3a7640000614ad5565b613c129190614a96565b905060008c6040015163ffffffff1664e8d4a51000613c319190614ad5565b898e6020015163ffffffff16858f88613c4a9190614ad5565b613c549190614a29565b613c6290633b9aca00614ad5565b613c6c9190614ad5565b613c769190614a96565b613c809190614a29565b90506b033b2e3c9fd0803ce8000000613c998284614a29565b1115613cd1576040517f2ad7547a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b909c909b509950505050505050505050565b6000818152600183016020526040812054613d2a575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556108e9565b5060006108e9565b60008181526001830160205260408120548015613e1b576000613d56600183614b69565b8554909150600090613d6a90600190614b69565b9050818114613dcf576000866000018281548110613d8a57613d8a614d22565b9060005260206000200154905080876000018481548110613dad57613dad614d22565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613de057613de0614cf3565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506108e9565b60009150506108e9565b828054613e3190614bd9565b90600052602060002090601f016020900481019282613e535760008555613eb7565b82601f10613e8a578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555613eb7565b82800160010185558215613eb7579182015b82811115613eb7578235825591602001919060010190613e9c565b50613ec3929150613ec7565b5090565b5b80821115613ec35760008155600101613ec8565b600067ffffffffffffffff80841115613ef757613ef7614d51565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715613f3d57613f3d614d51565b81604052809350858152868686011115613f5657600080fd5b613f64866020830187614bad565b5050509392505050565b803563ffffffff81168114613f8257600080fd5b919050565b805169ffffffffffffffffffff81168114613f8257600080fd5b600060208284031215613fb357600080fd5b813561311881614d90565b60008060408385031215613fd157600080fd5b8235613fdc81614d90565b91506020830135613fec81614d90565b809150509250929050565b6000806040838503121561400a57600080fd5b823561401581614d90565b91506020830135613fec81614db2565b6000806020838503121561403857600080fd5b823567ffffffffffffffff8082111561405057600080fd5b818501915085601f83011261406457600080fd5b81358181111561407357600080fd5b8660208260051b850101111561408857600080fd5b60209290920196919550909350505050565b6000602082840312156140ac57600080fd5b8151801515811461311857600080fd5b6000602082840312156140ce57600080fd5b815167ffffffffffffffff808211156140e657600080fd5b90830190604082860312156140fa57600080fd5b614102614a00565b82518281111561411157600080fd5b8301601f8101871361412257600080fd5b61413187825160208401613edc565b82525060208301518281111561414657600080fd5b80840193505085601f84011261415b57600080fd5b61416a86845160208601613edc565b602082015295945050505050565b600060c0828403121561418a57600080fd5b60405160c0810181811067ffffffffffffffff821117156141ad576141ad614d51565b60405282516141bb81614d90565b8152602083015160ff811681146141d157600080fd5b8060208301525060408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b60006020828403121561421c57600080fd5b5035919050565b60006020828403121561423557600080fd5b5051919050565b6000806040838503121561424f57600080fd5b823591506020830135613fec81614d90565b60008060006040848603121561427657600080fd5b83359250602084013567ffffffffffffffff8082111561429557600080fd5b818601915086601f8301126142a957600080fd5b8135818111156142b857600080fd5b8760208285010111156142ca57600080fd5b6020830194508093505050509250925092565b600080604083850312156142f057600080fd5b50508035926020909101359150565b60008060006060848603121561431457600080fd5b8335925060208401359150604084013561432d81614db2565b809150509250925092565b6000806040838503121561434b57600080fd5b8235915061435b60208401613f6e565b90509250929050565b60006020828403121561437657600080fd5b61311882613f6e565b600080600080600060a0868803121561439757600080fd5b6143a086613f87565b94506020860151935060408601519250606086015191506143c360808701613f87565b90509295509295909350565b600081518084526020808501945080840160005b8381101561441557815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016143e3565b509495945050505050565b60008151808452614438816020860160208601614bad565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b805163ffffffff168252602081015161448b602084018263ffffffff169052565b5060408101516144a3604084018263ffffffff169052565b5060608101516144ba606084018262ffffff169052565b5060808101516144d0608084018261ffff169052565b5060a08101516144f060a08401826bffffffffffffffffffffffff169052565b5060c081015161450860c084018263ffffffff169052565b5060e081015161452060e084018263ffffffff169052565b506101008181015163ffffffff8116848301525050610120818101519083015261014080820151908301526101608082015173ffffffffffffffffffffffffffffffffffffffff81168285015250506101808181015173ffffffffffffffffffffffffffffffffffffffff8116848301525b50505050565b8284823760008382016000815283516145b5818360208801614bad565b0195945050505050565b6000604082016040835280865480835260608501915087600052602092508260002060005b8281101561461657815473ffffffffffffffffffffffffffffffffffffffff16845292840192600191820191016145e4565b505050838103828501528481528590820160005b8681101561466557823561463d81614d90565b73ffffffffffffffffffffffffffffffffffffffff168252918301919083019060010161462a565b50979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156146a95783518352928401929184019160010161468d565b50909695505050505050565b60208152816020820152818360408301376000818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b6020815260006131186020830184614420565b6020810161472283614d80565b91905290565b602081016003831061472257614722614cc4565b6020815260008251604060208401526147586060840182614420565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848303016040850152610b2b8282614420565b855163ffffffff168152600061034060208801516147c160208501826bffffffffffffffffffffffff169052565b506040880151604084015260608801516147eb60608501826bffffffffffffffffffffffff169052565b506080880151608084015260a088015161480d60a085018263ffffffff169052565b5060c088015161482560c085018263ffffffff169052565b5060e088015160e0840152610100808901516148488286018263ffffffff169052565b50506101208881015115159084015261486561014084018861446a565b806102e0840152614878818401876143cf565b905082810361030084015261488d81866143cf565b91505061335c61032083018460ff169052565b602081526148c760208201835173ffffffffffffffffffffffffffffffffffffffff169052565b600060208301516148f0604084018273ffffffffffffffffffffffffffffffffffffffff169052565b50604083015163ffffffff8116606084015250606083015161016080608085015261491f610180850183614420565b9150608085015161494060a08601826bffffffffffffffffffffffff169052565b5060a085015173ffffffffffffffffffffffffffffffffffffffff811660c08601525060c085015167ffffffffffffffff811660e08601525060e08501516101006149928187018363ffffffff169052565b86015190506101206149b3868201836bffffffffffffffffffffffff169052565b86015190506101406149c88682018315159052565b8601518584037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183870152905061335c8382614420565b6040805190810167ffffffffffffffff81118282101715614a2357614a23614d51565b60405290565b60008219821115614a3c57614a3c614c66565b500190565b600060ff821660ff84168060ff03821115614a5e57614a5e614c66565b019392505050565b60006bffffffffffffffffffffffff808316818516808303821115614a8d57614a8d614c66565b01949350505050565b600082614aa557614aa5614c95565b500490565b60006bffffffffffffffffffffffff80841680614ac957614ac9614c95565b92169190910492915050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b0d57614b0d614c66565b500290565b600063ffffffff80831681851681830481118215151615614b3557614b35614c66565b02949350505050565b60006bffffffffffffffffffffffff80831681851681830481118215151615614b3557614b35614c66565b600082821015614b7b57614b7b614c66565b500390565b60006bffffffffffffffffffffffff83811690831681811015614ba557614ba5614c66565b039392505050565b60005b83811015614bc8578181015183820152602001614bb0565b838111156145925750506000910152565b600181811c90821680614bed57607f821691505b60208210811415614c27577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c5f57614c5f614c66565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600481106130ff576130ff614cc4565b73ffffffffffffffffffffffffffffffffffffffff811681146130ff57600080fd5b600481106130ff57600080fdfe307866666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666a164736f6c6343000806000a", } var KeeperRegistryLogicBABI = KeeperRegistryLogicBMetaData.ABI diff --git a/core/gethwrappers/generated/keeper_registry_wrapper_2_1/keeper_registry_wrapper_2_1.go b/core/gethwrappers/generated/keeper_registry_wrapper_2_1/keeper_registry_wrapper_2_1.go index 6885333ebaa..fa75a856970 100644 --- a/core/gethwrappers/generated/keeper_registry_wrapper_2_1/keeper_registry_wrapper_2_1.go +++ b/core/gethwrappers/generated/keeper_registry_wrapper_2_1/keeper_registry_wrapper_2_1.go @@ -32,7 +32,7 @@ var ( var KeeperRegistryMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"contractKeeperRegistryLogicA2_1\",\"name\":\"logicA\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ArrayHasNoEntries\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotCancel\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CheckDataExceedsLimit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateEntry\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasLimitCanOnlyIncrease\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasLimitOutsideRange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectNumberOfFaultyOracles\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectNumberOfSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectNumberOfSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfRange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientFunds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDataLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidReport\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTrigger\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxCheckDataSizeCanOnlyIncrease\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxPerformDataSizeCanOnlyIncrease\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MigrationNotPermitted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotAContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyActiveSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyActiveTransmitters\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByLINKToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwnerOrAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwnerOrRegistrar\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByPayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByProposedAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByProposedPayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByUpkeepManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPausedUpkeep\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySimulatedBackend\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyUnpausedUpkeep\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ParameterLengthError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PaymentGreaterThanAllLINK\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RegistryPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RepeatedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RepeatedTransmitter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"TargetCheckReverted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyOracles\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TranscoderNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepCancelled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepNotCanceled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepNotNeeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValueNotChanged\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"CancelledUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"previousConfigBlockNumber\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"configCount\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"onchainConfig\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"}],\"name\":\"FundsAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"FundsWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"InsufficientFundsUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"}],\"name\":\"OwnerFundsWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"payees\",\"type\":\"address[]\"}],\"name\":\"PayeesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"PayeeshipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"PayeeshipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"}],\"name\":\"PaymentWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"ReorgedUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"StaleUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"epoch\",\"type\":\"uint32\"}],\"name\":\"Transmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"adminOffchainConfig\",\"type\":\"bytes\"}],\"name\":\"UpkeepAdminOffchainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"UpkeepAdminTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"UpkeepAdminTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"atBlockHeight\",\"type\":\"uint64\"}],\"name\":\"UpkeepCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"newCheckData\",\"type\":\"bytes\"}],\"name\":\"UpkeepCheckDataUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"gasLimit\",\"type\":\"uint96\"}],\"name\":\"UpkeepGasLimitSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remainingBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"UpkeepMigrated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"UpkeepOffchainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"UpkeepPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"totalPayment\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasOverhead\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"UpkeepPerformed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startingBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"importedFrom\",\"type\":\"address\"}],\"name\":\"UpkeepReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"executeGas\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"UpkeepRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"triggerConfig\",\"type\":\"bytes\"}],\"name\":\"UpkeepTriggerConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"UpkeepUnpaused\",\"type\":\"event\"},{\"stateMutability\":\"nonpayable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fallbackTo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFastGasFeedAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLinkAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLinkNativeFeedAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMode\",\"outputs\":[{\"internalType\":\"enumKeeperRegistryBase2_1.Mode\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upkeepId\",\"type\":\"uint256\"}],\"name\":\"getTriggerType\",\"outputs\":[{\"internalType\":\"enumKeeperRegistryBase2_1.Trigger\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"i_next\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestConfigDetails\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestConfigDigestAndEpoch\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"scanLogs\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"epoch\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onTokenTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"onchainConfig\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"performData\",\"type\":\"bytes\"}],\"name\":\"simulatePerformUpkeep\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"rawReport\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"rs\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"ss\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"rawVs\",\"type\":\"bytes32\"}],\"name\":\"transmit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x6101206040523480156200001257600080fd5b5060405162004bde38038062004bde8339810160408190526200003591620003bc565b80816001600160a01b0316634b4fd03b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200007057600080fd5b505afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab9190620003e3565b826001600160a01b031663ca30e6036040518163ffffffff1660e01b815260040160206040518083038186803b158015620000e557600080fd5b505afa158015620000fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001209190620003bc565b836001600160a01b031663b10b673c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200015a57600080fd5b505afa1580156200016f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001959190620003bc565b846001600160a01b0316636709d0e56040518163ffffffff1660e01b815260040160206040518083038186803b158015620001cf57600080fd5b505afa158015620001e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020a9190620003bc565b3380600081620002615760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b03848116919091179091558116156200029457620002948162000310565b505050836002811115620002ac57620002ac62000406565b60e0816002811115620002c357620002c362000406565b60f81b9052506001600160601b0319606093841b811660805291831b821660a052821b811660c052601680546001600160a01b0319163317905592901b9091166101005250620004359050565b6001600160a01b0381163314156200036b5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000258565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215620003cf57600080fd5b8151620003dc816200041c565b9392505050565b600060208284031215620003f657600080fd5b815160038110620003dc57600080fd5b634e487b7160e01b600052602160045260246000fd5b6001600160a01b03811681146200043257600080fd5b50565b60805160601c60a05160601c60c05160601c60e05160f81c6101005160601c614724620004ba6000396000818161011d015281816101b4015261022c0152600081816101fb01528181612a890152818161311c015281816132d3015261357501526000610270015260006103a10152600081816103da01526105e901526147246000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80638da5cb5b116100b2578063b10b673c11610081578063ca30e60311610066578063ca30e603146103d8578063e3d0e712146103fe578063f2fde38b146104115761011b565b8063b10b673c1461039f578063b1dc65a4146103c55761011b565b80638da5cb5b146102fb578063a4c0ed3614610319578063aed2e9291461032c578063afcb95d7146103565761011b565b80635147cd59116100ee5780635147cd591461024e5780636709d0e51461026e57806379ba50971461029457806381ff70481461029e5761011b565b8063181f5a7714610160578063349e8cca146101b25780634b4fd03b146101f95780634ff597c114610227575b7f00000000000000000000000000000000000000000000000000000000000000003660008037600080366000845af43d6000803e80801561015b573d6000f35b3d6000fd5b61019c6040518060400160405280601481526020017f4b6565706572526567697374727920322e312e3000000000000000000000000081525081565b6040516101a991906140c5565b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a9565b7f00000000000000000000000000000000000000000000000000000000000000006040516101a991906140d8565b6101d47f000000000000000000000000000000000000000000000000000000000000000081565b61026161025c366004613e79565b610424565b6040516101a991906140f2565b7f00000000000000000000000000000000000000000000000000000000000000006101d4565b61029c6104cf565b005b6102d8601254600e5463ffffffff6c0100000000000000000000000083048116937001000000000000000000000000000000009093041691565b6040805163ffffffff9485168152939092166020840152908201526060016101a9565b60005473ffffffffffffffffffffffffffffffffffffffff166101d4565b61029c610327366004613a63565b6105d1565b61033f61033a366004613e92565b6107ec565b6040805192151583526020830191909152016101a9565b600e54600f54604080516000815260208101939093527c010000000000000000000000000000000000000000000000000000000090910463ffffffff16908201526060016101a9565b7f00000000000000000000000000000000000000000000000000000000000000006101d4565b61029c6103d3366004613b8c565b610964565b7f00000000000000000000000000000000000000000000000000000000000000006101d4565b61029c61040c366004613abf565b611506565b61029c61041f366004613a46565b6122fd565b6000818160045b600f8110156104b1577fff0000000000000000000000000000000000000000000000000000000000000082168382602081106104695761046961464f565b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461049f57506000949350505050565b806104a981614589565b91505061042b565b5081600f1a60038111156104c7576104c7614620565b949350505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610640576040517fc8bad78d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020811461067a576040517fdfe9309000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061068882840184613e79565b600081815260046020526040902054909150640100000000900463ffffffff908116146106e1576040517f9c0083a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008181526004602052604090206001015461071c9085906c0100000000000000000000000090046bffffffffffffffffffffffff166143f2565b600082815260046020526040902060010180546bffffffffffffffffffffffff929092166c01000000000000000000000000027fffffffffffffffff000000000000000000000000ffffffffffffffffffffffff909216919091179055601554610787908590614396565b6015556040516bffffffffffffffffffffffff8516815273ffffffffffffffffffffffffffffffffffffffff86169082907fafd24114486da8ebfc32f3626dada8863652e187461aa74d4bfa7348915062039060200160405180910390a35050505050565b6000806107f7612311565b600f546e010000000000000000000000000000900460ff1615610846576040517f24522f3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600085815260046020908152604091829020825161010081018452815463ffffffff8082168352640100000000820481168386015260ff6801000000000000000083041615158387015273ffffffffffffffffffffffffffffffffffffffff69010000000000000000009092048216606084015260018401546bffffffffffffffffffffffff80821660808601526c0100000000000000000000000082041660a0850152780100000000000000000000000000000000000000000000000090041660c083015260029092015490911660e08201528251601f87018390048302810183019093528583529161095791839190889088908190840183828082843760009201919091525061234b92505050565b9250925050935093915050565b60005a6040805161012081018252600f5460ff808216835261010080830463ffffffff90811660208601526501000000000084048116958501959095526901000000000000000000830462ffffff1660608501526c01000000000000000000000000830461ffff1660808501526e0100000000000000000000000000008304821615801560a08601526f010000000000000000000000000000008404909216151560c085015270010000000000000000000000000000000083046bffffffffffffffffffffffff1660e08501527c010000000000000000000000000000000000000000000000000000000090920490931690820152919250610a92576040517f24522f3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526008602052604090205460ff16610adb576040517f1099ed7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b1c8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061256392505050565b9050600081604001515167ffffffffffffffff811115610b3e57610b3e61467e565b604051908082528060200260200182016040528015610bfa57816020015b604080516101c081018252600060c0820181815260e08301829052610100830182905261012083018290526101408301829052610160830182905261018083018290526101a0830182905282526020808301829052928201819052606082018190526080820181905260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610b5c5790505b5090506000805b836040015151811015610eaf576004600085604001518381518110610c2857610c2861464f565b6020908102919091018101518252818101929092526040908101600020815161010081018352815463ffffffff8082168352640100000000820481169583019590955260ff6801000000000000000082041615159382019390935273ffffffffffffffffffffffffffffffffffffffff69010000000000000000009093048316606082015260018201546bffffffffffffffffffffffff80821660808401526c0100000000000000000000000082041660a08301527801000000000000000000000000000000000000000000000000900490931660c0840152600201541660e08201528351849083908110610d1f57610d1f61464f565b602002602001015160000181905250610d8485848381518110610d4457610d4461464f565b6020026020010151600001516000015186608001518481518110610d6a57610d6a61464f565b602002602001015151876000015188602001516001612631565b838281518110610d9657610d9661464f565b6020026020010151604001906bffffffffffffffffffffffff1690816bffffffffffffffffffffffff1681525050610e4484604001518281518110610ddd57610ddd61464f565b602002602001015185606001518381518110610dfb57610dfb61464f565b6020026020010151858481518110610e1557610e1561464f565b602002602001015160000151868581518110610e3357610e3361464f565b60200260200101516040015161267a565b838281518110610e5657610e5661464f565b60200260200101516020019015159081151581525050828181518110610e7e57610e7e61464f565b60200260200101516020015115610e9d57610e9a600183614370565b91505b80610ea781614589565b915050610c01565b5061ffff8116610ec35750505050506114fc565b600e548d3514610eff576040517fdfdcf8e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8351610f0c9060016143cd565b60ff1689141580610f1d5750888714155b15610f54576040517f0244f71a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f648d8d8d8d8d8d8d8d61281a565b60005b83604001515181101561114a57828181518110610f8657610f8661464f565b6020026020010151602001511561113857610f9f612a83565b63ffffffff166004600086604001518481518110610fbf57610fbf61464f565b6020026020010151815260200190815260200160002060010160189054906101000a900463ffffffff1663ffffffff161415611027576040517fb55ac75400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61106b83828151811061103c5761103c61464f565b6020026020010151600001518560800151838151811061105e5761105e61464f565b602002602001015161234b565b84838151811061107d5761107d61464f565b602002602001015160600185848151811061109a5761109a61464f565b602002602001015160800182815250821515151581525050508281815181106110c5576110c561464f565b602002602001015160800151866110dc9190614515565b95506110e6612a83565b60046000866040015184815181106111005761110061464f565b6020026020010151815260200190815260200160002060010160186101000a81548163ffffffff021916908363ffffffff1602179055505b8061114281614589565b915050610f67565b5083516111589060016143cd565b6111679060ff1661044c614458565b6169146111758d6010614458565b5a6111809089614515565b61118a9190614396565b6111949190614396565b61119e9190614396565b94506116a86111b161ffff831687614419565b6111bb9190614396565b945060008060008060005b87604001515181101561139e578681815181106111e5576111e561464f565b6020026020010151602001511561138c576112238a896080015183815181106112105761121061464f565b6020026020010151518b60000151612b48565b8782815181106112355761123561464f565b602002602001015160a0018181525050611291898960400151838151811061125f5761125f61464f565b60200260200101518984815181106112795761127961464f565b60200260200101518b600001518c602001518b612b68565b90935091506112a082856143f2565b93506112ac83866143f2565b94508681815181106112c0576112c061464f565b6020026020010151606001511515886040015182815181106112e4576112e461464f565b60200260200101517fad8cc9579b21dfe2c2f6ea35ba15b656e46b4f5b0cb424f52739b8ce5cac9c5b848661131991906143f2565b8a858151811061132b5761132b61464f565b6020026020010151608001518b86815181106113495761134961464f565b602002602001015160a001518d60600151878151811061136b5761136b61464f565b60200260200101516040516113839493929190614250565b60405180910390a35b8061139681614589565b9150506111c6565b505033600090815260086020526040902080548492506002906113d69084906201000090046bffffffffffffffffffffffff166143f2565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555080600f60000160108282829054906101000a90046bffffffffffffffffffffffff1661143091906143f2565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555060008f6001600381106114735761147361464f565b602002013560001c9050600060088264ffffffffff16901c905087610100015163ffffffff168163ffffffff1611156114f257600f80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff8416021790555b5050505050505050505b5050505050505050565b61150e612c5b565b601f8651111561154a576040517f25d0209c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff8416611584576040517fe77dba5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845186511415806115a3575061159b8460036144c1565b60ff16865111155b156115da576040517f1d2d1c5800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f54600b547001000000000000000000000000000000009091046bffffffffffffffffffffffff169060005b816bffffffffffffffffffffffff1681101561166f5761165c600b82815481106116335761163361464f565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff168484612cdc565b508061166781614589565b915050611607565b5060008060005b836bffffffffffffffffffffffff1681101561177857600a818154811061169f5761169f61464f565b600091825260209091200154600b805473ffffffffffffffffffffffffffffffffffffffff909216945090829081106116da576116da61464f565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff868116845260098352604080852080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001690559116808452600890925290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905591508061177081614589565b915050611676565b50611785600a60006136e8565b611791600b60006136e8565b604080516080810182526000808252602082018190529181018290526060810182905290805b8c51811015611b1557600960008e83815181106117d6576117d661464f565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040016000205460ff1615611841576040517f77cea0fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052806001151581526020018260ff16815250600960008f84815181106118725761187261464f565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528181019290925260400160002082518154939092015160ff16610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092171790558b518c908290811061191a5761191a61464f565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff81166000908152600883526040908190208151608081018352905460ff80821615801584526101008304909116958301959095526bffffffffffffffffffffffff6201000082048116938301939093526e01000000000000000000000000000090049091166060820152945092506119df576040517f6a7281ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001835260ff80821660208086019182526bffffffffffffffffffffffff808b166060880190815273ffffffffffffffffffffffffffffffffffffffff871660009081526008909352604092839020885181549551948a0151925184166e010000000000000000000000000000027fffffffffffff000000000000000000000000ffffffffffffffffffffffffffff939094166201000002929092167fffffffffffff000000000000000000000000000000000000000000000000ffff94909616610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009095169490941717919091169290921791909117905580611b0d81614589565b9150506117b7565b50508a51611b2b9150600a9060208d0190613706565b508851611b3f90600b9060208c0190613706565b50600087806020019051810190611b569190613d89565b60125460c082015191925063ffffffff640100000000909104811691161015611bab576040517f39abc10400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60125460e082015163ffffffff74010000000000000000000000000000000000000000909204821691161015611c0d576040517f1fa9bdcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60125461010082015163ffffffff7801000000000000000000000000000000000000000000000000909204821691161015611c74576040517fd1d5faa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518061012001604052808a60ff168152602001826000015163ffffffff168152602001826020015163ffffffff168152602001826060015162ffffff168152602001826080015161ffff168152602001600015158152602001600015158152602001866bffffffffffffffffffffffff168152602001600063ffffffff16815250600f60008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160056101000a81548163ffffffff021916908363ffffffff16021790555060608201518160000160096101000a81548162ffffff021916908362ffffff160217905550608082015181600001600c6101000a81548161ffff021916908361ffff16021790555060a082015181600001600e6101000a81548160ff02191690831515021790555060c082015181600001600f6101000a81548160ff02191690831515021790555060e08201518160000160106101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555061010082015181600001601c6101000a81548163ffffffff021916908363ffffffff1602179055509050506040518061016001604052808260a001516bffffffffffffffffffffffff16815260200182610160015173ffffffffffffffffffffffffffffffffffffffff168152602001601060010160009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16815260200182610180015173ffffffffffffffffffffffffffffffffffffffff168152602001826040015163ffffffff1681526020018260c0015163ffffffff168152602001601060020160089054906101000a900463ffffffff1663ffffffff1681526020016010600201600c9054906101000a900463ffffffff1663ffffffff168152602001601060020160109054906101000a900463ffffffff1663ffffffff1681526020018260e0015163ffffffff16815260200182610100015163ffffffff16815250601060008201518160000160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550602082015181600001600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550606082015181600101600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060808201518160020160006101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160020160046101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160020160086101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600201600c6101000a81548163ffffffff021916908363ffffffff1602179055506101008201518160020160106101000a81548163ffffffff021916908363ffffffff1602179055506101208201518160020160146101000a81548163ffffffff021916908363ffffffff1602179055506101408201518160020160186101000a81548163ffffffff021916908363ffffffff1602179055509050508061012001516013819055508061014001516014819055506000601060020160109054906101000a900463ffffffff1690506121da612a83565b601280547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000063ffffffff9384160217808255600192600c916122419185916c010000000000000000000000009004166143ae565b92506101000a81548163ffffffff021916908363ffffffff16021790555061228b46306010600201600c9054906101000a900463ffffffff1663ffffffff168f8f8f8f8f8f612f03565b600e819055507f1591690b8638f5fb2dbec82ac741805ac5da8b45dc5263f4875b0496fdce4e0581600e546010600201600c9054906101000a900463ffffffff168f8f8f8f8f8f6040516122e7999897969594939291906141ab565b60405180910390a1505050505050505050505050565b612305612c5b565b61230e81612fad565b50565b3215612349576040517fb60ac5db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600f5460009081906f01000000000000000000000000000000900460ff16156123a0576040517f37ed32e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f80547fffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff166f010000000000000000000000000000001790555a90506000634585e33b60e01b846040516024016123f891906140c5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092526060870151875192517f79188d1600000000000000000000000000000000000000000000000000000000815291935073ffffffffffffffffffffffffffffffffffffffff16916379188d16916124d091908590600401614231565b602060405180830381600087803b1580156124ea57600080fd5b505af11580156124fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125229190613c43565b92505a61252f9083614515565b915050600f80547fffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff16905590939092509050565b6125956040518060a0016040528060008152602001600081526020016060815260200160608152602001606081525090565b6000806000806000868060200190518101906125b19190613ede565b94509450945094509450815183511415806125ce57508051835114155b15612605576040517fb55ac75400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182529586526020860194909452928401919091526060830152608082015292915050565b6000806126428689600001516130a3565b905060008061265d8a8a63ffffffff16858a8a60018b6130e7565b909250905061266c81836143f2565b9a9950505050505050505050565b60008061268686610424565b9050600081600381111561269c5761269c614620565b14806126b9575060038160038111156126b7576126b7614620565b145b156126f6576000858060200190518101906126d49190613c7e565b90506126e18782876134c6565b6126f0576000925050506104c7565b50612764565b600181600381111561270a5761270a614620565b141561272f576000858060200190518101906127269190613d17565b905060016126e1565b600281600381111561274357612743614620565b141561275f576000858060200190518101906127269190613cd5565b600080fd5b61276c612a83565b846020015163ffffffff16116127b15760405186907fd84831b6a3a7fbd333f42fe7f9104a139da6cca4cc1507aef4ddad79b31d017f90600090a260009150506104c7565b826bffffffffffffffffffffffff168460a001516bffffffffffffffffffffffff16101561280e5760405186907f7895fdfe292beab0842d5beccd078e85296b9e17a30eaee4c261a2696b84eb9690600090a260009150506104c7565b50600195945050505050565b6000878760405161282c929190614074565b604051908190038120612843918b906020016140ab565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201208383019092526000808452908301819052909250906000805b88811015612a1a576001858783602081106128af576128af61464f565b6128bc91901a601b6143cd565b8c8c858181106128ce576128ce61464f565b905060200201358b8b868181106128e7576128e761464f565b9050602002013560405160008152602001604052604051612924949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015612946573d6000803e3d6000fd5b5050604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081015173ffffffffffffffffffffffffffffffffffffffff811660009081526009602090815290849020838501909452925460ff80821615158085526101009092041693830193909352909550935090506129f4576040517f0f4c073700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826020015160080260ff166001901b840193508080612a1290614589565b915050612892565b50827e01010101010101010101010101010101010101010101010101010101010101841614612a75576040517fc103be2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050505050565b600060017f00000000000000000000000000000000000000000000000000000000000000006002811115612ab957612ab9614620565b1415612b4357606473ffffffffffffffffffffffffffffffffffffffff1663a3b1b31d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612b0657600080fd5b505afa158015612b1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3e9190613c65565b905090565b504390565b6000612b5483836130a3565b905080841015612b615750825b9392505050565b600080612b838887608001518860a0015188888860016130e7565b90925090506000612b9482846143f2565b600089815260046020526040902060010180549192508291600c90612bd89084906c0100000000000000000000000090046bffffffffffffffffffffffff1661452c565b82546101009290920a6bffffffffffffffffffffffff81810219909316918316021790915560008a815260046020526040812060010180548594509092612c21918591166143f2565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555050965096945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314612349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161054c565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602090815260408083208151608081018352905460ff80821615158352610100820416938201939093526bffffffffffffffffffffffff6201000084048116928201929092526e01000000000000000000000000000090920416606082018190528290612d67908661452c565b90506000612d75858361442d565b90508083604001818151612d8991906143f2565b6bffffffffffffffffffffffff9081169091528716606085015250612dae85826144ea565b612db8908361452c565b60118054600090612dd89084906bffffffffffffffffffffffff166143f2565b825461010092830a6bffffffffffffffffffffffff81810219909216928216029190911790925573ffffffffffffffffffffffffffffffffffffffff999099166000908152600860209081526040918290208751815492890151938901516060909901517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009093169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff161760ff909316909b02919091177fffffffffffff000000000000000000000000000000000000000000000000ffff1662010000878416027fffffffffffff000000000000000000000000ffffffffffffffffffffffffffff16176e010000000000000000000000000000919092160217909755509095945050505050565b6000808a8a8a8a8a8a8a8a8a604051602001612f2799989796959493929190614106565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905280516020909101207dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e01000000000000000000000000000000000000000000000000000000000000179b9a5050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff811633141561302d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161054c565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60006130b663ffffffff84166014614458565b6130c18360016143cd565b6130d09060ff16611d4c614458565b6130dd90620124f8614396565b612b619190614396565b6000806000896080015161ffff16876131009190614458565b905083801561310e5750803a105b1561311657503a5b600060027f0000000000000000000000000000000000000000000000000000000000000000600281111561314c5761314c614620565b14156132cf5760408051600081526020810190915285156131ab576000366040518060800160405280604881526020016146d06048913960405160200161319593929190614084565b6040516020818303038152906040529050613227565b6012546131db907801000000000000000000000000000000000000000000000000900463ffffffff166004614495565b63ffffffff1667ffffffffffffffff8111156131f9576131f961467e565b6040519080825280601f01601f191660200182016040528015613223576020820181803683370190505b5090505b6040517f49948e0e00000000000000000000000000000000000000000000000000000000815273420000000000000000000000000000000000000f906349948e0e906132779084906004016140c5565b60206040518083038186803b15801561328f57600080fd5b505afa1580156132a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132c79190613c65565b91505061338b565b60017f0000000000000000000000000000000000000000000000000000000000000000600281111561330357613303614620565b141561338b57606c73ffffffffffffffffffffffffffffffffffffffff1663c6f7de0e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561335057600080fd5b505afa158015613364573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133889190613c65565b90505b846133a757808b6080015161ffff166133a49190614458565b90505b6133b561ffff871682614419565b9050600087826133c58c8e614396565b6133cf9086614458565b6133d99190614396565b6133eb90670de0b6b3a7640000614458565b6133f59190614419565b905060008c6040015163ffffffff1664e8d4a510006134149190614458565b898e6020015163ffffffff16858f8861342d9190614458565b6134379190614396565b61344590633b9aca00614458565b61344f9190614458565b6134599190614419565b6134639190614396565b90506b033b2e3c9fd0803ce800000061347c8284614396565b11156134b4576040517f2ad7547a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b909c909b509950505050505050505050565b60008160c0015163ffffffff16836000015163ffffffff1610156135175760405184907f5aa44821f7938098502bff537fbbdc9aaaa2fa655c10740646fce27e54987a8990600090a2506000612b61565b6020830151835161352d9063ffffffff1661356f565b146135655760405184907f561ff77e59394941a01a456497a9418dea82e2a39abb3ecebfb1cef7e0bfdc1390600090a2506000612b61565b5060019392505050565b600060017f000000000000000000000000000000000000000000000000000000000000000060028111156135a5576135a5614620565b14156136de576000606473ffffffffffffffffffffffffffffffffffffffff1663a3b1b31d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156135f457600080fd5b505afa158015613608573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061362c9190613c65565b9050808310158061364757506101006136458483614515565b115b156136555750600092915050565b6040517f2b407a8200000000000000000000000000000000000000000000000000000000815260048101849052606490632b407a829060240160206040518083038186803b1580156136a657600080fd5b505afa1580156136ba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b619190613c65565b504090565b919050565b508054600082559060005260206000209081019061230e9190613790565b828054828255906000526020600020908101928215613780579160200282015b8281111561378057825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190613726565b5061378c929150613790565b5090565b5b8082111561378c5760008155600101613791565b80516136e3816146ad565b600082601f8301126137c157600080fd5b813560206137d66137d183614306565b6142b7565b80838252828201915082860187848660051b89010111156137f657600080fd5b60005b8581101561381e57813561380c816146ad565b845292840192908401906001016137f9565b5090979650505050505050565b60008083601f84011261383d57600080fd5b50813567ffffffffffffffff81111561385557600080fd5b6020830191508360208260051b850101111561387057600080fd5b9250929050565b600082601f83011261388857600080fd5b815160206138986137d183614306565b80838252828201915082860187848660051b89010111156138b857600080fd5b60005b8581101561381e57815167ffffffffffffffff8111156138da57600080fd5b8801603f81018a136138eb57600080fd5b8581015160406138fd6137d18361432a565b8281528c8284860101111561391157600080fd5b613920838a8301848701614559565b875250505092840192908401906001016138bb565b60008083601f84011261394757600080fd5b50813567ffffffffffffffff81111561395f57600080fd5b60208301915083602082850101111561387057600080fd5b600082601f83011261398857600080fd5b81356139966137d18261432a565b8181528460208386010111156139ab57600080fd5b816020850160208301376000918101602001919091529392505050565b805161ffff811681146136e357600080fd5b805162ffffff811681146136e357600080fd5b805163ffffffff811681146136e357600080fd5b803567ffffffffffffffff811681146136e357600080fd5b803560ff811681146136e357600080fd5b80516bffffffffffffffffffffffff811681146136e357600080fd5b600060208284031215613a5857600080fd5b8135612b61816146ad565b60008060008060608587031215613a7957600080fd5b8435613a84816146ad565b935060208501359250604085013567ffffffffffffffff811115613aa757600080fd5b613ab387828801613935565b95989497509550505050565b60008060008060008060c08789031215613ad857600080fd5b863567ffffffffffffffff80821115613af057600080fd5b613afc8a838b016137b0565b97506020890135915080821115613b1257600080fd5b613b1e8a838b016137b0565b9650613b2c60408a01613a19565b95506060890135915080821115613b4257600080fd5b613b4e8a838b01613977565b9450613b5c60808a01613a01565b935060a0890135915080821115613b7257600080fd5b50613b7f89828a01613977565b9150509295509295509295565b60008060008060008060008060e0898b031215613ba857600080fd5b606089018a811115613bb957600080fd5b8998503567ffffffffffffffff80821115613bd357600080fd5b613bdf8c838d01613935565b909950975060808b0135915080821115613bf857600080fd5b613c048c838d0161382b565b909750955060a08b0135915080821115613c1d57600080fd5b50613c2a8b828c0161382b565b999c989b50969995989497949560c00135949350505050565b600060208284031215613c5557600080fd5b81518015158114612b6157600080fd5b600060208284031215613c7757600080fd5b5051919050565b600060408284031215613c9057600080fd5b6040516040810181811067ffffffffffffffff82111715613cb357613cb361467e565b604052613cbf836139ed565b8152602083015160208201528091505092915050565b600060208284031215613ce757600080fd5b6040516020810181811067ffffffffffffffff82111715613d0a57613d0a61467e565b6040529151825250919050565b600060808284031215613d2957600080fd5b6040516080810181811067ffffffffffffffff82111715613d4c57613d4c61467e565b604052613d58836139ed565b8152613d66602084016139ed565b602082015260408301516040820152606083015160608201528091505092915050565b60006101a08284031215613d9c57600080fd5b613da461428d565b613dad836139ed565b8152613dbb602084016139ed565b6020820152613dcc604084016139ed565b6040820152613ddd606084016139da565b6060820152613dee608084016139c8565b6080820152613dff60a08401613a2a565b60a0820152613e1060c084016139ed565b60c0820152613e2160e084016139ed565b60e0820152610100613e348185016139ed565b9082015261012083810151908201526101408084015190820152610160613e5c8185016137a5565b90820152610180613e6e8482016137a5565b908201529392505050565b600060208284031215613e8b57600080fd5b5035919050565b600080600060408486031215613ea757600080fd5b83359250602084013567ffffffffffffffff811115613ec557600080fd5b613ed186828701613935565b9497909650939450505050565b600080600080600060a08688031215613ef657600080fd5b855194506020808701519450604087015167ffffffffffffffff80821115613f1d57600080fd5b818901915089601f830112613f3157600080fd5b8151613f3f6137d182614306565b8082825285820191508585018d878560051b8801011115613f5f57600080fd5b600095505b83861015613f82578051835260019590950194918601918601613f64565b5060608c01519098509450505080831115613f9c57600080fd5b613fa88a848b01613877565b94506080890151925080831115613fbe57600080fd5b5050613fcc88828901613877565b9150509295509295909350565b600081518084526020808501945080840160005b8381101561401f57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101613fed565b509495945050505050565b60008151808452614042816020860160208601614559565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8183823760009101908152919050565b8284823760008382016000815283516140a1818360208801614559565b0195945050505050565b828152608081016060836020840137600081529392505050565b602081526000612b61602083018461402a565b60208101600383106140ec576140ec614620565b91905290565b60208101600483106140ec576140ec614620565b60006101208b835273ffffffffffffffffffffffffffffffffffffffff8b16602084015267ffffffffffffffff808b16604085015281606085015261414d8285018b613fd9565b91508382036080850152614161828a613fd9565b915060ff881660a085015283820360c085015261417e828861402a565b90861660e0850152838103610100850152905061419b818561402a565b9c9b505050505050505050505050565b600061012063ffffffff808d1684528b6020850152808b166040850152508060608401526141db8184018a613fd9565b905082810360808401526141ef8189613fd9565b905060ff871660a084015282810360c084015261420c818761402a565b905067ffffffffffffffff851660e084015282810361010084015261419b818561402a565b63ffffffff831681526040602082015260006104c7604083018461402a565b6bffffffffffffffffffffffff85168152836020820152826040820152608060608201526000614283608083018461402a565b9695505050505050565b6040516101a0810167ffffffffffffffff811182821017156142b1576142b161467e565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156142fe576142fe61467e565b604052919050565b600067ffffffffffffffff8211156143205761432061467e565b5060051b60200190565b600067ffffffffffffffff8211156143445761434461467e565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600061ffff80831681851680830382111561438d5761438d6145c2565b01949350505050565b600082198211156143a9576143a96145c2565b500190565b600063ffffffff80831681851680830382111561438d5761438d6145c2565b600060ff821660ff84168060ff038211156143ea576143ea6145c2565b019392505050565b60006bffffffffffffffffffffffff80831681851680830382111561438d5761438d6145c2565b600082614428576144286145f1565b500490565b60006bffffffffffffffffffffffff8084168061444c5761444c6145f1565b92169190910492915050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614490576144906145c2565b500290565b600063ffffffff808316818516818304811182151516156144b8576144b86145c2565b02949350505050565b600060ff821660ff84168160ff04811182151516156144e2576144e26145c2565b029392505050565b60006bffffffffffffffffffffffff808316818516818304811182151516156144b8576144b86145c2565b600082821015614527576145276145c2565b500390565b60006bffffffffffffffffffffffff83811690831681811015614551576145516145c2565b039392505050565b60005b8381101561457457818101518382015260200161455c565b83811115614583576000848401525b50505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145bb576145bb6145c2565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461230e57600080fdfe307866666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666a164736f6c6343000806000a", + Bin: "0x6101206040523480156200001257600080fd5b5060405162004c2d38038062004c2d8339810160408190526200003591620003bc565b80816001600160a01b0316634b4fd03b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200007057600080fd5b505afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab9190620003e3565b826001600160a01b031663ca30e6036040518163ffffffff1660e01b815260040160206040518083038186803b158015620000e557600080fd5b505afa158015620000fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001209190620003bc565b836001600160a01b031663b10b673c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200015a57600080fd5b505afa1580156200016f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001959190620003bc565b846001600160a01b0316636709d0e56040518163ffffffff1660e01b815260040160206040518083038186803b158015620001cf57600080fd5b505afa158015620001e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020a9190620003bc565b3380600081620002615760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b03848116919091179091558116156200029457620002948162000310565b505050836002811115620002ac57620002ac62000406565b60e0816002811115620002c357620002c362000406565b60f81b9052506001600160601b0319606093841b811660805291831b821660a052821b811660c052601680546001600160a01b0319163317905592901b9091166101005250620004359050565b6001600160a01b0381163314156200036b5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000258565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215620003cf57600080fd5b8151620003dc816200041c565b9392505050565b600060208284031215620003f657600080fd5b815160038110620003dc57600080fd5b634e487b7160e01b600052602160045260246000fd5b6001600160a01b03811681146200043257600080fd5b50565b60805160601c60a05160601c60c05160601c60e05160f81c6101005160601c614773620004ba6000396000818161011d015281816101b4015261022c0152600081816101fb01528181612ac70152818161315a0152818161331101526135b301526000610270015260006103a10152600081816103da01526105e901526147736000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80638da5cb5b116100b2578063b10b673c11610081578063ca30e60311610066578063ca30e603146103d8578063e3d0e712146103fe578063f2fde38b146104115761011b565b8063b10b673c1461039f578063b1dc65a4146103c55761011b565b80638da5cb5b146102fb578063a4c0ed3614610319578063aed2e9291461032c578063afcb95d7146103565761011b565b80635147cd59116100ee5780635147cd591461024e5780636709d0e51461026e57806379ba50971461029457806381ff70481461029e5761011b565b8063181f5a7714610160578063349e8cca146101b25780634b4fd03b146101f95780634ff597c114610227575b7f00000000000000000000000000000000000000000000000000000000000000003660008037600080366000845af43d6000803e80801561015b573d6000f35b3d6000fd5b61019c6040518060400160405280601481526020017f4b6565706572526567697374727920322e312e3000000000000000000000000081525081565b6040516101a9919061411a565b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a9565b7f00000000000000000000000000000000000000000000000000000000000000006040516101a9919061412d565b6101d47f000000000000000000000000000000000000000000000000000000000000000081565b61026161025c366004613f17565b610424565b6040516101a99190614147565b7f00000000000000000000000000000000000000000000000000000000000000006101d4565b61029c6104cf565b005b6102d8601254600e5463ffffffff6c0100000000000000000000000083048116937001000000000000000000000000000000009093041691565b6040805163ffffffff9485168152939092166020840152908201526060016101a9565b60005473ffffffffffffffffffffffffffffffffffffffff166101d4565b61029c610327366004613b01565b6105d1565b61033f61033a366004613f30565b6107ec565b6040805192151583526020830191909152016101a9565b600e54600f54604080516000815260208101939093527c010000000000000000000000000000000000000000000000000000000090910463ffffffff16908201526060016101a9565b7f00000000000000000000000000000000000000000000000000000000000000006101d4565b61029c6103d3366004613c2a565b610968565b7f00000000000000000000000000000000000000000000000000000000000000006101d4565b61029c61040c366004613b5d565b61152c565b61029c61041f366004613ae4565b612323565b6000818160045b600f8110156104b1577fff0000000000000000000000000000000000000000000000000000000000000082168382602081106104695761046961469e565b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461049f57506000949350505050565b806104a9816145d8565b91505061042b565b5081600f1a60038111156104c7576104c761466f565b949350505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610640576040517fc8bad78d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020811461067a576040517fdfe9309000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061068882840184613f17565b600081815260046020526040902054909150640100000000900463ffffffff908116146106e1576040517f9c0083a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008181526004602052604090206001015461071c9085906c0100000000000000000000000090046bffffffffffffffffffffffff16614441565b600082815260046020526040902060010180546bffffffffffffffffffffffff929092166c01000000000000000000000000027fffffffffffffffff000000000000000000000000ffffffffffffffffffffffff9092169190911790556015546107879085906143e5565b6015556040516bffffffffffffffffffffffff8516815273ffffffffffffffffffffffffffffffffffffffff86169082907fafd24114486da8ebfc32f3626dada8863652e187461aa74d4bfa7348915062039060200160405180910390a35050505050565b6000806107f7612337565b600f546e010000000000000000000000000000900460ff1615610846576040517f24522f3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600085815260046020908152604091829020825161010081018452815463ffffffff808216808452640100000000830482168487015268010000000000000000830460ff16151584880152690100000000000000000090920473ffffffffffffffffffffffffffffffffffffffff9081166060850181905260018601546bffffffffffffffffffffffff80821660808801526c0100000000000000000000000082041660a08701527801000000000000000000000000000000000000000000000000900490921660c085015260029094015490931660e08301528451601f8901859004850281018501909552878552909361095b93899089908190840183828082843760009201919091525061237192505050565b9250925050935093915050565b60005a6040805161012081018252600f5460ff808216835261010080830463ffffffff90811660208601526501000000000084048116958501959095526901000000000000000000830462ffffff1660608501526c01000000000000000000000000830461ffff1660808501526e0100000000000000000000000000008304821615801560a08601526f010000000000000000000000000000008404909216151560c085015270010000000000000000000000000000000083046bffffffffffffffffffffffff1660e08501527c010000000000000000000000000000000000000000000000000000000090920490931690820152919250610a96576040517f24522f3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526008602052604090205460ff16610adf576040517f1099ed7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b208a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061258592505050565b9050600081604001515167ffffffffffffffff811115610b4257610b426146cd565b604051908082528060200260200182016040528015610bfe57816020015b604080516101c081018252600060c0820181815260e08301829052610100830182905261012083018290526101408301829052610160830182905261018083018290526101a0830182905282526020808301829052928201819052606082018190526080820181905260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610b605790505b5090506000805b836040015151811015610eb3576004600085604001518381518110610c2c57610c2c61469e565b6020908102919091018101518252818101929092526040908101600020815161010081018352815463ffffffff8082168352640100000000820481169583019590955260ff6801000000000000000082041615159382019390935273ffffffffffffffffffffffffffffffffffffffff69010000000000000000009093048316606082015260018201546bffffffffffffffffffffffff80821660808401526c0100000000000000000000000082041660a08301527801000000000000000000000000000000000000000000000000900490931660c0840152600201541660e08201528351849083908110610d2357610d2361469e565b602002602001015160000181905250610d8885848381518110610d4857610d4861469e565b602002602001015160000151600001518660a001518481518110610d6e57610d6e61469e565b60200260200101515187600001518860200151600161266f565b838281518110610d9a57610d9a61469e565b6020026020010151604001906bffffffffffffffffffffffff1690816bffffffffffffffffffffffff1681525050610e4884604001518281518110610de157610de161469e565b602002602001015185608001518381518110610dff57610dff61469e565b6020026020010151858481518110610e1957610e1961469e565b602002602001015160000151868581518110610e3757610e3761469e565b6020026020010151604001516126b8565b838281518110610e5a57610e5a61469e565b60200260200101516020019015159081151581525050828181518110610e8257610e8261469e565b60200260200101516020015115610ea157610e9e6001836143bf565b91505b80610eab816145d8565b915050610c05565b5061ffff8116610ec7575050505050611522565b600e548d3514610f03576040517fdfdcf8e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8351610f1090600161441c565b60ff1689141580610f215750888714155b15610f58576040517f0244f71a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f688d8d8d8d8d8d8d8d612858565b60005b83604001515181101561117057828181518110610f8a57610f8a61469e565b6020026020010151602001511561115e57610fa3612ac1565b63ffffffff166004600086604001518481518110610fc357610fc361469e565b6020026020010151815260200190815260200160002060010160189054906101000a900463ffffffff1663ffffffff16141561102b576040517fb55ac75400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110918382815181106110405761104061469e565b60200260200101516000015160600151856060015183815181106110665761106661469e565b60200260200101518660a0015184815181106110845761108461469e565b6020026020010151612371565b8483815181106110a3576110a361469e565b60200260200101516060018584815181106110c0576110c061469e565b602002602001015160800182815250821515151581525050508281815181106110eb576110eb61469e565b602002602001015160800151866111029190614564565b955061110c612ac1565b60046000866040015184815181106111265761112661469e565b6020026020010151815260200190815260200160002060010160186101000a81548163ffffffff021916908363ffffffff1602179055505b80611168816145d8565b915050610f6b565b50835161117e90600161441c565b61118d9060ff1661044c6144a7565b61691461119b8d60106144a7565b5a6111a69089614564565b6111b091906143e5565b6111ba91906143e5565b6111c491906143e5565b94506116a86111d761ffff831687614468565b6111e191906143e5565b945060008060008060005b8760400151518110156113c45786818151811061120b5761120b61469e565b602002602001015160200151156113b2576112498a8960a0015183815181106112365761123661469e565b6020026020010151518b60000151612b86565b87828151811061125b5761125b61469e565b602002602001015160a00181815250506112b789896040015183815181106112855761128561469e565b602002602001015189848151811061129f5761129f61469e565b60200260200101518b600001518c602001518b612ba6565b90935091506112c68285614441565b93506112d28386614441565b94508681815181106112e6576112e661469e565b60200260200101516060015115158860400151828151811061130a5761130a61469e565b60200260200101517fad8cc9579b21dfe2c2f6ea35ba15b656e46b4f5b0cb424f52739b8ce5cac9c5b848661133f9190614441565b8a85815181106113515761135161469e565b6020026020010151608001518b868151811061136f5761136f61469e565b602002602001015160a001518d6080015187815181106113915761139161469e565b60200260200101516040516113a9949392919061429f565b60405180910390a35b806113bc816145d8565b9150506111ec565b505033600090815260086020526040902080548492506002906113fc9084906201000090046bffffffffffffffffffffffff16614441565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555080600f60000160108282829054906101000a90046bffffffffffffffffffffffff166114569190614441565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555060008f6001600381106114995761149961469e565b602002013560001c9050600060088264ffffffffff16901c905087610100015163ffffffff168163ffffffff16111561151857600f80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff8416021790555b5050505050505050505b5050505050505050565b611534612c99565b601f86511115611570576040517f25d0209c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff84166115aa576040517fe77dba5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845186511415806115c957506115c1846003614510565b60ff16865111155b15611600576040517f1d2d1c5800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f54600b547001000000000000000000000000000000009091046bffffffffffffffffffffffff169060005b816bffffffffffffffffffffffff1681101561169557611682600b82815481106116595761165961469e565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff168484612d1a565b508061168d816145d8565b91505061162d565b5060008060005b836bffffffffffffffffffffffff1681101561179e57600a81815481106116c5576116c561469e565b600091825260209091200154600b805473ffffffffffffffffffffffffffffffffffffffff909216945090829081106117005761170061469e565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff868116845260098352604080852080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001690559116808452600890925290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055915080611796816145d8565b91505061169c565b506117ab600a6000613726565b6117b7600b6000613726565b604080516080810182526000808252602082018190529181018290526060810182905290805b8c51811015611b3b57600960008e83815181106117fc576117fc61469e565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040016000205460ff1615611867576040517f77cea0fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052806001151581526020018260ff16815250600960008f84815181106118985761189861469e565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528181019290925260400160002082518154939092015160ff16610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092171790558b518c90829081106119405761194061469e565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff81166000908152600883526040908190208151608081018352905460ff80821615801584526101008304909116958301959095526bffffffffffffffffffffffff6201000082048116938301939093526e0100000000000000000000000000009004909116606082015294509250611a05576040517f6a7281ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001835260ff80821660208086019182526bffffffffffffffffffffffff808b166060880190815273ffffffffffffffffffffffffffffffffffffffff871660009081526008909352604092839020885181549551948a0151925184166e010000000000000000000000000000027fffffffffffff000000000000000000000000ffffffffffffffffffffffffffff939094166201000002929092167fffffffffffff000000000000000000000000000000000000000000000000ffff94909616610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009095169490941717919091169290921791909117905580611b33816145d8565b9150506117dd565b50508a51611b519150600a9060208d0190613744565b508851611b6590600b9060208c0190613744565b50600087806020019051810190611b7c9190613e27565b60125460c082015191925063ffffffff640100000000909104811691161015611bd1576040517f39abc10400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60125460e082015163ffffffff74010000000000000000000000000000000000000000909204821691161015611c33576040517f1fa9bdcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60125461010082015163ffffffff7801000000000000000000000000000000000000000000000000909204821691161015611c9a576040517fd1d5faa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518061012001604052808a60ff168152602001826000015163ffffffff168152602001826020015163ffffffff168152602001826060015162ffffff168152602001826080015161ffff168152602001600015158152602001600015158152602001866bffffffffffffffffffffffff168152602001600063ffffffff16815250600f60008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160056101000a81548163ffffffff021916908363ffffffff16021790555060608201518160000160096101000a81548162ffffff021916908362ffffff160217905550608082015181600001600c6101000a81548161ffff021916908361ffff16021790555060a082015181600001600e6101000a81548160ff02191690831515021790555060c082015181600001600f6101000a81548160ff02191690831515021790555060e08201518160000160106101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555061010082015181600001601c6101000a81548163ffffffff021916908363ffffffff1602179055509050506040518061016001604052808260a001516bffffffffffffffffffffffff16815260200182610160015173ffffffffffffffffffffffffffffffffffffffff168152602001601060010160009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16815260200182610180015173ffffffffffffffffffffffffffffffffffffffff168152602001826040015163ffffffff1681526020018260c0015163ffffffff168152602001601060020160089054906101000a900463ffffffff1663ffffffff1681526020016010600201600c9054906101000a900463ffffffff1663ffffffff168152602001601060020160109054906101000a900463ffffffff1663ffffffff1681526020018260e0015163ffffffff16815260200182610100015163ffffffff16815250601060008201518160000160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550602082015181600001600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550606082015181600101600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060808201518160020160006101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160020160046101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160020160086101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600201600c6101000a81548163ffffffff021916908363ffffffff1602179055506101008201518160020160106101000a81548163ffffffff021916908363ffffffff1602179055506101208201518160020160146101000a81548163ffffffff021916908363ffffffff1602179055506101408201518160020160186101000a81548163ffffffff021916908363ffffffff1602179055509050508061012001516013819055508061014001516014819055506000601060020160109054906101000a900463ffffffff169050612200612ac1565b601280547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000063ffffffff9384160217808255600192600c916122679185916c010000000000000000000000009004166143fd565b92506101000a81548163ffffffff021916908363ffffffff1602179055506122b146306010600201600c9054906101000a900463ffffffff1663ffffffff168f8f8f8f8f8f612f41565b600e819055507f1591690b8638f5fb2dbec82ac741805ac5da8b45dc5263f4875b0496fdce4e0581600e546010600201600c9054906101000a900463ffffffff168f8f8f8f8f8f60405161230d99989796959493929190614219565b60405180910390a1505050505050505050505050565b61232b612c99565b61233481612feb565b50565b321561236f576040517fb60ac5db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600f5460009081906f01000000000000000000000000000000900460ff16156123c6576040517f37ed32e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f80547fffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff166f010000000000000000000000000000001790555a90506000634585e33b60e01b8460405160240161241e919061411a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290517f79188d1600000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8716906379188d16906124f19088908590600401614200565b602060405180830381600087803b15801561250b57600080fd5b505af115801561251f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125439190613ce1565b92505a6125509083614564565b915050600f80547fffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff1690559094909350915050565b6125be6040518060c001604052806000815260200160008152602001606081526020016060815260200160608152602001606081525090565b600080600080600080878060200190518101906125db9190613f7c565b955095509550955095509550825184511415806125fa57508151845114155b8061260757508051845114155b1561263e576040517fb55ac75400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c0810182529687526020870195909552938501929092526060840152608083015260a082015292915050565b6000806126808689600001516130e1565b905060008061269b8a8a63ffffffff16858a8a60018b613125565b90925090506126aa8183614441565b9a9950505050505050505050565b6000806126c486610424565b905060008160038111156126da576126da61466f565b14806126f7575060038160038111156126f5576126f561466f565b145b15612734576000858060200190518101906127129190613d1c565b905061271f878287613504565b61272e576000925050506104c7565b506127a2565b60018160038111156127485761274861466f565b141561276d576000858060200190518101906127649190613db5565b9050600161271f565b60028160038111156127815761278161466f565b141561279d576000858060200190518101906127649190613d73565b600080fd5b6127aa612ac1565b846020015163ffffffff16116127ef5760405186907fd84831b6a3a7fbd333f42fe7f9104a139da6cca4cc1507aef4ddad79b31d017f90600090a260009150506104c7565b826bffffffffffffffffffffffff168460a001516bffffffffffffffffffffffff16101561284c5760405186907f7895fdfe292beab0842d5beccd078e85296b9e17a30eaee4c261a2696b84eb9690600090a260009150506104c7565b50600195945050505050565b6000878760405161286a9291906140c9565b604051908190038120612881918b90602001614100565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201208383019092526000808452908301819052909250906000805b88811015612a58576001858783602081106128ed576128ed61469e565b6128fa91901a601b61441c565b8c8c8581811061290c5761290c61469e565b905060200201358b8b868181106129255761292561469e565b9050602002013560405160008152602001604052604051612962949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015612984573d6000803e3d6000fd5b5050604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081015173ffffffffffffffffffffffffffffffffffffffff811660009081526009602090815290849020838501909452925460ff8082161515808552610100909204169383019390935290955093509050612a32576040517f0f4c073700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826020015160080260ff166001901b840193508080612a50906145d8565b9150506128d0565b50827e01010101010101010101010101010101010101010101010101010101010101841614612ab3576040517fc103be2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050505050565b600060017f00000000000000000000000000000000000000000000000000000000000000006002811115612af757612af761466f565b1415612b8157606473ffffffffffffffffffffffffffffffffffffffff1663a3b1b31d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612b4457600080fd5b505afa158015612b58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b7c9190613d03565b905090565b504390565b6000612b9283836130e1565b905080841015612b9f5750825b9392505050565b600080612bc18887608001518860a001518888886001613125565b90925090506000612bd28284614441565b600089815260046020526040902060010180549192508291600c90612c169084906c0100000000000000000000000090046bffffffffffffffffffffffff1661457b565b82546101009290920a6bffffffffffffffffffffffff81810219909316918316021790915560008a815260046020526040812060010180548594509092612c5f91859116614441565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555050965096945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461236f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161054c565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602090815260408083208151608081018352905460ff80821615158352610100820416938201939093526bffffffffffffffffffffffff6201000084048116928201929092526e01000000000000000000000000000090920416606082018190528290612da5908661457b565b90506000612db3858361447c565b90508083604001818151612dc79190614441565b6bffffffffffffffffffffffff9081169091528716606085015250612dec8582614539565b612df6908361457b565b60118054600090612e169084906bffffffffffffffffffffffff16614441565b825461010092830a6bffffffffffffffffffffffff81810219909216928216029190911790925573ffffffffffffffffffffffffffffffffffffffff999099166000908152600860209081526040918290208751815492890151938901516060909901517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009093169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff161760ff909316909b02919091177fffffffffffff000000000000000000000000000000000000000000000000ffff1662010000878416027fffffffffffff000000000000000000000000ffffffffffffffffffffffffffff16176e010000000000000000000000000000919092160217909755509095945050505050565b6000808a8a8a8a8a8a8a8a8a604051602001612f659998979695949392919061415b565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905280516020909101207dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e01000000000000000000000000000000000000000000000000000000000000179b9a5050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff811633141561306b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161054c565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60006130f463ffffffff841660146144a7565b6130ff83600161441c565b61310e9060ff16611d4c6144a7565b61311b90620138806143e5565b612b9f91906143e5565b6000806000896080015161ffff168761313e91906144a7565b905083801561314c5750803a105b1561315457503a5b600060027f0000000000000000000000000000000000000000000000000000000000000000600281111561318a5761318a61466f565b141561330d5760408051600081526020810190915285156131e95760003660405180608001604052806048815260200161471f604891396040516020016131d3939291906140d9565b6040516020818303038152906040529050613265565b601254613219907801000000000000000000000000000000000000000000000000900463ffffffff1660046144e4565b63ffffffff1667ffffffffffffffff811115613237576132376146cd565b6040519080825280601f01601f191660200182016040528015613261576020820181803683370190505b5090505b6040517f49948e0e00000000000000000000000000000000000000000000000000000000815273420000000000000000000000000000000000000f906349948e0e906132b590849060040161411a565b60206040518083038186803b1580156132cd57600080fd5b505afa1580156132e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133059190613d03565b9150506133c9565b60017f000000000000000000000000000000000000000000000000000000000000000060028111156133415761334161466f565b14156133c957606c73ffffffffffffffffffffffffffffffffffffffff1663c6f7de0e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561338e57600080fd5b505afa1580156133a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133c69190613d03565b90505b846133e557808b6080015161ffff166133e291906144a7565b90505b6133f361ffff871682614468565b9050600087826134038c8e6143e5565b61340d90866144a7565b61341791906143e5565b61342990670de0b6b3a76400006144a7565b6134339190614468565b905060008c6040015163ffffffff1664e8d4a5100061345291906144a7565b898e6020015163ffffffff16858f8861346b91906144a7565b61347591906143e5565b61348390633b9aca006144a7565b61348d91906144a7565b6134979190614468565b6134a191906143e5565b90506b033b2e3c9fd0803ce80000006134ba82846143e5565b11156134f2576040517f2ad7547a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b909c909b509950505050505050505050565b60008160c0015163ffffffff16836000015163ffffffff1610156135555760405184907f5aa44821f7938098502bff537fbbdc9aaaa2fa655c10740646fce27e54987a8990600090a2506000612b9f565b6020830151835161356b9063ffffffff166135ad565b146135a35760405184907f561ff77e59394941a01a456497a9418dea82e2a39abb3ecebfb1cef7e0bfdc1390600090a2506000612b9f565b5060019392505050565b600060017f000000000000000000000000000000000000000000000000000000000000000060028111156135e3576135e361466f565b141561371c576000606473ffffffffffffffffffffffffffffffffffffffff1663a3b1b31d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561363257600080fd5b505afa158015613646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061366a9190613d03565b9050808310158061368557506101006136838483614564565b115b156136935750600092915050565b6040517f2b407a8200000000000000000000000000000000000000000000000000000000815260048101849052606490632b407a829060240160206040518083038186803b1580156136e457600080fd5b505afa1580156136f8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b9f9190613d03565b504090565b919050565b508054600082559060005260206000209081019061233491906137ce565b8280548282559060005260206000209081019282156137be579160200282015b828111156137be57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190613764565b506137ca9291506137ce565b5090565b5b808211156137ca57600081556001016137cf565b8051613721816146fc565b600082601f8301126137ff57600080fd5b8135602061381461380f83614355565b614306565b80838252828201915082860187848660051b890101111561383457600080fd5b60005b8581101561385c57813561384a816146fc565b84529284019290840190600101613837565b5090979650505050505050565b60008083601f84011261387b57600080fd5b50813567ffffffffffffffff81111561389357600080fd5b6020830191508360208260051b85010111156138ae57600080fd5b9250929050565b600082601f8301126138c657600080fd5b815160206138d661380f83614355565b80838252828201915082860187848660051b89010111156138f657600080fd5b60005b8581101561385c57815167ffffffffffffffff81111561391857600080fd5b8801603f81018a1361392957600080fd5b85810151604061393b61380f83614379565b8281528c8284860101111561394f57600080fd5b61395e838a83018487016145a8565b875250505092840192908401906001016138f9565b600082601f83011261398457600080fd5b8151602061399461380f83614355565b80838252828201915082860187848660051b89010111156139b457600080fd5b60005b8581101561385c578151845292840192908401906001016139b7565b60008083601f8401126139e557600080fd5b50813567ffffffffffffffff8111156139fd57600080fd5b6020830191508360208285010111156138ae57600080fd5b600082601f830112613a2657600080fd5b8135613a3461380f82614379565b818152846020838601011115613a4957600080fd5b816020850160208301376000918101602001919091529392505050565b805161ffff8116811461372157600080fd5b805162ffffff8116811461372157600080fd5b805163ffffffff8116811461372157600080fd5b803567ffffffffffffffff8116811461372157600080fd5b803560ff8116811461372157600080fd5b80516bffffffffffffffffffffffff8116811461372157600080fd5b600060208284031215613af657600080fd5b8135612b9f816146fc565b60008060008060608587031215613b1757600080fd5b8435613b22816146fc565b935060208501359250604085013567ffffffffffffffff811115613b4557600080fd5b613b51878288016139d3565b95989497509550505050565b60008060008060008060c08789031215613b7657600080fd5b863567ffffffffffffffff80821115613b8e57600080fd5b613b9a8a838b016137ee565b97506020890135915080821115613bb057600080fd5b613bbc8a838b016137ee565b9650613bca60408a01613ab7565b95506060890135915080821115613be057600080fd5b613bec8a838b01613a15565b9450613bfa60808a01613a9f565b935060a0890135915080821115613c1057600080fd5b50613c1d89828a01613a15565b9150509295509295509295565b60008060008060008060008060e0898b031215613c4657600080fd5b606089018a811115613c5757600080fd5b8998503567ffffffffffffffff80821115613c7157600080fd5b613c7d8c838d016139d3565b909950975060808b0135915080821115613c9657600080fd5b613ca28c838d01613869565b909750955060a08b0135915080821115613cbb57600080fd5b50613cc88b828c01613869565b999c989b50969995989497949560c00135949350505050565b600060208284031215613cf357600080fd5b81518015158114612b9f57600080fd5b600060208284031215613d1557600080fd5b5051919050565b600060408284031215613d2e57600080fd5b6040516040810181811067ffffffffffffffff82111715613d5157613d516146cd565b604052613d5d83613a8b565b8152602083015160208201528091505092915050565b600060208284031215613d8557600080fd5b6040516020810181811067ffffffffffffffff82111715613da857613da86146cd565b6040529151825250919050565b600060808284031215613dc757600080fd5b6040516080810181811067ffffffffffffffff82111715613dea57613dea6146cd565b604052613df683613a8b565b8152613e0460208401613a8b565b602082015260408301516040820152606083015160608201528091505092915050565b60006101a08284031215613e3a57600080fd5b613e426142dc565b613e4b83613a8b565b8152613e5960208401613a8b565b6020820152613e6a60408401613a8b565b6040820152613e7b60608401613a78565b6060820152613e8c60808401613a66565b6080820152613e9d60a08401613ac8565b60a0820152613eae60c08401613a8b565b60c0820152613ebf60e08401613a8b565b60e0820152610100613ed2818501613a8b565b9082015261012083810151908201526101408084015190820152610160613efa8185016137e3565b90820152610180613f0c8482016137e3565b908201529392505050565b600060208284031215613f2957600080fd5b5035919050565b600080600060408486031215613f4557600080fd5b83359250602084013567ffffffffffffffff811115613f6357600080fd5b613f6f868287016139d3565b9497909650939450505050565b60008060008060008060c08789031215613f9557600080fd5b8651955060208701519450604087015167ffffffffffffffff80821115613fbb57600080fd5b613fc78a838b01613973565b95506060890151915080821115613fdd57600080fd5b613fe98a838b01613973565b94506080890151915080821115613fff57600080fd5b61400b8a838b016138b5565b935060a089015191508082111561402157600080fd5b50613c1d89828a016138b5565b600081518084526020808501945080840160005b8381101561407457815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614042565b509495945050505050565b600081518084526140978160208601602086016145a8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8183823760009101908152919050565b8284823760008382016000815283516140f68183602088016145a8565b0195945050505050565b828152608081016060836020840137600081529392505050565b602081526000612b9f602083018461407f565b60208101600383106141415761414161466f565b91905290565b60208101600483106141415761414161466f565b60006101208b835273ffffffffffffffffffffffffffffffffffffffff8b16602084015267ffffffffffffffff808b1660408501528160608501526141a28285018b61402e565b915083820360808501526141b6828a61402e565b915060ff881660a085015283820360c08501526141d3828861407f565b90861660e085015283810361010085015290506141f0818561407f565b9c9b505050505050505050505050565b8281526040602082015260006104c7604083018461407f565b600061012063ffffffff808d1684528b6020850152808b166040850152508060608401526142498184018a61402e565b9050828103608084015261425d818961402e565b905060ff871660a084015282810360c084015261427a818761407f565b905067ffffffffffffffff851660e08401528281036101008401526141f0818561407f565b6bffffffffffffffffffffffff851681528360208201528260408201526080606082015260006142d2608083018461407f565b9695505050505050565b6040516101a0810167ffffffffffffffff81118282101715614300576143006146cd565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561434d5761434d6146cd565b604052919050565b600067ffffffffffffffff82111561436f5761436f6146cd565b5060051b60200190565b600067ffffffffffffffff821115614393576143936146cd565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600061ffff8083168185168083038211156143dc576143dc614611565b01949350505050565b600082198211156143f8576143f8614611565b500190565b600063ffffffff8083168185168083038211156143dc576143dc614611565b600060ff821660ff84168060ff0382111561443957614439614611565b019392505050565b60006bffffffffffffffffffffffff8083168185168083038211156143dc576143dc614611565b60008261447757614477614640565b500490565b60006bffffffffffffffffffffffff8084168061449b5761449b614640565b92169190910492915050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144df576144df614611565b500290565b600063ffffffff8083168185168183048111821515161561450757614507614611565b02949350505050565b600060ff821660ff84168160ff048111821515161561453157614531614611565b029392505050565b60006bffffffffffffffffffffffff8083168185168183048111821515161561450757614507614611565b60008282101561457657614576614611565b500390565b60006bffffffffffffffffffffffff838116908316818110156145a0576145a0614611565b039392505050565b60005b838110156145c35781810151838201526020016145ab565b838111156145d2576000848401525b50505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561460a5761460a614611565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461233457600080fdfe307866666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666a164736f6c6343000806000a", } var KeeperRegistryABI = KeeperRegistryMetaData.ABI diff --git a/core/gethwrappers/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/core/gethwrappers/generation/generated-wrapper-dependency-versions-do-not-edit.txt index 37771caa39b..fa5b4677b16 100644 --- a/core/gethwrappers/generation/generated-wrapper-dependency-versions-do-not-edit.txt +++ b/core/gethwrappers/generation/generated-wrapper-dependency-versions-do-not-edit.txt @@ -21,13 +21,13 @@ keeper_registrar_wrapper1_2: ../../contracts/solc/v0.8.6/KeeperRegistrar.abi ../ keeper_registrar_wrapper2_0: ../../contracts/solc/v0.8.6/KeeperRegistrar2_0.abi ../../contracts/solc/v0.8.6/KeeperRegistrar2_0.bin 647f125c2f0dafabcdc545cb77b15dc2ec3ea9429357806813179b1fd555c2d2 keeper_registry_logic1_3: ../../contracts/solc/v0.8.6/KeeperRegistryLogic1_3.abi ../../contracts/solc/v0.8.6/KeeperRegistryLogic1_3.bin e1bee66ce7cd0085469f923c46f0eddb58fd45dec207def1bb383b37e413a6ca keeper_registry_logic2_0: ../../contracts/solc/v0.8.6/KeeperRegistryLogic2_0.abi ../../contracts/solc/v0.8.6/KeeperRegistryLogic2_0.bin ba5c23c495c4e1e487560ed56d917632f0047266c06fda4af9edbcda5aca99fa -keeper_registry_logic_a_wrapper_2_1: ../../contracts/solc/v0.8.6/KeeperRegistryLogicA2_1.abi ../../contracts/solc/v0.8.6/KeeperRegistryLogicA2_1.bin 6dde69fe08d1948dba69abbeb98d341f242ef729241f53a2c5207aa5bae7367b -keeper_registry_logic_b_wrapper_2_1: ../../contracts/solc/v0.8.6/KeeperRegistryLogicB2_1.abi ../../contracts/solc/v0.8.6/KeeperRegistryLogicB2_1.bin f9c0d36b9bdebfb926af0cda3719a05c99e0589ad454542fa3d6c7758b15bcd1 +keeper_registry_logic_a_wrapper_2_1: ../../contracts/solc/v0.8.6/KeeperRegistryLogicA2_1.abi ../../contracts/solc/v0.8.6/KeeperRegistryLogicA2_1.bin 13ed9517aaf77a036ca84972a5eb7709828972fd13339127f8176247623de5ba +keeper_registry_logic_b_wrapper_2_1: ../../contracts/solc/v0.8.6/KeeperRegistryLogicB2_1.abi ../../contracts/solc/v0.8.6/KeeperRegistryLogicB2_1.bin 18ab8f8c5ab175c0e6f50719d9c2e22dedab66851e86c44bcfebb8f00c091460 keeper_registry_wrapper1_1: ../../contracts/solc/v0.7/KeeperRegistry1_1.abi ../../contracts/solc/v0.7/KeeperRegistry1_1.bin 6ce079f2738f015f7374673a2816e8e9787143d00b780ea7652c8aa9ad9e1e20 keeper_registry_wrapper1_2: ../../contracts/solc/v0.8.6/KeeperRegistry1_2.abi ../../contracts/solc/v0.8.6/KeeperRegistry1_2.bin 41faf687ad6a5171cc91e627244d0b3d6f62d393c418ca22d4ba7fc921fd32c6 keeper_registry_wrapper1_3: ../../contracts/solc/v0.8.6/KeeperRegistry1_3.abi ../../contracts/solc/v0.8.6/KeeperRegistry1_3.bin 5e1414eacbc1880b7349a4f253b7eca176f7f6300ef3cd834c493ce795a17e25 keeper_registry_wrapper2_0: ../../contracts/solc/v0.8.6/KeeperRegistry2_0.abi ../../contracts/solc/v0.8.6/KeeperRegistry2_0.bin c32dea7d5ef66b7c58ddc84ddf69aa44df1b3ae8601fbc271c95be4ff5853056 -keeper_registry_wrapper_2_1: ../../contracts/solc/v0.8.6/KeeperRegistry2_1.abi ../../contracts/solc/v0.8.6/KeeperRegistry2_1.bin 9c7b672ab1ff3d3b84d72511e545f8a0e40f4e680cbc013a536cbd5c94ef5a26 +keeper_registry_wrapper_2_1: ../../contracts/solc/v0.8.6/KeeperRegistry2_1.abi ../../contracts/solc/v0.8.6/KeeperRegistry2_1.bin 017a1b51d49df747eff944a379311f7dec209e79430f5c1766cfcb9d835f8a33 keepers_vrf_consumer: ../../contracts/solc/v0.8.6/KeepersVRFConsumer.abi ../../contracts/solc/v0.8.6/KeepersVRFConsumer.bin fa75572e689c9e84705c63e8dbe1b7b8aa1a8fe82d66356c4873d024bb9166e8 llo_feeds: ../../contracts/solc/v0.8.16/VerifierProxy.abi ../../contracts/solc/v0.8.16/VerifierProxy.bin 3b69ffe9c694e8551b5375c02b9e960adc985e2390566740e7fea70c89e436f1 llo_feeds_test: ../../contracts/solc/v0.8.16/ExposedVerifier.abi ../../contracts/solc/v0.8.16/ExposedVerifier.bin 6932cea8f2738e874d3ec9e1a4231d2421704030c071d9e15dd2f7f08482c246