diff --git a/.changeset/thick-apes-reply.md b/.changeset/thick-apes-reply.md new file mode 100644 index 00000000000..83a0232d7bb --- /dev/null +++ b/.changeset/thick-apes-reply.md @@ -0,0 +1,5 @@ +--- +"chainlink": minor +--- + +bug fixes in s_reserveAmount accounting diff --git a/contracts/.changeset/tricky-pigs-shout.md b/contracts/.changeset/tricky-pigs-shout.md new file mode 100644 index 00000000000..095fc06701c --- /dev/null +++ b/contracts/.changeset/tricky-pigs-shout.md @@ -0,0 +1,5 @@ +--- +"@chainlink/contracts": minor +--- + +bug fixes in s_reserveAmount accounting diff --git a/contracts/src/v0.8/automation/dev/test/AutomationRegistry2_3.t.sol b/contracts/src/v0.8/automation/dev/test/AutomationRegistry2_3.t.sol index f81d75a949e..7a33b9b9746 100644 --- a/contracts/src/v0.8/automation/dev/test/AutomationRegistry2_3.t.sol +++ b/contracts/src/v0.8/automation/dev/test/AutomationRegistry2_3.t.sol @@ -1,8 +1,10 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity 0.8.19; +import {Vm} from "forge-std/Test.sol"; import {BaseTest} from "./BaseTest.t.sol"; import {AutomationRegistryBase2_3 as AutoBase} from "../v2_3/AutomationRegistryBase2_3.sol"; +import {AutomationRegistrar2_3 as Registrar} from "../v2_3/AutomationRegistrar2_3.sol"; import {IAutomationRegistryMaster2_3 as Registry, AutomationRegistryBase2_3} from "../interfaces/v2_3/IAutomationRegistryMaster2_3.sol"; import {ChainModuleBase} from "../../chains/ChainModuleBase.sol"; import {IERC20} from "../../../vendor/openzeppelin-solidity/v4.8.3/contracts/token/ERC20/IERC20.sol"; @@ -570,7 +572,6 @@ contract SetConfig is SetUp { minSpend: 100_000 }); - bytes memory onchainConfigBytesWithBilling = abi.encode(cfg, billingTokens, billingConfigs); // deploy registry with OFF_CHAIN payout mode registry = deployRegistry(AutoBase.PayoutMode.OFF_CHAIN); @@ -587,6 +588,109 @@ contract SetConfig is SetUp { ); } + function testSetConfigWithNewTransmittersSuccess() public { + registry = deployRegistry(AutoBase.PayoutMode.OFF_CHAIN); + + (uint32 configCount, uint32 blockNumber, ) = registry.latestConfigDetails(); + assertEq(configCount, 0); + + address billingTokenAddress = address(0x1111111111111111111111111111111111111111); + address[] memory billingTokens = new address[](1); + billingTokens[0] = billingTokenAddress; + + AutomationRegistryBase2_3.BillingConfig[] memory billingConfigs = new AutomationRegistryBase2_3.BillingConfig[](1); + billingConfigs[0] = AutomationRegistryBase2_3.BillingConfig({ + gasFeePPB: 5_000, + flatFeeMilliCents: 20_000, + priceFeed: 0x2222222222222222222222222222222222222222, + fallbackPrice: 2_000_000_000, // $20 + minSpend: 100_000 + }); + + bytes memory onchainConfigBytes = abi.encode(cfg); + + bytes32 configDigest = _configDigestFromConfigData( + block.chainid, + address(registry), + ++configCount, + SIGNERS, + TRANSMITTERS, + F, + onchainConfigBytes, + OFFCHAIN_CONFIG_VERSION, + offchainConfigBytes + ); + + vm.expectEmit(); + emit ConfigSet( + blockNumber, + configDigest, + configCount, + SIGNERS, + TRANSMITTERS, + F, + onchainConfigBytes, + OFFCHAIN_CONFIG_VERSION, + offchainConfigBytes + ); + + registry.setConfigTypeSafe( + SIGNERS, + TRANSMITTERS, + F, + cfg, + OFFCHAIN_CONFIG_VERSION, + offchainConfigBytes, + billingTokens, + billingConfigs + ); + + (, , address[] memory signers, address[] memory transmitters, ) = registry.getState(); + assertEq(signers, SIGNERS); + assertEq(transmitters, TRANSMITTERS); + + (configCount, blockNumber, ) = registry.latestConfigDetails(); + configDigest = _configDigestFromConfigData( + block.chainid, + address(registry), + ++configCount, + SIGNERS, + NEW_TRANSMITTERS, + F, + onchainConfigBytes, + OFFCHAIN_CONFIG_VERSION, + offchainConfigBytes + ); + + vm.expectEmit(); + emit ConfigSet( + blockNumber, + configDigest, + configCount, + SIGNERS, + NEW_TRANSMITTERS, + F, + onchainConfigBytes, + OFFCHAIN_CONFIG_VERSION, + offchainConfigBytes + ); + + registry.setConfigTypeSafe( + SIGNERS, + NEW_TRANSMITTERS, + F, + cfg, + OFFCHAIN_CONFIG_VERSION, + offchainConfigBytes, + billingTokens, + billingConfigs + ); + + (, , signers, transmitters, ) = registry.getState(); + assertEq(signers, SIGNERS); + assertEq(transmitters, NEW_TRANSMITTERS); + } + function _configDigestFromConfigData( uint256 chainId, address contractAddress, @@ -619,8 +723,11 @@ contract SetConfig is SetUp { } } +// allow NOPs to withdraw balances made before disableOffchainNOPsOffchain is called contract NOPsSettlement is SetUp { event NOPsSettledOffchain(address[] payees, uint256[] payments); + event FundsWithdrawn(uint256 indexed id, uint256 amount, address to); + event PaymentWithdrawn(address indexed transmitter, uint256 indexed amount, address indexed to, address payee); function testSettleNOPsOffchainRevertDueToUnauthorizedCaller() public { (Registry registry, ) = deployAndConfigureRegistryAndRegistrar(AutoBase.PayoutMode.ON_CHAIN); @@ -667,29 +774,7 @@ contract NOPsSettlement is SetUp { registry.addFunds(id, 1e20); // manually create a transmit so transmitters earn some rewards - AutoBase.Report memory report; - { - uint256[] memory upkeepIds = new uint256[](1); - uint256[] memory gasLimits = new uint256[](1); - bytes[] memory performDatas = new bytes[](1); - bytes[] memory triggers = new bytes[](1); - upkeepIds[0] = id; - gasLimits[0] = 1000000; - triggers[0] = _encodeConditionalTrigger( - AutoBase.ConditionalTrigger(uint32(block.number - 1), blockhash(block.number - 1)) - ); - report = AutoBase.Report(uint256(1000000000), uint256(2000000000), upkeepIds, gasLimits, triggers, performDatas); - } - bytes memory reportBytes = _encodeReport(report); - (, , bytes32 configDigest) = registry.latestConfigDetails(); - bytes32[3] memory reportContext = [configDigest, configDigest, configDigest]; - uint256[] memory signerPKs = new uint256[](2); - signerPKs[0] = SIGNING_KEY0; - signerPKs[1] = SIGNING_KEY1; - (bytes32[] memory rs, bytes32[] memory ss, bytes32 vs) = _signReport(reportBytes, reportContext, signerPKs); - - vm.startPrank(TRANSMITTERS[0]); - registry.transmit(reportContext, reportBytes, rs, ss, vs); + _transmit(id, registry); // verify transmitters have positive balances uint256[] memory payments = new uint256[](TRANSMITTERS.length); @@ -711,13 +796,108 @@ contract NOPsSettlement is SetUp { // verify that transmitters balance has been zeroed out for (uint256 i = 0; i < TRANSMITTERS.length; i++) { - (bool active, uint8 index, uint96 balance, uint96 lastCollected, ) = registry.getTransmitterInfo(TRANSMITTERS[i]); + (bool active, uint8 index, uint96 balance, , ) = registry.getTransmitterInfo(TRANSMITTERS[i]); assertTrue(active); assertEq(i, index); assertEq(0, balance); } } + function testSettleNOPsOffchainForDeactivatedTransmittersSuccess() public { + // deploy and configure a registry with OFF_CHAIN payout + (Registry registry, Registrar registrar) = deployAndConfigureRegistryAndRegistrar(AutoBase.PayoutMode.OFF_CHAIN); + + // register an upkeep and add funds + uint256 id = registry.registerUpkeep(address(TARGET1), 1000000, UPKEEP_ADMIN, 0, address(usdToken), "", "", ""); + _mintERC20(UPKEEP_ADMIN, 1e20); + vm.startPrank(UPKEEP_ADMIN); + usdToken.approve(address(registry), 1e20); + registry.addFunds(id, 1e20); + + // manually create a transmit so TRANSMITTERS earn some rewards + _transmit(id, registry); + + // TRANSMITTERS have positive balance now + // configure the registry to use NEW_TRANSMITTERS + _configureWithNewTransmitters(registry, registrar); + + _transmit(id, registry); + + // verify all transmitters have positive balances + address[] memory expectedPayees = new address[](6); + uint256[] memory expectedPayments = new uint256[](6); + for (uint256 i = 0; i < NEW_TRANSMITTERS.length; i++) { + (bool active, uint8 index, uint96 balance, uint96 lastCollected, address payee) = registry.getTransmitterInfo( + NEW_TRANSMITTERS[i] + ); + assertTrue(active); + assertEq(i, index); + assertTrue(lastCollected > 0); + expectedPayments[i] = balance; + expectedPayees[i] = payee; + } + for (uint256 i = 2; i < TRANSMITTERS.length; i++) { + (bool active, uint8 index, uint96 balance, uint96 lastCollected, address payee) = registry.getTransmitterInfo( + TRANSMITTERS[i] + ); + assertFalse(active); + assertEq(i, index); + assertTrue(balance > 0); + assertTrue(lastCollected > 0); + expectedPayments[2 + i] = balance; + expectedPayees[2 + i] = payee; + } + + // verify offchain settlement will emit NOPs' balances + vm.startPrank(FINANCE_ADMIN); + + // simply expectEmit won't work here because s_deactivatedTransmitters is an enumerable set so the order of these + // deactivated transmitters is not guaranteed. To handle this, we record logs and decode data field manually. + vm.recordLogs(); + registry.settleNOPsOffchain(); + Vm.Log[] memory entries = vm.getRecordedLogs(); + + assertEq(entries.length, 1); + Vm.Log memory l = entries[0]; + assertEq(l.topics[0], keccak256("NOPsSettledOffchain(address[],uint256[])")); + (address[] memory actualPayees, uint256[] memory actualPayments) = abi.decode(l.data, (address[], uint256[])); + assertEq(actualPayees.length, 6); + assertEq(actualPayments.length, 6); + + // first 4 payees and payments are for NEW_TRANSMITTERS and they are ordered. + for (uint256 i = 0; i < NEW_TRANSMITTERS.length; i++) { + assertEq(actualPayees[i], expectedPayees[i]); + assertEq(actualPayments[i], expectedPayments[i]); + } + + // the last 2 payees and payments for TRANSMITTERS[2] and TRANSMITTERS[3] and they are not ordered + assertTrue( + (actualPayments[5] == expectedPayments[5] && + actualPayees[5] == expectedPayees[5] && + actualPayments[4] == expectedPayments[4] && + actualPayees[4] == expectedPayees[4]) || + (actualPayments[5] == expectedPayments[4] && + actualPayees[5] == expectedPayees[4] && + actualPayments[4] == expectedPayments[5] && + actualPayees[4] == expectedPayees[5]) + ); + + // verify that new transmitters balance has been zeroed out + for (uint256 i = 0; i < NEW_TRANSMITTERS.length; i++) { + (bool active, uint8 index, uint96 balance, , ) = registry.getTransmitterInfo(NEW_TRANSMITTERS[i]); + assertTrue(active); + assertEq(i, index); + assertEq(0, balance); + } + // verify that deactivated transmitters (TRANSMITTERS[2] and TRANSMITTERS[3]) balance has been zeroed out + for (uint256 i = 2; i < TRANSMITTERS.length; i++) { + (bool active, uint8 index, uint96 balance, , ) = registry.getTransmitterInfo(TRANSMITTERS[i]); + assertFalse(active); + assertEq(i, index); + assertEq(0, balance); + } + } + function testDisableOffchainPaymentsRevertDueToUnauthorizedCaller() public { (Registry registry, ) = deployAndConfigureRegistryAndRegistrar(AutoBase.PayoutMode.OFF_CHAIN); @@ -734,6 +914,176 @@ contract NOPsSettlement is SetUp { assertEq(uint8(AutoBase.PayoutMode.ON_CHAIN), registry.getPayoutMode()); } + + function testSinglePerformAndNodesCanWithdrawOnchain() public { + // deploy and configure a registry with OFF_CHAIN payout + (Registry registry, ) = deployAndConfigureRegistryAndRegistrar(AutoBase.PayoutMode.OFF_CHAIN); + + // register an upkeep and add funds + uint256 id = registry.registerUpkeep(address(TARGET1), 1000000, UPKEEP_ADMIN, 0, address(usdToken), "", "", ""); + _mintERC20(UPKEEP_ADMIN, 1e20); + vm.startPrank(UPKEEP_ADMIN); + usdToken.approve(address(registry), 1e20); + registry.addFunds(id, 1e20); + + // manually create a transmit so transmitters earn some rewards + _transmit(id, registry); + + // disable offchain payments + _mintLink(address(registry), 1e19); + vm.prank(registry.owner()); + registry.disableOffchainPayments(); + + // payees should be able to withdraw onchain + for (uint256 i = 0; i < TRANSMITTERS.length; i++) { + (, , uint96 balance, , address payee) = registry.getTransmitterInfo(TRANSMITTERS[i]); + vm.prank(payee); + vm.expectEmit(); + emit PaymentWithdrawn(TRANSMITTERS[i], balance, payee, payee); + registry.withdrawPayment(TRANSMITTERS[i], payee); + } + + // allow upkeep admin to withdraw funds + vm.startPrank(UPKEEP_ADMIN); + registry.cancelUpkeep(id); + vm.roll(100 + block.number); + vm.expectEmit(); + // the upkeep spent less than minimum spending limit so upkeep admin can only withdraw upkeep balance - min spend value + emit FundsWithdrawn(id, 9.9e19, UPKEEP_ADMIN); + registry.withdrawFunds(id, UPKEEP_ADMIN); + } + + function testMultiplePerformsAndNodesCanWithdrawOnchain() public { + // deploy and configure a registry with OFF_CHAIN payout + (Registry registry, ) = deployAndConfigureRegistryAndRegistrar(AutoBase.PayoutMode.OFF_CHAIN); + + // register an upkeep and add funds + uint256 id = registry.registerUpkeep(address(TARGET1), 1000000, UPKEEP_ADMIN, 0, address(usdToken), "", "", ""); + _mintERC20(UPKEEP_ADMIN, 1e20); + vm.startPrank(UPKEEP_ADMIN); + usdToken.approve(address(registry), 1e20); + registry.addFunds(id, 1e20); + + // manually call transmit so transmitters earn some rewards + for (uint256 i = 0; i < 50; i++) { + vm.roll(100 + block.number); + _transmit(id, registry); + } + + // disable offchain payments + _mintLink(address(registry), 1e19); + vm.prank(registry.owner()); + registry.disableOffchainPayments(); + + // manually call transmit after offchain payment is disabled + for (uint256 i = 0; i < 50; i++) { + vm.roll(100 + block.number); + _transmit(id, registry); + } + + // payees should be able to withdraw onchain + for (uint256 i = 0; i < TRANSMITTERS.length; i++) { + (, , uint96 balance, , address payee) = registry.getTransmitterInfo(TRANSMITTERS[i]); + vm.prank(payee); + vm.expectEmit(); + emit PaymentWithdrawn(TRANSMITTERS[i], balance, payee, payee); + registry.withdrawPayment(TRANSMITTERS[i], payee); + } + + // allow upkeep admin to withdraw funds + vm.startPrank(UPKEEP_ADMIN); + registry.cancelUpkeep(id); + vm.roll(100 + block.number); + uint256 balance = registry.getBalance(id); + vm.expectEmit(); + emit FundsWithdrawn(id, balance, UPKEEP_ADMIN); + registry.withdrawFunds(id, UPKEEP_ADMIN); + } + + function _transmit(uint256 id, Registry registry) internal { + uint256[] memory upkeepIds = new uint256[](1); + uint256[] memory gasLimits = new uint256[](1); + bytes[] memory performDatas = new bytes[](1); + bytes[] memory triggers = new bytes[](1); + upkeepIds[0] = id; + gasLimits[0] = 1000000; + triggers[0] = _encodeConditionalTrigger( + AutoBase.ConditionalTrigger(uint32(block.number - 1), blockhash(block.number - 1)) + ); + AutoBase.Report memory report = AutoBase.Report( + uint256(1000000000), + uint256(2000000000), + upkeepIds, + gasLimits, + triggers, + performDatas + ); + + bytes memory reportBytes = _encodeReport(report); + (, , bytes32 configDigest) = registry.latestConfigDetails(); + bytes32[3] memory reportContext = [configDigest, configDigest, configDigest]; + uint256[] memory signerPKs = new uint256[](2); + signerPKs[0] = SIGNING_KEY0; + signerPKs[1] = SIGNING_KEY1; + (bytes32[] memory rs, bytes32[] memory ss, bytes32 vs) = _signReport(reportBytes, reportContext, signerPKs); + + vm.startPrank(TRANSMITTERS[0]); + registry.transmit(reportContext, reportBytes, rs, ss, vs); + vm.stopPrank(); + } + + function _configureWithNewTransmitters(Registry registry, Registrar registrar) internal { + IERC20[] memory billingTokens = new IERC20[](1); + billingTokens[0] = IERC20(address(usdToken)); + uint256[] memory minRegistrationFees = new uint256[](billingTokens.length); + minRegistrationFees[0] = 100000000000000000000; // 100 USD + address[] memory billingTokenAddresses = new address[](billingTokens.length); + for (uint256 i = 0; i < billingTokens.length; i++) { + billingTokenAddresses[i] = address(billingTokens[i]); + } + AutomationRegistryBase2_3.BillingConfig[] + memory billingTokenConfigs = new AutomationRegistryBase2_3.BillingConfig[](billingTokens.length); + billingTokenConfigs[0] = AutomationRegistryBase2_3.BillingConfig({ + gasFeePPB: 10_000_000, // 15% + flatFeeMilliCents: 2_000, // 2 cents + priceFeed: address(USDTOKEN_USD_FEED), + fallbackPrice: 100_000_000, // $1 + minSpend: 1000000000000000000 // 1 USD + }); + + address[] memory registrars; + registrars = new address[](1); + registrars[0] = address(registrar); + AutomationRegistryBase2_3.OnchainConfig memory cfg = AutomationRegistryBase2_3.OnchainConfig({ + checkGasLimit: 5_000_000, + stalenessSeconds: 90_000, + gasCeilingMultiplier: 2, + maxPerformGas: 10_000_000, + maxCheckDataSize: 5_000, + maxPerformDataSize: 5_000, + maxRevertDataSize: 5_000, + fallbackGasPrice: 20_000_000_000, + fallbackLinkPrice: 2_000_000_000, // $20 + fallbackNativePrice: 400_000_000_000, // $4,000 + transcoder: 0xB1e66855FD67f6e85F0f0fA38cd6fBABdf00923c, + registrars: registrars, + upkeepPrivilegeManager: PRIVILEGE_MANAGER, + chainModule: address(new ChainModuleBase()), + reorgProtectionEnabled: true, + financeAdmin: FINANCE_ADMIN + }); + registry.setConfigTypeSafe( + SIGNERS, + NEW_TRANSMITTERS, + F, + cfg, + OFFCHAIN_CONFIG_VERSION, + "", + billingTokenAddresses, + billingTokenConfigs + ); + registry.setPayees(NEW_PAYEES); + } } contract WithdrawPayment is SetUp { diff --git a/contracts/src/v0.8/automation/dev/test/BaseTest.t.sol b/contracts/src/v0.8/automation/dev/test/BaseTest.t.sol index a09dd8ad719..1706ac049a3 100644 --- a/contracts/src/v0.8/automation/dev/test/BaseTest.t.sol +++ b/contracts/src/v0.8/automation/dev/test/BaseTest.t.sol @@ -63,7 +63,9 @@ contract BaseTest is Test { uint256 internal constant SIGNING_KEY3 = 0x80f14b11da94ae7f29d9a7713ea13dc838e31960a5c0f2baf45ed458947b730a; address[] internal SIGNERS = new address[](4); address[] internal TRANSMITTERS = new address[](4); + address[] internal NEW_TRANSMITTERS = new address[](4); address[] internal PAYEES = new address[](4); + address[] internal NEW_PAYEES = new address[](4); function setUp() public virtual { vm.startPrank(OWNER); @@ -89,11 +91,19 @@ contract BaseTest is Test { TRANSMITTERS[1] = address(uint160(uint256(keccak256("TRANSMITTER2")))); TRANSMITTERS[2] = address(uint160(uint256(keccak256("TRANSMITTER3")))); TRANSMITTERS[3] = address(uint160(uint256(keccak256("TRANSMITTER4")))); + NEW_TRANSMITTERS[0] = address(uint160(uint256(keccak256("TRANSMITTER1")))); + NEW_TRANSMITTERS[1] = address(uint160(uint256(keccak256("TRANSMITTER2")))); + NEW_TRANSMITTERS[2] = address(uint160(uint256(keccak256("TRANSMITTER5")))); + NEW_TRANSMITTERS[3] = address(uint160(uint256(keccak256("TRANSMITTER6")))); PAYEES[0] = address(100); PAYEES[1] = address(101); PAYEES[2] = address(102); PAYEES[3] = address(103); + NEW_PAYEES[0] = address(100); + NEW_PAYEES[1] = address(101); + NEW_PAYEES[2] = address(106); + NEW_PAYEES[3] = address(107); // mint funds vm.deal(OWNER, 100 ether); @@ -159,7 +169,7 @@ contract BaseTest is Test { flatFeeMilliCents: DEFAULT_FLAT_FEE_MILLI_CENTS, // 2 cents priceFeed: address(USDTOKEN_USD_FEED), fallbackPrice: 100_000_000, // $1 - minSpend: 100000000000000000000 // 100 USD + minSpend: 1000000000000000000 // 1 USD }); billingTokenConfigs[1] = AutomationRegistryBase2_3.BillingConfig({ gasFeePPB: DEFAULT_GAS_FEE_PPB, // 15% @@ -173,7 +183,7 @@ contract BaseTest is Test { flatFeeMilliCents: DEFAULT_FLAT_FEE_MILLI_CENTS, // 2 cents priceFeed: address(LINK_USD_FEED), fallbackPrice: 1_000_000_000, // $10 - minSpend: 5000000000000000000 // 5 LINK + minSpend: 1000000000000000000 // 1 LINK }); if (payoutMode == AutoBase.PayoutMode.OFF_CHAIN) { diff --git a/contracts/src/v0.8/automation/dev/v2_3/AutomationRegistry2_3.sol b/contracts/src/v0.8/automation/dev/v2_3/AutomationRegistry2_3.sol index e5ebee0d22a..42983d59910 100644 --- a/contracts/src/v0.8/automation/dev/v2_3/AutomationRegistry2_3.sol +++ b/contracts/src/v0.8/automation/dev/v2_3/AutomationRegistry2_3.sol @@ -190,7 +190,8 @@ contract AutomationRegistry2_3 is AutomationRegistryBase2_3, OCR2Abstract, Chain fastGasWei: report.fastGasWei, linkUSD: report.linkUSD, nativeUSD: _getNativeUSD(hotVars), - billingToken: billingTokenParams, + billingToken: upkeepTransmitInfo[i].upkeep.billingToken, + billingTokenParams: billingTokenParams, isTransaction: true }), report.upkeepIds[i], @@ -213,6 +214,7 @@ contract AutomationRegistry2_3 is AutomationRegistryBase2_3, OCR2Abstract, Chain // record payments s_transmitters[msg.sender].balance += transmitVars.totalReimbursement; s_hotVars.totalPremium += transmitVars.totalPremium; + s_reserveAmounts[IERC20(address(i_link))] += transmitVars.totalReimbursement + transmitVars.totalPremium; } /** diff --git a/contracts/src/v0.8/automation/dev/v2_3/AutomationRegistryBase2_3.sol b/contracts/src/v0.8/automation/dev/v2_3/AutomationRegistryBase2_3.sol index aeb93f28f68..303edaa357e 100644 --- a/contracts/src/v0.8/automation/dev/v2_3/AutomationRegistryBase2_3.sol +++ b/contracts/src/v0.8/automation/dev/v2_3/AutomationRegistryBase2_3.sol @@ -414,6 +414,7 @@ abstract contract AutomationRegistryBase2_3 is ConfirmedOwner { * @member fastGasWei the fast gas price * @member linkUSD the exchange ratio between LINK and USD * @member nativeUSD the exchange ratio between the chain's native token and USD + * @member billingToken the billing token * @member billingTokenParams the payment params specific to a particular payment token * @member isTransaction is this an eth_call or a transaction */ @@ -424,7 +425,8 @@ abstract contract AutomationRegistryBase2_3 is ConfirmedOwner { uint256 fastGasWei; uint256 linkUSD; uint256 nativeUSD; - BillingTokenPaymentParams billingToken; + IERC20 billingToken; + BillingTokenPaymentParams billingTokenParams; bool isTransaction; } @@ -674,13 +676,13 @@ abstract contract AutomationRegistryBase2_3 is ConfirmedOwner { uint256 gasPaymentHexaicosaUSD = (gasWei * (paymentParams.gasLimit + paymentParams.gasOverhead) + paymentParams.l1CostWei) * paymentParams.nativeUSD; // gasPaymentHexaicosaUSD has an extra 8 zeros because of decimals on nativeUSD feed - receipt.gasCharge = SafeCast.toUint96(gasPaymentHexaicosaUSD / paymentParams.billingToken.priceUSD); // has units of attoBillingToken, or "wei" + receipt.gasCharge = SafeCast.toUint96(gasPaymentHexaicosaUSD / paymentParams.billingTokenParams.priceUSD); // has units of attoBillingToken, or "wei" receipt.gasReimbursementJuels = SafeCast.toUint96(gasPaymentHexaicosaUSD / paymentParams.linkUSD); - uint256 flatFeeHexaicosaUSD = uint256(paymentParams.billingToken.flatFeeMilliCents) * 1e21; // 1e13 for milliCents to attoUSD and 1e8 for attoUSD to hexaicosaUSD + uint256 flatFeeHexaicosaUSD = uint256(paymentParams.billingTokenParams.flatFeeMilliCents) * 1e21; // 1e13 for milliCents to attoUSD and 1e8 for attoUSD to hexaicosaUSD uint256 premiumHexaicosaUSD = ((((gasWei * paymentParams.gasLimit) + paymentParams.l1CostWei) * - paymentParams.billingToken.gasFeePPB * + paymentParams.billingTokenParams.gasFeePPB * paymentParams.nativeUSD) / 1e9) + flatFeeHexaicosaUSD; - receipt.premium = SafeCast.toUint96(premiumHexaicosaUSD / paymentParams.billingToken.priceUSD); + receipt.premium = SafeCast.toUint96(premiumHexaicosaUSD / paymentParams.billingTokenParams.priceUSD); receipt.premiumJuels = SafeCast.toUint96(premiumHexaicosaUSD / paymentParams.linkUSD); return receipt; @@ -739,7 +741,8 @@ abstract contract AutomationRegistryBase2_3 is ConfirmedOwner { fastGasWei: fastGasWei, linkUSD: linkUSD, nativeUSD: nativeUSD, - billingToken: paymentParams, + billingToken: billingToken, + billingTokenParams: paymentParams, isTransaction: false }) ); @@ -973,8 +976,8 @@ abstract contract AutomationRegistryBase2_3 is ConfirmedOwner { if (upkeep.overridesEnabled) { BillingOverrides memory billingOverrides = s_billingOverrides[upkeepId]; // use the overridden configs - paymentParams.billingToken.gasFeePPB = billingOverrides.gasFeePPB; - paymentParams.billingToken.flatFeeMilliCents = billingOverrides.flatFeeMilliCents; + paymentParams.billingTokenParams.gasFeePPB = billingOverrides.gasFeePPB; + paymentParams.billingTokenParams.flatFeeMilliCents = billingOverrides.flatFeeMilliCents; } PaymentReceipt memory receipt = _calculatePaymentAmount(hotVars, paymentParams); @@ -988,19 +991,20 @@ abstract contract AutomationRegistryBase2_3 is ConfirmedOwner { // if the user can't cover the gas fee, then direct all of the payment to the transmitter and distribute no premium to the DON payment = balance; receipt.gasReimbursementJuels = SafeCast.toUint96( - (balance * paymentParams.billingToken.priceUSD) / paymentParams.linkUSD + (balance * paymentParams.billingTokenParams.priceUSD) / paymentParams.linkUSD ); receipt.premiumJuels = 0; } else if (balance < payment) { // if the user can cover the gas fee, but not the premium, then reduce the premium payment = balance; receipt.premiumJuels = SafeCast.toUint96( - ((balance * paymentParams.billingToken.priceUSD) / paymentParams.linkUSD) - receipt.gasReimbursementJuels + ((balance * paymentParams.billingTokenParams.priceUSD) / paymentParams.linkUSD) - receipt.gasReimbursementJuels ); } s_upkeep[upkeepId].balance -= payment; s_upkeep[upkeepId].amountSpent += payment; + s_reserveAmounts[paymentParams.billingToken] -= payment; return receipt; } diff --git a/core/gethwrappers/generated/automation_registry_logic_a_wrapper_2_3/automation_registry_logic_a_wrapper_2_3.go b/core/gethwrappers/generated/automation_registry_logic_a_wrapper_2_3/automation_registry_logic_a_wrapper_2_3.go index ab046b125f0..a19cef75d93 100644 --- a/core/gethwrappers/generated/automation_registry_logic_a_wrapper_2_3/automation_registry_logic_a_wrapper_2_3.go +++ b/core/gethwrappers/generated/automation_registry_logic_a_wrapper_2_3/automation_registry_logic_a_wrapper_2_3.go @@ -45,7 +45,7 @@ type AutomationRegistryBase23BillingOverrides struct { var AutomationRegistryLogicAMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"contractAutomationRegistryLogicB2_3\",\"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\":[{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"}],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDataLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidFeed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidReport\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTransmitter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTrigger\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTriggerType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MigrationNotPermitted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustSettleOffchain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustSettleOnchain\",\"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\":\"OnlyCallableByUpkeepPrivilegeManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyFinanceAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPausedUpkeep\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySimulatedBackend\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyUnpausedUpkeep\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ParameterLengthError\",\"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\":\"TransferFailed\",\"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\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"privilegeConfig\",\"type\":\"bytes\"}],\"name\":\"AdminPrivilegeConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"gasFeePPB\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"flatFeeMilliCents\",\"type\":\"uint24\"}],\"indexed\":false,\"internalType\":\"structAutomationRegistryBase2_3.BillingOverrides\",\"name\":\"overrides\",\"type\":\"tuple\"}],\"name\":\"BillingConfigOverridden\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"BillingConfigOverrideRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contractIERC20\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"gasFeePPB\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"flatFeeMilliCents\",\"type\":\"uint24\"},{\"internalType\":\"contractAggregatorV3Interface\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"fallbackPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint96\",\"name\":\"minSpend\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"structAutomationRegistryBase2_3.BillingConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"BillingConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"CancelledUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newModule\",\"type\":\"address\"}],\"name\":\"ChainSpecificModuleUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"dedupKey\",\"type\":\"bytes32\"}],\"name\":\"DedupKeyAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assetAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"FeesWithdrawn\",\"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\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"InsufficientFundsUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"payees\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"payments\",\"type\":\"uint256[]\"}],\"name\":\"NOPsSettledOffchain\",\"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\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"ReorgedUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"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\":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\":\"UpkeepCheckDataSet\",\"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\":\"bytes\",\"name\":\"privilegeConfig\",\"type\":\"bytes\"}],\"name\":\"UpkeepPrivilegeConfigSet\",\"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\":\"performGas\",\"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\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"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\":\"triggerData\",\"type\":\"bytes\"}],\"name\":\"checkUpkeep\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"upkeepNeeded\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"performData\",\"type\":\"bytes\"},{\"internalType\":\"enumAutomationRegistryBase2_3.UpkeepFailureReason\",\"name\":\"upkeepFailureReason\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fastGasWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"linkUSD\",\"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\":\"enumAutomationRegistryBase2_3.UpkeepFailureReason\",\"name\":\"upkeepFailureReason\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fastGasWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"linkUSD\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fallbackTo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"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\":\"enumAutomationRegistryBase2_3.Trigger\",\"name\":\"triggerType\",\"type\":\"uint8\"},{\"internalType\":\"contractIERC20\",\"name\":\"billingToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"checkData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"triggerConfig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"registerUpkeep\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6101806040523480156200001257600080fd5b506040516200621e3803806200621e83398101604081905262000035916200062f565b80816001600160a01b031663ca30e6036040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009b91906200062f565b826001600160a01b031663226cf83c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010091906200062f565b836001600160a01b031663614486af6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016591906200062f565b846001600160a01b0316636709d0e56040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ca91906200062f565b856001600160a01b0316635425d8ac6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000209573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022f91906200062f565b866001600160a01b031663a08714c06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029491906200062f565b876001600160a01b031663c5b964e06040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f9919062000656565b886001600160a01b031663ac4dc59a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000338573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035e91906200062f565b3380600081620003b55760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620003e857620003e8816200056b565b5050506001600160a01b0380891660805287811660a05286811660c05285811660e052848116610100528316610120526025805483919060ff19166001838181111562000439576200043962000679565b0217905550806001600160a01b0316610140816001600160a01b03168152505060c0516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200049a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004c091906200068f565b60ff1660a0516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000504573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200052a91906200068f565b60ff16146200054c576040516301f86e1760e41b815260040160405180910390fd5b5050506001600160a01b039095166101605250620006b4945050505050565b336001600160a01b03821603620005c55760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401620003ac565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6001600160a01b03811681146200062c57600080fd5b50565b6000602082840312156200064257600080fd5b81516200064f8162000616565b9392505050565b6000602082840312156200066957600080fd5b8151600281106200064f57600080fd5b634e487b7160e01b600052602160045260246000fd5b600060208284031215620006a257600080fd5b815160ff811681146200064f57600080fd5b60805160a05160c05160e05161010051610120516101405161016051615afd620007216000396000818160c4015261011a015260005050600061243e0152600081816119000152611c19015260006125720152600061379701526000612656015260005050615afd6000f3fe608060405260043610620000c25760003560e01c80638e86139b1162000073578063c80480221162000055578063c80480221462000261578063f2fde38b1462000286578063f7d334ba14620002ab57620000c2565b80638e86139b1462000208578063c62cf684146200022d57620000c2565b806379ba509711620000a957806379ba5097146200019e57806385c1b0ba14620001b65780638da5cb5b14620001db57620000c2565b8063349e8cca146200010a57806371791aa01462000164575b7f00000000000000000000000000000000000000000000000000000000000000003660008037600080366000845af43d6000803e80801562000103573d6000f35b3d6000fd5b005b3480156200011757600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200017157600080fd5b506200018962000183366004620042ee565b620002d0565b6040516200015b9796959493929190620043da565b348015620001ab57600080fd5b506200010862000a59565b348015620001c357600080fd5b5062000108620001d53660046200448f565b62000b5c565b348015620001e857600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166200013a565b3480156200021557600080fd5b50620001086200022736600462004568565b620017c3565b3480156200023a57600080fd5b50620002526200024c366004620045d3565b62001b4b565b6040519081526020016200015b565b3480156200026e57600080fd5b506200010862000280366004620046c8565b62001ef8565b3480156200029357600080fd5b5062000108620002a5366004620046e2565b620023d0565b348015620002b857600080fd5b5062000189620002ca366004620046c8565b620023e8565b600060606000806000806000620002e662002426565b6000620002f38a62002498565b905060006014604051806101200160405290816000820160009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815260200160008201600c9054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160109054906101000a900462ffffff1662ffffff1662ffffff1681526020016000820160139054906101000a900461ffff1661ffff1661ffff1681526020016000820160159054906101000a900460ff1660ff1660ff1681526020016000820160169054906101000a900460ff161515151581526020016000820160179054906101000a900460ff161515151581526020016000820160189054906101000a900460ff161515151581526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090506000600460008d8152602001908152602001600020604051806101200160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900460ff161515151581526020016000820160029054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160069054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160008201600a9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016001820160109054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815260200160018201601c9054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090506000808360a0015115620006b85750506040805160208101825260008082529290910151919a5098506009975089965063ffffffff16945085935083925062000a4d915050565b606083015163ffffffff90811614620007045750506040805160208101825260008082529290910151919a5098506001975089965063ffffffff16945085935083925062000a4d915050565b825115620007455750506040805160208101825260008082529290910151919a5098506002975089965063ffffffff16945085935083925062000a4d915050565b62000750846200254e565b809450819850829950505050620007778e858786604001518b8b888a610100015162002756565b9050806bffffffffffffffffffffffff168360c001516bffffffffffffffffffffffff161015620007db5750506040805160208101825260008082529290910151919a5098506006975089965063ffffffff16945085935083925062000a4d915050565b50506000620007ec8d858e62002ad8565b90505a9750600080836080015173ffffffffffffffffffffffffffffffffffffffff1663f00e6a2a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000844573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200086a91906200470f565b73ffffffffffffffffffffffffffffffffffffffff16601660000160149054906101000a900463ffffffff1663ffffffff1684604051620008ac91906200472f565b60006040518083038160008787f1925050503d8060008114620008ec576040519150601f19603f3d011682016040523d82523d6000602084013e620008f1565b606091505b50915091505a62000903908b6200477c565b9950816200098d576018548151780100000000000000000000000000000000000000000000000090910463ffffffff1610156200096b5750506040805160208101825260008082529390910151929b509950600898505063ffffffff16945062000a4d915050565b604090930151929a50600399505063ffffffff909116955062000a4d92505050565b80806020019051810190620009a39190620047ed565b909d509b508c620009df5750506040805160208101825260008082529390910151929b509950600498505063ffffffff16945062000a4d915050565b6018548c517401000000000000000000000000000000000000000090910463ffffffff16101562000a3b5750506040805160208101825260008082529390910151929b509950600598505063ffffffff16945062000a4d915050565b5050506040015163ffffffff16945050505b92959891949750929550565b60015473ffffffffffffffffffffffffffffffffffffffff16331462000ae0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b600173ffffffffffffffffffffffffffffffffffffffff82166000908152601c602052604090205460ff16600381111562000b9b5762000b9b620043ab565b1415801562000be75750600373ffffffffffffffffffffffffffffffffffffffff82166000908152601c602052604090205460ff16600381111562000be45762000be4620043ab565b14155b1562000c1f576040517f0ebeec3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60165473ffffffffffffffffffffffffffffffffffffffff1662000c6f576040517fd12d7d8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082900362000cab576040517f2c2fc94100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905260008467ffffffffffffffff81111562000d115762000d1162004174565b60405190808252806020026020018201604052801562000d3b578160200160208202803683370190505b50905060008567ffffffffffffffff81111562000d5c5762000d5c62004174565b60405190808252806020026020018201604052801562000df357816020015b604080516101208101825260008082526020808301829052928201819052606082018190526080820181905260a0820181905260c0820181905260e0820181905261010082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018162000d7b5790505b50905060008667ffffffffffffffff81111562000e145762000e1462004174565b60405190808252806020026020018201604052801562000e4957816020015b606081526020019060019003908162000e335790505b50905060008767ffffffffffffffff81111562000e6a5762000e6a62004174565b60405190808252806020026020018201604052801562000e9f57816020015b606081526020019060019003908162000e895790505b50905060008867ffffffffffffffff81111562000ec05762000ec062004174565b60405190808252806020026020018201604052801562000ef557816020015b606081526020019060019003908162000edf5790505b50905060005b898110156200159b578a8a8281811062000f195762000f196200483a565b60209081029290920135600081815260048452604090819020815161012081018352815460ff8082161515835261010080830490911615159783019790975263ffffffff620100008204811694830194909452660100000000000081048416606083015273ffffffffffffffffffffffffffffffffffffffff6a01000000000000000000009091048116608083015260018301546fffffffffffffffffffffffffffffffff811660a08401526bffffffffffffffffffffffff70010000000000000000000000000000000082041660c08401527c0100000000000000000000000000000000000000000000000000000000900490931660e08201526002909101549091169381019390935299509097506200103690508862002cc8565b60808701516040517f1a5da6c800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015290911690631a5da6c890602401600060405180830381600087803b158015620010a657600080fd5b505af1158015620010bb573d6000803e3d6000fd5b5050505086858281518110620010d557620010d56200483a565b60200260200101819052506005600089815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168682815181106200112957620011296200483a565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910182015260008981526007909152604090208054620011689062004869565b80601f0160208091040260200160405190810160405280929190818152602001828054620011969062004869565b8015620011e75780601f10620011bb57610100808354040283529160200191620011e7565b820191906000526020600020905b815481529060010190602001808311620011c957829003601f168201915b50505050508482815181106200120157620012016200483a565b6020026020010181905250601d600089815260200190815260200160002080546200122c9062004869565b80601f01602080910402602001604051908101604052809291908181526020018280546200125a9062004869565b8015620012ab5780601f106200127f57610100808354040283529160200191620012ab565b820191906000526020600020905b8154815290600101906020018083116200128d57829003601f168201915b5050505050838281518110620012c557620012c56200483a565b6020026020010181905250601e60008981526020019081526020016000208054620012f09062004869565b80601f01602080910402602001604051908101604052809291908181526020018280546200131e9062004869565b80156200136f5780601f1062001343576101008083540402835291602001916200136f565b820191906000526020600020905b8154815290600101906020018083116200135157829003601f168201915b50505050508282815181106200138957620013896200483a565b602090810291909101810191909152600089815260048252604080822080547fffff0000000000000000000000000000000000000000000000000000000000001681556001810183905560020180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905560079092529081206200140f9162004110565b6000888152601d60205260408120620014289162004110565b6000888152601e60205260408120620014419162004110565b600088815260066020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556200148260028962002d7f565b5060c0870151604080516bffffffffffffffffffffffff909216825273ffffffffffffffffffffffffffffffffffffffff8b16602083015289917fb38647142fbb1ea4c000fc4569b37a4e9a9f6313317b84ee3e5326c1a6cd06ff910160405180910390a260c087015161010088015173ffffffffffffffffffffffffffffffffffffffff1660009081526021602052604090205462001531916bffffffffffffffffffffffff16906200477c565b6101008801805173ffffffffffffffffffffffffffffffffffffffff90811660009081526021602052604090209290925560c08901519051620015869216908b906bffffffffffffffffffffffff1662002d96565b806200159281620048be565b91505062000efb565b5060008a8a868167ffffffffffffffff811115620015bd57620015bd62004174565b604051908082528060200260200182016040528015620015e7578160200160208202803683370190505b50898888886040516020016200160598979695949392919062004a7e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282526016547faab9edd6000000000000000000000000000000000000000000000000000000008452915190935073ffffffffffffffffffffffffffffffffffffffff808d1693638e86139b939091169163c71249ab91600391869163aab9edd69160048083019260209291908290030181865afa158015620016b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016dd919062004b5d565b866040518463ffffffff1660e01b8152600401620016fe9392919062004b82565b600060405180830381865afa1580156200171c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001764919081019062004ba9565b6040518263ffffffff1660e01b815260040162001782919062004be2565b600060405180830381600087803b1580156200179d57600080fd5b505af1158015620017b2573d6000803e3d6000fd5b505050505050505050505050505050565b6002336000908152601c602052604090205460ff166003811115620017ec57620017ec620043ab565b141580156200182257506003336000908152601c602052604090205460ff1660038111156200181f576200181f620043ab565b14155b156200185a576040517f0ebeec3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080808080808062001870888a018a62004efa565b965096509650965096509650965060005b875181101562001b3f57600073ffffffffffffffffffffffffffffffffffffffff16878281518110620018b857620018b86200483a565b60200260200101516080015173ffffffffffffffffffffffffffffffffffffffff1603620019cc57858181518110620018f557620018f56200483a565b6020026020010151307f00000000000000000000000000000000000000000000000000000000000000006040516200192d906200414f565b73ffffffffffffffffffffffffffffffffffffffff938416815291831660208301529091166040820152606001604051809103906000f08015801562001977573d6000803e3d6000fd5b508782815181106200198d576200198d6200483a565b60200260200101516080019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b62001a84888281518110620019e557620019e56200483a565b602002602001015188838151811062001a025762001a026200483a565b602002602001015187848151811062001a1f5762001a1f6200483a565b602002602001015187858151811062001a3c5762001a3c6200483a565b602002602001015187868151811062001a595762001a596200483a565b602002602001015187878151811062001a765762001a766200483a565b602002602001015162002e2a565b87818151811062001a995762001a996200483a565b60200260200101517f74931a144e43a50694897f241d973aecb5024c0e910f9bb80a163ea3c1cf5a7188838151811062001ad75762001ad76200483a565b602002602001015160c001513360405162001b229291906bffffffffffffffffffffffff92909216825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b60405180910390a28062001b3681620048be565b91505062001881565b50505050505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff16331480159062001b7f575062001b7d60093362003347565b155b1562001bb7576040517fd48b678b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8a163b62001c06576040517f09ee12d500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62001c118762003377565b905060008a307f000000000000000000000000000000000000000000000000000000000000000060405162001c46906200414f565b73ffffffffffffffffffffffffffffffffffffffff938416815291831660208301529091166040820152606001604051809103906000f08015801562001c90573d6000803e3d6000fd5b50905062001d81826040518061012001604052806000151581526020016000151581526020018d63ffffffff16815260200163ffffffff801681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200160006fffffffffffffffffffffffffffffffff16815260200160006bffffffffffffffffffffffff168152602001600063ffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff168152508b89898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b92508a915062002e2a9050565b601680547c0100000000000000000000000000000000000000000000000000000000900463ffffffff1690601c62001db9836200502b565b91906101000a81548163ffffffff021916908363ffffffff16021790555050817fbae366358c023f887e791d7a62f2e4316f1026bd77f6fb49501a917b3bc5d0128b8b60405162001e3292919063ffffffff92909216825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b60405180910390a2817fcba2d5723b2ee59e53a8e8a82a4a7caf4fdfe70e9f7c582950bf7e7a5c24e83d878760405162001e6e92919062005051565b60405180910390a2817f2b72ac786c97e68dbab71023ed6f2bdbfc80ad9bb7808941929229d71b7d56648560405162001ea8919062004be2565b60405180910390a2817f3e8740446213c8a77d40e08f79136ce3f347d13ed270a6ebdf57159e0faf48508460405162001ee2919062004be2565b60405180910390a2509998505050505050505050565b6000818152600460209081526040808320815161012081018352815460ff8082161515835261010080830490911615159583019590955263ffffffff620100008204811694830194909452660100000000000081048416606083015273ffffffffffffffffffffffffffffffffffffffff6a01000000000000000000009091048116608083015260018301546fffffffffffffffffffffffffffffffff811660a08401526bffffffffffffffffffffffff70010000000000000000000000000000000082041660c08401527c0100000000000000000000000000000000000000000000000000000000900490931660e082015260029091015490911691810191909152906200201c60005473ffffffffffffffffffffffffffffffffffffffff1690565b61010083015173ffffffffffffffffffffffffffffffffffffffff90811660009081526022602090815260408083206002015460155482517f57e871e70000000000000000000000000000000000000000000000000000000081529251968616331497506bffffffffffffffffffffffff90911695939416926357e871e7926004808401939192918290030181865afa158015620020be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020e491906200509e565b9050836060015163ffffffff166000036200212b576040517ffbc0357800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606084015163ffffffff9081161462002170576040517f9c0083a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015620021a3575060008581526005602052604090205473ffffffffffffffffffffffffffffffffffffffff163314155b15620021db576040517ffbdb8e5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82620021f157620021ee603282620050b8565b90505b6000858152600460205260409020805463ffffffff8084166601000000000000027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff909216919091179091556200224e90600290879062002d7f16565b506000826bffffffffffffffffffffffff168560a001516fffffffffffffffffffffffffffffffff161015620022c15760a08501516200228f9084620050ce565b90508460c001516bffffffffffffffffffffffff16816bffffffffffffffffffffffff161115620022c1575060c08401515b808560c00151620022d39190620050ce565b600087815260046020908152604080832060010180547fffffffff000000000000000000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000006bffffffffffffffffffffffff9687160217905561010089015173ffffffffffffffffffffffffffffffffffffffff168352602190915290205462002365918316906200477c565b61010086015173ffffffffffffffffffffffffffffffffffffffff1660009081526021602052604080822092909255905167ffffffffffffffff84169188917f91cb3bb75cfbd718bbfccc56b7f53d92d7048ef4ca39a3b7b7c6d4af1f7911819190a3505050505050565b620023da62003616565b620023e58162003699565b50565b6000606060008060008060006200240f8860405180602001604052806000815250620002d0565b959e949d50929b5090995097509550909350915050565b3273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161462002496576040517fb60ac5db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000818160045b600f8110156200252d577fff000000000000000000000000000000000000000000000000000000000000008216838260208110620024e157620024e16200483a565b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146200251857506000949350505050565b806200252481620048be565b9150506200249f565b5081600f1a6001811115620025465762002546620043ab565b949350505050565b600080600080846040015162ffffff1690506000808263ffffffff161190506000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015620025dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002602919062005111565b50945090925050506000811315806200261a57508142105b806200263f57508280156200263f57506200263682426200477c565b8463ffffffff16105b156200265057601954965062002654565b8096505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015620026c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620026e6919062005111565b5094509092505050600081131580620026fe57508142105b806200272357508280156200272357506200271a82426200477c565b8463ffffffff16105b156200273457601a54955062002738565b8095505b8686620027458a62003790565b965096509650505050509193909250565b6000808080896001811115620027705762002770620043ab565b0362002780575061ea60620027da565b6001896001811115620027975762002797620043ab565b03620027a8575062014c08620027da565b6040517ff2b2d41200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008a608001516001620027ef919062005166565b620027ff9060ff16604062005182565b6018546200282f906103a49074010000000000000000000000000000000000000000900463ffffffff16620050b8565b6200283b9190620050b8565b601554604080517fde9ee35e0000000000000000000000000000000000000000000000000000000081528151939450600093849373ffffffffffffffffffffffffffffffffffffffff169263de9ee35e92600480820193918290030181865afa158015620028ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620028d391906200519c565b90925090508183620028e7836018620050b8565b620028f3919062005182565b60808f01516200290590600162005166565b620029169060ff166115e062005182565b620029229190620050b8565b6200292e9190620050b8565b6200293a9085620050b8565b6101008e01516040517f125441400000000000000000000000000000000000000000000000000000000081526004810186905291955073ffffffffffffffffffffffffffffffffffffffff1690631254414090602401602060405180830381865afa158015620029ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029d491906200509e565b8d6060015161ffff16620029e9919062005182565b94505050506000620029fc8b866200388a565b60008d815260046020526040902054909150610100900460ff161562002a625760008c81526023602090815260409182902082518084019093525463ffffffff811680845262ffffff640100000000909204821693830193845284529151909116908201525b600062002ab28c6040518061010001604052808d63ffffffff1681526020018681526020018781526020018c81526020018b81526020018a815260200185815260200160001515815250620039e5565b6020810151815191925062002ac791620051c1565b9d9c50505050505050505050505050565b6060600083600181111562002af15762002af1620043ab565b0362002bbe576000848152600760205260409081902090517f6e04ff0d000000000000000000000000000000000000000000000000000000009162002b39916024016200528c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905062002cc1565b600183600181111562002bd55762002bd5620043ab565b03620027a85760008280602001905181019062002bf3919062005303565b6000868152600760205260409081902090519192507f40691db4000000000000000000000000000000000000000000000000000000009162002c3a91849160240162005417565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152915062002cc19050565b9392505050565b60008181526005602052604090205473ffffffffffffffffffffffffffffffffffffffff16331462002d26576040517fa47c170600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600460205260409020546601000000000000900463ffffffff90811614620023e5576040517f9c0083a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600062002d8d838362003bdb565b90505b92915050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905262002e2590849062003cdf565b505050565b601454760100000000000000000000000000000000000000000000900460ff161562002e82576040517f24522f3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60175483517c010000000000000000000000000000000000000000000000000000000090910463ffffffff16101562002ee7576040517fae7235df00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108fc856040015163ffffffff16108062002f2d5750601654604086015163ffffffff780100000000000000000000000000000000000000000000000090920482169116115b1562002f65576040517f14c237fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000868152600460205260409020546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff161562002fd0576040517f6e3b930b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010085015173ffffffffffffffffffffffffffffffffffffffff90811660009081526022602052604090205467010000000000000090041662003040576040517fc1ab6dc100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846004600088815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff02191690831515021790555060408201518160000160026101000a81548163ffffffff021916908363ffffffff16021790555060608201518160000160066101000a81548163ffffffff021916908363ffffffff160217905550608082015181600001600a6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160010160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160010160106101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555060e082015181600101601c6101000a81548163ffffffff021916908363ffffffff1602179055506101008201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050836005600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260076000888152602001908152602001600020908162003285919062005531565b5060c085015161010086015173ffffffffffffffffffffffffffffffffffffffff16600090815260216020526040902054620032d0916bffffffffffffffffffffffff1690620050b8565b61010086015173ffffffffffffffffffffffffffffffffffffffff16600090815260216020908152604080832093909355888252601d90522062003315838262005531565b506000868152601e6020526040902062003330828262005531565b506200333e60028762003df2565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151562002d8d565b601554604080517f57e871e70000000000000000000000000000000000000000000000000000000081529051600092839273ffffffffffffffffffffffffffffffffffffffff90911691839183916385df51fd9160019184916357e871e79160048083019260209291908290030181865afa158015620033fb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200342191906200509e565b6200342d91906200477c565b6040518263ffffffff1660e01b81526004016200344c91815260200190565b602060405180830381865afa1580156200346a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200349091906200509e565b60165460408051602081019390935230908301527c0100000000000000000000000000000000000000000000000000000000900463ffffffff166060820152608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083015201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060045b600f811015620035a457838282815181106200356057620035606200483a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806200359b81620048be565b91505062003540565b50846001811115620035ba57620035ba620043ab565b60f81b81600f81518110620035d357620035d36200483a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506200360d8162005658565b95945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331462002496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640162000ad7565b3373ffffffffffffffffffffffffffffffffffffffff8216036200371a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000ad7565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801562003801573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003827919062005111565b509350509250506000821315806200383e57508042105b806200387257506000846040015162ffffff161180156200387257506200386681426200477c565b846040015162ffffff16105b1562003883575050601b5492915050565b5092915050565b604080516060810182526000808252602080830182815283850183905273ffffffffffffffffffffffffffffffffffffffff868116845260229092528483208054640100000000810462ffffff1690925263ffffffff8216855285517ffeaf968c00000000000000000000000000000000000000000000000000000000815295519495909484936701000000000000009093049092169163feaf968c9160048082019260a0929091908290030181865afa1580156200394d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003973919062005111565b509350509250506000821315806200398a57508042105b80620039be57506000866040015162ffffff16118015620039be5750620039b281426200477c565b866040015162ffffff16105b15620039d45760018301546040850152620039dc565b604084018290525b50505092915050565b6040805160808101825260008082526020820181905291810182905260608101919091526000836060015161ffff16836060015162003a25919062005182565b90508260e00151801562003a385750803a105b1562003a4157503a5b60008360a0015184604001518560200151866000015162003a639190620050b8565b62003a6f908562005182565b62003a7b9190620050b8565b62003a87919062005182565b905062003aa98460c00151604001518262003aa391906200569b565b62003e00565b6bffffffffffffffffffffffff168352608084015162003acf9062003aa390836200569b565b6bffffffffffffffffffffffff16604084015260c08401516020015160009062003b089062ffffff16683635c9adc5dea0000062005182565b9050600081633b9aca008760a001518860c001516000015163ffffffff1689604001518a600001518962003b3d919062005182565b62003b499190620050b8565b62003b55919062005182565b62003b61919062005182565b62003b6d91906200569b565b62003b799190620050b8565b905062003b958660c00151604001518262003aa391906200569b565b6bffffffffffffffffffffffff166020860152608086015162003bbe9062003aa390836200569b565b6bffffffffffffffffffffffff1660608601525050505092915050565b6000818152600183016020526040812054801562003cd457600062003c026001836200477c565b855490915060009062003c18906001906200477c565b905081811462003c8457600086600001828154811062003c3c5762003c3c6200483a565b906000526020600020015490508087600001848154811062003c625762003c626200483a565b6000918252602080832090910192909255918252600188019052604090208390555b855486908062003c985762003c98620056d7565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505062002d90565b600091505062002d90565b600062003d43826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1662003ea49092919063ffffffff16565b80519091501562002e25578080602001905181019062003d64919062005706565b62002e25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000ad7565b600062002d8d838362003eb5565b60006bffffffffffffffffffffffff82111562003ea0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203960448201527f3620626974730000000000000000000000000000000000000000000000000000606482015260840162000ad7565b5090565b606062002546848460008562003f07565b600081815260018301602052604081205462003efe5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562002d90565b50600062002d90565b60608247101562003f9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840162000ad7565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162003fc691906200472f565b60006040518083038185875af1925050503d806000811462004005576040519150601f19603f3d011682016040523d82523d6000602084013e6200400a565b606091505b50915091506200401d8783838762004028565b979650505050505050565b60608315620040c3578251600003620040bb5773ffffffffffffffffffffffffffffffffffffffff85163b620040bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000ad7565b508162002546565b620025468383815115620040da5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ad7919062004be2565b5080546200411e9062004869565b6000825580601f106200412f575050565b601f016020900490600052602060002090810190620023e591906200415d565b6103ca806200572783390190565b5b8082111562003ea057600081556001016200415e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610120810167ffffffffffffffff81118282101715620041ca57620041ca62004174565b60405290565b604051610100810167ffffffffffffffff81118282101715620041ca57620041ca62004174565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171562004241576200424162004174565b604052919050565b600067ffffffffffffffff82111562004266576200426662004174565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112620042a457600080fd5b8135620042bb620042b58262004249565b620041f7565b818152846020838601011115620042d157600080fd5b816020850160208301376000918101602001919091529392505050565b600080604083850312156200430257600080fd5b82359150602083013567ffffffffffffffff8111156200432157600080fd5b6200432f8582860162004292565b9150509250929050565b60005b83811015620043565781810151838201526020016200433c565b50506000910152565b600081518084526200437981602086016020860162004339565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b871515815260e060208201526000620043f760e08301896200435f565b9050600a871062004431577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60408201969096526060810194909452608084019290925260a083015260c09091015292915050565b73ffffffffffffffffffffffffffffffffffffffff81168114620023e557600080fd5b80356200448a816200445a565b919050565b600080600060408486031215620044a557600080fd5b833567ffffffffffffffff80821115620044be57600080fd5b818601915086601f830112620044d357600080fd5b813581811115620044e357600080fd5b8760208260051b8501011115620044f957600080fd5b6020928301955093505084013562004511816200445a565b809150509250925092565b60008083601f8401126200452f57600080fd5b50813567ffffffffffffffff8111156200454857600080fd5b6020830191508360208285010111156200456157600080fd5b9250929050565b600080602083850312156200457c57600080fd5b823567ffffffffffffffff8111156200459457600080fd5b620045a2858286016200451c565b90969095509350505050565b803563ffffffff811681146200448a57600080fd5b8035600281106200448a57600080fd5b60008060008060008060008060006101008a8c031215620045f357600080fd5b620045fe8a6200447d565b98506200460e60208b01620045ae565b97506200461e60408b016200447d565b96506200462e60608b01620045c3565b95506200463e60808b016200447d565b945060a08a013567ffffffffffffffff808211156200465c57600080fd5b6200466a8d838e016200451c565b909650945060c08c01359150808211156200468457600080fd5b620046928d838e0162004292565b935060e08c0135915080821115620046a957600080fd5b50620046b88c828d0162004292565b9150509295985092959850929598565b600060208284031215620046db57600080fd5b5035919050565b600060208284031215620046f557600080fd5b813562002cc1816200445a565b80516200448a816200445a565b6000602082840312156200472257600080fd5b815162002cc1816200445a565b600082516200474381846020870162004339565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111562002d905762002d906200474d565b8015158114620023e557600080fd5b600082601f830112620047b357600080fd5b8151620047c4620042b58262004249565b818152846020838601011115620047da57600080fd5b6200254682602083016020870162004339565b600080604083850312156200480157600080fd5b82516200480e8162004792565b602084015190925067ffffffffffffffff8111156200482c57600080fd5b6200432f85828601620047a1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600181811c908216806200487e57607f821691505b602082108103620048b8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620048f257620048f26200474d565b5060010190565b600081518084526020808501945080840160005b83811015620049d25781518051151588528381015115158489015260408082015163ffffffff908116918a01919091526060808301518216908a015260808083015173ffffffffffffffffffffffffffffffffffffffff908116918b019190915260a0808401516fffffffffffffffffffffffffffffffff16908b015260c0808401516bffffffffffffffffffffffff16908b015260e080840151909216918a019190915261010091820151169088015261012090960195908201906001016200490d565b509495945050505050565b600081518084526020808501945080840160005b83811015620049d257815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101620049f1565b600081518084526020808501808196508360051b8101915082860160005b8581101562004a7157828403895262004a5e8483516200435f565b9885019893509084019060010162004a43565b5091979650505050505050565b60e081528760e082015260006101007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8a111562004abb57600080fd5b8960051b808c8386013783018381038201602085015262004adf8282018b620048f9565b915050828103604084015262004af68189620049dd565b9050828103606084015262004b0c8188620049dd565b9050828103608084015262004b22818762004a25565b905082810360a084015262004b38818662004a25565b905082810360c084015262004b4e818562004a25565b9b9a5050505050505050505050565b60006020828403121562004b7057600080fd5b815160ff8116811462002cc157600080fd5b60ff8416815260ff831660208201526060604082015260006200360d60608301846200435f565b60006020828403121562004bbc57600080fd5b815167ffffffffffffffff81111562004bd457600080fd5b6200254684828501620047a1565b60208152600062002d8d60208301846200435f565b600067ffffffffffffffff82111562004c145762004c1462004174565b5060051b60200190565b600082601f83011262004c3057600080fd5b8135602062004c43620042b58362004bf7565b82815260059290921b8401810191818101908684111562004c6357600080fd5b8286015b8481101562004c80578035835291830191830162004c67565b509695505050505050565b80356200448a8162004792565b80356fffffffffffffffffffffffffffffffff811681146200448a57600080fd5b80356bffffffffffffffffffffffff811681146200448a57600080fd5b600082601f83011262004ce857600080fd5b8135602062004cfb620042b58362004bf7565b828152610120928302850182019282820191908785111562004d1c57600080fd5b8387015b8581101562004df65781818a03121562004d3a5760008081fd5b62004d44620041a3565b62004d4f8262004c8b565b815262004d5e86830162004c8b565b86820152604062004d71818401620045ae565b90820152606062004d84838201620045ae565b90820152608062004d978382016200447d565b9082015260a062004daa83820162004c98565b9082015260c062004dbd83820162004cb9565b9082015260e062004dd0838201620045ae565b9082015261010062004de48382016200447d565b90820152845292840192810162004d20565b5090979650505050505050565b600082601f83011262004e1557600080fd5b8135602062004e28620042b58362004bf7565b82815260059290921b8401810191818101908684111562004e4857600080fd5b8286015b8481101562004c8057803562004e62816200445a565b835291830191830162004e4c565b600082601f83011262004e8257600080fd5b8135602062004e95620042b58362004bf7565b82815260059290921b8401810191818101908684111562004eb557600080fd5b8286015b8481101562004c8057803567ffffffffffffffff81111562004edb5760008081fd5b62004eeb8986838b010162004292565b84525091830191830162004eb9565b600080600080600080600060e0888a03121562004f1657600080fd5b873567ffffffffffffffff8082111562004f2f57600080fd5b62004f3d8b838c0162004c1e565b985060208a013591508082111562004f5457600080fd5b62004f628b838c0162004cd6565b975060408a013591508082111562004f7957600080fd5b62004f878b838c0162004e03565b965060608a013591508082111562004f9e57600080fd5b62004fac8b838c0162004e03565b955060808a013591508082111562004fc357600080fd5b62004fd18b838c0162004e70565b945060a08a013591508082111562004fe857600080fd5b62004ff68b838c0162004e70565b935060c08a01359150808211156200500d57600080fd5b506200501c8a828b0162004e70565b91505092959891949750929550565b600063ffffffff8083168181036200504757620050476200474d565b6001019392505050565b60208152816020820152818360408301376000818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b600060208284031215620050b157600080fd5b5051919050565b8082018082111562002d905762002d906200474d565b6bffffffffffffffffffffffff8281168282160390808211156200388357620038836200474d565b805169ffffffffffffffffffff811681146200448a57600080fd5b600080600080600060a086880312156200512a57600080fd5b6200513586620050f6565b94506020860151935060408601519250606086015191506200515a60808701620050f6565b90509295509295909350565b60ff818116838216019081111562002d905762002d906200474d565b808202811582820484141762002d905762002d906200474d565b60008060408385031215620051b057600080fd5b505080516020909101519092909150565b6bffffffffffffffffffffffff8181168382160190808211156200388357620038836200474d565b60008154620051f88162004869565b808552602060018381168015620052185760018114620052515762005281565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008516838901528284151560051b890101955062005281565b866000528260002060005b85811015620052795781548a82018601529083019084016200525c565b890184019650505b505050505092915050565b60208152600062002d8d6020830184620051e9565b600082601f830112620052b357600080fd5b81516020620052c6620042b58362004bf7565b82815260059290921b84018101918181019086841115620052e657600080fd5b8286015b8481101562004c805780518352918301918301620052ea565b6000602082840312156200531657600080fd5b815167ffffffffffffffff808211156200532f57600080fd5b9083019061010082860312156200534557600080fd5b6200534f620041d0565b82518152602083015160208201526040830151604082015260608301516060820152608083015160808201526200538960a0840162004702565b60a082015260c083015182811115620053a157600080fd5b620053af87828601620052a1565b60c08301525060e083015182811115620053c857600080fd5b620053d687828601620047a1565b60e08301525095945050505050565b600081518084526020808501945080840160005b83811015620049d257815187529582019590820190600101620053f9565b60408152825160408201526020830151606082015260408301516080820152606083015160a0820152608083015160c082015273ffffffffffffffffffffffffffffffffffffffff60a08401511660e0820152600060c08401516101008081850152506200548a610140840182620053e5565b905060e08501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc084830301610120850152620054c882826200435f565b91505082810360208401526200360d8185620051e9565b601f82111562002e2557600081815260208120601f850160051c81016020861015620055085750805b601f850160051c820191505b81811015620055295782815560010162005514565b505050505050565b815167ffffffffffffffff8111156200554e576200554e62004174565b62005566816200555f845462004869565b84620054df565b602080601f831160018114620055bc5760008415620055855750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855562005529565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156200560b57888601518255948401946001909101908401620055ea565b50858210156200564857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b80516020808301519190811015620048b8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b600082620056d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000602082840312156200571957600080fd5b815162002cc1816200479256fe60c060405234801561001057600080fd5b506040516103ca3803806103ca83398101604081905261002f91610076565b600080546001600160a01b0319166001600160a01b039384161790559181166080521660a0526100b9565b80516001600160a01b038116811461007157600080fd5b919050565b60008060006060848603121561008b57600080fd5b6100948461005a565b92506100a26020850161005a565b91506100b06040850161005a565b90509250925092565b60805160a0516102e76100e36000396000603801526000818160c4015261011701526102e76000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806379188d161461007b578063f00e6a2a146100aa575b7f00000000000000000000000000000000000000000000000000000000000000003660008037600080366000845af43d6000803e808015610076573d6000f35b3d6000fd5b61008e6100893660046101c1565b6100ee565b6040805192151583526020830191909152015b60405180910390f35b60405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016100a1565b60008054819073ffffffffffffffffffffffffffffffffffffffff16331461011557600080fd5b7f00000000000000000000000000000000000000000000000000000000000000005a91505a61138881101561014957600080fd5b61138881039050856040820482031161016157600080fd5b50803b61016d57600080fd5b6000808551602087016000858af192505a610188908361029a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156101d457600080fd5b82359150602083013567ffffffffffffffff808211156101f357600080fd5b818501915085601f83011261020757600080fd5b81358181111561021957610219610192565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561025f5761025f610192565b8160405282815288602084870101111561027857600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b818103818111156102d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9291505056fea164736f6c6343000813000aa164736f6c6343000813000a", + Bin: "0x6101806040523480156200001257600080fd5b506040516200623b3803806200623b83398101604081905262000035916200062f565b80816001600160a01b031663ca30e6036040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009b91906200062f565b826001600160a01b031663226cf83c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010091906200062f565b836001600160a01b031663614486af6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016591906200062f565b846001600160a01b0316636709d0e56040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ca91906200062f565b856001600160a01b0316635425d8ac6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000209573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022f91906200062f565b866001600160a01b031663a08714c06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029491906200062f565b876001600160a01b031663c5b964e06040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f9919062000656565b886001600160a01b031663ac4dc59a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000338573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035e91906200062f565b3380600081620003b55760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620003e857620003e8816200056b565b5050506001600160a01b0380891660805287811660a05286811660c05285811660e052848116610100528316610120526025805483919060ff19166001838181111562000439576200043962000679565b0217905550806001600160a01b0316610140816001600160a01b03168152505060c0516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200049a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004c091906200068f565b60ff1660a0516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000504573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200052a91906200068f565b60ff16146200054c576040516301f86e1760e41b815260040160405180910390fd5b5050506001600160a01b039095166101605250620006b4945050505050565b336001600160a01b03821603620005c55760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401620003ac565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6001600160a01b03811681146200062c57600080fd5b50565b6000602082840312156200064257600080fd5b81516200064f8162000616565b9392505050565b6000602082840312156200066957600080fd5b8151600281106200064f57600080fd5b634e487b7160e01b600052602160045260246000fd5b600060208284031215620006a257600080fd5b815160ff811681146200064f57600080fd5b60805160a05160c05160e05161010051610120516101405161016051615b1a620007216000396000818160c4015261011a015260005050600061243e0152600081816119000152611c1901526000612572015260006137b301526000612656015260005050615b1a6000f3fe608060405260043610620000c25760003560e01c80638e86139b1162000073578063c80480221162000055578063c80480221462000261578063f2fde38b1462000286578063f7d334ba14620002ab57620000c2565b80638e86139b1462000208578063c62cf684146200022d57620000c2565b806379ba509711620000a957806379ba5097146200019e57806385c1b0ba14620001b65780638da5cb5b14620001db57620000c2565b8063349e8cca146200010a57806371791aa01462000164575b7f00000000000000000000000000000000000000000000000000000000000000003660008037600080366000845af43d6000803e80801562000103573d6000f35b3d6000fd5b005b3480156200011757600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200017157600080fd5b5062000189620001833660046200430b565b620002d0565b6040516200015b9796959493929190620043f7565b348015620001ab57600080fd5b506200010862000a59565b348015620001c357600080fd5b5062000108620001d5366004620044ac565b62000b5c565b348015620001e857600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166200013a565b3480156200021557600080fd5b50620001086200022736600462004585565b620017c3565b3480156200023a57600080fd5b50620002526200024c366004620045f0565b62001b4b565b6040519081526020016200015b565b3480156200026e57600080fd5b506200010862000280366004620046e5565b62001ef8565b3480156200029357600080fd5b5062000108620002a5366004620046ff565b620023d0565b348015620002b857600080fd5b5062000189620002ca366004620046e5565b620023e8565b600060606000806000806000620002e662002426565b6000620002f38a62002498565b905060006014604051806101200160405290816000820160009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815260200160008201600c9054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160109054906101000a900462ffffff1662ffffff1662ffffff1681526020016000820160139054906101000a900461ffff1661ffff1661ffff1681526020016000820160159054906101000a900460ff1660ff1660ff1681526020016000820160169054906101000a900460ff161515151581526020016000820160179054906101000a900460ff161515151581526020016000820160189054906101000a900460ff161515151581526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090506000600460008d8152602001908152602001600020604051806101200160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900460ff161515151581526020016000820160029054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160069054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160008201600a9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016001820160109054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815260200160018201601c9054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090506000808360a0015115620006b85750506040805160208101825260008082529290910151919a5098506009975089965063ffffffff16945085935083925062000a4d915050565b606083015163ffffffff90811614620007045750506040805160208101825260008082529290910151919a5098506001975089965063ffffffff16945085935083925062000a4d915050565b825115620007455750506040805160208101825260008082529290910151919a5098506002975089965063ffffffff16945085935083925062000a4d915050565b62000750846200254e565b809450819850829950505050620007778e858786604001518b8b888a610100015162002756565b9050806bffffffffffffffffffffffff168360c001516bffffffffffffffffffffffff161015620007db5750506040805160208101825260008082529290910151919a5098506006975089965063ffffffff16945085935083925062000a4d915050565b50506000620007ec8d858e62002af4565b90505a9750600080836080015173ffffffffffffffffffffffffffffffffffffffff1663f00e6a2a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000844573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200086a91906200472c565b73ffffffffffffffffffffffffffffffffffffffff16601660000160149054906101000a900463ffffffff1663ffffffff1684604051620008ac91906200474c565b60006040518083038160008787f1925050503d8060008114620008ec576040519150601f19603f3d011682016040523d82523d6000602084013e620008f1565b606091505b50915091505a62000903908b62004799565b9950816200098d576018548151780100000000000000000000000000000000000000000000000090910463ffffffff1610156200096b5750506040805160208101825260008082529390910151929b509950600898505063ffffffff16945062000a4d915050565b604090930151929a50600399505063ffffffff909116955062000a4d92505050565b80806020019051810190620009a391906200480a565b909d509b508c620009df5750506040805160208101825260008082529390910151929b509950600498505063ffffffff16945062000a4d915050565b6018548c517401000000000000000000000000000000000000000090910463ffffffff16101562000a3b5750506040805160208101825260008082529390910151929b509950600598505063ffffffff16945062000a4d915050565b5050506040015163ffffffff16945050505b92959891949750929550565b60015473ffffffffffffffffffffffffffffffffffffffff16331462000ae0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b600173ffffffffffffffffffffffffffffffffffffffff82166000908152601c602052604090205460ff16600381111562000b9b5762000b9b620043c8565b1415801562000be75750600373ffffffffffffffffffffffffffffffffffffffff82166000908152601c602052604090205460ff16600381111562000be45762000be4620043c8565b14155b1562000c1f576040517f0ebeec3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60165473ffffffffffffffffffffffffffffffffffffffff1662000c6f576040517fd12d7d8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082900362000cab576040517f2c2fc94100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905260008467ffffffffffffffff81111562000d115762000d1162004191565b60405190808252806020026020018201604052801562000d3b578160200160208202803683370190505b50905060008567ffffffffffffffff81111562000d5c5762000d5c62004191565b60405190808252806020026020018201604052801562000df357816020015b604080516101208101825260008082526020808301829052928201819052606082018190526080820181905260a0820181905260c0820181905260e0820181905261010082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018162000d7b5790505b50905060008667ffffffffffffffff81111562000e145762000e1462004191565b60405190808252806020026020018201604052801562000e4957816020015b606081526020019060019003908162000e335790505b50905060008767ffffffffffffffff81111562000e6a5762000e6a62004191565b60405190808252806020026020018201604052801562000e9f57816020015b606081526020019060019003908162000e895790505b50905060008867ffffffffffffffff81111562000ec05762000ec062004191565b60405190808252806020026020018201604052801562000ef557816020015b606081526020019060019003908162000edf5790505b50905060005b898110156200159b578a8a8281811062000f195762000f1962004857565b60209081029290920135600081815260048452604090819020815161012081018352815460ff8082161515835261010080830490911615159783019790975263ffffffff620100008204811694830194909452660100000000000081048416606083015273ffffffffffffffffffffffffffffffffffffffff6a01000000000000000000009091048116608083015260018301546fffffffffffffffffffffffffffffffff811660a08401526bffffffffffffffffffffffff70010000000000000000000000000000000082041660c08401527c0100000000000000000000000000000000000000000000000000000000900490931660e08201526002909101549091169381019390935299509097506200103690508862002ce4565b60808701516040517f1a5da6c800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015290911690631a5da6c890602401600060405180830381600087803b158015620010a657600080fd5b505af1158015620010bb573d6000803e3d6000fd5b5050505086858281518110620010d557620010d562004857565b60200260200101819052506005600089815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686828151811062001129576200112962004857565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910182015260008981526007909152604090208054620011689062004886565b80601f0160208091040260200160405190810160405280929190818152602001828054620011969062004886565b8015620011e75780601f10620011bb57610100808354040283529160200191620011e7565b820191906000526020600020905b815481529060010190602001808311620011c957829003601f168201915b505050505084828151811062001201576200120162004857565b6020026020010181905250601d600089815260200190815260200160002080546200122c9062004886565b80601f01602080910402602001604051908101604052809291908181526020018280546200125a9062004886565b8015620012ab5780601f106200127f57610100808354040283529160200191620012ab565b820191906000526020600020905b8154815290600101906020018083116200128d57829003601f168201915b5050505050838281518110620012c557620012c562004857565b6020026020010181905250601e60008981526020019081526020016000208054620012f09062004886565b80601f01602080910402602001604051908101604052809291908181526020018280546200131e9062004886565b80156200136f5780601f1062001343576101008083540402835291602001916200136f565b820191906000526020600020905b8154815290600101906020018083116200135157829003601f168201915b505050505082828151811062001389576200138962004857565b602090810291909101810191909152600089815260048252604080822080547fffff0000000000000000000000000000000000000000000000000000000000001681556001810183905560020180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905560079092529081206200140f916200412d565b6000888152601d6020526040812062001428916200412d565b6000888152601e6020526040812062001441916200412d565b600088815260066020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556200148260028962002d9b565b5060c0870151604080516bffffffffffffffffffffffff909216825273ffffffffffffffffffffffffffffffffffffffff8b16602083015289917fb38647142fbb1ea4c000fc4569b37a4e9a9f6313317b84ee3e5326c1a6cd06ff910160405180910390a260c087015161010088015173ffffffffffffffffffffffffffffffffffffffff1660009081526021602052604090205462001531916bffffffffffffffffffffffff169062004799565b6101008801805173ffffffffffffffffffffffffffffffffffffffff90811660009081526021602052604090209290925560c08901519051620015869216908b906bffffffffffffffffffffffff1662002db2565b806200159281620048db565b91505062000efb565b5060008a8a868167ffffffffffffffff811115620015bd57620015bd62004191565b604051908082528060200260200182016040528015620015e7578160200160208202803683370190505b50898888886040516020016200160598979695949392919062004a9b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282526016547faab9edd6000000000000000000000000000000000000000000000000000000008452915190935073ffffffffffffffffffffffffffffffffffffffff808d1693638e86139b939091169163c71249ab91600391869163aab9edd69160048083019260209291908290030181865afa158015620016b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016dd919062004b7a565b866040518463ffffffff1660e01b8152600401620016fe9392919062004b9f565b600060405180830381865afa1580156200171c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001764919081019062004bc6565b6040518263ffffffff1660e01b815260040162001782919062004bff565b600060405180830381600087803b1580156200179d57600080fd5b505af1158015620017b2573d6000803e3d6000fd5b505050505050505050505050505050565b6002336000908152601c602052604090205460ff166003811115620017ec57620017ec620043c8565b141580156200182257506003336000908152601c602052604090205460ff1660038111156200181f576200181f620043c8565b14155b156200185a576040517f0ebeec3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080808080808062001870888a018a62004f17565b965096509650965096509650965060005b875181101562001b3f57600073ffffffffffffffffffffffffffffffffffffffff16878281518110620018b857620018b862004857565b60200260200101516080015173ffffffffffffffffffffffffffffffffffffffff1603620019cc57858181518110620018f557620018f562004857565b6020026020010151307f00000000000000000000000000000000000000000000000000000000000000006040516200192d906200416c565b73ffffffffffffffffffffffffffffffffffffffff938416815291831660208301529091166040820152606001604051809103906000f08015801562001977573d6000803e3d6000fd5b508782815181106200198d576200198d62004857565b60200260200101516080019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b62001a84888281518110620019e557620019e562004857565b602002602001015188838151811062001a025762001a0262004857565b602002602001015187848151811062001a1f5762001a1f62004857565b602002602001015187858151811062001a3c5762001a3c62004857565b602002602001015187868151811062001a595762001a5962004857565b602002602001015187878151811062001a765762001a7662004857565b602002602001015162002e46565b87818151811062001a995762001a9962004857565b60200260200101517f74931a144e43a50694897f241d973aecb5024c0e910f9bb80a163ea3c1cf5a7188838151811062001ad75762001ad762004857565b602002602001015160c001513360405162001b229291906bffffffffffffffffffffffff92909216825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b60405180910390a28062001b3681620048db565b91505062001881565b50505050505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff16331480159062001b7f575062001b7d60093362003363565b155b1562001bb7576040517fd48b678b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8a163b62001c06576040517f09ee12d500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62001c118762003393565b905060008a307f000000000000000000000000000000000000000000000000000000000000000060405162001c46906200416c565b73ffffffffffffffffffffffffffffffffffffffff938416815291831660208301529091166040820152606001604051809103906000f08015801562001c90573d6000803e3d6000fd5b50905062001d81826040518061012001604052806000151581526020016000151581526020018d63ffffffff16815260200163ffffffff801681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200160006fffffffffffffffffffffffffffffffff16815260200160006bffffffffffffffffffffffff168152602001600063ffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff168152508b89898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b92508a915062002e469050565b601680547c0100000000000000000000000000000000000000000000000000000000900463ffffffff1690601c62001db98362005048565b91906101000a81548163ffffffff021916908363ffffffff16021790555050817fbae366358c023f887e791d7a62f2e4316f1026bd77f6fb49501a917b3bc5d0128b8b60405162001e3292919063ffffffff92909216825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b60405180910390a2817fcba2d5723b2ee59e53a8e8a82a4a7caf4fdfe70e9f7c582950bf7e7a5c24e83d878760405162001e6e9291906200506e565b60405180910390a2817f2b72ac786c97e68dbab71023ed6f2bdbfc80ad9bb7808941929229d71b7d56648560405162001ea8919062004bff565b60405180910390a2817f3e8740446213c8a77d40e08f79136ce3f347d13ed270a6ebdf57159e0faf48508460405162001ee2919062004bff565b60405180910390a2509998505050505050505050565b6000818152600460209081526040808320815161012081018352815460ff8082161515835261010080830490911615159583019590955263ffffffff620100008204811694830194909452660100000000000081048416606083015273ffffffffffffffffffffffffffffffffffffffff6a01000000000000000000009091048116608083015260018301546fffffffffffffffffffffffffffffffff811660a08401526bffffffffffffffffffffffff70010000000000000000000000000000000082041660c08401527c0100000000000000000000000000000000000000000000000000000000900490931660e082015260029091015490911691810191909152906200201c60005473ffffffffffffffffffffffffffffffffffffffff1690565b61010083015173ffffffffffffffffffffffffffffffffffffffff90811660009081526022602090815260408083206002015460155482517f57e871e70000000000000000000000000000000000000000000000000000000081529251968616331497506bffffffffffffffffffffffff90911695939416926357e871e7926004808401939192918290030181865afa158015620020be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020e49190620050bb565b9050836060015163ffffffff166000036200212b576040517ffbc0357800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606084015163ffffffff9081161462002170576040517f9c0083a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015620021a3575060008581526005602052604090205473ffffffffffffffffffffffffffffffffffffffff163314155b15620021db576040517ffbdb8e5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82620021f157620021ee603282620050d5565b90505b6000858152600460205260409020805463ffffffff8084166601000000000000027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff909216919091179091556200224e90600290879062002d9b16565b506000826bffffffffffffffffffffffff168560a001516fffffffffffffffffffffffffffffffff161015620022c15760a08501516200228f9084620050eb565b90508460c001516bffffffffffffffffffffffff16816bffffffffffffffffffffffff161115620022c1575060c08401515b808560c00151620022d39190620050eb565b600087815260046020908152604080832060010180547fffffffff000000000000000000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000006bffffffffffffffffffffffff9687160217905561010089015173ffffffffffffffffffffffffffffffffffffffff1683526021909152902054620023659183169062004799565b61010086015173ffffffffffffffffffffffffffffffffffffffff1660009081526021602052604080822092909255905167ffffffffffffffff84169188917f91cb3bb75cfbd718bbfccc56b7f53d92d7048ef4ca39a3b7b7c6d4af1f7911819190a3505050505050565b620023da62003632565b620023e581620036b5565b50565b6000606060008060008060006200240f8860405180602001604052806000815250620002d0565b959e949d50929b5090995097509550909350915050565b3273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161462002496576040517fb60ac5db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000818160045b600f8110156200252d577fff000000000000000000000000000000000000000000000000000000000000008216838260208110620024e157620024e162004857565b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146200251857506000949350505050565b806200252481620048db565b9150506200249f565b5081600f1a6001811115620025465762002546620043c8565b949350505050565b600080600080846040015162ffffff1690506000808263ffffffff161190506000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015620025dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200260291906200512e565b50945090925050506000811315806200261a57508142105b806200263f57508280156200263f575062002636824262004799565b8463ffffffff16105b156200265057601954965062002654565b8096505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015620026c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620026e691906200512e565b5094509092505050600081131580620026fe57508142105b806200272357508280156200272357506200271a824262004799565b8463ffffffff16105b156200273457601a54955062002738565b8095505b8686620027458a620037ac565b965096509650505050509193909250565b6000808080896001811115620027705762002770620043c8565b0362002780575061ea60620027da565b6001896001811115620027975762002797620043c8565b03620027a8575062014c08620027da565b6040517ff2b2d41200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008a608001516001620027ef919062005183565b620027ff9060ff1660406200519f565b6018546200282f906103a49074010000000000000000000000000000000000000000900463ffffffff16620050d5565b6200283b9190620050d5565b601554604080517fde9ee35e0000000000000000000000000000000000000000000000000000000081528151939450600093849373ffffffffffffffffffffffffffffffffffffffff169263de9ee35e92600480820193918290030181865afa158015620028ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620028d39190620051b9565b90925090508183620028e7836018620050d5565b620028f391906200519f565b60808f01516200290590600162005183565b620029169060ff166115e06200519f565b620029229190620050d5565b6200292e9190620050d5565b6200293a9085620050d5565b6101008e01516040517f125441400000000000000000000000000000000000000000000000000000000081526004810186905291955073ffffffffffffffffffffffffffffffffffffffff1690631254414090602401602060405180830381865afa158015620029ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029d49190620050bb565b8d6060015161ffff16620029e991906200519f565b94505050506000620029fc8b86620038a6565b60008d815260046020526040902054909150610100900460ff161562002a625760008c81526023602090815260409182902082518084019093525463ffffffff811680845262ffffff640100000000909204821693830193845284529151909116908201525b600062002ace8c6040518061012001604052808d63ffffffff1681526020018681526020018781526020018c81526020018b81526020018a81526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018581526020016000151581525062003a01565b6020810151815191925062002ae391620051de565b9d9c50505050505050505050505050565b6060600083600181111562002b0d5762002b0d620043c8565b0362002bda576000848152600760205260409081902090517f6e04ff0d000000000000000000000000000000000000000000000000000000009162002b5591602401620052a9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905062002cdd565b600183600181111562002bf15762002bf1620043c8565b03620027a85760008280602001905181019062002c0f919062005320565b6000868152600760205260409081902090519192507f40691db4000000000000000000000000000000000000000000000000000000009162002c5691849160240162005434565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152915062002cdd9050565b9392505050565b60008181526005602052604090205473ffffffffffffffffffffffffffffffffffffffff16331462002d42576040517fa47c170600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600460205260409020546601000000000000900463ffffffff90811614620023e5576040517f9c0083a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600062002da9838362003bf8565b90505b92915050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905262002e4190849062003cfc565b505050565b601454760100000000000000000000000000000000000000000000900460ff161562002e9e576040517f24522f3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60175483517c010000000000000000000000000000000000000000000000000000000090910463ffffffff16101562002f03576040517fae7235df00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108fc856040015163ffffffff16108062002f495750601654604086015163ffffffff780100000000000000000000000000000000000000000000000090920482169116115b1562002f81576040517f14c237fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000868152600460205260409020546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff161562002fec576040517f6e3b930b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010085015173ffffffffffffffffffffffffffffffffffffffff9081166000908152602260205260409020546701000000000000009004166200305c576040517fc1ab6dc100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846004600088815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff02191690831515021790555060408201518160000160026101000a81548163ffffffff021916908363ffffffff16021790555060608201518160000160066101000a81548163ffffffff021916908363ffffffff160217905550608082015181600001600a6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160010160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160010160106101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555060e082015181600101601c6101000a81548163ffffffff021916908363ffffffff1602179055506101008201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050836005600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600760008881526020019081526020016000209081620032a191906200554e565b5060c085015161010086015173ffffffffffffffffffffffffffffffffffffffff16600090815260216020526040902054620032ec916bffffffffffffffffffffffff1690620050d5565b61010086015173ffffffffffffffffffffffffffffffffffffffff16600090815260216020908152604080832093909355888252601d9052206200333183826200554e565b506000868152601e602052604090206200334c82826200554e565b506200335a60028762003e0f565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151562002da9565b601554604080517f57e871e70000000000000000000000000000000000000000000000000000000081529051600092839273ffffffffffffffffffffffffffffffffffffffff90911691839183916385df51fd9160019184916357e871e79160048083019260209291908290030181865afa15801562003417573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200343d9190620050bb565b62003449919062004799565b6040518263ffffffff1660e01b81526004016200346891815260200190565b602060405180830381865afa15801562003486573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620034ac9190620050bb565b60165460408051602081019390935230908301527c0100000000000000000000000000000000000000000000000000000000900463ffffffff166060820152608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083015201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060045b600f811015620035c057838282815181106200357c576200357c62004857565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080620035b781620048db565b9150506200355c565b50846001811115620035d657620035d6620043c8565b60f81b81600f81518110620035ef57620035ef62004857565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350620036298162005675565b95945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331462002496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640162000ad7565b3373ffffffffffffffffffffffffffffffffffffffff82160362003736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000ad7565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156200381d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200384391906200512e565b509350509250506000821315806200385a57508042105b806200388e57506000846040015162ffffff161180156200388e575062003882814262004799565b846040015162ffffff16105b156200389f575050601b5492915050565b5092915050565b604080516060810182526000808252602080830182815283850183905273ffffffffffffffffffffffffffffffffffffffff868116845260229092528483208054640100000000810462ffffff1690925263ffffffff8216855285517ffeaf968c00000000000000000000000000000000000000000000000000000000815295519495909484936701000000000000009093049092169163feaf968c9160048082019260a0929091908290030181865afa15801562003969573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200398f91906200512e565b50935050925050600082131580620039a657508042105b80620039da57506000866040015162ffffff16118015620039da5750620039ce814262004799565b866040015162ffffff16105b15620039f05760018301546040850152620039f8565b604084018290525b50505092915050565b6040805160808101825260008082526020820181905291810182905260608101919091526000836060015161ffff16836060015162003a4191906200519f565b9050826101000151801562003a555750803a105b1562003a5e57503a5b60008360a0015184604001518560200151866000015162003a809190620050d5565b62003a8c90856200519f565b62003a989190620050d5565b62003aa491906200519f565b905062003ac68460e00151604001518262003ac09190620056b8565b62003e1d565b6bffffffffffffffffffffffff168352608084015162003aec9062003ac09083620056b8565b6bffffffffffffffffffffffff16604084015260e08401516020015160009062003b259062ffffff16683635c9adc5dea000006200519f565b9050600081633b9aca008760a001518860e001516000015163ffffffff1689604001518a600001518962003b5a91906200519f565b62003b669190620050d5565b62003b7291906200519f565b62003b7e91906200519f565b62003b8a9190620056b8565b62003b969190620050d5565b905062003bb28660e00151604001518262003ac09190620056b8565b6bffffffffffffffffffffffff166020860152608086015162003bdb9062003ac09083620056b8565b6bffffffffffffffffffffffff1660608601525050505092915050565b6000818152600183016020526040812054801562003cf157600062003c1f60018362004799565b855490915060009062003c359060019062004799565b905081811462003ca157600086600001828154811062003c595762003c5962004857565b906000526020600020015490508087600001848154811062003c7f5762003c7f62004857565b6000918252602080832090910192909255918252600188019052604090208390555b855486908062003cb55762003cb5620056f4565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505062002dac565b600091505062002dac565b600062003d60826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1662003ec19092919063ffffffff16565b80519091501562002e41578080602001905181019062003d81919062005723565b62002e41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000ad7565b600062002da9838362003ed2565b60006bffffffffffffffffffffffff82111562003ebd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203960448201527f3620626974730000000000000000000000000000000000000000000000000000606482015260840162000ad7565b5090565b606062002546848460008562003f24565b600081815260018301602052604081205462003f1b5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562002dac565b50600062002dac565b60608247101562003fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840162000ad7565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162003fe391906200474c565b60006040518083038185875af1925050503d806000811462004022576040519150601f19603f3d011682016040523d82523d6000602084013e62004027565b606091505b50915091506200403a8783838762004045565b979650505050505050565b60608315620040e0578251600003620040d85773ffffffffffffffffffffffffffffffffffffffff85163b620040d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000ad7565b508162002546565b620025468383815115620040f75781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ad7919062004bff565b5080546200413b9062004886565b6000825580601f106200414c575050565b601f016020900490600052602060002090810190620023e591906200417a565b6103ca806200574483390190565b5b8082111562003ebd57600081556001016200417b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610120810167ffffffffffffffff81118282101715620041e757620041e762004191565b60405290565b604051610100810167ffffffffffffffff81118282101715620041e757620041e762004191565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156200425e576200425e62004191565b604052919050565b600067ffffffffffffffff82111562004283576200428362004191565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112620042c157600080fd5b8135620042d8620042d28262004266565b62004214565b818152846020838601011115620042ee57600080fd5b816020850160208301376000918101602001919091529392505050565b600080604083850312156200431f57600080fd5b82359150602083013567ffffffffffffffff8111156200433e57600080fd5b6200434c85828601620042af565b9150509250929050565b60005b838110156200437357818101518382015260200162004359565b50506000910152565b600081518084526200439681602086016020860162004356565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b871515815260e0602082015260006200441460e08301896200437c565b9050600a87106200444e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60408201969096526060810194909452608084019290925260a083015260c09091015292915050565b73ffffffffffffffffffffffffffffffffffffffff81168114620023e557600080fd5b8035620044a78162004477565b919050565b600080600060408486031215620044c257600080fd5b833567ffffffffffffffff80821115620044db57600080fd5b818601915086601f830112620044f057600080fd5b8135818111156200450057600080fd5b8760208260051b85010111156200451657600080fd5b602092830195509350508401356200452e8162004477565b809150509250925092565b60008083601f8401126200454c57600080fd5b50813567ffffffffffffffff8111156200456557600080fd5b6020830191508360208285010111156200457e57600080fd5b9250929050565b600080602083850312156200459957600080fd5b823567ffffffffffffffff811115620045b157600080fd5b620045bf8582860162004539565b90969095509350505050565b803563ffffffff81168114620044a757600080fd5b803560028110620044a757600080fd5b60008060008060008060008060006101008a8c0312156200461057600080fd5b6200461b8a6200449a565b98506200462b60208b01620045cb565b97506200463b60408b016200449a565b96506200464b60608b01620045e0565b95506200465b60808b016200449a565b945060a08a013567ffffffffffffffff808211156200467957600080fd5b620046878d838e0162004539565b909650945060c08c0135915080821115620046a157600080fd5b620046af8d838e01620042af565b935060e08c0135915080821115620046c657600080fd5b50620046d58c828d01620042af565b9150509295985092959850929598565b600060208284031215620046f857600080fd5b5035919050565b6000602082840312156200471257600080fd5b813562002cdd8162004477565b8051620044a78162004477565b6000602082840312156200473f57600080fd5b815162002cdd8162004477565b600082516200476081846020870162004356565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111562002dac5762002dac6200476a565b8015158114620023e557600080fd5b600082601f830112620047d057600080fd5b8151620047e1620042d28262004266565b818152846020838601011115620047f757600080fd5b6200254682602083016020870162004356565b600080604083850312156200481e57600080fd5b82516200482b81620047af565b602084015190925067ffffffffffffffff8111156200484957600080fd5b6200434c85828601620047be565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600181811c908216806200489b57607f821691505b602082108103620048d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200490f576200490f6200476a565b5060010190565b600081518084526020808501945080840160005b83811015620049ef5781518051151588528381015115158489015260408082015163ffffffff908116918a01919091526060808301518216908a015260808083015173ffffffffffffffffffffffffffffffffffffffff908116918b019190915260a0808401516fffffffffffffffffffffffffffffffff16908b015260c0808401516bffffffffffffffffffffffff16908b015260e080840151909216918a019190915261010091820151169088015261012090960195908201906001016200492a565b509495945050505050565b600081518084526020808501945080840160005b83811015620049ef57815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010162004a0e565b600081518084526020808501808196508360051b8101915082860160005b8581101562004a8e57828403895262004a7b8483516200437c565b9885019893509084019060010162004a60565b5091979650505050505050565b60e081528760e082015260006101007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8a111562004ad857600080fd5b8960051b808c8386013783018381038201602085015262004afc8282018b62004916565b915050828103604084015262004b138189620049fa565b9050828103606084015262004b298188620049fa565b9050828103608084015262004b3f818762004a42565b905082810360a084015262004b55818662004a42565b905082810360c084015262004b6b818562004a42565b9b9a5050505050505050505050565b60006020828403121562004b8d57600080fd5b815160ff8116811462002cdd57600080fd5b60ff8416815260ff831660208201526060604082015260006200362960608301846200437c565b60006020828403121562004bd957600080fd5b815167ffffffffffffffff81111562004bf157600080fd5b6200254684828501620047be565b60208152600062002da960208301846200437c565b600067ffffffffffffffff82111562004c315762004c3162004191565b5060051b60200190565b600082601f83011262004c4d57600080fd5b8135602062004c60620042d28362004c14565b82815260059290921b8401810191818101908684111562004c8057600080fd5b8286015b8481101562004c9d578035835291830191830162004c84565b509695505050505050565b8035620044a781620047af565b80356fffffffffffffffffffffffffffffffff81168114620044a757600080fd5b80356bffffffffffffffffffffffff81168114620044a757600080fd5b600082601f83011262004d0557600080fd5b8135602062004d18620042d28362004c14565b828152610120928302850182019282820191908785111562004d3957600080fd5b8387015b8581101562004e135781818a03121562004d575760008081fd5b62004d61620041c0565b62004d6c8262004ca8565b815262004d7b86830162004ca8565b86820152604062004d8e818401620045cb565b90820152606062004da1838201620045cb565b90820152608062004db48382016200449a565b9082015260a062004dc783820162004cb5565b9082015260c062004dda83820162004cd6565b9082015260e062004ded838201620045cb565b9082015261010062004e018382016200449a565b90820152845292840192810162004d3d565b5090979650505050505050565b600082601f83011262004e3257600080fd5b8135602062004e45620042d28362004c14565b82815260059290921b8401810191818101908684111562004e6557600080fd5b8286015b8481101562004c9d57803562004e7f8162004477565b835291830191830162004e69565b600082601f83011262004e9f57600080fd5b8135602062004eb2620042d28362004c14565b82815260059290921b8401810191818101908684111562004ed257600080fd5b8286015b8481101562004c9d57803567ffffffffffffffff81111562004ef85760008081fd5b62004f088986838b0101620042af565b84525091830191830162004ed6565b600080600080600080600060e0888a03121562004f3357600080fd5b873567ffffffffffffffff8082111562004f4c57600080fd5b62004f5a8b838c0162004c3b565b985060208a013591508082111562004f7157600080fd5b62004f7f8b838c0162004cf3565b975060408a013591508082111562004f9657600080fd5b62004fa48b838c0162004e20565b965060608a013591508082111562004fbb57600080fd5b62004fc98b838c0162004e20565b955060808a013591508082111562004fe057600080fd5b62004fee8b838c0162004e8d565b945060a08a01359150808211156200500557600080fd5b620050138b838c0162004e8d565b935060c08a01359150808211156200502a57600080fd5b50620050398a828b0162004e8d565b91505092959891949750929550565b600063ffffffff8083168181036200506457620050646200476a565b6001019392505050565b60208152816020820152818360408301376000818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b600060208284031215620050ce57600080fd5b5051919050565b8082018082111562002dac5762002dac6200476a565b6bffffffffffffffffffffffff8281168282160390808211156200389f576200389f6200476a565b805169ffffffffffffffffffff81168114620044a757600080fd5b600080600080600060a086880312156200514757600080fd5b620051528662005113565b9450602086015193506040860151925060608601519150620051776080870162005113565b90509295509295909350565b60ff818116838216019081111562002dac5762002dac6200476a565b808202811582820484141762002dac5762002dac6200476a565b60008060408385031215620051cd57600080fd5b505080516020909101519092909150565b6bffffffffffffffffffffffff8181168382160190808211156200389f576200389f6200476a565b60008154620052158162004886565b8085526020600183811680156200523557600181146200526e576200529e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008516838901528284151560051b89010195506200529e565b866000528260002060005b85811015620052965781548a820186015290830190840162005279565b890184019650505b505050505092915050565b60208152600062002da9602083018462005206565b600082601f830112620052d057600080fd5b81516020620052e3620042d28362004c14565b82815260059290921b840181019181810190868411156200530357600080fd5b8286015b8481101562004c9d578051835291830191830162005307565b6000602082840312156200533357600080fd5b815167ffffffffffffffff808211156200534c57600080fd5b9083019061010082860312156200536257600080fd5b6200536c620041ed565b8251815260208301516020820152604083015160408201526060830151606082015260808301516080820152620053a660a084016200471f565b60a082015260c083015182811115620053be57600080fd5b620053cc87828601620052be565b60c08301525060e083015182811115620053e557600080fd5b620053f387828601620047be565b60e08301525095945050505050565b600081518084526020808501945080840160005b83811015620049ef5781518752958201959082019060010162005416565b60408152825160408201526020830151606082015260408301516080820152606083015160a0820152608083015160c082015273ffffffffffffffffffffffffffffffffffffffff60a08401511660e0820152600060c0840151610100808185015250620054a761014084018262005402565b905060e08501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc084830301610120850152620054e582826200437c565b915050828103602084015262003629818562005206565b601f82111562002e4157600081815260208120601f850160051c81016020861015620055255750805b601f850160051c820191505b81811015620055465782815560010162005531565b505050505050565b815167ffffffffffffffff8111156200556b576200556b62004191565b62005583816200557c845462004886565b84620054fc565b602080601f831160018114620055d95760008415620055a25750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855562005546565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015620056285788860151825594840194600190910190840162005607565b50858210156200566557878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b80516020808301519190811015620048d5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b600082620056ef577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000602082840312156200573657600080fd5b815162002cdd81620047af56fe60c060405234801561001057600080fd5b506040516103ca3803806103ca83398101604081905261002f91610076565b600080546001600160a01b0319166001600160a01b039384161790559181166080521660a0526100b9565b80516001600160a01b038116811461007157600080fd5b919050565b60008060006060848603121561008b57600080fd5b6100948461005a565b92506100a26020850161005a565b91506100b06040850161005a565b90509250925092565b60805160a0516102e76100e36000396000603801526000818160c4015261011701526102e76000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806379188d161461007b578063f00e6a2a146100aa575b7f00000000000000000000000000000000000000000000000000000000000000003660008037600080366000845af43d6000803e808015610076573d6000f35b3d6000fd5b61008e6100893660046101c1565b6100ee565b6040805192151583526020830191909152015b60405180910390f35b60405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016100a1565b60008054819073ffffffffffffffffffffffffffffffffffffffff16331461011557600080fd5b7f00000000000000000000000000000000000000000000000000000000000000005a91505a61138881101561014957600080fd5b61138881039050856040820482031161016157600080fd5b50803b61016d57600080fd5b6000808551602087016000858af192505a610188908361029a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156101d457600080fd5b82359150602083013567ffffffffffffffff808211156101f357600080fd5b818501915085601f83011261020757600080fd5b81358181111561021957610219610192565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561025f5761025f610192565b8160405282815288602084870101111561027857600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b818103818111156102d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9291505056fea164736f6c6343000813000aa164736f6c6343000813000a", } var AutomationRegistryLogicAABI = AutomationRegistryLogicAMetaData.ABI diff --git a/core/gethwrappers/generated/automation_registry_wrapper_2_3/automation_registry_wrapper_2_3.go b/core/gethwrappers/generated/automation_registry_wrapper_2_3/automation_registry_wrapper_2_3.go index bcefbdda2fd..9e710d00e7d 100644 --- a/core/gethwrappers/generated/automation_registry_wrapper_2_3/automation_registry_wrapper_2_3.go +++ b/core/gethwrappers/generated/automation_registry_wrapper_2_3/automation_registry_wrapper_2_3.go @@ -64,7 +64,7 @@ type AutomationRegistryBase23OnchainConfig struct { var AutomationRegistryMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"contractAutomationRegistryLogicA2_3\",\"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\":[{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"}],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDataLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidFeed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidReport\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTransmitter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTrigger\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTriggerType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MigrationNotPermitted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustSettleOffchain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustSettleOnchain\",\"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\":\"OnlyCallableByUpkeepPrivilegeManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyFinanceAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPausedUpkeep\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySimulatedBackend\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyUnpausedUpkeep\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ParameterLengthError\",\"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\":\"TransferFailed\",\"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\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"privilegeConfig\",\"type\":\"bytes\"}],\"name\":\"AdminPrivilegeConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"gasFeePPB\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"flatFeeMilliCents\",\"type\":\"uint24\"}],\"indexed\":false,\"internalType\":\"structAutomationRegistryBase2_3.BillingOverrides\",\"name\":\"overrides\",\"type\":\"tuple\"}],\"name\":\"BillingConfigOverridden\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"BillingConfigOverrideRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contractIERC20\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"gasFeePPB\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"flatFeeMilliCents\",\"type\":\"uint24\"},{\"internalType\":\"contractAggregatorV3Interface\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"fallbackPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint96\",\"name\":\"minSpend\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"structAutomationRegistryBase2_3.BillingConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"BillingConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"CancelledUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newModule\",\"type\":\"address\"}],\"name\":\"ChainSpecificModuleUpdated\",\"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\":\"bytes32\",\"name\":\"dedupKey\",\"type\":\"bytes32\"}],\"name\":\"DedupKeyAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assetAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"FeesWithdrawn\",\"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\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"InsufficientFundsUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"payees\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"payments\",\"type\":\"uint256[]\"}],\"name\":\"NOPsSettledOffchain\",\"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\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"ReorgedUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"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\":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\":\"UpkeepCheckDataSet\",\"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\":\"bytes\",\"name\":\"privilegeConfig\",\"type\":\"bytes\"}],\"name\":\"UpkeepPrivilegeConfigSet\",\"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\":\"performGas\",\"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\":\"payable\",\"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\":\"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\":\"onchainConfigBytes\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"checkGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerformGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxCheckDataSize\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"transcoder\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"reorgProtectionEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint24\",\"name\":\"stalenessSeconds\",\"type\":\"uint24\"},{\"internalType\":\"uint32\",\"name\":\"maxPerformDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxRevertDataSize\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"upkeepPrivilegeManager\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"gasCeilingMultiplier\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"financeAdmin\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"fallbackGasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fallbackLinkPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fallbackNativePrice\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"registrars\",\"type\":\"address[]\"},{\"internalType\":\"contractIChainModule\",\"name\":\"chainModule\",\"type\":\"address\"}],\"internalType\":\"structAutomationRegistryBase2_3.OnchainConfig\",\"name\":\"onchainConfig\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"},{\"internalType\":\"contractIERC20[]\",\"name\":\"billingTokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"gasFeePPB\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"flatFeeMilliCents\",\"type\":\"uint24\"},{\"internalType\":\"contractAggregatorV3Interface\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"fallbackPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint96\",\"name\":\"minSpend\",\"type\":\"uint96\"}],\"internalType\":\"structAutomationRegistryBase2_3.BillingConfig[]\",\"name\":\"billingConfigs\",\"type\":\"tuple[]\"}],\"name\":\"setConfigTypeSafe\",\"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: "0x6101806040523480156200001257600080fd5b50604051620063b8380380620063b883398101604081905262000035916200062f565b80816001600160a01b031663ca30e6036040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009b91906200062f565b826001600160a01b031663226cf83c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010091906200062f565b836001600160a01b031663614486af6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016591906200062f565b846001600160a01b0316636709d0e56040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ca91906200062f565b856001600160a01b0316635425d8ac6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000209573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022f91906200062f565b866001600160a01b031663a08714c06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029491906200062f565b876001600160a01b031663c5b964e06040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f9919062000656565b886001600160a01b031663ac4dc59a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000338573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035e91906200062f565b3380600081620003b55760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620003e857620003e8816200056b565b5050506001600160a01b0380891660805287811660a05286811660c05285811660e052848116610100528316610120526025805483919060ff19166001838181111562000439576200043962000679565b0217905550806001600160a01b0316610140816001600160a01b03168152505060c0516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200049a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004c091906200068f565b60ff1660a0516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000504573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200052a91906200068f565b60ff16146200054c576040516301f86e1760e41b815260040160405180910390fd5b5050506001600160a01b039095166101605250620006b4945050505050565b336001600160a01b03821603620005c55760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401620003ac565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6001600160a01b03811681146200062c57600080fd5b50565b6000602082840312156200064257600080fd5b81516200064f8162000616565b9392505050565b6000602082840312156200066957600080fd5b8151600281106200064f57600080fd5b634e487b7160e01b600052602160045260246000fd5b600060208284031215620006a257600080fd5b815160ff811681146200064f57600080fd5b60805160a05160c05160e05161010051610120516101405161016051615c88620007306000396000818160c9015261017c015260005050600061226a015260005050600050506000613a9e01526000505060008181610df301528181610f010152818161102c01528181611076015261176f0152615c886000f3fe6080604052600436106100c75760003560e01c8063a4c0ed3611610074578063b1dc65a41161004e578063b1dc65a414610338578063e3d0e71214610358578063f2fde38b14610378576100c7565b8063a4c0ed361461029b578063aed2e929146102bb578063afcb95d7146102f2576100c7565b80637bee169d116100a55780637bee169d146101d657806381ff7048146101f65780638da5cb5b14610270576100c7565b8063181f5a771461010e578063349e8cca1461016d57806379ba5097146101c1575b7f00000000000000000000000000000000000000000000000000000000000000003660008037600080366000845af43d6000803e808015610107573d6000f35b3d6000fd5b005b34801561011a57600080fd5b506101576040518060400160405280601881526020017f4175746f6d6174696f6e526567697374727920322e332e30000000000000000081525081565b604051610164919061462f565b60405180910390f35b34801561017957600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610164565b3480156101cd57600080fd5b5061010c610398565b3480156101e257600080fd5b5061010c6101f1366004614ba4565b61049a565b34801561020257600080fd5b5061024d60175460135463ffffffff74010000000000000000000000000000000000000000830481169378010000000000000000000000000000000000000000000000009093041691565b6040805163ffffffff948516815293909216602084015290820152606001610164565b34801561027c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661019c565b3480156102a757600080fd5b5061010c6102b6366004614d05565b610ddb565b3480156102c757600080fd5b506102db6102d6366004614d61565b6110f7565b604080519215158352602083019190915201610164565b3480156102fe57600080fd5b50601354601454604080516000815260208101939093526c0100000000000000000000000090910463ffffffff1690820152606001610164565b34801561034457600080fd5b5061010c610353366004614df2565b6112a2565b34801561036457600080fd5b5061010c610373366004614ea9565b611583565b34801561038457600080fd5b5061010c610393366004614f76565b6115bd565b60015473ffffffffffffffffffffffffffffffffffffffff16331461041e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6104a26115d1565b601f885111156104de576040517f25d0209c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560ff1660000361051b576040517fe77dba5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8651885114158061053a5750610532866003614fc9565b60ff16885111155b15610571576040517f1d2d1c5800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80518251146105ac576040517fcf54c06a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105b68282611654565b6105c08888611abc565b604051806101200160405280601460000160009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff168152602001600063ffffffff1681526020018660a0015162ffffff16815260200186610120015161ffff1681526020018760ff168152602001601460000160169054906101000a900460ff1615158152602001601460000160179054906101000a900460ff1615158152602001866080015115158152602001866101e0015173ffffffffffffffffffffffffffffffffffffffff16815250601460008201518160000160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550602082015181600001600c6101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160106101000a81548162ffffff021916908362ffffff16021790555060608201518160000160136101000a81548161ffff021916908361ffff16021790555060808201518160000160156101000a81548160ff021916908360ff16021790555060a08201518160000160166101000a81548160ff02191690831515021790555060c08201518160000160176101000a81548160ff02191690831515021790555060e08201518160000160186101000a81548160ff0219169083151502179055506101008201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050604051806101600160405280866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866000015163ffffffff168152602001866020015163ffffffff1681526020016016600001601c9054906101000a900463ffffffff1663ffffffff16815260200186610100015173ffffffffffffffffffffffffffffffffffffffff168152602001601660010160149054906101000a900463ffffffff1663ffffffff168152602001601660010160189054906101000a900463ffffffff1663ffffffff168152602001866040015163ffffffff16815260200186610140015173ffffffffffffffffffffffffffffffffffffffff1681526020018660c0015163ffffffff1681526020018660e0015163ffffffff16815250601660008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160186101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001601c6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160010160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160010160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600101601c6101000a81548163ffffffff021916908363ffffffff1602179055506101008201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101208201518160020160146101000a81548163ffffffff021916908363ffffffff1602179055506101408201518160020160186101000a81548163ffffffff021916908363ffffffff160217905550905050846101600151601981905550846101800151601a81905550846101a00151601b819055506000601660010160189054906101000a900463ffffffff169050856101e0015173ffffffffffffffffffffffffffffffffffffffff166357e871e76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea9190614fe5565b601780547fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000063ffffffff9384160217808255600192601491610c6191859174010000000000000000000000000000000000000000900416614ffe565b92506101000a81548163ffffffff021916908363ffffffff160217905550600086604051602001610c92919061506c565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018152919052601754909150610cf7904690309074010000000000000000000000000000000000000000900463ffffffff168d8d8d878d8d61217d565b601355600960008181610d0a8282614516565b5050505060005b876101c0015151811015610d6457610d51886101c001518281518110610d3957610d396151f2565b6020026020010151600961222790919063ffffffff16565b5080610d5c81615221565b915050610d11565b506013546017546040517f1591690b8638f5fb2dbec82ac741805ac5da8b45dc5263f4875b0496fdce4e0592610dc79286927401000000000000000000000000000000000000000090910463ffffffff16908f908f908f9089908f908f90615259565b60405180910390a150505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610e4a576040517fc8bad78d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208114610e84576040517fdfe9309000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e92828401846152ef565b6000818152600460205260409020549091506601000000000000900463ffffffff90811614610eed576040517f9c0083a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600460205260409020600201547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff908116911614610f71576040517fc1ab6dc100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260046020526040902060010154610fb090859070010000000000000000000000000000000090046bffffffffffffffffffffffff16615308565b600082815260046020908152604080832060010180546bffffffffffffffffffffffff95909516700100000000000000000000000000000000027fffffffff000000000000000000000000ffffffffffffffffffffffffffffffff9095169490941790935573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016825260219052205461105f90859061532d565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660009081526021602090815260409182902093909355516bffffffffffffffffffffffff871681529087169183917fafd24114486da8ebfc32f3626dada8863652e187461aa74d4bfa734891506203910160405180910390a35050505050565b600080611102612252565b601454760100000000000000000000000000000000000000000000900460ff1615611159576040517f24522f3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600085815260046020908152604091829020825161012081018452815460ff8082161515835261010080830490911615158386015262010000820463ffffffff90811684880181905266010000000000008404821660608601526a010000000000000000000090930473ffffffffffffffffffffffffffffffffffffffff9081166080860181905260018701546fffffffffffffffffffffffffffffffff811660a088015270010000000000000000000000000000000081046bffffffffffffffffffffffff1660c08801527c0100000000000000000000000000000000000000000000000000000000900490921660e0860152600290950154909416908301528451601f890185900485028101850190955287855290936112959389908990819084018382808284376000920191909152506122c192505050565b9097909650945050505050565b60005a60408051610120810182526014546bffffffffffffffffffffffff8116825263ffffffff6c01000000000000000000000000820416602083015262ffffff7001000000000000000000000000000000008204169282019290925261ffff730100000000000000000000000000000000000000830416606082015260ff75010000000000000000000000000000000000000000008304811660808301527601000000000000000000000000000000000000000000008304811615801560a08401527701000000000000000000000000000000000000000000000084048216151560c0840152780100000000000000000000000000000000000000000000000090930416151560e082015260155473ffffffffffffffffffffffffffffffffffffffff16610100820152919250611406576040517f24522f3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152600b602052604090205460ff1661144f576040517f1099ed7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6013548a351461148b576040517fdfdcf8e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b608081015161149b906001615340565b60ff16861415806114ac5750858414155b156114e3576040517f0244f71a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114f38a8a8a8a8a8a8a8a6124dc565b60006114ff8a8a612745565b905060208b0135600881901c63ffffffff1661151c8484876127fe565b836020015163ffffffff168163ffffffff16111561157457601480547fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff166c0100000000000000000000000063ffffffff8416021790555b50505050505050505050505050565b60008060008580602001905181019061159c9190615517565b9250925092506115b2898989868989888861049a565b505050505050505050565b6115c56115d1565b6115ce81613309565b50565b60005473ffffffffffffffffffffffffffffffffffffffff163314611652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610415565b565b60005b602454811015611712576022600060248381548110611678576116786151f2565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001812080547fffffffffff000000000000000000000000000000000000000000000000000000168155600181019190915560020180547fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001690558061170a81615221565b915050611657565b5061171f60246000614516565b60255460ff1660005b8351811015611ab6576000848281518110611745576117456151f2565b602002602001015190506000848381518110611763576117636151f2565b602002602001015190507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480156117d9575060018460018111156117d7576117d76156c2565b145b15611810576040517fc1ab6dc100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216158061184b5750604081015173ffffffffffffffffffffffffffffffffffffffff16155b15611882576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff828116600090815260226020526040902054670100000000000000900416156118ec576040517f357d0cc400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6024805460018082019092557f7cd332d19b93bcabe3cce7ca0c18a052f57e5fd03b4758a09f30f5ddc4b22ec40180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8581169182179092556000818152602260209081526040918290208651815488840180518a8701805163ffffffff9095167fffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000909416841764010000000062ffffff93841602177fffffffffff0000000000000000000000000000000000000000ffffffffffffff16670100000000000000958b16959095029490941785556060808c0180519b87019b909b556080808d018051600290980180547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff998a1617905589519586529351909216968401969096529251909716948101949094529551918301919091529251909216928201929092527f720a5849025dc4fd0061aed1bb30efd713cde64ce7f8d807953ecca27c8f143c9060a00160405180910390a250508080611aae90615221565b915050611728565b50505050565b60005b600e54811015611b3357611b20600e8281548110611adf57611adf6151f2565b600091825260209091200154601454600e5473ffffffffffffffffffffffffffffffffffffffff909216916bffffffffffffffffffffffff909116906133fe565b5080611b2b81615221565b915050611abf565b5060255460009060ff16815b600e54811015611ca457600e8181548110611b5c57611b5c6151f2565b6000918252602082200154600d805473ffffffffffffffffffffffffffffffffffffffff9092169550600c929184908110611b9957611b996151f2565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff9081168452838201949094526040928301822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001690559286168152600b909252902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556001826001811115611c3b57611c3b6156c2565b148015611c80575073ffffffffffffffffffffffffffffffffffffffff83166000908152600b60205260409020546201000090046bffffffffffffffffffffffff1615155b15611c9257611c90600f84612227565b505b80611c9c81615221565b915050611b3f565b50611cb1600d6000614516565b611cbd600e6000614516565b6040805160808101825260008082526020820181905291810182905260608101829052905b855181101561214d57600c6000878381518110611d0157611d016151f2565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040016000205460ff1615611d6c576040517f77cea0fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16868281518110611d9657611d966151f2565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603611deb576040517f815e1d6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052806001151581526020018260ff16815250600c6000888481518110611e1c57611e1c6151f2565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528181019290925260400160002082518154939092015160ff16610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092171790558451859082908110611ec457611ec46151f2565b60200260200101519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611f34576040517f58a70a0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff84166000908152600b60209081526040918290208251608081018452905460ff80821615801584526101008304909116938301939093526bffffffffffffffffffffffff6201000082048116948301949094526e01000000000000000000000000000090049092166060830152909250611fef576040517f6a7281ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180835260ff80831660208086019182526014546bffffffffffffffffffffffff9081166060880190815273ffffffffffffffffffffffffffffffffffffffff8a166000908152600b909352604092839020885181549551948a0151925184166e010000000000000000000000000000027fffffffffffff000000000000000000000000ffffffffffffffffffffffffffff939094166201000002929092167fffffffffffff000000000000000000000000000000000000000000000000ffff94909616610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000090951694909417179190911692909217919091179055836001811115612129576121296156c2565b0361213b57612139600f85613606565b505b8061214581615221565b915050611ce2565b50845161216190600d906020880190614534565b50835161217590600e906020870190614534565b505050505050565b6000808a8a8a8a8a8a8a8a8a6040516020016121a1999897969594939291906156f1565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905280516020909101207dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e01000000000000000000000000000000000000000000000000000000000000179b9a5050505050505050505050565b60006122498373ffffffffffffffffffffffffffffffffffffffff8416613628565b90505b92915050565b3273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611652576040517fb60ac5db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601454600090819077010000000000000000000000000000000000000000000000900460ff161561231e576040517f37ed32e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601480547fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff16770100000000000000000000000000000000000000000000001790556040517f4585e33b000000000000000000000000000000000000000000000000000000009061239390859060240161462f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290517f79188d1600000000000000000000000000000000000000000000000000000000815290935073ffffffffffffffffffffffffffffffffffffffff8616906379188d16906124669087908790600401615786565b60408051808303816000875af1158015612484573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a8919061579f565b601480547fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff16905590969095509350505050565b600087876040516124ee9291906157cd565b604051908190038120612505918b906020016157dd565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201208383019092526000808452908301819052909250906000805b888110156126dc57600185878360208110612571576125716151f2565b61257e91901a601b615340565b8c8c85818110612590576125906151f2565b905060200201358b8b868181106125a9576125a96151f2565b90506020020135604051600081526020016040526040516125e6949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015612608573d6000803e3d6000fd5b5050604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081015173ffffffffffffffffffffffffffffffffffffffff81166000908152600c602090815290849020838501909452925460ff80821615158085526101009092041693830193909352909550935090506126b6576040517f0f4c073700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826020015160080260ff166001901b8401935080806126d490615221565b915050612554565b50827e01010101010101010101010101010101010101010101010101010101010101841614612737576040517fc103be2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050505050565b61277e6040518060c001604052806000815260200160008152602001606081526020016060815260200160608152602001606081525090565b600061278c838501856158ce565b60408101515160608201515191925090811415806127af57508082608001515114155b806127bf5750808260a001515114155b156127f6576040517fb55ac75400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b509392505050565b600082604001515167ffffffffffffffff81111561281e5761281e614642565b6040519080825280602002602001820160405280156128ea57816020015b6040805161020081018252600060e08201818152610100830182905261012083018290526101408301829052610160830182905261018083018290526101a083018290526101c083018290526101e0830182905282526020808301829052928201819052606082018190526080820181905260a0820181905260c082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161283c5790505b50905060006040518060800160405280600061ffff16815260200160006bffffffffffffffffffffffff16815260200160006bffffffffffffffffffffffff16815260200160008152509050600085610100015173ffffffffffffffffffffffffffffffffffffffff166357e871e76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612988573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ac9190614fe5565b9050600086610100015173ffffffffffffffffffffffffffffffffffffffff166318b8f6136040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a249190614fe5565b905060005b866040015151811015612eb4576004600088604001518381518110612a5057612a506151f2565b6020908102919091018101518252818101929092526040908101600020815161012081018352815460ff8082161515835261010080830490911615159583019590955263ffffffff620100008204811694830194909452660100000000000081048416606083015273ffffffffffffffffffffffffffffffffffffffff6a01000000000000000000009091048116608083015260018301546fffffffffffffffffffffffffffffffff811660a08401526bffffffffffffffffffffffff70010000000000000000000000000000000082041660c08401527c0100000000000000000000000000000000000000000000000000000000900490931660e0820152600290910154909116918101919091528551869083908110612b7357612b736151f2565b602002602001015160000181905250612ba887604001518281518110612b9b57612b9b6151f2565b6020026020010151613677565b858281518110612bba57612bba6151f2565b6020026020010151606001906001811115612bd757612bd76156c2565b90816001811115612bea57612bea6156c2565b81525050612c4e87604001518281518110612c0757612c076151f2565b60200260200101518489608001518481518110612c2657612c266151f2565b6020026020010151888581518110612c4057612c406151f2565b60200260200101518c613722565b868381518110612c6057612c606151f2565b6020026020010151602001878481518110612c7d57612c7d6151f2565b602002602001015160c0018281525082151515158152505050848181518110612ca857612ca86151f2565b60200260200101516020015115612cd857600184600001818151612ccc91906159bb565b61ffff16905250612cdd565b612ea2565b612d43858281518110612cf257612cf26151f2565b6020026020010151600001516080015188606001518381518110612d1857612d186151f2565b60200260200101518960a001518481518110612d3657612d366151f2565b60200260200101516122c1565b868381518110612d5557612d556151f2565b6020026020010151604001878481518110612d7257612d726151f2565b6020026020010151608001828152508215151515815250505087608001516001612d9c9190615340565b612daa9060ff1660406159d6565b6103a48860a001518381518110612dc357612dc36151f2565b602002602001015151612dd6919061532d565b612de0919061532d565b858281518110612df257612df26151f2565b602002602001015160a0018181525050848181518110612e1457612e146151f2565b602002602001015160a0015184606001818151612e31919061532d565b9052508451859082908110612e4857612e486151f2565b60200260200101516080015186612e5f91906159ed565b9550612ea287604001518281518110612e7a57612e7a6151f2565b602002602001015184878481518110612e9557612e956151f2565b6020026020010151613841565b80612eac81615221565b915050612a29565b50825161ffff16600003612ecb5750505050505050565b6155f0612ed93660106159d6565b5a612ee490886159ed565b612eee919061532d565b612ef8919061532d565b8351909550611b5890612f0f9061ffff1687615a2f565b612f19919061532d565b604080516060810182526000808252602082018190529181018290529196505b87604001515181101561323857858181518110612f5857612f586151f2565b6020026020010151602001511561322657801580612ff0575085612f7d6001836159ed565b81518110612f8d57612f8d6151f2565b602002602001015160000151610100015173ffffffffffffffffffffffffffffffffffffffff16868281518110612fc657612fc66151f2565b602002602001015160000151610100015173ffffffffffffffffffffffffffffffffffffffff1614155b15613024576130218987838151811061300b5761300b6151f2565b6020026020010151600001516101000151613946565b91505b600061310a8a6040518061010001604052808a8681518110613048576130486151f2565b60200260200101516080015181526020018b815260200189606001518b8781518110613076576130766151f2565b602002602001015160a001518961308d91906159d6565b6130979190615a2f565b81526020018c6000015181526020018c6020015181526020016130b98e613a97565b81526020810187905260016040918201528c01518051869081106130df576130df6151f2565b60200260200101518a86815181106130f9576130f96151f2565b602002602001015160000151613b88565b90508060600151866040018181516131229190615308565b6bffffffffffffffffffffffff169052506040810151602087018051613149908390615308565b6bffffffffffffffffffffffff16905250865187908390811061316e5761316e6151f2565b602002602001015160400151151589604001518381518110613192576131926151f2565b60200260200101517fad8cc9579b21dfe2c2f6ea35ba15b656e46b4f5b0cb424f52739b8ce5cac9c5b836060015184604001516131cf9190615308565b8a86815181106131e1576131e16151f2565b6020026020010151608001518c8e608001518881518110613204576132046151f2565b602002602001015160405161321c9493929190615a43565b60405180910390a3505b8061323081615221565b915050612f39565b5050602083810151336000908152600b909252604090912080546002906132749084906201000090046bffffffffffffffffffffffff16615308565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508260400151601460000160008282829054906101000a90046bffffffffffffffffffffffff166132d29190615308565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff821603613388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610415565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600b602090815260408083208151608081018352905460ff80821615801584526101008304909116948301949094526bffffffffffffffffffffffff6201000082048116938301939093526e01000000000000000000000000000090049091166060820152906135fa5760008160600151856134969190615a80565b905060006134a48583615aa5565b905080836040018181516134b89190615308565b6bffffffffffffffffffffffff169052506134d38582615ad0565b836060018181516134e49190615308565b6bffffffffffffffffffffffff90811690915273ffffffffffffffffffffffffffffffffffffffff89166000908152600b602090815260409182902087518154928901519389015160608a015186166e010000000000000000000000000000027fffffffffffff000000000000000000000000ffffffffffffffffffffffffffff919096166201000002167fffffffffffff000000000000000000000000000000000000000000000000ffff60ff95909516610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909416939093171792909216179190911790555050505b60400151949350505050565b60006122498373ffffffffffffffffffffffffffffffffffffffff8416613e20565b600081815260018301602052604081205461366f5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561224c565b50600061224c565b6000818160045b600f811015613704577fff0000000000000000000000000000000000000000000000000000000000000082168382602081106136bc576136bc6151f2565b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146136f257506000949350505050565b806136fc81615221565b91505061367e565b5081600f1a600181111561371a5761371a6156c2565b949350505050565b60008080808560600151600181111561373d5761373d6156c2565b036137635761374f8888888888613f13565b61375e57600092509050613837565b6137db565b60018560600151600181111561377b5761377b6156c2565b036137a957600061378e8989898861409d565b92509050806137a35750600092509050613837565b506137db565b6040517ff2b2d41200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84516060015163ffffffff16871061383057877fc3237c8807c467c1b39b8d0395eff077313e691bf0a7388106792564ebfd56368760405161381d919061462f565b60405180910390a2600092509050613837565b6001925090505b9550959350505050565b600081606001516001811115613859576138596156c2565b036138bd57600083815260046020526040902060010180547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff851602179055505050565b6001816060015160018111156138d5576138d56156c2565b036139415760c08101805160009081526008602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055915191517fa4a4e334c0e330143f9437484fe516c13bc560b86b5b0daf58e7084aaac228f29190a25b505050565b604080516060810182526000808252602080830182815283850183905273ffffffffffffffffffffffffffffffffffffffff868116845260229092528483208054640100000000810462ffffff1690925263ffffffff8216855285517ffeaf968c00000000000000000000000000000000000000000000000000000000815295519495909484936701000000000000009093049092169163feaf968c9160048082019260a0929091908290030181865afa158015613a08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2c9190615b1a565b50935050925050600082131580613a4257508042105b80613a7257506000866040015162ffffff16118015613a725750613a6681426159ed565b866040015162ffffff16105b15613a865760018301546040850152613a8e565b604084018290525b50505092915050565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015613b07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b2b9190615b1a565b50935050925050600082131580613b4157508042105b80613b7157506000846040015162ffffff16118015613b715750613b6581426159ed565b846040015162ffffff16105b15613b81575050601b5492915050565b5092915050565b604080516080810182526000808252602080830182905292820181905260608201529082015115613c015760008381526023602090815260409182902082518084019093525463ffffffff811680845262ffffff640100000000909204821693830193845260c088018051919091529251925192169101525b6000613c0d86866142aa565b60c0840151602082015182519293509091600091613c2a91615308565b905082600001516bffffffffffffffffffffffff16826bffffffffffffffffffffffff161015613caf57819050613c9087608001518860c0015160400151846bffffffffffffffffffffffff16613c8191906159d6565b613c8b9190615a2f565b614474565b6bffffffffffffffffffffffff16604084015260006060840152613d3b565b806bffffffffffffffffffffffff16826bffffffffffffffffffffffff161015613d3b57819050613d2783604001516bffffffffffffffffffffffff1688608001518960c0015160400151856bffffffffffffffffffffffff16613d1391906159d6565b613d1d9190615a2f565b613c8b91906159ed565b6bffffffffffffffffffffffff1660608401525b60008681526004602052604090206001018054829190601090613d8190849070010000000000000000000000000000000090046bffffffffffffffffffffffff16615a80565b82546101009290920a6bffffffffffffffffffffffff81810219909316918316021790915560008881526004602052604081206001018054928516935091613ddc9084906fffffffffffffffffffffffffffffffff16615b6a565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550829350505050949350505050565b60008181526001830160205260408120548015613f09576000613e446001836159ed565b8554909150600090613e58906001906159ed565b9050818114613ebd576000866000018281548110613e7857613e786151f2565b9060005260206000200154905080876000018481548110613e9b57613e9b6151f2565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613ece57613ece615b93565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061224c565b600091505061224c565b60008084806020019051810190613f2a9190615bc2565b845160e00151815191925063ffffffff90811691161015613f8757867f405288ea7be309e16cfdf481367f90a413e1d4634fcdaf8966546db9b93012e886604051613f75919061462f565b60405180910390a26000915050614094565b8260e00151801561404757506020810151158015906140475750602081015161010084015182516040517f85df51fd00000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff909116906385df51fd90602401602060405180830381865afa158015614020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140449190614fe5565b14155b806140595750805163ffffffff168611155b1561408e57867f6aa7f60c176da7af894b384daea2249497448137f5943c1237ada8bc92bdc30186604051613f75919061462f565b60019150505b95945050505050565b6000806000848060200190518101906140b69190615c1a565b905060008782600001518360200151846040015160405160200161411894939291909384526020840192909252604083015260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016606082015260640190565b6040516020818303038152906040528051906020012090508460e0015180156141f357506080820151158015906141f35750608082015161010086015160608401516040517f85df51fd00000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff909116906385df51fd90602401602060405180830381865afa1580156141cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141f09190614fe5565b14155b80614208575086826060015163ffffffff1610155b1561425257877f6aa7f60c176da7af894b384daea2249497448137f5943c1237ada8bc92bdc3018760405161423d919061462f565b60405180910390a26000935091506142a19050565b60008181526008602052604090205460ff161561429957877f405288ea7be309e16cfdf481367f90a413e1d4634fcdaf8966546db9b93012e88760405161423d919061462f565b600193509150505b94509492505050565b6040805160808101825260008082526020820181905291810182905260608101919091526000836060015161ffff1683606001516142e891906159d6565b90508260e0015180156142fa5750803a105b1561430257503a5b60008360a00151846040015185602001518660000151614322919061532d565b61432c90856159d6565b614336919061532d565b61434091906159d6565b90506143598460c001516040015182613c8b9190615a2f565b6bffffffffffffffffffffffff168352608084015161437c90613c8b9083615a2f565b6bffffffffffffffffffffffff16604084015260c0840151602001516000906143b39062ffffff16683635c9adc5dea000006159d6565b9050600081633b9aca008760a001518860c001516000015163ffffffff1689604001518a60000151896143e691906159d6565b6143f0919061532d565b6143fa91906159d6565b61440491906159d6565b61440e9190615a2f565b614418919061532d565b90506144318660c001516040015182613c8b9190615a2f565b6bffffffffffffffffffffffff166020860152608086015161445790613c8b9083615a2f565b6bffffffffffffffffffffffff1660608601525050505092915050565b60006bffffffffffffffffffffffff821115614512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203960448201527f36206269747300000000000000000000000000000000000000000000000000006064820152608401610415565b5090565b50805460008255906000526020600020908101906115ce91906145b6565b8280548282559060005260206000209081019282156145ae579160200282015b828111156145ae57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190614554565b506145129291505b5b8082111561451257600081556001016145b7565b6000815180845260005b818110156145f1576020818501810151868301820152016145d5565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061224960208301846145cb565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610200810167ffffffffffffffff8111828210171561469557614695614642565b60405290565b60405160a0810167ffffffffffffffff8111828210171561469557614695614642565b60405160c0810167ffffffffffffffff8111828210171561469557614695614642565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561472857614728614642565b604052919050565b600067ffffffffffffffff82111561474a5761474a614642565b5060051b60200190565b73ffffffffffffffffffffffffffffffffffffffff811681146115ce57600080fd5b803561478181614754565b919050565b600082601f83011261479757600080fd5b813560206147ac6147a783614730565b6146e1565b82815260059290921b840181019181810190868411156147cb57600080fd5b8286015b848110156147ef5780356147e281614754565b83529183019183016147cf565b509695505050505050565b803560ff8116811461478157600080fd5b63ffffffff811681146115ce57600080fd5b80356147818161480b565b80151581146115ce57600080fd5b803561478181614828565b62ffffff811681146115ce57600080fd5b803561478181614841565b61ffff811681146115ce57600080fd5b80356147818161485d565b6000610200828403121561488b57600080fd5b614893614671565b905061489e8261481d565b81526148ac6020830161481d565b60208201526148bd6040830161481d565b60408201526148ce60608301614776565b60608201526148df60808301614836565b60808201526148f060a08301614852565b60a082015261490160c0830161481d565b60c082015261491260e0830161481d565b60e0820152610100614925818401614776565b9082015261012061493783820161486d565b90820152610140614949838201614776565b90820152610160828101359082015261018080830135908201526101a080830135908201526101c08083013567ffffffffffffffff81111561498a57600080fd5b61499685828601614786565b8284015250506101e06149aa818401614776565b9082015292915050565b803567ffffffffffffffff8116811461478157600080fd5b600082601f8301126149dd57600080fd5b813567ffffffffffffffff8111156149f7576149f7614642565b614a2860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016146e1565b818152846020838601011115614a3d57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112614a6b57600080fd5b81356020614a7b6147a783614730565b82815260059290921b84018101918181019086841115614a9a57600080fd5b8286015b848110156147ef578035614ab181614754565b8352918301918301614a9e565b6bffffffffffffffffffffffff811681146115ce57600080fd5b600082601f830112614ae957600080fd5b81356020614af96147a783614730565b82815260a09283028501820192828201919087851115614b1857600080fd5b8387015b85811015614b975781818a031215614b345760008081fd5b614b3c61469b565b8135614b478161480b565b815281860135614b5681614841565b81870152604082810135614b6981614754565b9082015260608281013590820152608080830135614b8681614abe565b908201528452928401928101614b1c565b5090979650505050505050565b600080600080600080600080610100898b031215614bc157600080fd5b883567ffffffffffffffff80821115614bd957600080fd5b614be58c838d01614786565b995060208b0135915080821115614bfb57600080fd5b614c078c838d01614786565b9850614c1560408c016147fa565b975060608b0135915080821115614c2b57600080fd5b614c378c838d01614878565b9650614c4560808c016149b4565b955060a08b0135915080821115614c5b57600080fd5b614c678c838d016149cc565b945060c08b0135915080821115614c7d57600080fd5b614c898c838d01614a5a565b935060e08b0135915080821115614c9f57600080fd5b50614cac8b828c01614ad8565b9150509295985092959890939650565b60008083601f840112614cce57600080fd5b50813567ffffffffffffffff811115614ce657600080fd5b602083019150836020828501011115614cfe57600080fd5b9250929050565b60008060008060608587031215614d1b57600080fd5b8435614d2681614754565b935060208501359250604085013567ffffffffffffffff811115614d4957600080fd5b614d5587828801614cbc565b95989497509550505050565b600080600060408486031215614d7657600080fd5b83359250602084013567ffffffffffffffff811115614d9457600080fd5b614da086828701614cbc565b9497909650939450505050565b60008083601f840112614dbf57600080fd5b50813567ffffffffffffffff811115614dd757600080fd5b6020830191508360208260051b8501011115614cfe57600080fd5b60008060008060008060008060e0898b031215614e0e57600080fd5b606089018a811115614e1f57600080fd5b8998503567ffffffffffffffff80821115614e3957600080fd5b614e458c838d01614cbc565b909950975060808b0135915080821115614e5e57600080fd5b614e6a8c838d01614dad565b909750955060a08b0135915080821115614e8357600080fd5b50614e908b828c01614dad565b999c989b50969995989497949560c00135949350505050565b60008060008060008060c08789031215614ec257600080fd5b863567ffffffffffffffff80821115614eda57600080fd5b614ee68a838b01614786565b97506020890135915080821115614efc57600080fd5b614f088a838b01614786565b9650614f1660408a016147fa565b95506060890135915080821115614f2c57600080fd5b614f388a838b016149cc565b9450614f4660808a016149b4565b935060a0890135915080821115614f5c57600080fd5b50614f6989828a016149cc565b9150509295509295509295565b600060208284031215614f8857600080fd5b8135614f9381614754565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60ff8181168382160290811690818114613b8157613b81614f9a565b600060208284031215614ff757600080fd5b5051919050565b63ffffffff818116838216019080821115613b8157613b81614f9a565b600081518084526020808501945080840160005b8381101561506157815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010161502f565b509495945050505050565b6020815261508360208201835163ffffffff169052565b6000602083015161509c604084018263ffffffff169052565b50604083015163ffffffff8116606084015250606083015173ffffffffffffffffffffffffffffffffffffffff8116608084015250608083015180151560a08401525060a083015162ffffff811660c08401525060c083015163ffffffff811660e08401525060e083015161010061511b8185018363ffffffff169052565b84015190506101206151448482018373ffffffffffffffffffffffffffffffffffffffff169052565b840151905061014061515b8482018361ffff169052565b84015190506101606151848482018373ffffffffffffffffffffffffffffffffffffffff169052565b840151610180848101919091528401516101a0808501919091528401516101c0808501919091528401516102006101e0808601829052919250906151cc61022086018461501b565b95015173ffffffffffffffffffffffffffffffffffffffff169301929092525090919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361525257615252614f9a565b5060010190565b600061012063ffffffff808d1684528b6020850152808b166040850152508060608401526152898184018a61501b565b9050828103608084015261529d818961501b565b905060ff871660a084015282810360c08401526152ba81876145cb565b905067ffffffffffffffff851660e08401528281036101008401526152df81856145cb565b9c9b505050505050505050505050565b60006020828403121561530157600080fd5b5035919050565b6bffffffffffffffffffffffff818116838216019080821115613b8157613b81614f9a565b8082018082111561224c5761224c614f9a565b60ff818116838216019081111561224c5761224c614f9a565b80516147818161480b565b805161478181614754565b805161478181614828565b805161478181614841565b80516147818161485d565b600082601f8301126153a157600080fd5b815160206153b16147a783614730565b82815260059290921b840181019181810190868411156153d057600080fd5b8286015b848110156147ef5780516153e781614754565b83529183019183016153d4565b600082601f83011261540557600080fd5b815160206154156147a783614730565b82815260059290921b8401810191818101908684111561543457600080fd5b8286015b848110156147ef57805161544b81614754565b8352918301918301615438565b600082601f83011261546957600080fd5b815160206154796147a783614730565b82815260a0928302850182019282820191908785111561549857600080fd5b8387015b85811015614b975781818a0312156154b45760008081fd5b6154bc61469b565b81516154c78161480b565b8152818601516154d681614841565b818701526040828101516154e981614754565b908201526060828101519082015260808083015161550681614abe565b90820152845292840192810161549c565b60008060006060848603121561552c57600080fd5b835167ffffffffffffffff8082111561554457600080fd5b90850190610200828803121561555957600080fd5b615561614671565b61556a83615359565b815261557860208401615359565b602082015261558960408401615359565b604082015261559a60608401615364565b60608201526155ab6080840161536f565b60808201526155bc60a0840161537a565b60a08201526155cd60c08401615359565b60c08201526155de60e08401615359565b60e08201526101006155f1818501615364565b90820152610120615603848201615385565b90820152610140615615848201615364565b90820152610160838101519082015261018080840151908201526101a080840151908201526101c0808401518381111561564e57600080fd5b61565a8a828701615390565b8284015250506101e061566e818501615364565b90820152602087015190955091508082111561568957600080fd5b615695878388016153f4565b935060408601519150808211156156ab57600080fd5b506156b886828701615458565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006101208b835273ffffffffffffffffffffffffffffffffffffffff8b16602084015267ffffffffffffffff808b1660408501528160608501526157388285018b61501b565b9150838203608085015261574c828a61501b565b915060ff881660a085015283820360c085015261576982886145cb565b90861660e085015283810361010085015290506152df81856145cb565b82815260406020820152600061371a60408301846145cb565b600080604083850312156157b257600080fd5b82516157bd81614828565b6020939093015192949293505050565b8183823760009101908152919050565b8281526080810160608360208401379392505050565b600082601f83011261580457600080fd5b813560206158146147a783614730565b82815260059290921b8401810191818101908684111561583357600080fd5b8286015b848110156147ef5780358352918301918301615837565b600082601f83011261585f57600080fd5b8135602061586f6147a783614730565b82815260059290921b8401810191818101908684111561588e57600080fd5b8286015b848110156147ef57803567ffffffffffffffff8111156158b25760008081fd5b6158c08986838b01016149cc565b845250918301918301615892565b6000602082840312156158e057600080fd5b813567ffffffffffffffff808211156158f857600080fd5b9083019060c0828603121561590c57600080fd5b6159146146be565b823581526020830135602082015260408301358281111561593457600080fd5b615940878286016157f3565b60408301525060608301358281111561595857600080fd5b615964878286016157f3565b60608301525060808301358281111561597c57600080fd5b6159888782860161584e565b60808301525060a0830135828111156159a057600080fd5b6159ac8782860161584e565b60a08301525095945050505050565b61ffff818116838216019080821115613b8157613b81614f9a565b808202811582820484141761224c5761224c614f9a565b8181038181111561224c5761224c614f9a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615a3e57615a3e615a00565b500490565b6bffffffffffffffffffffffff85168152836020820152826040820152608060608201526000615a7660808301846145cb565b9695505050505050565b6bffffffffffffffffffffffff828116828216039080821115613b8157613b81614f9a565b60006bffffffffffffffffffffffff80841680615ac457615ac4615a00565b92169190910492915050565b6bffffffffffffffffffffffff818116838216028082169190828114615af857615af8614f9a565b505092915050565b805169ffffffffffffffffffff8116811461478157600080fd5b600080600080600060a08688031215615b3257600080fd5b615b3b86615b00565b9450602086015193506040860151925060608601519150615b5e60808701615b00565b90509295509295909350565b6fffffffffffffffffffffffffffffffff818116838216019080821115613b8157613b81614f9a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600060408284031215615bd457600080fd5b6040516040810181811067ffffffffffffffff82111715615bf757615bf7614642565b6040528251615c058161480b565b81526020928301519281019290925250919050565b600060a08284031215615c2c57600080fd5b615c3461469b565b82518152602083015160208201526040830151615c508161480b565b60408201526060830151615c638161480b565b6060820152608092830151928101929092525091905056fea164736f6c6343000813000a", + Bin: "0x6101806040523480156200001257600080fd5b50604051620064f9380380620064f983398101604081905262000035916200062f565b80816001600160a01b031663ca30e6036040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009b91906200062f565b826001600160a01b031663226cf83c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010091906200062f565b836001600160a01b031663614486af6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016591906200062f565b846001600160a01b0316636709d0e56040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ca91906200062f565b856001600160a01b0316635425d8ac6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000209573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022f91906200062f565b866001600160a01b031663a08714c06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029491906200062f565b876001600160a01b031663c5b964e06040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f9919062000656565b886001600160a01b031663ac4dc59a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000338573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035e91906200062f565b3380600081620003b55760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620003e857620003e8816200056b565b5050506001600160a01b0380891660805287811660a05286811660c05285811660e052848116610100528316610120526025805483919060ff19166001838181111562000439576200043962000679565b0217905550806001600160a01b0316610140816001600160a01b03168152505060c0516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200049a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004c091906200068f565b60ff1660a0516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000504573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200052a91906200068f565b60ff16146200054c576040516301f86e1760e41b815260040160405180910390fd5b5050506001600160a01b039095166101605250620006b4945050505050565b336001600160a01b03821603620005c55760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401620003ac565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6001600160a01b03811681146200062c57600080fd5b50565b6000602082840312156200064257600080fd5b81516200064f8162000616565b9392505050565b6000602082840312156200066957600080fd5b8151600281106200064f57600080fd5b634e487b7160e01b600052602160045260246000fd5b600060208284031215620006a257600080fd5b815160ff811681146200064f57600080fd5b60805160a05160c05160e05161010051610120516101405161016051615dc2620007376000396000818160c9015261017c015260005050600061226a015260005050600050506000613b7301526000505060008181610df301528181610f010152818161102c015281816110760152818161176f01526133680152615dc26000f3fe6080604052600436106100c75760003560e01c8063a4c0ed3611610074578063b1dc65a41161004e578063b1dc65a414610338578063e3d0e71214610358578063f2fde38b14610378576100c7565b8063a4c0ed361461029b578063aed2e929146102bb578063afcb95d7146102f2576100c7565b80637bee169d116100a55780637bee169d146101d657806381ff7048146101f65780638da5cb5b14610270576100c7565b8063181f5a771461010e578063349e8cca1461016d57806379ba5097146101c1575b7f00000000000000000000000000000000000000000000000000000000000000003660008037600080366000845af43d6000803e808015610107573d6000f35b3d6000fd5b005b34801561011a57600080fd5b506101576040518060400160405280601881526020017f4175746f6d6174696f6e526567697374727920322e332e30000000000000000081525081565b6040516101649190614769565b60405180910390f35b34801561017957600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610164565b3480156101cd57600080fd5b5061010c610398565b3480156101e257600080fd5b5061010c6101f1366004614cde565b61049a565b34801561020257600080fd5b5061024d60175460135463ffffffff74010000000000000000000000000000000000000000830481169378010000000000000000000000000000000000000000000000009093041691565b6040805163ffffffff948516815293909216602084015290820152606001610164565b34801561027c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661019c565b3480156102a757600080fd5b5061010c6102b6366004614e3f565b610ddb565b3480156102c757600080fd5b506102db6102d6366004614e9b565b6110f7565b604080519215158352602083019190915201610164565b3480156102fe57600080fd5b50601354601454604080516000815260208101939093526c0100000000000000000000000090910463ffffffff1690820152606001610164565b34801561034457600080fd5b5061010c610353366004614f2c565b6112a2565b34801561036457600080fd5b5061010c610373366004614fe3565b611583565b34801561038457600080fd5b5061010c6103933660046150b0565b6115bd565b60015473ffffffffffffffffffffffffffffffffffffffff16331461041e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6104a26115d1565b601f885111156104de576040517f25d0209c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560ff1660000361051b576040517fe77dba5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8651885114158061053a5750610532866003615103565b60ff16885111155b15610571576040517f1d2d1c5800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80518251146105ac576040517fcf54c06a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105b68282611654565b6105c08888611abc565b604051806101200160405280601460000160009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff168152602001600063ffffffff1681526020018660a0015162ffffff16815260200186610120015161ffff1681526020018760ff168152602001601460000160169054906101000a900460ff1615158152602001601460000160179054906101000a900460ff1615158152602001866080015115158152602001866101e0015173ffffffffffffffffffffffffffffffffffffffff16815250601460008201518160000160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550602082015181600001600c6101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160106101000a81548162ffffff021916908362ffffff16021790555060608201518160000160136101000a81548161ffff021916908361ffff16021790555060808201518160000160156101000a81548160ff021916908360ff16021790555060a08201518160000160166101000a81548160ff02191690831515021790555060c08201518160000160176101000a81548160ff02191690831515021790555060e08201518160000160186101000a81548160ff0219169083151502179055506101008201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050604051806101600160405280866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866000015163ffffffff168152602001866020015163ffffffff1681526020016016600001601c9054906101000a900463ffffffff1663ffffffff16815260200186610100015173ffffffffffffffffffffffffffffffffffffffff168152602001601660010160149054906101000a900463ffffffff1663ffffffff168152602001601660010160189054906101000a900463ffffffff1663ffffffff168152602001866040015163ffffffff16815260200186610140015173ffffffffffffffffffffffffffffffffffffffff1681526020018660c0015163ffffffff1681526020018660e0015163ffffffff16815250601660008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160186101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001601c6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160010160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160010160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600101601c6101000a81548163ffffffff021916908363ffffffff1602179055506101008201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101208201518160020160146101000a81548163ffffffff021916908363ffffffff1602179055506101408201518160020160186101000a81548163ffffffff021916908363ffffffff160217905550905050846101600151601981905550846101800151601a81905550846101a00151601b819055506000601660010160189054906101000a900463ffffffff169050856101e0015173ffffffffffffffffffffffffffffffffffffffff166357e871e76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea919061511f565b601780547fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000063ffffffff9384160217808255600192601491610c6191859174010000000000000000000000000000000000000000900416615138565b92506101000a81548163ffffffff021916908363ffffffff160217905550600086604051602001610c9291906151a6565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018152919052601754909150610cf7904690309074010000000000000000000000000000000000000000900463ffffffff168d8d8d878d8d61217d565b601355600960008181610d0a8282614650565b5050505060005b876101c0015151811015610d6457610d51886101c001518281518110610d3957610d3961532c565b6020026020010151600961222790919063ffffffff16565b5080610d5c8161535b565b915050610d11565b506013546017546040517f1591690b8638f5fb2dbec82ac741805ac5da8b45dc5263f4875b0496fdce4e0592610dc79286927401000000000000000000000000000000000000000090910463ffffffff16908f908f908f9089908f908f90615393565b60405180910390a150505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610e4a576040517fc8bad78d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208114610e84576040517fdfe9309000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e9282840184615429565b6000818152600460205260409020549091506601000000000000900463ffffffff90811614610eed576040517f9c0083a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600460205260409020600201547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff908116911614610f71576040517fc1ab6dc100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260046020526040902060010154610fb090859070010000000000000000000000000000000090046bffffffffffffffffffffffff16615442565b600082815260046020908152604080832060010180546bffffffffffffffffffffffff95909516700100000000000000000000000000000000027fffffffff000000000000000000000000ffffffffffffffffffffffffffffffff9095169490941790935573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016825260219052205461105f908590615467565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660009081526021602090815260409182902093909355516bffffffffffffffffffffffff871681529087169183917fafd24114486da8ebfc32f3626dada8863652e187461aa74d4bfa734891506203910160405180910390a35050505050565b600080611102612252565b601454760100000000000000000000000000000000000000000000900460ff1615611159576040517f24522f3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600085815260046020908152604091829020825161012081018452815460ff8082161515835261010080830490911615158386015262010000820463ffffffff90811684880181905266010000000000008404821660608601526a010000000000000000000090930473ffffffffffffffffffffffffffffffffffffffff9081166080860181905260018701546fffffffffffffffffffffffffffffffff811660a088015270010000000000000000000000000000000081046bffffffffffffffffffffffff1660c08801527c0100000000000000000000000000000000000000000000000000000000900490921660e0860152600290950154909416908301528451601f890185900485028101850190955287855290936112959389908990819084018382808284376000920191909152506122c192505050565b9097909650945050505050565b60005a60408051610120810182526014546bffffffffffffffffffffffff8116825263ffffffff6c01000000000000000000000000820416602083015262ffffff7001000000000000000000000000000000008204169282019290925261ffff730100000000000000000000000000000000000000830416606082015260ff75010000000000000000000000000000000000000000008304811660808301527601000000000000000000000000000000000000000000008304811615801560a08401527701000000000000000000000000000000000000000000000084048216151560c0840152780100000000000000000000000000000000000000000000000090930416151560e082015260155473ffffffffffffffffffffffffffffffffffffffff16610100820152919250611406576040517f24522f3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152600b602052604090205460ff1661144f576040517f1099ed7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6013548a351461148b576040517fdfdcf8e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b608081015161149b90600161547a565b60ff16861415806114ac5750858414155b156114e3576040517f0244f71a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114f38a8a8a8a8a8a8a8a6124dc565b60006114ff8a8a612745565b905060208b0135600881901c63ffffffff1661151c8484876127fe565b836020015163ffffffff168163ffffffff16111561157457601480547fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff166c0100000000000000000000000063ffffffff8416021790555b50505050505050505050505050565b60008060008580602001905181019061159c9190615651565b9250925092506115b2898989868989888861049a565b505050505050505050565b6115c56115d1565b6115ce816133de565b50565b60005473ffffffffffffffffffffffffffffffffffffffff163314611652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610415565b565b60005b6024548110156117125760226000602483815481106116785761167861532c565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001812080547fffffffffff000000000000000000000000000000000000000000000000000000168155600181019190915560020180547fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001690558061170a8161535b565b915050611657565b5061171f60246000614650565b60255460ff1660005b8351811015611ab65760008482815181106117455761174561532c565b6020026020010151905060008483815181106117635761176361532c565b602002602001015190507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480156117d9575060018460018111156117d7576117d76157fc565b145b15611810576040517fc1ab6dc100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216158061184b5750604081015173ffffffffffffffffffffffffffffffffffffffff16155b15611882576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff828116600090815260226020526040902054670100000000000000900416156118ec576040517f357d0cc400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6024805460018082019092557f7cd332d19b93bcabe3cce7ca0c18a052f57e5fd03b4758a09f30f5ddc4b22ec40180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8581169182179092556000818152602260209081526040918290208651815488840180518a8701805163ffffffff9095167fffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000909416841764010000000062ffffff93841602177fffffffffff0000000000000000000000000000000000000000ffffffffffffff16670100000000000000958b16959095029490941785556060808c0180519b87019b909b556080808d018051600290980180547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff998a1617905589519586529351909216968401969096529251909716948101949094529551918301919091529251909216928201929092527f720a5849025dc4fd0061aed1bb30efd713cde64ce7f8d807953ecca27c8f143c9060a00160405180910390a250508080611aae9061535b565b915050611728565b50505050565b60005b600e54811015611b3357611b20600e8281548110611adf57611adf61532c565b600091825260209091200154601454600e5473ffffffffffffffffffffffffffffffffffffffff909216916bffffffffffffffffffffffff909116906134d3565b5080611b2b8161535b565b915050611abf565b5060255460009060ff16815b600e54811015611ca457600e8181548110611b5c57611b5c61532c565b6000918252602082200154600d805473ffffffffffffffffffffffffffffffffffffffff9092169550600c929184908110611b9957611b9961532c565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff9081168452838201949094526040928301822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001690559286168152600b909252902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556001826001811115611c3b57611c3b6157fc565b148015611c80575073ffffffffffffffffffffffffffffffffffffffff83166000908152600b60205260409020546201000090046bffffffffffffffffffffffff1615155b15611c9257611c90600f84612227565b505b80611c9c8161535b565b915050611b3f565b50611cb1600d6000614650565b611cbd600e6000614650565b6040805160808101825260008082526020820181905291810182905260608101829052905b855181101561214d57600c6000878381518110611d0157611d0161532c565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040016000205460ff1615611d6c576040517f77cea0fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16868281518110611d9657611d9661532c565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603611deb576040517f815e1d6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052806001151581526020018260ff16815250600c6000888481518110611e1c57611e1c61532c565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528181019290925260400160002082518154939092015160ff16610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092171790558451859082908110611ec457611ec461532c565b60200260200101519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611f34576040517f58a70a0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff84166000908152600b60209081526040918290208251608081018452905460ff80821615801584526101008304909116938301939093526bffffffffffffffffffffffff6201000082048116948301949094526e01000000000000000000000000000090049092166060830152909250611fef576040517f6a7281ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180835260ff80831660208086019182526014546bffffffffffffffffffffffff9081166060880190815273ffffffffffffffffffffffffffffffffffffffff8a166000908152600b909352604092839020885181549551948a0151925184166e010000000000000000000000000000027fffffffffffff000000000000000000000000ffffffffffffffffffffffffffff939094166201000002929092167fffffffffffff000000000000000000000000000000000000000000000000ffff94909616610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000090951694909417179190911692909217919091179055836001811115612129576121296157fc565b0361213b57612139600f856136db565b505b806121458161535b565b915050611ce2565b50845161216190600d90602088019061466e565b50835161217590600e90602087019061466e565b505050505050565b6000808a8a8a8a8a8a8a8a8a6040516020016121a19998979695949392919061582b565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905280516020909101207dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e01000000000000000000000000000000000000000000000000000000000000179b9a5050505050505050505050565b60006122498373ffffffffffffffffffffffffffffffffffffffff84166136fd565b90505b92915050565b3273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611652576040517fb60ac5db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601454600090819077010000000000000000000000000000000000000000000000900460ff161561231e576040517f37ed32e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601480547fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff16770100000000000000000000000000000000000000000000001790556040517f4585e33b0000000000000000000000000000000000000000000000000000000090612393908590602401614769565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290517f79188d1600000000000000000000000000000000000000000000000000000000815290935073ffffffffffffffffffffffffffffffffffffffff8616906379188d169061246690879087906004016158c0565b60408051808303816000875af1158015612484573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a891906158d9565b601480547fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff16905590969095509350505050565b600087876040516124ee929190615907565b604051908190038120612505918b90602001615917565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201208383019092526000808452908301819052909250906000805b888110156126dc576001858783602081106125715761257161532c565b61257e91901a601b61547a565b8c8c858181106125905761259061532c565b905060200201358b8b868181106125a9576125a961532c565b90506020020135604051600081526020016040526040516125e6949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015612608573d6000803e3d6000fd5b5050604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081015173ffffffffffffffffffffffffffffffffffffffff81166000908152600c602090815290849020838501909452925460ff80821615158085526101009092041693830193909352909550935090506126b6576040517f0f4c073700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826020015160080260ff166001901b8401935080806126d49061535b565b915050612554565b50827e01010101010101010101010101010101010101010101010101010101010101841614612737576040517fc103be2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050505050565b61277e6040518060c001604052806000815260200160008152602001606081526020016060815260200160608152602001606081525090565b600061278c83850185615a08565b60408101515160608201515191925090811415806127af57508082608001515114155b806127bf5750808260a001515114155b156127f6576040517fb55ac75400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b509392505050565b600082604001515167ffffffffffffffff81111561281e5761281e61477c565b6040519080825280602002602001820160405280156128ea57816020015b6040805161020081018252600060e08201818152610100830182905261012083018290526101408301829052610160830182905261018083018290526101a083018290526101c083018290526101e0830182905282526020808301829052928201819052606082018190526080820181905260a0820181905260c082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161283c5790505b50905060006040518060800160405280600061ffff16815260200160006bffffffffffffffffffffffff16815260200160006bffffffffffffffffffffffff16815260200160008152509050600085610100015173ffffffffffffffffffffffffffffffffffffffff166357e871e76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612988573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ac919061511f565b9050600086610100015173ffffffffffffffffffffffffffffffffffffffff166318b8f6136040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a24919061511f565b905060005b866040015151811015612eb4576004600088604001518381518110612a5057612a5061532c565b6020908102919091018101518252818101929092526040908101600020815161012081018352815460ff8082161515835261010080830490911615159583019590955263ffffffff620100008204811694830194909452660100000000000081048416606083015273ffffffffffffffffffffffffffffffffffffffff6a01000000000000000000009091048116608083015260018301546fffffffffffffffffffffffffffffffff811660a08401526bffffffffffffffffffffffff70010000000000000000000000000000000082041660c08401527c0100000000000000000000000000000000000000000000000000000000900490931660e0820152600290910154909116918101919091528551869083908110612b7357612b7361532c565b602002602001015160000181905250612ba887604001518281518110612b9b57612b9b61532c565b602002602001015161374c565b858281518110612bba57612bba61532c565b6020026020010151606001906001811115612bd757612bd76157fc565b90816001811115612bea57612bea6157fc565b81525050612c4e87604001518281518110612c0757612c0761532c565b60200260200101518489608001518481518110612c2657612c2661532c565b6020026020010151888581518110612c4057612c4061532c565b60200260200101518c6137f7565b868381518110612c6057612c6061532c565b6020026020010151602001878481518110612c7d57612c7d61532c565b602002602001015160c0018281525082151515158152505050848181518110612ca857612ca861532c565b60200260200101516020015115612cd857600184600001818151612ccc9190615af5565b61ffff16905250612cdd565b612ea2565b612d43858281518110612cf257612cf261532c565b6020026020010151600001516080015188606001518381518110612d1857612d1861532c565b60200260200101518960a001518481518110612d3657612d3661532c565b60200260200101516122c1565b868381518110612d5557612d5561532c565b6020026020010151604001878481518110612d7257612d7261532c565b6020026020010151608001828152508215151515815250505087608001516001612d9c919061547a565b612daa9060ff166040615b10565b6103a48860a001518381518110612dc357612dc361532c565b602002602001015151612dd69190615467565b612de09190615467565b858281518110612df257612df261532c565b602002602001015160a0018181525050848181518110612e1457612e1461532c565b602002602001015160a0015184606001818151612e319190615467565b9052508451859082908110612e4857612e4861532c565b60200260200101516080015186612e5f9190615b27565b9550612ea287604001518281518110612e7a57612e7a61532c565b602002602001015184878481518110612e9557612e9561532c565b6020026020010151613916565b80612eac8161535b565b915050612a29565b50825161ffff16600003612ecb5750505050505050565b6155f0612ed9366010615b10565b5a612ee49088615b27565b612eee9190615467565b612ef89190615467565b8351909550611b5890612f0f9061ffff1687615b69565b612f199190615467565b604080516060810182526000808252602082018190529181018290529196505b87604001515181101561327857858181518110612f5857612f5861532c565b6020026020010151602001511561326657801580612ff0575085612f7d600183615b27565b81518110612f8d57612f8d61532c565b602002602001015160000151610100015173ffffffffffffffffffffffffffffffffffffffff16868281518110612fc657612fc661532c565b602002602001015160000151610100015173ffffffffffffffffffffffffffffffffffffffff1614155b15613024576130218987838151811061300b5761300b61532c565b6020026020010151600001516101000151613a1b565b91505b600061314a8a6040518061012001604052808a86815181106130485761304861532c565b60200260200101516080015181526020018b815260200189606001518b87815181106130765761307661532c565b602002602001015160a001518961308d9190615b10565b6130979190615b69565b81526020018c6000015181526020018c6020015181526020016130b98e613b6c565b81526020018a86815181106130d0576130d061532c565b602002602001015160000151610100015173ffffffffffffffffffffffffffffffffffffffff168152602001868152602001600115158152508b60400151858151811061311f5761311f61532c565b60200260200101518a86815181106131395761313961532c565b602002602001015160000151613c5d565b90508060600151866040018181516131629190615442565b6bffffffffffffffffffffffff169052506040810151602087018051613189908390615442565b6bffffffffffffffffffffffff1690525086518790839081106131ae576131ae61532c565b6020026020010151604001511515896040015183815181106131d2576131d261532c565b60200260200101517fad8cc9579b21dfe2c2f6ea35ba15b656e46b4f5b0cb424f52739b8ce5cac9c5b8360600151846040015161320f9190615442565b8a86815181106132215761322161532c565b6020026020010151608001518c8e6080015188815181106132445761324461532c565b602002602001015160405161325c9493929190615b7d565b60405180910390a3505b806132708161535b565b915050612f39565b5050602083810151336000908152600b909252604090912080546002906132b49084906201000090046bffffffffffffffffffffffff16615442565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508260400151601460000160008282829054906101000a90046bffffffffffffffffffffffff166133129190615442565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550826040015183602001516133549190615442565b6bffffffffffffffffffffffff16602160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133d09190615467565b909155505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff82160361345d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610415565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600b602090815260408083208151608081018352905460ff80821615801584526101008304909116948301949094526bffffffffffffffffffffffff6201000082048116938301939093526e01000000000000000000000000000090049091166060820152906136cf57600081606001518561356b9190615bba565b905060006135798583615bdf565b9050808360400181815161358d9190615442565b6bffffffffffffffffffffffff169052506135a88582615c0a565b836060018181516135b99190615442565b6bffffffffffffffffffffffff90811690915273ffffffffffffffffffffffffffffffffffffffff89166000908152600b602090815260409182902087518154928901519389015160608a015186166e010000000000000000000000000000027fffffffffffff000000000000000000000000ffffffffffffffffffffffffffff919096166201000002167fffffffffffff000000000000000000000000000000000000000000000000ffff60ff95909516610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909416939093171792909216179190911790555050505b60400151949350505050565b60006122498373ffffffffffffffffffffffffffffffffffffffff8416613f59565b60008181526001830160205260408120546137445750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561224c565b50600061224c565b6000818160045b600f8110156137d9577fff0000000000000000000000000000000000000000000000000000000000000082168382602081106137915761379161532c565b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146137c757506000949350505050565b806137d18161535b565b915050613753565b5081600f1a60018111156137ef576137ef6157fc565b949350505050565b600080808085606001516001811115613812576138126157fc565b0361383857613824888888888861404c565b6138335760009250905061390c565b6138b0565b600185606001516001811115613850576138506157fc565b0361387e576000613863898989886141d6565b9250905080613878575060009250905061390c565b506138b0565b6040517ff2b2d41200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84516060015163ffffffff16871061390557877fc3237c8807c467c1b39b8d0395eff077313e691bf0a7388106792564ebfd5636876040516138f29190614769565b60405180910390a260009250905061390c565b6001925090505b9550959350505050565b60008160600151600181111561392e5761392e6157fc565b0361399257600083815260046020526040902060010180547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff851602179055505050565b6001816060015160018111156139aa576139aa6157fc565b03613a165760c08101805160009081526008602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055915191517fa4a4e334c0e330143f9437484fe516c13bc560b86b5b0daf58e7084aaac228f29190a25b505050565b604080516060810182526000808252602080830182815283850183905273ffffffffffffffffffffffffffffffffffffffff868116845260229092528483208054640100000000810462ffffff1690925263ffffffff8216855285517ffeaf968c00000000000000000000000000000000000000000000000000000000815295519495909484936701000000000000009093049092169163feaf968c9160048082019260a0929091908290030181865afa158015613add573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b019190615c54565b50935050925050600082131580613b1757508042105b80613b4757506000866040015162ffffff16118015613b475750613b3b8142615b27565b866040015162ffffff16105b15613b5b5760018301546040850152613b63565b604084018290525b50505092915050565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015613bdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c009190615c54565b50935050925050600082131580613c1657508042105b80613c4657506000846040015162ffffff16118015613c465750613c3a8142615b27565b846040015162ffffff16105b15613c56575050601b5492915050565b5092915050565b604080516080810182526000808252602080830182905292820181905260608201529082015115613cd65760008381526023602090815260409182902082518084019093525463ffffffff811680845262ffffff640100000000909204821693830193845260e088018051919091529251925192169101525b6000613ce286866143e3565b60c0840151602082015182519293509091600091613cff91615442565b905082600001516bffffffffffffffffffffffff16826bffffffffffffffffffffffff161015613d8457819050613d6587608001518860e0015160400151846bffffffffffffffffffffffff16613d569190615b10565b613d609190615b69565b6145ae565b6bffffffffffffffffffffffff16604084015260006060840152613e10565b806bffffffffffffffffffffffff16826bffffffffffffffffffffffff161015613e1057819050613dfc83604001516bffffffffffffffffffffffff1688608001518960e0015160400151856bffffffffffffffffffffffff16613de89190615b10565b613df29190615b69565b613d609190615b27565b6bffffffffffffffffffffffff1660608401525b60008681526004602052604090206001018054829190601090613e5690849070010000000000000000000000000000000090046bffffffffffffffffffffffff16615bba565b82546101009290920a6bffffffffffffffffffffffff81810219909316918316021790915560008881526004602052604081206001018054928516935091613eb19084906fffffffffffffffffffffffffffffffff16615ca4565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550806bffffffffffffffffffffffff16602160008960c0015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613f489190615b27565b909155509298975050505050505050565b60008181526001830160205260408120548015614042576000613f7d600183615b27565b8554909150600090613f9190600190615b27565b9050818114613ff6576000866000018281548110613fb157613fb161532c565b9060005260206000200154905080876000018481548110613fd457613fd461532c565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061400757614007615ccd565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061224c565b600091505061224c565b600080848060200190518101906140639190615cfc565b845160e00151815191925063ffffffff908116911610156140c057867f405288ea7be309e16cfdf481367f90a413e1d4634fcdaf8966546db9b93012e8866040516140ae9190614769565b60405180910390a260009150506141cd565b8260e00151801561418057506020810151158015906141805750602081015161010084015182516040517f85df51fd00000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff909116906385df51fd90602401602060405180830381865afa158015614159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061417d919061511f565b14155b806141925750805163ffffffff168611155b156141c757867f6aa7f60c176da7af894b384daea2249497448137f5943c1237ada8bc92bdc301866040516140ae9190614769565b60019150505b95945050505050565b6000806000848060200190518101906141ef9190615d54565b905060008782600001518360200151846040015160405160200161425194939291909384526020840192909252604083015260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016606082015260640190565b6040516020818303038152906040528051906020012090508460e00151801561432c575060808201511580159061432c5750608082015161010086015160608401516040517f85df51fd00000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff909116906385df51fd90602401602060405180830381865afa158015614305573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614329919061511f565b14155b80614341575086826060015163ffffffff1610155b1561438b57877f6aa7f60c176da7af894b384daea2249497448137f5943c1237ada8bc92bdc301876040516143769190614769565b60405180910390a26000935091506143da9050565b60008181526008602052604090205460ff16156143d257877f405288ea7be309e16cfdf481367f90a413e1d4634fcdaf8966546db9b93012e8876040516143769190614769565b600193509150505b94509492505050565b6040805160808101825260008082526020820181905291810182905260608101919091526000836060015161ffff1683606001516144219190615b10565b905082610100015180156144345750803a105b1561443c57503a5b60008360a0015184604001518560200151866000015161445c9190615467565b6144669085615b10565b6144709190615467565b61447a9190615b10565b90506144938460e001516040015182613d609190615b69565b6bffffffffffffffffffffffff16835260808401516144b690613d609083615b69565b6bffffffffffffffffffffffff16604084015260e0840151602001516000906144ed9062ffffff16683635c9adc5dea00000615b10565b9050600081633b9aca008760a001518860e001516000015163ffffffff1689604001518a60000151896145209190615b10565b61452a9190615467565b6145349190615b10565b61453e9190615b10565b6145489190615b69565b6145529190615467565b905061456b8660e001516040015182613d609190615b69565b6bffffffffffffffffffffffff166020860152608086015161459190613d609083615b69565b6bffffffffffffffffffffffff1660608601525050505092915050565b60006bffffffffffffffffffffffff82111561464c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203960448201527f36206269747300000000000000000000000000000000000000000000000000006064820152608401610415565b5090565b50805460008255906000526020600020908101906115ce91906146f0565b8280548282559060005260206000209081019282156146e8579160200282015b828111156146e857825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90911617825560209092019160019091019061468e565b5061464c9291505b5b8082111561464c57600081556001016146f1565b6000815180845260005b8181101561472b5760208185018101518683018201520161470f565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6020815260006122496020830184614705565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610200810167ffffffffffffffff811182821017156147cf576147cf61477c565b60405290565b60405160a0810167ffffffffffffffff811182821017156147cf576147cf61477c565b60405160c0810167ffffffffffffffff811182821017156147cf576147cf61477c565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156148625761486261477c565b604052919050565b600067ffffffffffffffff8211156148845761488461477c565b5060051b60200190565b73ffffffffffffffffffffffffffffffffffffffff811681146115ce57600080fd5b80356148bb8161488e565b919050565b600082601f8301126148d157600080fd5b813560206148e66148e18361486a565b61481b565b82815260059290921b8401810191818101908684111561490557600080fd5b8286015b8481101561492957803561491c8161488e565b8352918301918301614909565b509695505050505050565b803560ff811681146148bb57600080fd5b63ffffffff811681146115ce57600080fd5b80356148bb81614945565b80151581146115ce57600080fd5b80356148bb81614962565b62ffffff811681146115ce57600080fd5b80356148bb8161497b565b61ffff811681146115ce57600080fd5b80356148bb81614997565b600061020082840312156149c557600080fd5b6149cd6147ab565b90506149d882614957565b81526149e660208301614957565b60208201526149f760408301614957565b6040820152614a08606083016148b0565b6060820152614a1960808301614970565b6080820152614a2a60a0830161498c565b60a0820152614a3b60c08301614957565b60c0820152614a4c60e08301614957565b60e0820152610100614a5f8184016148b0565b90820152610120614a718382016149a7565b90820152610140614a838382016148b0565b90820152610160828101359082015261018080830135908201526101a080830135908201526101c08083013567ffffffffffffffff811115614ac457600080fd5b614ad0858286016148c0565b8284015250506101e0614ae48184016148b0565b9082015292915050565b803567ffffffffffffffff811681146148bb57600080fd5b600082601f830112614b1757600080fd5b813567ffffffffffffffff811115614b3157614b3161477c565b614b6260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161481b565b818152846020838601011115614b7757600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112614ba557600080fd5b81356020614bb56148e18361486a565b82815260059290921b84018101918181019086841115614bd457600080fd5b8286015b84811015614929578035614beb8161488e565b8352918301918301614bd8565b6bffffffffffffffffffffffff811681146115ce57600080fd5b600082601f830112614c2357600080fd5b81356020614c336148e18361486a565b82815260a09283028501820192828201919087851115614c5257600080fd5b8387015b85811015614cd15781818a031215614c6e5760008081fd5b614c766147d5565b8135614c8181614945565b815281860135614c908161497b565b81870152604082810135614ca38161488e565b9082015260608281013590820152608080830135614cc081614bf8565b908201528452928401928101614c56565b5090979650505050505050565b600080600080600080600080610100898b031215614cfb57600080fd5b883567ffffffffffffffff80821115614d1357600080fd5b614d1f8c838d016148c0565b995060208b0135915080821115614d3557600080fd5b614d418c838d016148c0565b9850614d4f60408c01614934565b975060608b0135915080821115614d6557600080fd5b614d718c838d016149b2565b9650614d7f60808c01614aee565b955060a08b0135915080821115614d9557600080fd5b614da18c838d01614b06565b945060c08b0135915080821115614db757600080fd5b614dc38c838d01614b94565b935060e08b0135915080821115614dd957600080fd5b50614de68b828c01614c12565b9150509295985092959890939650565b60008083601f840112614e0857600080fd5b50813567ffffffffffffffff811115614e2057600080fd5b602083019150836020828501011115614e3857600080fd5b9250929050565b60008060008060608587031215614e5557600080fd5b8435614e608161488e565b935060208501359250604085013567ffffffffffffffff811115614e8357600080fd5b614e8f87828801614df6565b95989497509550505050565b600080600060408486031215614eb057600080fd5b83359250602084013567ffffffffffffffff811115614ece57600080fd5b614eda86828701614df6565b9497909650939450505050565b60008083601f840112614ef957600080fd5b50813567ffffffffffffffff811115614f1157600080fd5b6020830191508360208260051b8501011115614e3857600080fd5b60008060008060008060008060e0898b031215614f4857600080fd5b606089018a811115614f5957600080fd5b8998503567ffffffffffffffff80821115614f7357600080fd5b614f7f8c838d01614df6565b909950975060808b0135915080821115614f9857600080fd5b614fa48c838d01614ee7565b909750955060a08b0135915080821115614fbd57600080fd5b50614fca8b828c01614ee7565b999c989b50969995989497949560c00135949350505050565b60008060008060008060c08789031215614ffc57600080fd5b863567ffffffffffffffff8082111561501457600080fd5b6150208a838b016148c0565b9750602089013591508082111561503657600080fd5b6150428a838b016148c0565b965061505060408a01614934565b9550606089013591508082111561506657600080fd5b6150728a838b01614b06565b945061508060808a01614aee565b935060a089013591508082111561509657600080fd5b506150a389828a01614b06565b9150509295509295509295565b6000602082840312156150c257600080fd5b81356150cd8161488e565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60ff8181168382160290811690818114613c5657613c566150d4565b60006020828403121561513157600080fd5b5051919050565b63ffffffff818116838216019080821115613c5657613c566150d4565b600081518084526020808501945080840160005b8381101561519b57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101615169565b509495945050505050565b602081526151bd60208201835163ffffffff169052565b600060208301516151d6604084018263ffffffff169052565b50604083015163ffffffff8116606084015250606083015173ffffffffffffffffffffffffffffffffffffffff8116608084015250608083015180151560a08401525060a083015162ffffff811660c08401525060c083015163ffffffff811660e08401525060e08301516101006152558185018363ffffffff169052565b840151905061012061527e8482018373ffffffffffffffffffffffffffffffffffffffff169052565b84015190506101406152958482018361ffff169052565b84015190506101606152be8482018373ffffffffffffffffffffffffffffffffffffffff169052565b840151610180848101919091528401516101a0808501919091528401516101c0808501919091528401516102006101e080860182905291925090615306610220860184615155565b95015173ffffffffffffffffffffffffffffffffffffffff169301929092525090919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361538c5761538c6150d4565b5060010190565b600061012063ffffffff808d1684528b6020850152808b166040850152508060608401526153c38184018a615155565b905082810360808401526153d78189615155565b905060ff871660a084015282810360c08401526153f48187614705565b905067ffffffffffffffff851660e08401528281036101008401526154198185614705565b9c9b505050505050505050505050565b60006020828403121561543b57600080fd5b5035919050565b6bffffffffffffffffffffffff818116838216019080821115613c5657613c566150d4565b8082018082111561224c5761224c6150d4565b60ff818116838216019081111561224c5761224c6150d4565b80516148bb81614945565b80516148bb8161488e565b80516148bb81614962565b80516148bb8161497b565b80516148bb81614997565b600082601f8301126154db57600080fd5b815160206154eb6148e18361486a565b82815260059290921b8401810191818101908684111561550a57600080fd5b8286015b848110156149295780516155218161488e565b835291830191830161550e565b600082601f83011261553f57600080fd5b8151602061554f6148e18361486a565b82815260059290921b8401810191818101908684111561556e57600080fd5b8286015b848110156149295780516155858161488e565b8352918301918301615572565b600082601f8301126155a357600080fd5b815160206155b36148e18361486a565b82815260a092830285018201928282019190878511156155d257600080fd5b8387015b85811015614cd15781818a0312156155ee5760008081fd5b6155f66147d5565b815161560181614945565b8152818601516156108161497b565b818701526040828101516156238161488e565b908201526060828101519082015260808083015161564081614bf8565b9082015284529284019281016155d6565b60008060006060848603121561566657600080fd5b835167ffffffffffffffff8082111561567e57600080fd5b90850190610200828803121561569357600080fd5b61569b6147ab565b6156a483615493565b81526156b260208401615493565b60208201526156c360408401615493565b60408201526156d46060840161549e565b60608201526156e5608084016154a9565b60808201526156f660a084016154b4565b60a082015261570760c08401615493565b60c082015261571860e08401615493565b60e082015261010061572b81850161549e565b9082015261012061573d8482016154bf565b9082015261014061574f84820161549e565b90820152610160838101519082015261018080840151908201526101a080840151908201526101c0808401518381111561578857600080fd5b6157948a8287016154ca565b8284015250506101e06157a881850161549e565b9082015260208701519095509150808211156157c357600080fd5b6157cf8783880161552e565b935060408601519150808211156157e557600080fd5b506157f286828701615592565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006101208b835273ffffffffffffffffffffffffffffffffffffffff8b16602084015267ffffffffffffffff808b1660408501528160608501526158728285018b615155565b91508382036080850152615886828a615155565b915060ff881660a085015283820360c08501526158a38288614705565b90861660e085015283810361010085015290506154198185614705565b8281526040602082015260006137ef6040830184614705565b600080604083850312156158ec57600080fd5b82516158f781614962565b6020939093015192949293505050565b8183823760009101908152919050565b8281526080810160608360208401379392505050565b600082601f83011261593e57600080fd5b8135602061594e6148e18361486a565b82815260059290921b8401810191818101908684111561596d57600080fd5b8286015b848110156149295780358352918301918301615971565b600082601f83011261599957600080fd5b813560206159a96148e18361486a565b82815260059290921b840181019181810190868411156159c857600080fd5b8286015b8481101561492957803567ffffffffffffffff8111156159ec5760008081fd5b6159fa8986838b0101614b06565b8452509183019183016159cc565b600060208284031215615a1a57600080fd5b813567ffffffffffffffff80821115615a3257600080fd5b9083019060c08286031215615a4657600080fd5b615a4e6147f8565b8235815260208301356020820152604083013582811115615a6e57600080fd5b615a7a8782860161592d565b604083015250606083013582811115615a9257600080fd5b615a9e8782860161592d565b606083015250608083013582811115615ab657600080fd5b615ac287828601615988565b60808301525060a083013582811115615ada57600080fd5b615ae687828601615988565b60a08301525095945050505050565b61ffff818116838216019080821115613c5657613c566150d4565b808202811582820484141761224c5761224c6150d4565b8181038181111561224c5761224c6150d4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615b7857615b78615b3a565b500490565b6bffffffffffffffffffffffff85168152836020820152826040820152608060608201526000615bb06080830184614705565b9695505050505050565b6bffffffffffffffffffffffff828116828216039080821115613c5657613c566150d4565b60006bffffffffffffffffffffffff80841680615bfe57615bfe615b3a565b92169190910492915050565b6bffffffffffffffffffffffff818116838216028082169190828114615c3257615c326150d4565b505092915050565b805169ffffffffffffffffffff811681146148bb57600080fd5b600080600080600060a08688031215615c6c57600080fd5b615c7586615c3a565b9450602086015193506040860151925060608601519150615c9860808701615c3a565b90509295509295909350565b6fffffffffffffffffffffffffffffffff818116838216019080821115613c5657613c566150d4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600060408284031215615d0e57600080fd5b6040516040810181811067ffffffffffffffff82111715615d3157615d3161477c565b6040528251615d3f81614945565b81526020928301519281019290925250919050565b600060a08284031215615d6657600080fd5b615d6e6147d5565b82518152602083015160208201526040830151615d8a81614945565b60408201526060830151615d9d81614945565b6060820152608092830151928101929092525091905056fea164736f6c6343000813000a", } var AutomationRegistryABI = AutomationRegistryMetaData.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 1f37ace47cc..3f5c837c297 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 @@ -10,11 +10,11 @@ automation_forwarder_logic: ../../contracts/solc/v0.8.16/AutomationForwarderLogi automation_registrar_wrapper2_1: ../../contracts/solc/v0.8.16/AutomationRegistrar2_1/AutomationRegistrar2_1.abi ../../contracts/solc/v0.8.16/AutomationRegistrar2_1/AutomationRegistrar2_1.bin eb06d853aab39d3196c593b03e555851cbe8386e0fe54a74c2479f62d14b3c42 automation_registrar_wrapper2_3: ../../contracts/solc/v0.8.19/AutomationRegistrar2_3/AutomationRegistrar2_3.abi ../../contracts/solc/v0.8.19/AutomationRegistrar2_3/AutomationRegistrar2_3.bin 20fac1208261e866caa1f3ffc71030f682a96761bebe79e5ecd71186fce86c60 automation_registry_logic_a_wrapper_2_2: ../../contracts/solc/v0.8.19/AutomationRegistryLogicA2_2/AutomationRegistryLogicA2_2.abi ../../contracts/solc/v0.8.19/AutomationRegistryLogicA2_2/AutomationRegistryLogicA2_2.bin 2f267fb8467a15c587ce4586ac56069f7229344ad3936430d7c7624c0528a171 -automation_registry_logic_a_wrapper_2_3: ../../contracts/solc/v0.8.19/AutomationRegistryLogicA2_3/AutomationRegistryLogicA2_3.abi ../../contracts/solc/v0.8.19/AutomationRegistryLogicA2_3/AutomationRegistryLogicA2_3.bin 576f8bf36c1621bedcece4e36071b72cd1c858b74d6d1ddd3be468fe983daa52 +automation_registry_logic_a_wrapper_2_3: ../../contracts/solc/v0.8.19/AutomationRegistryLogicA2_3/AutomationRegistryLogicA2_3.abi ../../contracts/solc/v0.8.19/AutomationRegistryLogicA2_3/AutomationRegistryLogicA2_3.bin 6ebcbbf13ec76ca685706996921eb51ee37e6ba40a35fb289c41a68922a61cc9 automation_registry_logic_b_wrapper_2_2: ../../contracts/solc/v0.8.19/AutomationRegistryLogicB2_2/AutomationRegistryLogicB2_2.abi ../../contracts/solc/v0.8.19/AutomationRegistryLogicB2_2/AutomationRegistryLogicB2_2.bin a6d33dfbbfb0ff253eb59a51f4f6d6d4c22ea5ec95aae52d25d49a312b37a22f automation_registry_logic_b_wrapper_2_3: ../../contracts/solc/v0.8.19/AutomationRegistryLogicB2_3/AutomationRegistryLogicB2_3.abi ../../contracts/solc/v0.8.19/AutomationRegistryLogicB2_3/AutomationRegistryLogicB2_3.bin 8414649696c8c602a0a12b00e98eb1d6325533870b47459d9d16ad79e6abdcf0 automation_registry_wrapper_2_2: ../../contracts/solc/v0.8.19/AutomationRegistry2_2/AutomationRegistry2_2.abi ../../contracts/solc/v0.8.19/AutomationRegistry2_2/AutomationRegistry2_2.bin de60f69878e9b32a291a001c91fc8636544c2cfbd9b507c8c1a4873b602bfb62 -automation_registry_wrapper_2_3: ../../contracts/solc/v0.8.19/AutomationRegistry2_3/AutomationRegistry2_3.abi ../../contracts/solc/v0.8.19/AutomationRegistry2_3/AutomationRegistry2_3.bin 843b632d5b6a5fbf51993a217db3f2c3e09e3cceda091e8e83ab1412372e3fc1 +automation_registry_wrapper_2_3: ../../contracts/solc/v0.8.19/AutomationRegistry2_3/AutomationRegistry2_3.abi ../../contracts/solc/v0.8.19/AutomationRegistry2_3/AutomationRegistry2_3.bin bccf9ed47a39fb8a3a238d7e80fd3b07a33768d6cf8428abb18b9d2bd6552cff automation_utils_2_1: ../../contracts/solc/v0.8.16/AutomationUtils2_1/AutomationUtils2_1.abi ../../contracts/solc/v0.8.16/AutomationUtils2_1/AutomationUtils2_1.bin 815b17b63f15d26a0274b962eefad98cdee4ec897ead58688bbb8e2470e585f5 automation_utils_2_2: ../../contracts/solc/v0.8.19/AutomationUtils2_2/AutomationUtils2_2.abi ../../contracts/solc/v0.8.19/AutomationUtils2_2/AutomationUtils2_2.bin 8743f6231aaefa3f2a0b2d484258070d506e2d0860690e66890dccc3949edb2e automation_utils_2_3: ../../contracts/solc/v0.8.19/AutomationUtils2_3/AutomationUtils2_3.abi ../../contracts/solc/v0.8.19/AutomationUtils2_3/AutomationUtils2_3.bin 11e2b481dc9a4d936e3443345d45d2cc571164459d214917b42a8054b295393b